From 1d7b325101861722c8b7d8aeba1c4988c61b7cd7 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sun, 14 Jul 2024 14:36:15 -0400 Subject: [PATCH 01/12] chore(build): update go to 1.22.5 Signed-off-by: Marques Johansson --- .github/workflows/ci.yml | 2 +- Makefile | 2 +- go.mod | 2 +- go.sum | 11 +++++++++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e99ed2..6f62520 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ on: env: # Common versions - GO_VERSION: '1.19' + GO_VERSION: '1.22.5' GOLANGCI_VERSION: 'v1.57.2' DOCKER_BUILDX_VERSION: 'v0.8.2' diff --git a/Makefile b/Makefile index 71e905a..4fa9043 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ PROJECT_NAME := provider-jet-equinix PROJECT_REPO := github.com/crossplane-contrib/$(PROJECT_NAME) -GO_REQUIRED_VERSION ?= 1.19 +GO_REQUIRED_VERSION ?= 1.22.5 GOLANGCILINT_VERSION ?= 1.57.2 export TERRAFORM_VERSION := 1.5.5 diff --git a/go.mod b/go.mod index 9ab30fc..17a2da3 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/crossplane-contrib/provider-jet-equinix -go 1.19 +go 1.22.5 require ( github.com/crossplane/crossplane-runtime v0.19.2 diff --git a/go.sum b/go.sum index 13afbf2..8ef6533 100644 --- a/go.sum +++ b/go.sum @@ -59,6 +59,7 @@ github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwq github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= +github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= @@ -119,6 +120,7 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= @@ -425,12 +427,17 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce h1:RPclfga2SEJmgMmz2k+Mg7cowZ8yv4Trqw9UsJby758= +github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= +github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= +github.com/onsi/gomega v1.24.2/go.mod h1:gs3J10IS7Z7r7eXRoNJIrNqU4ToQukCJhFtKrWgHWnk= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= @@ -547,6 +554,7 @@ go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= @@ -669,6 +677,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -921,12 +930,14 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 21e21d30e39b906bc23135616808f3413b896d30 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Fri, 19 Jul 2024 20:14:10 -0400 Subject: [PATCH 02/12] feat: update TF equinix provider to 2.2.0 with Framework resources Signed-off-by: Marques Johansson --- .../ISSUE_TEMPLATE/new_resource_request.md | 4 +- Makefile | 10 +- README.md | 2 +- apis/generate.go | 6 +- cmd/generator/main.go | 8 +- cmd/provider/main.go | 33 +- config/ecx/l2connection/config.go | 2 +- config/metal/device/config.go | 4 +- config/overrides.go | 2 +- config/provider-metadata.yaml | 2285 +++++++++++------ config/provider.go | 60 +- config/schema.json | 2 +- go.mod | 190 +- go.sum | 1023 ++------ hack/prepare.sh | 2 +- internal/clients/equinix.go | 54 +- internal/controller/providerconfig/config.go | 5 +- internal/features/features.go | 5 + 18 files changed, 1949 insertions(+), 1748 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/new_resource_request.md b/.github/ISSUE_TEMPLATE/new_resource_request.md index 9219a47..7674593 100644 --- a/.github/ISSUE_TEMPLATE/new_resource_request.md +++ b/.github/ISSUE_TEMPLATE/new_resource_request.md @@ -23,10 +23,10 @@ Help us for prioritization of the resource support by giving more details about why you need it. --> -### Would you be willing to contribute it using [Upjet](https://github.com/upbound/upjet)? +### Would you be willing to contribute it using [Upjet](https://github.com/crossplane/upjet)? \ No newline at end of file diff --git a/Makefile b/Makefile index 4fa9043..6f579c0 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,12 @@ PROJECT_REPO := github.com/crossplane-contrib/$(PROJECT_NAME) GO_REQUIRED_VERSION ?= 1.22.5 GOLANGCILINT_VERSION ?= 1.57.2 +# Do not exceed Terraform version 1.5 +# License changes from MPL to BSL in 1.6.0 +# This would be incompatible with the Crossplane ecosystem. export TERRAFORM_VERSION := 1.5.5 - export TERRAFORM_PROVIDER_SOURCE := equinix/equinix -export TERRAFORM_PROVIDER_VERSION := 1.36.0 +export TERRAFORM_PROVIDER_VERSION := 2.2.0 export TERRAFORM_PROVIDER_DOWNLOAD_NAME := terraform-provider-equinix 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} @@ -121,8 +123,8 @@ pull-docs: fi @git -C "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)" sparse-checkout set "$(TERRAFORM_DOCS_PATH)" @echo "Removing examples known to cause parser errors for examples-generated" - @rm -f "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_DOCS_PATH)/equinix_metal_port_vlan_attachment.md" \ - "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_DOCS_PATH)/equinix_fabric_routing_protocol.md" + @rm -f "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_DOCS_PATH)/metal_port_vlan_attachment.md" \ + "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_DOCS_PATH)/fabric_routing_protocol.md" generate.init: $(TERRAFORM_PROVIDER_SCHEMA) pull-docs diff --git a/README.md b/README.md index fd10295..74a9c30 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Upjet Equinix Provider `provider-jet-equinix` is a [Crossplane](https://crossplane.io/) provider that -is built using [Upjet](https://github.com/upbound/upjet) code +is built using [Upjet](https://github.com/crossplane/upjet) code generation tools and exposes XRM-conformant managed resources for the Equinix API. diff --git a/apis/generate.go b/apis/generate.go index 3bf63c3..36153e3 100644 --- a/apis/generate.go +++ b/apis/generate.go @@ -31,7 +31,9 @@ limitations under the License. //go:generate rm -rf ../examples-generated // Generate documentation from Terraform docs. -//go:generate go run github.com/upbound/upjet/cmd/scraper -n ${TERRAFORM_PROVIDER_SOURCE} -r ../.work/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_DOCS_PATH} -o ../config/provider-metadata.yaml --prelude-xpath "//text()[contains(., \"subcategory\")]" --resource-prefix equinix +//go:generate bash -c "find ../cmd/provider -name 'zz_*' -type f -delete" +//go:generate bash -c "find ../cmd/provider -type d -maxdepth 1 -mindepth 1 -empty -delete" +//go:generate go run github.com/crossplane/upjet/cmd/scraper -n ${TERRAFORM_PROVIDER_SOURCE} -r ../.work/${TERRAFORM_PROVIDER_SOURCE}/${TERRAFORM_DOCS_PATH} -o ../config/provider-metadata.yaml --prelude-xpath "//text()[contains(., \"subcategory\")]" --resource-prefix equinix // Run Upjet generator //go:generate go run ../cmd/generator/main.go .. @@ -48,4 +50,6 @@ import ( _ "sigs.k8s.io/controller-tools/cmd/controller-gen" //nolint:typecheck _ "github.com/crossplane/crossplane-tools/cmd/angryjet" //nolint:typecheck + + _ "github.com/crossplane/upjet/cmd/scraper" ) diff --git a/cmd/generator/main.go b/cmd/generator/main.go index e0b8a1b..794e76f 100644 --- a/cmd/generator/main.go +++ b/cmd/generator/main.go @@ -19,11 +19,13 @@ limitations under the License. package main import ( + "context" "fmt" "os" "path/filepath" - "github.com/upbound/upjet/pkg/pipeline" + "github.com/crossplane/upjet/pkg/pipeline" + "gopkg.in/alecthomas/kingpin.v2" "github.com/crossplane-contrib/provider-jet-equinix/config" ) @@ -36,5 +38,7 @@ func main() { if err != nil { panic(fmt.Sprintf("cannot calculate the absolute path of %s", os.Args[1])) } - pipeline.Run(config.GetProvider(), absRootDir) + p, err := config.GetProvider(context.Background(), true) + kingpin.FatalIfError(err, "Cannot initialize the provider configuration") + pipeline.Run(p, absRootDir) } diff --git a/cmd/provider/main.go b/cmd/provider/main.go index d9fbe8d..acbdccf 100644 --- a/cmd/provider/main.go +++ b/cmd/provider/main.go @@ -24,16 +24,18 @@ import ( xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" xpcontroller "github.com/crossplane/crossplane-runtime/pkg/controller" + "github.com/crossplane/crossplane-runtime/pkg/feature" "github.com/crossplane/crossplane-runtime/pkg/logging" "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" "github.com/crossplane/crossplane-runtime/pkg/resource" - upcontroller "github.com/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + upcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/terraform" "gopkg.in/alecthomas/kingpin.v2" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/leaderelection/resourcelock" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/log/zap" "github.com/crossplane-contrib/provider-jet-equinix/apis" @@ -48,11 +50,8 @@ func main() { var ( app = kingpin.New(filepath.Base(os.Args[0]), "Terraform based Crossplane provider for Equinix").DefaultEnvars() debug = app.Flag("debug", "Run with debug logging.").Short('d').Bool() - syncPeriod = app.Flag("sync", "Controller manager sync period such as 300ms, 1.5h, or 2h45m").Short('s').Default("1h").Duration() + syncInterval = app.Flag("sync", "Sync interval controls how often all resources will be double checked for drift.").Short('s').Default("1h").Duration() leaderElection = app.Flag("leader-election", "Use leader election for the controller manager.").Short('l').Default("false").OverrideDefaultFromEnvar("LEADER_ELECTION").Bool() - terraformVersion = app.Flag("terraform-version", "Terraform version.").Required().Envar("TERRAFORM_VERSION").String() - providerSource = app.Flag("terraform-provider-source", "Terraform provider source.").Required().Envar("TERRAFORM_PROVIDER_SOURCE").String() - providerVersion = app.Flag("terraform-provider-version", "Terraform provider version.").Required().Envar("TERRAFORM_PROVIDER_VERSION").String() maxReconcileRate = app.Flag("max-reconcile-rate", "The global maximum rate per second at which resources may checked for drift from the desired state.").Default("10").Int() namespace = app.Flag("namespace", "Namespace used to set as default scope in default secret store config.").Default("crossplane-system").Envar("POD_NAMESPACE").String() @@ -69,33 +68,41 @@ func main() { ctrl.SetLogger(zl) } - log.Debug("Starting", "sync-period", syncPeriod.String()) + log.Debug("Starting", "sync-period", syncInterval.String()) cfg, err := ctrl.GetConfig() kingpin.FatalIfError(err, "Cannot get API server rest config") mgr, err := ctrl.NewManager(cfg, ctrl.Options{ - LeaderElection: *leaderElection, - LeaderElectionID: "crossplane-leader-election-provider-jet-equinix", - SyncPeriod: syncPeriod, + LeaderElection: *leaderElection, + LeaderElectionID: "crossplane-leader-election-provider-jet-equinix", + Cache: cache.Options{ + SyncPeriod: syncInterval, + }, LeaderElectionResourceLock: resourcelock.LeasesResourceLock, LeaseDuration: func() *time.Duration { d := 60 * time.Second; return &d }(), RenewDeadline: func() *time.Duration { d := 50 * time.Second; return &d }(), }) kingpin.FatalIfError(err, "Cannot create controller manager") kingpin.FatalIfError(apis.AddToScheme(mgr.GetScheme()), "Cannot add Equinix APIs to scheme") + + ctx := context.Background() + provider, err := config.GetProvider(ctx, false) + kingpin.FatalIfError(err, "Cannot initialize the provider configuration") o := upcontroller.Options{ Options: xpcontroller.Options{ Logger: log, GlobalRateLimiter: ratelimiter.NewGlobal(*maxReconcileRate), PollInterval: 1 * time.Minute, MaxConcurrentReconciles: 1, + Features: &feature.Flags{}, }, - Provider: config.GetProvider(), + Provider: provider, // use the following WorkspaceStoreOption to enable the shared gRPC mode // terraform.WithProviderRunner(terraform.NewSharedProvider(log, os.Getenv("TERRAFORM_NATIVE_PROVIDER_PATH"), terraform.WithNativeProviderArgs("-debuggable"))) - WorkspaceStore: terraform.NewWorkspaceStore(log), - SetupFn: clients.TerraformSetupBuilder(*terraformVersion, *providerSource, *providerVersion), + WorkspaceStore: terraform.NewWorkspaceStore(log), + SetupFn: clients.TerraformSetupBuilder(provider.TerraformProvider), + OperationTrackerStore: upcontroller.NewOperationStore(log), } if *enableExternalSecretStores { diff --git a/config/ecx/l2connection/config.go b/config/ecx/l2connection/config.go index 9fda22f..303eb1f 100644 --- a/config/ecx/l2connection/config.go +++ b/config/ecx/l2connection/config.go @@ -17,7 +17,7 @@ limitations under the License. package l2connection import ( - "github.com/upbound/upjet/pkg/config" + "github.com/crossplane/upjet/pkg/config" ) // Configure the device group with references to other resources diff --git a/config/metal/device/config.go b/config/metal/device/config.go index bb8eeb9..275c671 100644 --- a/config/metal/device/config.go +++ b/config/metal/device/config.go @@ -17,7 +17,7 @@ limitations under the License. package device import ( - "github.com/upbound/upjet/pkg/config" + "github.com/crossplane/upjet/pkg/config" ) // Configure the device group with references to other resources @@ -25,7 +25,7 @@ func Configure(p *config.Provider) { p.AddResourceConfigurator("equinix_metal_device", func(r *config.Resource) { r.LateInitializer = config.LateInitializer{ // NOTE(displague): These are ignored because they conflict with each other. - // See the following for more details: https://github.com/upbound/upjet/issues/107 + // See the following for more details: https://github.com/crossplane/upjet/issues/107 IgnoredFields: []string{ "metro", "facilities", diff --git a/config/overrides.go b/config/overrides.go index ef2c64e..454979a 100644 --- a/config/overrides.go +++ b/config/overrides.go @@ -21,7 +21,7 @@ import ( _ "embed" "strings" - upconfig "github.com/upbound/upjet/pkg/config" + upconfig "github.com/crossplane/upjet/pkg/config" ) // IdentifierAssignedByEquinix will work for all Equinix types because even if diff --git a/config/provider-metadata.yaml b/config/provider-metadata.yaml index 20786f0..f3e2149 100644 --- a/config/provider-metadata.yaml +++ b/config/provider-metadata.yaml @@ -12,502 +12,1079 @@ resources: layer2: '- (Optional) Whether to put the port to Layer 2 mode, valid only for bond ports.' mac: '- MAC address of the port.' name: '- Name of the port, e.g. bond0 or eth0.' - native_vlan_id: |- - - (Optional) UUID of a VLAN to assign as a native VLAN. It must be one of - attached VLANs (from vlan_ids parameter). - network_type: |- - - One of layer2-bonded, layer2-individual, layer3, hybrid and hybrid-bonded. This - attribute is only set on bond ports. + native_vlan_id: '- (Optional) UUID of a VLAN to assign as a native VLAN. It must be one of attached VLANs (from vlan_ids parameter).' + network_type: '- One of layer2-bonded, layer2-individual, layer3, hybrid and hybrid-bonded. This attribute is only set on bond ports.' port_id: '- (Required) ID of the port to read.' reset_on_delete: '- (Optional) Behavioral setting to reset the port to default settings (layer3 bonded mode without any vlan attached) before delete/destroy.' timeouts.create: '- (Defaults to 30 mins) Used when creating the Port.' timeouts.delete: '- (Defaults to 30 mins) Used when deleting the Port.' timeouts.update: '- (Defaults to 30 mins) Used when updating the Port.' type: '- Type is either "NetworkBondPort" for bond ports or "NetworkPort" for bondable ethernet ports.' - vlan_ids: |- - - (Optional) List of VLAN UUIDs to attach to the port, valid only for L2 and Hybrid - ports. - vxlan_ids: |- - - (Optional) List of VXLAN IDs to attach to the port, valid only for L2 and Hybrid - ports. + vlan_ids: '- (Optional) List of VLAN UUIDs to attach to the port, valid only for L2 and Hybrid ports.' + vxlan_ids: '- (Optional) List of VXLAN IDs to attach to the port, valid only for L2 and Hybrid ports.' importStatements: [] - equinix_ecx_l2_connection: + equinix_fabric_cloud_router: subCategory: Fabric - name: equinix_ecx_l2_connection - title: "" + description: Fabric V4 API compatible resource allows creation and management of Equinix Fabric Cloud Router + name: equinix_fabric_cloud_router + title: equinix_fabric_cloud_router Resource - terraform-provider-equinix + examples: + - name: new_cloud_router + manifest: |- + { + "account": [ + { + "account_number": "203612" + } + ], + "location": [ + { + "metro_code": "SV" + } + ], + "name": "Router-SV", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "package": [ + { + "code": "STANDARD" + } + ], + "project": [ + { + "project_id": "776847000642406" + } + ], + "type": "XF_ROUTER" + } + argumentDocs: + account: '(Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema)' + account_number: (Number) Account Number + bgp_ipv4_routes_count: (Number) Number of IPv4 BGP routes in use (including non-distinct prefixes) + bgp_ipv6_routes_count: (Number) Number of IPv6 BGP routes in use (including non-distinct prefixes) + billing_tier: (String) Billing tier for connection bandwidth + change_log: (Set of Object) Captures Fabric Cloud Router lifecycle change information (see below for nested schema) + code: (String) Fabric Cloud Router package code + connections_count: (Number) Number of connections associated with this Fabric Cloud Router instance + create: (String) + created_by: (String) + created_by_email: (String) + created_by_full_name: (String) + created_date_time: (String) + delete: (String) + deleted_by: (String) + deleted_by_email: (String) + deleted_by_full_name: (String) + deleted_date_time: (String) + description: (String) Customer-provided Fabric Cloud Router description + distinct_ipv4_prefixes_count: (Number) Number of distinct IPv4 routes + distinct_ipv6_prefixes_count: (Number) Number of distinct IPv6 routes + emails: (List of String) Array of contact emails + equinix_asn: (Number) Equinix ASN + href: (String) Fabric Cloud Router URI information + ibx: (String) IBX Code + id: (String) The ID of this resource. + location: '(Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema)' + metro_code: (String) Access point metro code + metro_name: (String) Access point metro name + name: (String) Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores + notifications: '(Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema)' + order: '(Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema)' + order_id: (String) Order Identification + order_number: (String) Order Reference Number + package: '(Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema)' + project: '(Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema)' + project_id: (String) Project Id + purchase_order_number: (String) Purchase order number + read: (String) + region: (String) Access point region + send_interval: (String) Send interval + state: (String) Fabric Cloud Router overall state + timeouts: (Block, Optional) (see below for nested schema) + type: (String) Defines the FCR type like; XF_ROUTER + update: (String) + updated_by: (String) + updated_by_email: (String) + updated_by_full_name: (String) + updated_date_time: (String) + uuid: (String) Equinix-assigned Fabric Cloud Router identifier + importStatements: [] + equinix_fabric_connection: + subCategory: Fabric + description: Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection + name: equinix_fabric_connection + title: equinix_fabric_connection Resource - terraform-provider-equinix examples: - - name: port-2-aws + - name: port2port + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "QINQ", + "vlan_s_tag": "1976" + } + ], + "port": [ + { + "uuid": "\u003caside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "QINQ", + "vlan_s_tag": "3711" + } + ], + "location": [ + { + "metro_code": "SV" + } + ], + "port": [ + { + "uuid": "\u003czside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ] + } + - name: port2aws + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "QINQ", + "vlan_c_tag": "2112", + "vlan_s_tag": "2019" + } + ], + "port": [ + { + "uuid": "\u003caside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ], + "additional_info": [ + { + "key": "accessKey", + "value": "\u003caws_access_key\u003e" + }, + { + "key": "secretKey", + "value": "\u003caws_secret_key\u003e" + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323929" + } + ], + "redundancy": [ + { + "priority": "PRIMARY" + } + ], + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "authentication_key": "\u003caws_account_id\u003e", + "location": [ + { + "metro_code": "SV" + } + ], + "profile": [ + { + "type": "L2_PROFILE", + "uuid": "\u003cservice_profile_uuid\u003e" + } + ], + "seller_region": "us-west-1", + "type": "SP" + } + ] + } + ] + } + - name: epl + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "port": [ + { + "uuid": "\u003caside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EPL_VC", + "z_side": [ + { + "access_point": [ + { + "location": [ + { + "metro_code": "SV" + } + ], + "port": [ + { + "uuid": "\u003czside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ] + } + - name: access_epl_vc + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "QINQ", + "vlan_s_tag": "1976" + } + ], + "port": [ + { + "uuid": "\u003caside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "ACCESS_EPL_VC", + "z_side": [ + { + "access_point": [ + { + "location": [ + { + "metro_code": "SV" + } + ], + "port": [ + { + "uuid": "\u003czside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ] + } + - name: vd2port + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "interface": [ + { + "id": 7, + "type": "NETWORK" + } + ], + "type": "VD", + "virtual_device": [ + { + "type": "EDGE", + "uuid": "\u003cdevice_uuid\u003e" + } + ] + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "DOT1Q", + "vlan_s_tag": "3711" + } + ], + "location": [ + { + "metro_code": "SV" + } + ], + "port": [ + { + "uuid": "\u003czside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ] + } + - name: vd2token + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "interface": [ + { + "id": 7, + "type": "NETWORK" + } + ], + "type": "VD", + "virtual_device": [ + { + "type": "EDGE", + "uuid": "\u003cdevice_uuid\u003e" + } + ] + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EVPL_VC", + "z_side": [ + { + "service_token": [ + { + "uuid": "\u003cservice_token_uuid\u003e" + } + ] + } + ] + } + - name: token2aws + manifest: |- + { + "a_side": [ + { + "service_token": [ + { + "uuid": "\u003cservice_token_uuid\u003e" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "authentication_key": "\u003caws_account_id\u003e", + "location": [ + { + "metro_code": "SV" + } + ], + "profile": [ + { + "type": "L2_PROFILE", + "uuid": "\u003cservice_profile_uuid\u003e" + } + ], + "seller_region": "us-west-1", + "type": "SP" + } + ] + } + ] + } + - name: fcr2port + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "router": [ + { + "uuid": "\u003ccloud_router_uuid\u003e" + } + ], + "type": "CLOUD_ROUTER" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "IP_VC", + "z_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "DOT1Q", + "vlan_tag": "2711" + } + ], + "location": [ + { + "metro_code": "SV" + } + ], + "port": [ + { + "uuid": "\u003cport_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ] + } + - name: fcr2azure manifest: |- { - "authorization_key": "345742915919", - "name": "tf-aws", + "a_side": [ + { + "access_point": [ + { + "router": [ + { + "uuid": "\u003ccloud_router_uuid\u003e" + } + ], + "type": "CLOUD_ROUTER" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", "notifications": [ - "marry@equinix.com", - "john@equinix.com" + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } ], - "port_uuid": "${data.equinix_ecx_port.sv-qinq-pri.id}", - "profile_uuid": "${data.equinix_ecx_l2_sellerprofile.aws.id}", - "seller_metro_code": "SV", - "seller_region": "us-west-1", - "speed": 200, - "speed_unit": "MB", - "vlan_ctag": 1000, - "vlan_stag": 777 + "type": "IP_VC", + "z_side": [ + { + "access_point": [ + { + "authentication_key": "\u003cAzure_ExpressRouter_Auth_Key\u003e", + "location": [ + { + "metro_code": "SV" + } + ], + "peering_type": "PRIVATE", + "profile": [ + { + "type": "L2_PROFILE", + "uuid": "\u003cAzure_Service_Profile_UUID\u003e" + } + ], + "type": "SP" + } + ] + } + ] } - references: - port_uuid: data.equinix_ecx_port.sv-qinq-pri.id - profile_uuid: data.equinix_ecx_l2_sellerprofile.aws.id - - name: ports-2-azure + - name: vd2azure manifest: |- { - "authorization_key": "c4dff8e8-b52f-4b34-b0d4-c4588f7338f3", - "name": "tf-azure-pri", - "named_tag": "PRIVATE", + "a_side": [ + { + "access_point": [ + { + "interface": [ + { + "id": 7, + "type": "CLOUD" + } + ], + "type": "VD", + "virtual_device": [ + { + "type": "EDGE", + "uuid": "\u003cdevice_uuid\u003e" + } + ] + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", "notifications": [ - "john@equinix.com", - "marry@equinix.com" + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } ], - "port_uuid": "${data.equinix_ecx_port.sv-qinq-pri.id}", - "profile_uuid": "${data.equinix_ecx_l2_sellerprofile.azure.id}", - "secondary_connection": [ + "order": [ { - "name": "tf-azure-sec", - "port_uuid": "${data.equinix_ecx_port.sv-qinq-sec.id}", - "vlan_ctag": 1631, - "vlan_stag": 1904 + "purchase_order_number": "1-323292" } ], - "seller_metro_code": "SV", - "speed": 50, - "speed_unit": "MB", - "vlan_ctag": 2512, - "vlan_stag": 1482 + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "authentication_key": "\u003cAzure_ExpressRouter_Auth_Key\u003e", + "location": [ + { + "metro_code": "SV" + } + ], + "peering_type": "PRIVATE", + "profile": [ + { + "type": "L2_PROFILE", + "uuid": "\u003cAzure_Service_Profile_UUID\u003e" + } + ], + "type": "SP" + } + ] + } + ] } - references: - port_uuid: data.equinix_ecx_port.sv-qinq-pri.id - profile_uuid: data.equinix_ecx_l2_sellerprofile.azure.id - secondary_connection.port_uuid: data.equinix_ecx_port.sv-qinq-sec.id - - name: router-to-gcp + - name: vd2azure_primary manifest: |- { - "authorization_key": "4d335adc-00fd-4a41-c9f3-782ca31ab3f7/us-west1/1", - "device_interface_id": 5, - "device_uuid": "${equinix_network_device.myrouter.id}", - "name": "tf-gcp-pri", + "a_side": [ + { + "access_point": [ + { + "interface": [ + { + "id": 7, + "type": "CLOUD" + } + ], + "type": "VD", + "virtual_device": [ + { + "type": "EDGE", + "uuid": "\u003cdevice_uuid\u003e" + } + ] + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", "notifications": [ - "john@equinix.com", - "marry@equinix.com" + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "redundancy": [ + { + "priority": "PRIMARY" + } ], - "profile_uuid": "${data.equinix_ecx_l2_sellerprofile.gcp-1.id}", - "seller_metro_code": "SV", - "seller_region": "us-west1", - "speed": 100, - "speed_unit": "MB" + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "authentication_key": "\u003cAzure_ExpressRouter_Auth_Key\u003e", + "location": [ + { + "metro_code": "SV" + } + ], + "peering_type": "PRIVATE", + "profile": [ + { + "type": "L2_PROFILE", + "uuid": "\u003cAzure_Service_Profile_UUID\u003e" + } + ], + "type": "SP" + } + ] + } + ] } - references: - device_uuid: equinix_network_device.myrouter.id - profile_uuid: data.equinix_ecx_l2_sellerprofile.gcp-1.id - - name: token-to-gcp + - name: vd2azure_secondary manifest: |- { - "authorization_key": "4d335adc-00fd-4a41-c9f3-782ca31ab3f7/us-west1/1", - "name": "tf-gcp-pri", + "a_side": [ + { + "access_point": [ + { + "interface": [ + { + "id": 5, + "type": "CLOUD" + } + ], + "type": "VD", + "virtual_device": [ + { + "type": "EDGE", + "uuid": "\u003cdevice_uuid\u003e" + } + ] + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", "notifications": [ - "john@equinix.com", - "marry@equinix.com" + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "redundancy": [ + { + "group": "${one(equinix_fabric_connection.vd2azure_primary.redundancy).group}", + "priority": "SECONDARY" + } ], - "profile_uuid": "${data.equinix_ecx_l2_sellerprofile.gcp-1.id}", - "seller_metro_code": "SV", - "seller_region": "us-west1", - "service_token": "e9c22453-d3a7-4d5d-9112-d50173531392", - "speed": 100, - "speed_unit": "MB" + "type": "EVPL_VC", + "z_side": [ + { + "access_point": [ + { + "authentication_key": "\u003cAzure_ExpressRouter_Auth_Key\u003e", + "location": [ + { + "metro_code": "SV" + } + ], + "peering_type": "PRIVATE", + "profile": [ + { + "type": "L2_PROFILE", + "uuid": "\u003cAzure_Service_Profile_UUID\u003e" + } + ], + "type": "SP" + } + ] + } + ] } - references: - profile_uuid: data.equinix_ecx_l2_sellerprofile.gcp-1.id - - name: port-to-token + - name: fcr2network manifest: |- { - "name": "tf-port-token", + "a_side": [ + { + "access_point": [ + { + "router": [ + { + "uuid": "\u003ccloud_router_uuid\u003e" + } + ], + "type": "CLOUD_ROUTER" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", "notifications": [ - "john@equinix.com", - "marry@equinix.com" + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } ], - "port_uuid": "${data.equinix_ecx_port.sv-qinq-pri.id}", - "seller_metro_code": "FR", - "speed": 200, - "speed_unit": "MB", - "vlan_stag": 1000, - "zside_service_token": "e9c22453-d3a7-4d5d-9112-d50173531392" + "type": "IPWAN_VC", + "z_side": [ + { + "access_point": [ + { + "network": [ + { + "uuid": "\u003cnetwork_uuid\u003e" + } + ], + "type": "NETWORK" + } + ] + } + ] } - references: - port_uuid: data.equinix_ecx_port.sv-qinq-pri.id - argumentDocs: - actions: '- One or more pending actions to complete connection provisioning.' - additional_info: '- (Optional) one or more additional information key-value objects' - authorization_key: |- - - (Optional) Unique identifier authorizing Equinix to provision a connection - towards a cloud service provider. At Equinix, an Authorization Key is a generic term and is NOT - encrypted on Equinix Fabric. Cloud Service Providers might use a different name to refer to this - key such as Service Key or Authentication Key. Value depends on a provider service profile, - more information on Equinix Fabric how to guide. - device_interface_id: |- - - (Optional) Applicable with device_uuid, identifier of network interface - on a given device, used for a connection. If not specified then first available interface will be - selected. - device_uuid: |- - - (Required when port_uuid or service_token are not set) Unique identifier of - the Network Edge virtual device from which the connection would originate. - name: |- - - (Required) Connection name. An alpha-numeric 24 characters string which can include only - hyphens and underscores - named_tag: |- - - (Optional) The type of peering to set up when connecting to Azure Express Route. - Valid values: PRIVATE, MICROSOFT, MANUAL*, PUBLIC*. - notifications: |- - - (Required) A list of email addresses used for sending connection update - notifications. - port_uuid: |- - - (Required when device_uuid or service_token are not set) Unique identifier of - the Equinix Fabric Port from which the connection would originate. - profile_uuid: '- (Required) Unique identifier of the service provider''s profile.' - provider_status: '- Connection provisioning status on service provider''s side.' - purchase_order_number: '- (Optional) Connection''s purchase order number to reflect on the invoice' - redundancy_group: '- Unique identifier of group containing a primary and secondary connection.' - redundancy_type: |- - - Connection redundancy type, applicable for HA connections. Valid values are - PRIMARY, SECONDARY. - redundant_uuid: '- Unique identifier of the redundant connection, applicable for HA connections.' - secondary_connection: |- - - (Optional) Definition of secondary connection for redundant, HA - connectivity. See Secondary Connection below for more details. - secondary_connection.authorization_key: |- - - (Optional) Unique identifier authorizing Equinix to provision a connection - towards a cloud service provider. If not specified primary authorization_key will be used. However, - some service providers may require different keys for each connection. More information on - Equinix Fabric how to guide. - secondary_connection.device_interface_id: |- - - (Optional) Applicable with device_uuid, identifier of network interface - on a given device. If not specified then first available interface will be selected. - secondary_connection.device_uuid: |- - - (Optional) Applicable with primary device_uuid. Identifier of the Network Edge - virtual device from which the secondary connection would originate. If not specified primary - device_uuid will be used. - secondary_connection.name: '- (Required) secondary connection name' - secondary_connection.port_uuid: |- - - (Optional) Applicable with primary port_uuid. Identifier of the Equinix Fabric Port from - which the secondary connection would originate. If not specified primary port_uuid will be used. - secondary_connection.seller_metro_code: |- - - (Optional) The metro code that denotes the secondary connection’s - destination (Z side). . - secondary_connection.seller_region: |- - - (Optional) The region in which the seller port resides. If not specified - primary seller_region will be used. - secondary_connection.service_token: |- - - (Optional) Required with primary service_token. Unique Equinix Fabric key - given by a provider that grants you authorization to enable connectivity from an Equinix Fabric Port or - virtual device. Each connection (primary and secondary) requires a separate token. - More details in Fabric Service Tokens. - secondary_connection.speed: |- - - (Optional) Speed/Bandwidth to be allocated to the secondary connection. If not - specified primary speed will be used. - secondary_connection.speed_unit: |- - - (Optional) Unit of the speed/bandwidth to be allocated to the secondary - connection. If not specified primary speed_unit will be used. - secondary_connection.vlan_ctag: |- - - (Optional) Applicable with port_uuid. C-Tag/Inner-Tag of the secondary - connection, a numeric character ranging from 2 - 4094. - secondary_connection.vlan_stag: |- - - (Required when port_uuid is set) S-Tag/Outer-Tag of the secondary connection, a - numeric character ranging from 2 - 4094. - seller_metro_code: |- - - (Optional) The metro code that denotes the connection’s remote/destination - side (z-side). - seller_region: '- (Optional) The region in which the seller port resides.' - service_token: |- - - (Required when port_uuid or device_uuid are not set) - A-side - service tokens authorize you to create a connection from a customer port, which created the token - for you, to a service profile or your own port. - More details in A-Side Fabric Service Tokens. - speed: '- (Required) Speed/Bandwidth to be allocated to the connection.' - speed_unit: '- (Required) Unit of the speed/bandwidth to be allocated to the connection.' - status: '- Connection provisioning status on Equinix Fabric side.' - uuid: '- Unique identifier of the connection.' - value: '- (Required) additional information value' - vendor_token: |- - - The Equinix Fabric Token the connection was created with. Applicable if the - connection was created with a service_token (a-side) or zside_service_token (z-side). - vlan_ctag: |- - - (Optional) C-Tag/Inner-Tag of the connection - a numeric character ranging from 2 - - 4094. - vlan_stag: |- - - (Required when port_uuid is set) S-Tag/Outer-Tag of the connection - a numeric - character ranging from 2 - 4094. - zside_port_uuid: |- - - (Optional) Unique identifier of the port on the remote/destination side - (z-side). Allows you to connect between your own ports or virtual devices across your company's - Equinix Fabric deployment, with no need for a private service profile. - zside_service_token: |- - - (Required when profile_uuid or zside_port_uuid are not set) - Z-side - service tokens authorize you to create a connection from your port or virtual device to a customer - port which created the token for you. zside_service_token cannot be used with secondary_connection. - More details in Z-Side Fabric Service Tokens. - zside_vlan_ctag: |- - - (Optional) C-Tag/Inner-Tag of the connection on the remote/destination - side (z-side) - a numeric character ranging from 2 - 4094. - secondary_connection is defined it will internally use same zside_vlan_ctag for the secondary - connection. - zside_vlan_stag: |- - - (Optional) S-Tag/Outer-Tag of the connection on the remote/destination - side (z-side) - a numeric character ranging from 2 - 4094. - importStatements: [] - equinix_ecx_l2_connection_accepter: - subCategory: Fabric - name: equinix_ecx_l2_connection_accepter - title: "" - examples: - - name: accepter + - name: vd2token + manifest: |- + { + "a_side": [ + { + "access_point": [ + { + "interface": [ + { + "id": 7, + "type": "CLOUD" + } + ], + "type": "VD", + "virtual_device": [ + { + "type": "EDGE", + "uuid": "\u003cdevice_uuid\u003e" + } + ] + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EVPLAN_VC", + "z_side": [ + { + "access_point": [ + { + "network": [ + { + "uuid": "\u003cnetwork_uuid\u003e" + } + ], + "type": "NETWORK" + } + ] + } + ] + } + - name: epl manifest: |- { - "connection_id": "${equinix_ecx_l2_connection.awsConn.id}" + "a_side": [ + { + "access_point": [ + { + "port": [ + { + "uuid": "\u003caside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } + ], + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "order": [ + { + "purchase_order_number": "1-323292" + } + ], + "type": "EPLAN_VC", + "z_side": [ + { + "access_point": [ + { + "network": [ + { + "uuid": "\u003cnetwork_uuid\u003e" + } + ], + "type": "NETWORK" + } + ] + } + ] } - references: - connection_id: equinix_ecx_l2_connection.awsConn.id - argumentDocs: - AWS: (AWS Direct Connect) - AWS_ACCESS_KEY_ID: |- - and AWS_SECRET_ACCESS_KEY - environmental variables - access_key: and secret_key resource arguments - aws_connection_id: |- - - Identifier of a hosted Direct Connect connection on AWS side, - applicable for accepter resource with connections to AWS only. - aws_profile: argument or AWS_PROFILE environmental variable - connection_id: '- (Required) Identifier of Layer 2 connection that will be accepted.' - secret_key: '- (Optional) Secret Key used to accept connection on provider side.' - importStatements: [] - equinix_ecx_l2_serviceprofile: - subCategory: Fabric - name: equinix_ecx_l2_serviceprofile - title: "" - examples: - - name: private-profile + - name: epl manifest: |- { - "bandwidth_threshold_notifications": [ - "John.Doe@example.com", - "Marry.Doe@example.com" + "a_side": [ + { + "access_point": [ + { + "link_protocol": [ + { + "type": "DOT1Q", + "vlan_s_tag": "1976" + } + ], + "port": [ + { + "uuid": "\u003caside_port_uuid\u003e" + } + ], + "type": "COLO" + } + ] + } ], - "connection_name_label": "Connection", - "description": "my private profile", - "features": [ + "bandwidth": 50, + "name": "ConnectionName", + "notifications": [ { - "allow_remote_connections": true, - "test_profile": false + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" } ], - "name": "private-profile", - "port": [ - { - "metro_code": "NY", - "uuid": "a867f685-422f-22f7-6de0-320a5c00abdd" - }, + "order": [ { - "metro_code": "NY", - "uuid": "a867f685-4231-2317-6de0-320a5c00abdd" + "purchase_order_number": "1-323292" } ], - "private": true, - "private_user_emails": [ - "John.Doe@example.com", - "Marry.Doe@example.com" - ], - "profile_statuschange_notifications": [ - "John.Doe@example.com", - "Marry.Doe@example.com" - ], - "speed_band": [ - { - "speed": 1000, - "speed_unit": "MB" - }, - { - "speed": 500, - "speed_unit": "MB" - }, + "type": "EVPLAN_VC", + "z_side": [ { - "speed": 100, - "speed_unit": "MB" + "access_point": [ + { + "network": [ + { + "uuid": "\u003cnetwork_uuid\u003e" + } + ], + "type": "NETWORK" + } + ] } - ], - "vc_statuschange_notifications": [ - "John.Doe@example.com", - "Marry.Doe@example.com" ] } - argumentDocs: - BOTH: '- When both, application tag or seller side VLAN C-Tag can be provided.' - CTAGED: '- When seller side VLAN C-Tag has to be provided (Default).' - NAMED: '- When application named tag has to be provided.' - api_integration: |- - - (Optional) Boolean value that determines if API integration is enabled. It - allows you to complete connection provisioning in less than five minutes. Without API Integration, - additional manual steps will be required and the provisioning will likely take longer. - authkey_label: |- - - (Optional) Name of the authentication key label to be used by the - Authentication Key service. It allows Service Providers with QinQ ports to accept groups of - connections or VLANs from Dot1q customers. This is similar to S-Tag/C-Tag capabilities. - bandwidth_alert_threshold: |- - - (Optional) Specifies the port bandwidth threshold percentage. If - the bandwidth limit is met or exceeded, an alert is sent to the seller. - bandwidth_threshold_notifications: |- - - (Optional) A list of email addresses that will receive - notifications about bandwidth thresholds. - connection_name_label: |- - - (Optional) Custom name used for calling a connections - e.g. circuit. Defaults to Connection. - ctag_label: '- (Optional) C-Tag/Inner-Tag label name for the connections.' - description: '- (Optional) Description of the service profile.' - equinix_managed_port_vlan: |- - - (Optional) Applicable when api_integration is set to true. It - indicates whether the port and VLAN details are managed by Equinix. - features: |- - - (Required) Block of profile features configuration. See Features below - for more details. - features.allow_remote_connections: |- - - (Required) Indicates whether or not connections to this profile - can be created from remote metro locations. - features.test_profile: |- - - (Deprecated) Indicates whether or not this profile can be used for test - connections. - integration_id: |- - - (Optional) Specifies the API integration ID that was provided to the customer - during onboarding. You can validate your API integration ID using the validateIntegrationId API. - name: |- - - (Required) Name of the service profile. An alpha-numeric 50 characters string which can - include only hyphens and underscores. - oversubscription: |- - - (Optional) You can set an alert for when a percentage of your profile has - been sold. Service providers like to use this functionality to alert them when they need to add - more ports or when they need to create a new service profile. Required with - oversubscription_allowed, defaults to 1x. - oversubscription_allowed: |- - - (Optional) 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. By selecting this service, you acknowledge that you will manage decisions - on when to increase capacity on these link. - port: |- - - (Required) One or more definitions of ports residing in locations, from which your - customers will be able to access services using this service profile. See Port below for - more details. - port.metro_code: '- (Required) The metro code of location where the port resides.' - port.uuid: '- (Required) Unique identifier of the port.' - private: |- - - (Optional) Boolean value that indicates whether or not this is a private profile, - i.e. not public like AWS/Azure/Oracle/Google, etc. If private, it can only be available for - creating connections if correct permissions are granted. - private_user_emails: |- - - (Optional) An array of users email ids who have permission to access this - service profile. Argument is required when profile is set as private. - profile_statuschange_notifications: |- - - (Required) A list of email addresses that will receive - notifications about profile status changes. - redundancy_required: |- - - (Optional) Boolean value that determines if your connections will require - redundancy. if yes, then users need to create a secondary redundant connection. - secondary_vlan_from_primary: |- - - (Optional) Indicates whether the VLAN ID of. the secondary - connection is the same as the primary connection. - servicekey_autogenerated: |- - - (Optional) Boolean value that indicates whether multiple connections - can be created with the same authorization key to connect to this service profile after the first - connection has been approved by the seller. - speed_band: |- - - (Optional) One or more definitions of supported speed/bandwidth. Argument is - required when speed_from_api is set to false. See Speed Band below for more - details. - speed_band.speed: '- (Required) Speed/bandwidth supported by this service profile.' - speed_band.speed_unit: |- - - (Required) Unit of the speed/bandwidth supported by this service profile. One of - MB, GB. - speed_customization_allowed: |- - - (Optional) Boolean value that determines if customer is allowed - to enter a custom connection speed. - speed_from_api: |- - - (Optional) Boolean valuta that determines if connection speed will be derived - from an API call. Argument has to be specified when api_integration is enabled. - state: '- Service profile provisioning status.' - tag_type: |- - - (Optional) Specifies additional tagging information required by the seller profile - for Dot1Q to QinQ translation. See Enhance Dot1q to QinQ translation support - for additional information. Valid values are: - uuid: '- Unique identifier of the service profile.' - vc_statuschange_notifications: |- - - (Required) A list of email addresses that will receive - notifications about connections approvals and rejections. - importStatements: [] - equinix_fabric_cloud_router Resource - terraform-provider-equinix: - subCategory: Fabric - description: Fabric V4 API compatible resource allows creation and management of Equinix Fabric Cloud Router - name: equinix_fabric_cloud_router Resource - terraform-provider-equinix - title: equinix_fabric_cloud_router Resource - terraform-provider-equinix - argumentDocs: - account: '(Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema)' - account_number: (Number) Account Number - bgp_ipv4_routes_count: (Number) Number of IPv4 BGP routes in use (including non-distinct prefixes) - bgp_ipv6_routes_count: (Number) Number of IPv6 BGP routes in use (including non-distinct prefixes) - billing_tier: (String) Billing tier for connection bandwidth - change_log: (Set of Object) Captures Fabric Cloud Router lifecycle change information (see below for nested schema) - code: (String) Fabric Cloud Router package code - connections_count: (Number) Number of connections associated with this Fabric Cloud Router instance - create: (String) - created_by: (String) - created_by_email: (String) - created_by_full_name: (String) - created_date_time: (String) - delete: (String) - deleted_by: (String) - deleted_by_email: (String) - deleted_by_full_name: (String) - deleted_date_time: (String) - description: (String) Customer-provided Fabric Cloud Router description - distinct_ipv4_prefixes_count: (Number) Number of distinct IPv4 routes - distinct_ipv6_prefixes_count: (Number) Number of distinct IPv6 routes - emails: (List of String) Array of contact emails - equinix_asn: (Number) Equinix ASN - href: (String) Fabric Cloud Router URI information - ibx: (String) IBX Code - id: (String) The ID of this resource. - location: '(Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema)' - metro_code: (String) Access point metro code - metro_name: (String) Access point metro name - name: (String) Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores - notifications: '(Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema)' - order: '(Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema)' - order_id: (String) Order Identification - order_number: (String) Order Reference Number - package: '(Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema)' - project: '(Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema)' - project_id: (String) Project Id - purchase_order_number: (String) Purchase order number - read: (String) - region: (String) Access point region - send_interval: (String) Send interval - state: (String) Fabric Cloud Router overall state - timeouts: (Block, Optional) (see below for nested schema) - type: (String) Defines the FCR type like; XF_ROUTER - update: (String) - updated_by: (String) - updated_by_email: (String) - updated_by_full_name: (String) - updated_date_time: (String) - uuid: (String) Equinix-assigned Fabric Cloud Router identifier - importStatements: [] - equinix_fabric_connection Resource - terraform-provider-equinix: - subCategory: Fabric - description: Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection - name: equinix_fabric_connection Resource - terraform-provider-equinix - title: equinix_fabric_connection Resource - terraform-provider-equinix argumentDocs: a_side: '(Block Set, Min: 1, Max: 1) Requester or Customer side connection configuration object of the multi-segment connection (see below for nested schema)' access_point: '(Block Set, Max: 1) Point of access details (see below for nested schema)' @@ -600,11 +1177,33 @@ resources: vlan_tag: (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections z_side: '(Block Set, Min: 1, Max: 1) Destination or Provider side connection configuration object of the multi-segment connection (see below for nested schema)' importStatements: [] - equinix_fabric_network Resource - terraform-provider-equinix: + equinix_fabric_network: subCategory: Fabric description: Fabric V4 API compatible resource allows creation and management of Equinix Fabric Network - name: equinix_fabric_network Resource - terraform-provider-equinix + name: equinix_fabric_network title: equinix_fabric_network Resource - terraform-provider-equinix + examples: + - name: new_network + manifest: |- + { + "name": "Network-SV", + "notifications": [ + { + "emails": [ + "example@equinix.com", + "test1@equinix.com" + ], + "type": "ALL" + } + ], + "project": [ + { + "project_id": "776847000642406" + } + ], + "scope": "GLOBAL", + "type": "EVPLAN" + } argumentDocs: change: (Set of Object) Information on asset change operation (see below for nested schema) change_log: (Set of Object) A permanent record of asset creation, modification, or deletion (see below for nested schema) @@ -646,11 +1245,53 @@ resources: updated_date_time: (String) uuid: (String) Equinix-assigned network identifier importStatements: [] - equinix_fabric_service_profile Resource - terraform-provider-equinix: + equinix_fabric_service_profile: subCategory: Fabric description: Fabric V4 API compatible resource allows creation and management of Equinix Fabric Service Profile - name: equinix_fabric_service_profile Resource - terraform-provider-equinix + name: equinix_fabric_service_profile title: equinix_fabric_service_profile Resource - terraform-provider-equinix + examples: + - name: new_service_profile + manifest: |- + { + "access_point_type_configs": [ + { + "allow_bandwidth_auto_approval": false, + "allow_custom_bandwidth": true, + "allow_remote_connections": true, + "bandwidth_alert_threshold": 10, + "connection_label": "Service Profile Tag1", + "connection_redundancy_required": false, + "supported_bandwidths": [ + 100, + 500 + ], + "type": "COLO" + } + ], + "allowed_emails": [ + "test@equinix.com", + "testagain@equinix.com" + ], + "description": "Service Profile for Receiving Connections", + "name": "Name Of Business + Use Case Tag", + "notifications": [ + { + "emails": [ + "someone@sample.com" + ], + "type": "BANDWIDTH_ALERT" + } + ], + "ports": [ + { + "type": "XF_PORT", + "uuid": "c791f8cb-5cc9-cc90-8ce0-306a5c00a4ee" + } + ], + "type": "L2_PROFILE", + "visibility": "PUBLIC" + } argumentDocs: access_point_type_configs: (Block List) Access point config information (see below for nested schema) account: (Set of Object) Service Profile Owner Account Information (see below for nested schema) @@ -726,7 +1367,7 @@ resources: region: (String) Access point region required: (Boolean) Requirement to configure an authentication key. reuse_vlan_s_tag: (Boolean) Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. - self_profile: (Boolean) Self Profile indicating if the profile is created for customer's self use + self_profile: (Boolean) Self Profile indicating if the profile is created for customer's self use seller_region: (String) Seller Region seller_region_description: (String) Seller Region details seller_regions: (Map of String) Seller Regions @@ -847,7 +1488,7 @@ resources: references: project_id: local.project_id dependencies: - equinix_ecx_l2_connection.example: |- + equinix_fabric_connection.example: |- { "authorization_key": "${azurerm_express_route_circuit.example.service_key}", "name": "tf-metal-to-azure", @@ -855,7 +1496,7 @@ resources: "notifications": [ "example@equinix.com" ], - "profile_uuid": "${data.equinix_ecx_l2_sellerprofile.example.uuid}", + "profile_uuid": "${data.equinix_fabric_sellerprofile.example.uuid}", "secondary_connection": [ { "name": "tf-metal-to-azure-sec", @@ -885,13 +1526,13 @@ resources: references: project_id: local.project_id dependencies: - equinix_ecx_l2_connection.example: |- + equinix_fabric_connection.example: |- { "name": "tf-port-to-metal", "notifications": [ "example@equinix.com" ], - "port_uuid": "${data.equinix_ecx_port.example.id}", + "port_uuid": "${data.equinix_fabric_port.example.id}", "speed": "200", "speed_unit": "MB", "vlan_stag": 1020, @@ -919,14 +1560,14 @@ resources: references: project_id: local.my_project_id dependencies: - equinix_ecx_l2_connection.example: |- + equinix_fabric_connection.example: |- { "authorization_key": "${equinix_metal_connection.example.token}", "name": "tf-port-to-metal-legacy", "notifications": [ "example@equinix.com" ], - "port_uuid": "${data.equinix_ecx_port.example.id}", + "port_uuid": "${data.equinix_fabric_port.example.id}", "speed": "200", "speed_unit": "MB", "vlan_stag": 1020 @@ -944,23 +1585,20 @@ resources: argumentDocs: contact_email: '- (Optional) The preferred email used for communication and notifications about the Equinix Fabric interconnection. Required when using a Project API key. Optional and defaults to the primary user email address when using a User API key.' description: '- (Optional) Description for the connection resource.' - facility: '- (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide' + facility: '- (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide' metro: '- (Optional) Metro where the connection will be created.' mode: '- (Optional) Mode for connections in IBX facilities with the dedicated type - standard or tunnel. Default is standard.' name: '- (Required) Name of the connection resource' organization_id: '- ID of the organization where the connection is scoped to.' - ports: |- - - List of connection ports - primary (ports[0]) and secondary (ports[1]). Schema of - port is described in documentation of the - equinix_metal_connection datasource. + ports: '- List of connection ports - primary (ports[0]) and secondary (ports[1]). Schema of port is described in documentation of the equinix_metal_connection datasource.' project_id: '- (Optional) ID of the project where the connection is scoped to, must be set for.' redundancy: '- (Required) Connection redundancy - redundant or primary.' service_token_type: '- (Optional) Only used with shared connection. Type of service token to use for the connection, a_side or z_side. (NOTE: To support the legacy non-automated way to create connections, terraform will not check if )' - service_tokens: '- List of connection service tokens with attributes required to configure the connection in Equinix Fabric with the equinix_ecx_l2_connection resource or from the Equinix Fabric Portal. Scehma of service_token is described in documentation of the equinix_metal_connection datasource.' - speed: '- (Required) Connection speed - Values must be in the format ''Mbps'' or ''Gpbs'', for example ''100Mbps'' or ''50Gbps''. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF.' + service_tokens: '- List of connection service tokens with attributes required to configure the connection in Equinix Fabric with the equinix_fabric_connection resource or from the Equinix Fabric Portal. Scehma of service_token is described in documentation of the equinix_metal_connection datasource.' + speed: '- (Required) Connection speed - Values must be in the format ''Mbps'' or ''Gpbs'', for example ''100Mbps'' or ''50Gbps''. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF.' status: '- Status of the connection resource.' tags: '- (Optional) String list of tags.' - token: '- (Deprecated) Fabric Token required to configure the connection in Equinix Fabric with the equinix_ecx_l2_connection resource or from the Equinix Fabric Portal. If your organization already has connection service tokens enabled, use service_tokens instead.' + token: '- (Deprecated) Fabric Token required to configure the connection in Equinix Fabric with the equinix_fabric_connection resource or from the Equinix Fabric Portal. If your organization already has connection service tokens enabled, use service_tokens instead.' type: '- (Required) Connection type - dedicated or shared.' vlans: '- (Optional) Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection.' importStatements: [] @@ -1056,134 +1694,63 @@ resources: project_id: local.project_id user_data: local.user_data argumentDocs: - access_private_ipv4: '- The ipv4 private IP assigned to the device.' - access_public_ipv4: '- The ipv4 maintenance IP assigned to the device.' - access_public_ipv6: '- The ipv6 maintenance IP assigned to the device.' - address: '- IPv4 or IPv6 address string.' - always_pxe: |- - - (Optional) If true, a device with OS custom_ipxe will continue to boot via iPXE - on reboots. - behavior: '- (Optional) Behavioral overrides that change how the resource handles certain attribute updates. See Behavior below for more details.' - behavior.allow_changes: '- (Optional) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data"' - billing_cycle: '- (Optional) monthly or hourly' - bonded: '- Whether this port is part of a bond in bonded network setup.' - cidr: '- Bit length of the network mask of the address.' - created: '- The timestamp for when the device was created.' - custom_data: '- (Optional) A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If reinstall is specified or behavior.allow_changes includes "custom_data", the device will be updated in-place instead of recreated.' - deployed_facility: '- (Deprecated) The facility where the device is deployed. Use metro instead; read the facility to metro migration guide' - deployed_hardware_reservation_id: |- - - ID of hardware reservation where this device was deployed. - It is useful when using the next-available hardware reservation. - description: '- (Optional) The device description.' - equinix_metal_device.name.network.0: . - equinix_metal_device.name.network.1: . - equinix_metal_device.name.network.2: . - facilities: |- - - (Deprecated) 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, set your API auth - token in the top of the page and see JSON from the API response. Conflicts with metro. Use metro instead; read the facility to metro migration guide - family: '- IP version. One of 4, 6.' - force_detach_volumes: |- - - (Optional) Delete device even if it has volumes attached. Only applies - for destroy action. - gateway: '- Address of router.' - hardware_reservation_id: |- - - (Optional) 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. Changing this from a reservation UUID to next-available will re-create the device - in another reservation. Please be careful when using hardware reservation UUID and next-available - together for the same pool of reservations. It might happen that the reservation which Equinix - Metal API will pick as next-available is the reservation which you refer with UUID in another - equinix_metal_device resource. If that happens, and the equinix_metal_device with the UUID is - created later, resource creation will fail because the reservation is already in use (by the - resource created with next-available). To workaround this, have the next-available resource - explicitly depend_on - the resource with hardware reservation UUID, so that the latter is created first. For more details, - see issue #176. - hostname: |- - - (Optional) The device hostname used in deployments taking advantage of Layer3 DHCP - or metadata service configuration. - id: '- The ID of the device.' - ip_address: |- - - (Optional) A list of IP address types for the device. See - IP address below for more details. - ip_address.cidr: '- (Optional) CIDR suffix for IP address block to be assigned, i.e. amount of addresses.' - ip_address.reservation_ids: |- - - (Optional) List of UUIDs of IP block reservations - from which the public IPv4 address should be taken. - ip_address.type: '- (Required) One of private_ipv4, public_ipv4, public_ipv6.' - ipxe_script_url: |- - - (Optional) URL pointing to a hosted iPXE script. More information is in the - Custom iPXE doc. - locked: '- Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached' - mac: '- MAC address assigned to the port.' - metro: '- (Optional) Metro area for the new device. Conflicts with facilities.' - name: '- Name of the port (e.g. eth0, or bond0).' - network: |- - - The device's private and public IP (v4 and v6) network details. See - Network Attribute below for more details. - network_type: |- - - (Deprecated) Network type of a device, used in - Layer 2 networking. Since this - attribute is deprecated you should handle Network Type with one of - equinix_metal_port, - equinix_metal_device_network_type resources or - equinix_metal_port datasource. - See network_types guide for more info. - operating_system: |- - - (Required) The operating system slug. To find the slug, or visit - Operating Systems API docs, set your - API auth token in the top of the page and see JSON from the API response. - plan: |- - - (Required) The device plan slug. To find the plan slug, visit - Device plans API docs, set your auth token in the - top of the page and see JSON from the API response. - ports: |- - - List of ports assigned to the device. See Ports Attribute below for - more details. - project_id: '- (Required) The ID of the project in which to create the device' - project_ssh_key_ids: '- (Optional) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource.' - public: '- Whether the address is routable from the Internet.' - reinstall: |- - - (Optional) Whether the device should be reinstalled instead of destroyed when - modifying user_data, custom_data, or operating system. See Reinstall below for more - details. - reinstall.deprovision_fast: |- - - (Optional) Whether the OS disk should be filled with 00h bytes before reinstall. - Defaults to false. - reinstall.enabled: |- - - (Optional) Whether the provider should favour reinstall over destroy and create. Defaults to - false. - reinstall.preserve_data: |- - - (Optional) Whether the non-OS disks should be kept or wiped during reinstall. - Defaults to false. - root_password: '- Root password to the server (disabled after 24 hours).' - sos_hostname: '- The hostname to use for Serial over SSH access to the device' - ssh_key_ids: '- List of IDs of SSH keys deployed in the device, can be both user and project SSH keys.' - state: '- The status of the device.' - storage: |- - - (Optional) JSON for custom partitioning. Only usable on reserved hardware. More - information in in the - Custom Partitioning and RAID - doc. Please note that the disks.partitions.size attribute must be a string, not an integer. It can - be a number string, or size notation string, e.g. "4G" or "8M" (for gigabytes and megabytes). - tags: '- (Optional) Tags attached to the device.' - termination_time: |- - - (Optional) 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. - timeouts.create: '- (Defaults to 20 mins) Used when creating the Device. This includes the time to provision the OS.' - timeouts.delete: '- (Defaults to 20 mins) Used when deleting the Device. This includes the time to deprovision a hardware reservation when wait_for_reservation_deprovision is enabled.' - timeouts.update: '- (Defaults to 20 mins) Used when updating the Device. This includes the time needed to reprovision instances when reinstall arguments are used.' - type: '- Type of the port (e.g. NetworkPort or NetworkBondPort).' - updated: '- The timestamp for the last time the device was updated.' - user_data: '- (Optional) A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If reinstall is specified or behavior.allow_changes includes "user_data", the device will be updated in-place instead of recreated.' - user_ssh_key_ids: '- (Optional) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users'' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource.' - wait_for_reservation_deprovision: |- - - (Optional) 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). + access_private_ipv4: (String) The ipv4 private IP assigned to the device + access_public_ipv4: (String) The ipv4 maintenance IP assigned to the device + access_public_ipv6: (String) The ipv6 maintenance IP assigned to the device + address: (String) + allow_changes: '(List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data' + always_pxe: (Boolean) If true, a device with OS custom_ipxe will + behavior: '(Block List, Max: 1) (see below for nested schema)' + billing_cycle: (String) monthly or hourly + bonded: (Boolean) + cidr: (Number) CIDR suffix for IP block assigned to this device + create: (String) + created: (String) The timestamp for when the device was created + custom_data: (String, Sensitive) A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If reinstall is specified or behavior.allow_changes includes "custom_data", the device will be updated in-place instead of recreated. + delete: (String) + deployed_facility: (String, Deprecated) The facility where the device is deployed + deployed_hardware_reservation_id: (String) ID of hardware reservation where this device was deployed. It is useful when using the next-available hardware reservation + deprovision_fast: (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall + description: (String) Description string for the device + enabled: (Boolean) Whether the device should be reinstalled instead of destroyed + facilities: (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro + family: (Number) + force_detach_volumes: (Boolean) Delete device even if it has volumes attached. Only applies for destroy action + gateway: (String) + hardware_reservation_id: (String) 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 + hostname: (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + id: (String) The ID of this resource. + ip_address: (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) + ipxe_script_url: (String) URL pointing to a hosted iPXE script. More + locked: (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + mac: (String) + metro: (String) Metro area for the new device. Conflicts with facilities + name: (String) + network: '(List of Object) 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 (see below for nested schema)' + network_type: (String, Deprecated) Network type of a device, used in Layer 2 networking. Will be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded + operating_system: (String) The operating system slug. To find the slug, or visit Operating Systems API docs, set your API auth token in the top of the page and see JSON from the API response. By default, changing this attribute will cause your device to be deleted and recreated. If reinstall is enabled, the device will be updated in-place instead of recreated. + plan: (String) The device plan slug. To find the plan slug, visit the bare-metal server and plan documentation + ports: (List of Object) Ports assigned to the device (see below for nested schema) + preserve_data: (Boolean) Whether the non-OS disks should be kept or wiped during reinstall + project_id: (String) The ID of the project in which to create the device + project_ssh_key_ids: (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource + public: (Boolean) + reinstall: '(Block List, Max: 1) (see below for nested schema)' + reservation_ids: (List of String) IDs of reservations to pick the blocks from + root_password: (String, Sensitive) Root password to the server (disabled after 24 hours) + sos_hostname: (String) The hostname to use for Serial over SSH access to the device + ssh_key_ids: (List of String) List of IDs of SSH keys deployed in the device, can be both user and project SSH keys + state: (String) The status of the device + storage: (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc + tags: (List of String) Tags attached to the device + termination_time: (String) 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. + timeouts: (Block, Optional) (see below for nested schema) + type: (String) one of public_ipv4,private_ipv4,public_ipv6 + update: (String) + updated: (String) The timestamp for the last time the device was updated + user_data: (String, Sensitive) A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If reinstall is specified or behavior.allow_changes includes "user_data", the device will be updated in-place instead of recreated. + user_ssh_key_ids: (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource + wait_for_reservation_deprovision: (Boolean) 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) importStatements: [] equinix_metal_gateway: subCategory: Metal @@ -1233,12 +1800,8 @@ resources: } argumentDocs: delete: '- (Default 20m)' - ip_reservation_id: |- - - (Optional) UUID of Public or VRF IP Reservation to associate with the gateway, the - reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. - private_ipv4_subnet_size: |- - - (Optional) Size of the private IPv4 subnet to create for this metal - gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + ip_reservation_id: '- (Optional) UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size.' + private_ipv4_subnet_size: '- (Optional) Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id.' project_id: '- (Required) UUID of the project where the gateway is scoped to.' state: '- Status of the gateway resource.' vlan_id: '- (Required) UUID of the VLAN where the gateway is scoped to.' @@ -1267,9 +1830,7 @@ resources: argumentDocs: address_family: '- Address family as integer. One of 4 or 6.' cidr: '- Length of CIDR prefix of the subnet as integer.' - cidr_notation: |- - - (Required) CIDR notation of subnet from block reserved in the same project - and metro as the device. + cidr_notation: '- (Required) CIDR notation of subnet from block reserved in the same project and metro as the device.' device_id: '- (Required) ID of device to which to assign the subnet.' gateway: '- IP address of gateway for the subnet.' id: '- The unique ID of the assignment.' @@ -1289,9 +1850,7 @@ resources: "name": "foobar" } argumentDocs: - address: |- - - (Required) An object that has the address information. See Address - below for more details. + address: '- (Required) An object that has the address information. See Address below for more details.' address.address: '- (Required) Postal address.' address.city: '- (Required) City name.' address.country: '- (Required) Two letter country code (ISO 3166-1 alpha-2), e.g. US.' @@ -1388,21 +1947,15 @@ resources: backend_transfer: '- Enable or disable Backend Transfer, default is false.' bgp_config: '- Optional BGP settings. Refer to Equinix Metal guide for BGP.' bgp_config.asn: '- (Required) Autonomous System Number for local BGP deployment.' - bgp_config.deployment_type: |- - - (Required) local or global, the local is likely to be usable immediately, the - global will need to be reviewed by Equinix Metal engineers. + bgp_config.deployment_type: '- (Required) local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers.' bgp_config.max_prefix: '- The maximum number of route filters allowed per server.' bgp_config.md5: '- (Optional) Password for BGP session in plaintext (not a checksum).' bgp_config.status: '- status of BGP configuration in the project.' created: '- The timestamp for when the project was created.' id: '- The unique ID of the project.' - name: '- (Required) The name of the project. The maximum length is 80 characters' - organization_id: |- - - (Required) The UUID of organization under which you want to create the project. If you - leave it out, the project will be created under your the default organization of your account. - payment_method_id: |- - - 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). + name: '- (Required) The name of the project. The maximum length is 80 characters' + organization_id: '- (Required) The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account.' + payment_method_id: '- 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).' updated: '- The timestamp for the last time the project was updated.' importStatements: [] equinix_metal_project_api_key: @@ -1532,25 +2085,17 @@ resources: cidr_notation: '- Address and mask in CIDR notation, e.g. 147.229.15.30/31.' custom_data: '- (Optional) 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: '- (Optional) Arbitrary description.' - facility: |- - - (Deprecated) Facility where to allocate the public IP address block, makes sense only - if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide - global: |- - - Boolean flag whether addresses from a block are global (i.e. can be assigned in any - metro). + facility: '- (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide' + global: '- Boolean flag whether addresses from a block are global (i.e. can be assigned in any metro).' id: '- The unique ID of the block.' - metro: |- - - (Optional) Metro where to allocate the public IP address block, makes sense only - if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + metro: '- (Optional) Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility.' netmask: '- Mask in decimal notation, e.g. 255.255.255.0.' network: '- (Optional) Only valid as an argument and required when type is vrf. An unreserved network address from an existing ip_range in the specified VRF.' project_id: '- (Required) The metal project ID where to allocate the address block.' public: '- Boolean flag whether addresses from a block are public.' quantity: '- (Optional) The number of allocated /32 addresses, a power of 2. Required when type is not vrf.' tags: '- (Optional) String list of tags.' - type: |- - - (Optional) One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward - compatibility. + type: '- (Optional) One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility.' vrf_id: '- (Optional) Only valid and required when type is vrf. VRF ID for type=vrf reservations.' wait_for_state: '- (Optional) 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.' importStatements: [] @@ -1583,25 +2128,14 @@ resources: devices_min: '- (Required) Miniumum number devices to be created.' facilities: '- (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide' id: '- The ID of the Spot Market Request.' - instance_parameters: |- - - (Required) Key/Value pairs of parameters for devices provisioned from - this request. Valid keys are: billing_cycle, plan, operating_system, hostname, - termination_time, always_pxe, description, features, locked, project_ssh_keys, - user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter - description in equinix_metal_device docs. + instance_parameters: '- (Required) Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs.' locked: '- (Optional) Blocks deletion of the SpotMarketRequest device until the lock is disabled.' max_bid_price: '- (Required) Maximum price user is willing to pay per hour per device.' metro: '- (Optional) Metro where devices should be created.' project_id: '- (Required) Project ID.' - timeouts.create: |- - - (Defaults to 60 mins) Used when creating the Spot Market Request and wait_for_devices - is set to true. - timeouts.delete: |- - - (Defaults to 60 mins) Used when destroying the Spot Market Request and wait_for_devices - is set to true. - wait_for_devices: |- - - (Optional) On resource creation wait until all desired devices are active. - On resource destruction wait until devices are removed. + timeouts.create: '- (Defaults to 60 mins) Used when creating the Spot Market Request and wait_for_devices is set to true.' + timeouts.delete: '- (Defaults to 60 mins) Used when destroying the Spot Market Request and wait_for_devices is set to true.' + wait_for_devices: '- (Optional) On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed.' importStatements: [] equinix_metal_ssh_key: subCategory: Metal @@ -1633,9 +2167,7 @@ resources: id: '- The unique ID of the key.' name: '- (Required) The name of the SSH key for identification' owner_id: '- The UUID of the Equinix Metal API User who owns this key.' - public_key: |- - - (Required) The public key. If this is a file, it - can be read using the file interpolation function + public_key: '- (Required) The public key. If this is a file, it can be read using the file interpolation function' updated: '- The timestamp for the last time the SSH key was updated.' importStatements: [] equinix_metal_user_api_key: @@ -1681,27 +2213,37 @@ resources: "project_id": "${local.project_id}" } argumentDocs: - connection_id: '- (Required) UUID of Connection where the VC is scoped to.' - customer_ip: '- (Optional, required with vrf_id) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet.' - description: '- (Optional) Description for the Virtual Circuit resource.' - md5: '- (Optional, only valid with vrf_id) The password that can be set for the VRF BGP peer' - metal_ip: '- (Optional, required with vrf_id) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet.' - name: '- (Optional) Name of the Virtual Circuit resource.' - nni_vlan: '- (Required) Equinix Metal network-to-network VLAN ID.' - nni_vnid: '- NNI VLAN parameters, see the documentation for Equinix Fabric.' - peer_asn: '- (Optional, required with vrf_id) 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.' - port_id: '- (Required) UUID of the Connection Port where the VC is scoped to.' - project_id: '- (Required) UUID of the Project where the VC is scoped to.' - speed: '- (Optional) Speed of the Virtual Circuit resource.' - status: '- Status of the virtal circuit.' + connection_id: (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + customer_ip: (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + customer_ipv6: (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + description: (String) Description of the Virtual Circuit resource + id: (String) The ID of this resource. + md5: (String, Sensitive) The password that can be set for the VRF BGP peer + metal_ip: (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + metal_ipv6: (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + name: (String) Name of the Virtual Circuit resource + nni_vlan: (Number) Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) + nni_vnid: (Number) Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + peer_asn: (Number) 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. + port_id: (String) UUID of the Connection Port where the VC is scoped to + project_id: (String) UUID of the Project where the VC is scoped to + speed: (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + status: (String) Status of the virtual circuit resource subnet: |- - - (Optional, required with vrf_id) 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. - tags: '- (Optional) Tags for the Virtual Circuit resource.' - vlan_id: '- (Required) UUID of the VLAN to associate.' - vnid: '- VNID VLAN parameter, see the documentation for Equinix Fabric.' - vrf_id: '- (Optional) UUID of the VRF to associate.' - importStatements: [] + (String) 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + subnet_ipv6: |- + (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. + tags: (List of String) Tags attached to the virtual circuit + virtual_circuit_id: (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + vlan_id: (String) UUID of the VLAN to associate + vnid: (Number) VNID VLAN parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + vrf_id: (String) UUID of the VRF to associate + importStatements: + - terraform import equinix_metal_virtual_circuit {existing_id} equinix_metal_vlan: subCategory: Metal name: equinix_metal_vlan @@ -1787,34 +2329,22 @@ resources: } argumentDocs: description: '- (Optional) ACL template description, up to 200 characters.' - device_acl_status: |- - - Status of ACL template provisioning process, where template was applied. - One of PROVISIONING, PROVISIONED. + device_acl_status: '- Status of ACL template provisioning process, where template was applied. One of PROVISIONING, PROVISIONED.' device_details: '- List of the devices where the ACL template is applied.' - device_details.acl_status: |- - - Device ACL provisioning status where template was applied. One of PROVISIONING, - PROVISIONED. + device_details.acl_status: '- Device ACL provisioning status where template was applied. One of PROVISIONING, PROVISIONED.' device_details.name: '- Device name.' device_details.uuid: '- Device uuid.' device_id: '- (Deprecated) Identifier of a network device where template was applied.' - inbound_rule: |- - - (Required) One or more rules to specify allowed inbound traffic. - Rules are ordered, matching traffic rule stops processing subsequent ones. + inbound_rule: '- (Required) One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones.' inbound_rule.description: '- (Optional) Inbound rule description, up to 200 characters.' - inbound_rule.dst_port: |- - - (Required) Inbound traffic destination ports. Allowed values are a comma separated - list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + inbound_rule.dst_port: '- (Required) Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any.' inbound_rule.protocol: '- (Required) Inbound traffic protocol. One of IP, TCP, UDP.' - inbound_rule.src_port: |- - - (Required) Inbound traffic source ports. Allowed values are a comma separated list - of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + inbound_rule.src_port: '- (Required) Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any.' inbound_rule.subnet: '- (Required) Inbound traffic source IP subnet in CIDR format.' inbound_rule.subnets: '- (Deprecated) Inbound traffic source IP subnets in CIDR format.' metro_code: '- (Deprecated) ACL template location metro code.' name: '- (Required) ACL template name.' - project_id: |- - - (Optional) Unique Identifier for the project resource where the acl template is scoped to.If you - leave it out, the ACL template will be created under the default project id of your organization. + project_id: '- (Optional) Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization.' uuid: '- Unique identifier of ACL template resource.' importStatements: [] equinix_network_bgp: @@ -1834,22 +2364,14 @@ resources: } argumentDocs: authentication_key: '- (Optional) shared key used for BGP peer authentication.' - connection_id: |- - - (Required) identifier of a connection established between. - network device and remote service provider that will be used for peering. - device_id: |- - - unique identifier of a network device that is a local peer in a given BGP peering - configuration. + connection_id: '- (Required) identifier of a connection established between. network device and remote service provider that will be used for peering.' + device_id: '- unique identifier of a network device that is a local peer in a given BGP peering configuration.' local_asn: '- (Required) Local ASN number.' local_ip_address: '- (Required) IP address in CIDR format of a local device.' - provisioning_status: |- - - BGP peering configuration provisioning status, one of PROVISIONING, - PENDING_UPDATE, PROVISIONED, FAILED. + provisioning_status: '- BGP peering configuration provisioning status, one of PROVISIONING, PENDING_UPDATE, PROVISIONED, FAILED.' remote_asn: '- (Required) Remote ASN number.' remote_ip_address: '- (Required) IP address of remote peer.' - state: |- - - BGP peer state, one of Idle, Connect, Active, OpenSent, OpenConfirm, - Established. + state: '- BGP peer state, one of Idle, Connect, Active, OpenSent, OpenConfirm, Established.' uuid: '- BGP peering configuration unique identifier.' importStatements: [] equinix_network_device: @@ -2099,159 +2621,270 @@ resources: "public_key": "ssh-dss key-value", "type": "DSA" } + - name: bluecat-bdds-ha + manifest: |- + { + "account_number": "${data.equinix_network_account.sv.number}", + "byol": true, + "connectivity": "PRIVATE", + "core_count": 2, + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "name": "tf-bluecat-bdds-p", + "notifications": [ + "test@equinix.com" + ], + "package_code": "STD", + "secondary_device": [ + { + "account_number": "${data.equinix_network_account.sv.number}", + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "name": "tf-bluecat-bdds-s", + "notifications": [ + "test@eq.com" + ], + "vendor_configuration": { + "hostname": "test", + "licenseId": "xxxxxxxxxxxxxxx", + "licenseKey": "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx", + "privateAddress": "x.x.x.x", + "privateCidrMask": "24", + "privateGateway": "x.x.x.x" + } + } + ], + "self_managed": true, + "ssh_key": [ + { + "key_name": "${equinix_network_ssh_key.test-public-key.name}", + "username": "test-username" + } + ], + "term_length": 12, + "type_code": "BLUECAT", + "vendor_configuration": { + "hostname": "test", + "licenseId": "xxxxxxxxxxxxxxx", + "licenseKey": "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx", + "privateAddress": "x.x.x.x", + "privateCidrMask": "24", + "privateGateway": "x.x.x.x" + }, + "version": "9.6.0" + } + references: + account_number: data.equinix_network_account.sv.number + metro_code: data.equinix_network_account.sv.metro_code + secondary_device.account_number: data.equinix_network_account.sv.number + secondary_device.metro_code: data.equinix_network_account.sv.metro_code + ssh_key.key_name: equinix_network_ssh_key.test-public-key.name + dependencies: + equinix_network_ssh_key.test-public-key: |- + { + "name": "key-name", + "public_key": "ssh-dss key-value", + "type": "DSA" + } + - name: bluecat-edge-service-point-ha + manifest: |- + { + "account_number": "${data.equinix_network_account.sv.number}", + "byol": true, + "cloud_init_file_id": "${equinix_network_file.bluecat-edge-service-point-cloudinit-primary-file.uuid}", + "connectivity": "PRIVATE", + "core_count": 4, + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "name": "tf-bluecat-edge-service-point-p", + "notifications": [ + "test@equinix.com" + ], + "package_code": "STD", + "secondary_device": [ + { + "account_number": "${data.equinix_network_account.sv.number}", + "cloud_init_file_id": "${equinix_network_file.bluecat-edge-service-point-cloudinit-secondary-file.uuid}", + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "name": "tf-bluecat-edge-service-point-s", + "notifications": [ + "test@eq.com" + ] + } + ], + "self_managed": true, + "term_length": 12, + "type_code": "BLUECAT-EDGE-SERVICE-POINT", + "version": "4.6.3" + } + references: + account_number: data.equinix_network_account.sv.number + cloud_init_file_id: equinix_network_file.bluecat-edge-service-point-cloudinit-primary-file.uuid + metro_code: data.equinix_network_account.sv.metro_code + secondary_device.account_number: data.equinix_network_account.sv.number + secondary_device.cloud_init_file_id: equinix_network_file.bluecat-edge-service-point-cloudinit-secondary-file.uuid + secondary_device.metro_code: data.equinix_network_account.sv.metro_code + dependencies: + equinix_network_file.bluecat-edge-service-point-cloudinit-primary-file: |- + { + "byol": true, + "content": "${file(\"${path.module}/${var.filepath}\")}", + "device_type_code": "BLUECAT-EDGE-SERVICE-POINT", + "file_name": "TF-BLUECAT-ESP-cloud-init-file.txt", + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "process_type": "CLOUD_INIT", + "self_managed": true + } + equinix_network_file.bluecat-edge-service-point-cloudinit-secondary-file: |- + { + "byol": true, + "content": "${file(\"${path.module}/${var.filepath}\")}", + "device_type_code": "BLUECAT-EDGE-SERVICE-POINT", + "file_name": "TF-BLUECAT-ESP-cloud-init-file.txt", + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "process_type": "CLOUD_INIT", + "self_managed": true + } + - name: panw-cluster + manifest: |- + { + "account_number": "${data.equinix_network_account.sv.number}", + "acl_template_id": "0bff6e05-f0e7-44cd-804a-25b92b835f8b", + "byol": true, + "cluster_details": [ + { + "cluster_name": "tf-panw-cluster", + "node0": [ + { + "license_token": "licenseToken", + "vendor_configuration": [ + { + "hostname": "panw-node0", + "panorama_auth_key": "xxxxxxxxxxx", + "panorama_ip_address": "x.x.x.x" + } + ] + } + ], + "node1": [ + { + "license_token": "licenseToken", + "vendor_configuration": [ + { + "hostname": "panw-node1", + "panorama_auth_key": "xxxxxxxxxxx", + "panorama_ip_address": "x.x.x.x" + } + ] + } + ] + } + ], + "core_count": 2, + "interface_count": 10, + "metro_code": "${data.equinix_network_account.sv.metro_code}", + "name": "tf-panw", + "notifications": [ + "john@equinix.com", + "marry@equinix.com", + "fred@equinix.com" + ], + "package_code": "VM100", + "self_managed": true, + "ssh_key": [ + { + "key_name": "test-key", + "username": "test" + } + ], + "term_length": 12, + "type_code": "PA-VM", + "version": "11.1.3" + } + references: + account_number: data.equinix_network_account.sv.number + metro_code: data.equinix_network_account.sv.metro_code argumentDocs: account_number: '- (Required) Billing account number for a device.' acl_template_id: '- (Optional) Identifier of a WAN interface ACL template that will be applied on the device.' - additional_bandwidth: |- - - (Optional) Additional Internet bandwidth, in Mbps, that will be - allocated to the device (in addition to default 15Mbps). + additional_bandwidth: '- (Optional) Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps).' asn: '- (Autonomous System Number) Unique identifier for a network on the internet.' assigned_type: '- interface management type (Equinix Managed or empty).' - byol: |- - - (Optional) Boolean value that determines device licensing mode, i.e., - bring your own license or subscription (default). + byol: '- (Optional) Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default).' cloud_init_file_id: '- (Optional) Identifier of a cloud init file that will be applied on the device.' - cluster_details: |- - - (Optional) An object that has the cluster details. See - Cluster Details below for more details. + cluster_details: '- (Optional) An object that has the cluster details. See Cluster Details below for more details.' cluster_details.cluster_name: '- (Required) The name of the cluster device' - cluster_details.node0: |- - - (Required) An object that has node0 configuration. - See Cluster Details - Nodes below for more details. + cluster_details.node0: '- (Required) An object that has node0 configuration. See Cluster Details - Nodes below for more details.' cluster_details.node0.license_file_id: '- (Optional) License file id. This is necessary for Fortinet and Juniper clusters.' cluster_details.node0.license_token: '- (Optional) License token. This is necessary for Palo Alto clusters.' - cluster_details.node0.vendor_configuration: |- - - (Optional) An object that has fields relevant to the vendor of the - cluster device. See Cluster Details - Nodes - Vendor Configuration - below for more details. + cluster_details.node0.vendor_configuration: '- (Optional) An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details.' cluster_details.node0.vendor_configuration.activation_key: '- (Optional) Activation key. This is required for Velocloud clusters.' - cluster_details.node0.vendor_configuration.admin_password: |- - - (Optional) 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. + cluster_details.node0.vendor_configuration.admin_password: '- (Optional) 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.' cluster_details.node0.vendor_configuration.controller_fqdn: '- (Optional) Controller fqdn. This is required for Velocloud clusters.' cluster_details.node0.vendor_configuration.controller1: '- (Optional) System IP Address. Mandatory for the Fortinet SDWAN cluster device.' cluster_details.node0.vendor_configuration.hostname: '- (Optional) Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters.' - cluster_details.node0.vendor_configuration.root_password: |- - - (Optional) The CLI password of the device. This field is relevant only for the - Velocloud SDWAN cluster. - cluster_details.node1: |- - - (Required) An object that has node1 configuration. - See Cluster Details - Nodes below for more details. + cluster_details.node0.vendor_configuration.panorama_auth_key: '- (Optional) Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server.' + cluster_details.node0.vendor_configuration.panorama_ip_address: '- (Optional) Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server.' + cluster_details.node0.vendor_configuration.root_password: '- (Optional) The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster.' + cluster_details.node1: '- (Required) An object that has node1 configuration. See Cluster Details - Nodes below for more details.' cluster_id: '- The ID of the cluster.' - connectivity: |- - - (Optional) Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). - If not specified, default will be INTERNET-ACCESS + connectivity: '- (Optional) Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS' core_count: '- (Required) Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.)' - diverse_device_id: |- - - (Optional) Unique ID of an existing device. - Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual - device. This field is only meaningful for single devices. - diverse_device_name: |- - - Name of the device with diverse device UUID. This field is returned in device details if the - device is created by passing diverse_device_id. + diverse_device_id: '- (Optional) Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices.' + diverse_device_name: '- Name of the device with diverse device UUID. This field is returned in device details if the device is created by passing diverse_device_id.' hostname: '- (Optional) Device hostname prefix.' ibx: '- Device location Equinix Business Exchange name.' id: '- interface identifier.' - interface: |- - - List of device interfaces. See Interface Attribute below - for more details. - interface_count: |- - - (Optional) Number of network interfaces on a device. If not specified, - default number for a given device type will be used. + interface: '- List of device interfaces. See Interface Attribute below for more details.' + interface_count: '- (Optional) Number of network interfaces on a device. If not specified, default number for a given device type will be used.' ip_address: '- interface IP address.' - license_file: |- - - (Optional) Path to the license file that will be uploaded and applied on a - device. Applicable for some device types in BYOL licensing mode. + license_file: '- (Optional) Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode.' license_file_id: '- (Optional, conflicts with license_file) Identifier of a license file that will be applied on the device.' - license_status: |- - - Device license registration status. Possible values are APPLYING_LICENSE, - REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. - license_token: |- - - (Optional, conflicts with license_file) License Token applicable for some device types in BYOL licensing - mode. + license_status: '- Device license registration status. Possible values are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED.' + license_token: '- (Optional, conflicts with license_file) License Token applicable for some device types in BYOL licensing mode.' mac_address: '- interface MAC address.' metro_code: '- (Required) Device location metro code.' - mgmt_acl_template_uuid: |- - - (Optional) Identifier of an MGMT interface ACL template that will be - applied on the device. + mgmt_acl_template_uuid: '- (Optional) Identifier of an MGMT interface ACL template that will be applied on the device.' name: '- (Required) Device name.' - notifications: |- - - (Required) List of email addresses that will receive device status - notifications. + notifications: '- (Required) List of email addresses that will receive device status notifications.' num_of_nodes: '- The number of nodes in the cluster.' operational_status: '- interface operational status. One of up, down.' order_reference: '- (Optional) Name/number used to identify device order on the invoice.' package_code: '- (Required) Device software package code.' - project_id: |- - - (Optional) Unique Identifier for the project resource where the device is scoped to.If you - leave it out, the device will be created under the default project id of your organization. + project_id: '- (Optional) Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization.' purchase_order_number: '- (Optional) Purchase order number associated with a device order.' - redundancy_type: |- - - Device redundancy type applicable for HA devices, either - primary or secondary. + redundancy_type: '- Device redundancy type applicable for HA devices, either primary or secondary.' redundant_id: '- Unique identifier for a redundant device applicable for HA devices.' region: '- Device location region.' - secondary_device: |- - - (Optional) Definition of secondary device for redundant - device configurations. See Secondary Device below for more details. + secondary_device: '- (Optional) Definition of secondary device for redundant device configurations. See Secondary Device below for more details.' secondary_device.account_number: '- (Required) Billing account number for secondary device.' - secondary_device.acl_template_id: |- - - (Optional) Identifier of a WAN interface ACL template that will be applied - on a secondary device. - secondary_device.additional_bandwidth: |- - - (Optional) Additional Internet bandwidth, in Mbps, for a secondary - device. + secondary_device.acl_template_id: '- (Optional) Identifier of a WAN interface ACL template that will be applied on a secondary device.' + secondary_device.additional_bandwidth: '- (Optional) Additional Internet bandwidth, in Mbps, for a secondary device.' secondary_device.cloud_init_file_id: '- (Optional) Identifier of a cloud init file that will be applied on a secondary device.' secondary_device.hostname: '- (Optional) Secondary device hostname.' - secondary_device.license_file: |- - - (Optional) Path to the license file that will be uploaded and applied on a - secondary device. Applicable for some device types in BYOL licensing mode. + secondary_device.license_file: '- (Optional) Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode.' secondary_device.license_file_id: '- (Optional, conflicts with license_file) Identifier of a license file that will be applied on a secondary device.' secondary_device.license_token: '- (Optional, conflicts with license_file) License Token can be provided for some device types o the device.' secondary_device.metro_code: '- (Required) Metro location of a secondary device.' - secondary_device.mgmt_acl_template_uuid: |- - - (Optional) Identifier of an MGMT interface ACL template that will be - applied on a secondary device. + secondary_device.mgmt_acl_template_uuid: '- (Optional) Identifier of an MGMT interface ACL template that will be applied on a secondary device.' secondary_device.name: '- (Required) Secondary device name.' - secondary_device.notifications: |- - - (Required) List of email addresses that will receive notifications about - secondary device. - secondary_device.ssh-key: |- - - (Optional) Up to one definition of SSH key that will be provisioned on a secondary - device. - secondary_device.vendor_configuration: |- - - (Optional) Key/Value pairs of vendor specific configuration parameters - for a secondary device. Key values are controller1, activationKey, managementType, siteId, - systemIpAddress. + secondary_device.notifications: '- (Required) List of email addresses that will receive notifications about secondary device.' + secondary_device.ssh-key: '- (Optional) Up to one definition of SSH key that will be provisioned on a secondary device.' + secondary_device.vendor_configuration: '- (Optional) Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress.' self-configured: devices. - self_managed: |- - - (Optional) Boolean value that determines device management mode, i.e., - self-managed or Equinix-managed (default). - ssh-key: |- - - (Optional) Definition of SSH key that will be provisioned - on a device (max one key). See SSH Key below for more details. + self_managed: '- (Optional) Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default).' + ssh-key: '- (Optional) Definition of SSH key that will be provisioned on a device (max one key). See SSH Key below for more details.' ssh_ip_address: '- IP address of SSH enabled interface on the device.' ssh_ip_fqdn: '- FQDN of SSH enabled interface on the device.' ssh_key.name: '- (Required) reference by name to previously provisioned public SSH key.' ssh_key.username: '- (Required) username associated with given key.' - status: |- - - Device provisioning status. Possible values are - INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, - WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, - DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + status: '- Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED.' term_length: '- (Required) Device term length.' throughput: '- (Optional) Device license throughput.' throughput_unit: '- (Optional) License throughput unit. One of Mbps or Gbps.' type: '- interface type.' type_code: '- (Required) Device type code.' uuid: '- Device unique identifier.' - vendor_configuration: |- - - (Optional) Map of vendor specific configuration parameters for a device - (controller1, activationKey, managementType, siteId, systemIpAddress) + vendor_configuration: '- (Optional) Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress)' version: '- (Required) Device software software version.' - wan_interafce_id: |- - - (Optional) Specify the WAN/SSH interface id. If not specified, default - WAN/SSH interface for a given device type will be used. + wan_interafce_id: '- (Optional) Specify the WAN/SSH interface id. If not specified, default WAN/SSH interface for a given device type will be used.' zone_code: '- Device location zone code.' importStatements: [] equinix_network_device_link: @@ -2293,52 +2926,30 @@ resources: link.dst_metro_code: equinix_network_device.test.secondary_device[0].metro_code link.src_metro_code: equinix_network_device.test.metro_code argumentDocs: - Metro link.account_number: |- - - (Required) billing account number to be used for - connection charges + Metro link.account_number: '- (Required) billing account number to be used for connection charges' Metro link.metro_code: '- (Required) connection metro code.' Metro link.throughput: '- (Required) connection throughput.' Metro link.throughput_unit: '- (Required) connection throughput unit (Mbps or Gbps).' - device: |- - - (Required) definition of one or more devices belonging to the - device link. See Device section below for more details. + device: '- (Required) definition of one or more devices belonging to the device link. See Device section below for more details.' device.asn: '- (Optional) Device ASN number. Not required for self configured devices.' device.id: '- (Required) Device identifier.' - device.interface_id: |- - - (Optional) Device network interface identifier to use for device link - connection. + device.interface_id: '- (Optional) Device network interface identifier to use for device link connection.' device.ip_address: '- IP address from device link subnet that was assigned to the device' - device.status: |- - - device link provisioning status on a given device. One of PROVISIONING, - PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. - link: |- - - (Deprecated) definition of one or more, inter metro, connections belonging - to the device link. See Link section below for more details. - link.account_number: |- - - (Required) billing account number to be used for - connection charges + device.status: '- device link provisioning status on a given device. One of PROVISIONING, PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED.' + link: '- (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details.' + link.account_number: '- (Required) billing account number to be used for connection charges' link.dst_metro_code: '- (Required) connection destination metro code.' link.dst_zone_code: '- (Deprecated) connection destination zone code is not required.' link.src_metro_code: '- (Required) connection source metro code.' link.src_zone_code: '- (Deprecated) connection source zone code is not required.' link.throughput: '- (Required) connection throughput.' link.throughput_unit: '- (Required) connection throughput unit (Mbps or Gbps).' - metro_link: |- - - (Optional) definition of one or more, inter metro, connections belonging - to the device link. See Metro Link section below for more details. + metro_link: '- (Optional) definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details.' name: '- (Required) device link name.' - project_id: |- - - (Optional) Unique Identifier for the project resource where the device link is scoped to.If you - leave it out, the device link will be created under the default project id of your organization. - redundancy_type: |- - - (Optional) Whether the connection should be created through - Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID - status: |- - - Device link provisioning status. One of PROVISIONING, PROVISIONED, - DEPROVISIONING, DEPROVISIONED, FAILED. - subnet: |- - - (Optional) device link subnet in CIDR format. Not required for link - between self configured devices. + project_id: '- (Optional) Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization.' + redundancy_type: '- (Optional) Whether the connection should be created through Fabric''s primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID' + status: '- Device link provisioning status. One of PROVISIONING, PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED.' + subnet: '- (Optional) device link subnet in CIDR format. Not required for link between self configured devices.' uuid: '- Device link unique identifier.' importStatements: [] equinix_network_file: @@ -2358,16 +2969,12 @@ resources: "self_managed": true } argumentDocs: - byol: |- - - (Required) Boolean value that determines device licensing mode, i.e., - bring your own license or subscription. + byol: '- (Required) Boolean value that determines device licensing mode, i.e., bring your own license or subscription.' content: '- (Required) Uploaded file content, expected to be a UTF-8 encoded string.' file_name: '- (Required) File name.' metro_code: '- (Required) File upload location metro code. It should match the device location metro code.' process_type: '- (Required) File process type (LICENSE or CLOUD_INIT).' - self_managed: |- - - (Required) Boolean value that determines device management mode, i.e., - self-managed or Equinix-managed. + self_managed: '- (Required) Boolean value that determines device management mode, i.e., self-managed or Equinix-managed.' status: '- File upload status.' type_code: '- (Required) Device type code.' uuid: '- Unique identifier of file resource.' @@ -2387,12 +2994,8 @@ resources: } argumentDocs: name: '- (Required) The name of SSH key used for identification.' - project_id: |- - - (Optional) Unique Identifier for the project resource where the SSH key is scoped to.If you - leave it out, the ssh key will be created under the default project id of your organization. - public_key: |- - - (Required) The SSH public key. If this is a file, it can be read using the file - interpolation function. + project_id: '- (Optional) Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization.' + public_key: '- (Required) The SSH public key. If this is a file, it can be read using the file interpolation function.' type: '- (Optional) The type of SSH key: RSA (default) or DSA.' uuid: '- The unique identifier of the key' importStatements: [] diff --git a/config/provider.go b/config/provider.go index c8ad2b3..55ad5cb 100644 --- a/config/provider.go +++ b/config/provider.go @@ -18,12 +18,18 @@ package config import ( // Note(turkenh): we are importing this to embed provider schema document + "context" _ "embed" - upconfig "github.com/upbound/upjet/pkg/config" - - "github.com/crossplane-contrib/provider-jet-equinix/config/ecx/l2connection" "github.com/crossplane-contrib/provider-jet-equinix/config/metal/device" + upconfig "github.com/crossplane/upjet/pkg/config" + conversiontfjson "github.com/crossplane/upjet/pkg/types/conversion/tfjson" + "github.com/equinix/terraform-provider-equinix/equinix" + framework "github.com/equinix/terraform-provider-equinix/equinix/provider" + "github.com/equinix/terraform-provider-equinix/version" + tfjson "github.com/hashicorp/terraform-json" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/pkg/errors" ) const ( @@ -37,19 +43,59 @@ var providerSchema string //go:embed provider-metadata.yaml var providerMetadata string +func getProviderSchema(s string) (*schema.Provider, error) { + ps := tfjson.ProviderSchemas{} + if err := ps.UnmarshalJSON([]byte(s)); err != nil { + panic(err) + } + if len(ps.Schemas) != 1 { + return nil, errors.Errorf("there should exactly be 1 provider schema but there are %d", len(ps.Schemas)) + } + var rs map[string]*tfjson.Schema + for _, v := range ps.Schemas { + rs = v.ResourceSchemas + break + } + return &schema.Provider{ + ResourcesMap: conversiontfjson.GetV2ResourceMap(rs), + }, nil +} + // GetProvider returns provider configuration -func GetProvider() *upconfig.Provider { +func GetProvider(_ context.Context, generationProvider bool) (*upconfig.Provider, error) { + var p *schema.Provider + var err error + + if generationProvider { + p, err = getProviderSchema(providerSchema) + } else { + p = equinix.Provider() + } + if err != nil { + return nil, errors.Wrapf(err, "cannot get the Terraform provider schema with generation mode set to %t", generationProvider) + } + + fwProvider := framework.CreateFrameworkProvider(version.ProviderVersion) + pc := upconfig.NewProvider([]byte(providerSchema), resourcePrefix, modulePath, []byte(providerMetadata), upconfig.WithShortName("equinix"), upconfig.WithRootGroup("equinix.jet.crossplane.io"), // upconfig.WithReferenceInjectors([]config.ReferenceInjector{reference.NewInjector("github.com/crossplane-contrib/provider-jet-equinix")}), upconfig.WithDefaultResourceOptions( - KnownReferencers(), + // KnownReferencers(), IdentifierAssignedByEquinix(), ), + upconfig.WithFeaturesPackage("internal/features"), + upconfig.WithTerraformProvider(p), + upconfig.WithTerraformPluginFrameworkProvider(fwProvider), upconfig.WithIncludeList([]string{ ".*", }), + upconfig.WithSkipList([]string{ + // ".*", // helpful when debugging to minimize the number of resources + }), + // config.WithTerraformPluginSDKIncludeList(resourceList(terraformSDKIncludeList)), + // config.WithTerraformPluginFrameworkIncludeList(resourceList(terraformPluginFrameworkExternalNameConfigs)), upconfig.WithBasePackages(upconfig.BasePackages{ APIVersion: []string{ // Default package for ProviderConfig APIs @@ -65,11 +111,11 @@ func GetProvider() *upconfig.Provider { for _, configure := range []func(provider *upconfig.Provider){ // add custom config functions device.Configure, - l2connection.Configure, + // l2connection.Configure, } { configure(pc) } pc.ConfigureResources() - return pc + return pc, err } diff --git a/config/schema.json b/config/schema.json index 4cf4b5c..58dc2cc 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":"Maximum number of retries.","description_kind":"plain","optional":true},"max_retry_wait_seconds":{"type":"number","description":"Maximum number of seconds to wait before retrying a request.","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","deprecated":true}},"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","deprecated":true}},"equinix_fabric_cloud_router":{"version":0,"block":{"attributes":{"bgp_ipv4_routes_count":{"type":"number","description":"Number of IPv4 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"bgp_ipv6_routes_count":{"type":"number","description":"Number of IPv6 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Fabric Cloud Router lifecycle change information","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this Fabric Cloud Router instance","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided Fabric Cloud Router description","description_kind":"plain","optional":true},"distinct_ipv4_prefixes_count":{"type":"number","description":"Number of distinct IPv4 routes","description_kind":"plain","computed":true},"distinct_ipv6_prefixes_count":{"type":"number","description":"Number of distinct IPv6 routes","description_kind":"plain","computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Cloud Router URI information","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"state":{"type":"string","description":"Fabric Cloud Router overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the FCR type like; XF_ROUTER","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix-assigned Fabric Cloud Router identifier","description_kind":"plain","optional":true,"computed":true}},"block_types":{"account":{"nesting_mode":"set","block":{"attributes":{"account_number":{"type":"number","description":"Account Number","description_kind":"plain","optional":true,"computed":true}},"description":"Customer account information that is associated with this Fabric Cloud Router","description_kind":"plain"},"min_items":1,"max_items":1},"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Fabric Cloud Router location","description_kind":"plain"},"min_items":1,"max_items":1},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on Fabric Cloud Router configuration or status changes","description_kind":"plain"},"min_items":1},"order":{"nesting_mode":"set","block":{"attributes":{"billing_tier":{"type":"string","description":"Billing tier for connection bandwidth","description_kind":"plain","optional":true,"computed":true},"order_id":{"type":"string","description":"Order Identification","description_kind":"plain","optional":true,"computed":true},"order_number":{"type":"string","description":"Order Reference Number","description_kind":"plain","optional":true,"computed":true},"purchase_order_number":{"type":"string","description":"Purchase order number","description_kind":"plain","optional":true,"computed":true}},"description":"Order information related to this Fabric Cloud Router","description_kind":"plain"},"max_items":1},"package":{"nesting_mode":"set","block":{"attributes":{"code":{"type":"string","description":"Fabric Cloud Router package code","description_kind":"plain","required":true}},"description":"Fabric Cloud Router Package Type","description_kind":"plain"},"min_items":1,"max_items":1},"project":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource URL","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"Project Id","description_kind":"plain","optional":true,"computed":true}},"description":"Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric Cloud Router","description_kind":"plain"}},"equinix_fabric_connection":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Customer account information that is associated with this connection","description_kind":"plain","computed":true},"additional_info":{"type":["list",["map","string"]],"description":"Connection additional information","description_kind":"plain","optional":true},"bandwidth":{"type":"number","description":"Connection bandwidth in Mbps","description_kind":"plain","required":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided connection description","description_kind":"plain","optional":true},"direction":{"type":"string","description":"Connection directionality from the requester point of view","description_kind":"plain","computed":true},"href":{"type":"string","description":"Connection URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_remote":{"type":"bool","description":"Connection property derived from access point locations","description_kind":"plain","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},"operation":{"type":["set",["object",{"equinix_status":"string","errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]],"provider_status":"string"}]],"description":"Connection type-specific operational data","description_kind":"plain","computed":true},"state":{"type":"string","description":"Connection overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix-assigned connection identifier","description_kind":"plain","computed":true}},"block_types":{"a_side":{"nesting_mode":"set","block":{"block_types":{"access_point":{"nesting_mode":"set","block":{"attributes":{"authentication_key":{"type":"string","description":"Authentication key for provider based connections","description_kind":"plain","optional":true},"peering_type":{"type":"string","description":"Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL","description_kind":"plain","optional":true},"provider_connection_id":{"type":"string","description":"Provider assigned Connection Id","description_kind":"plain","computed":true},"seller_region":{"type":"string","description":"Access point seller region","description_kind":"plain","optional":true},"type":{"type":"string","description":"Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK","description_kind":"plain","optional":true}},"block_types":{"account":{"nesting_mode":"set","block":{"attributes":{"account_name":{"type":"string","description":"Legal name of the accountholder.","description_kind":"plain","computed":true},"account_number":{"type":"number","description":"Equinix-assigned account number.","description_kind":"plain","computed":true},"global_cust_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_org_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's parent organization.","description_kind":"plain","computed":true},"org_id":{"type":"number","description":"Equinix-assigned ID of the subscriber's organization.","description_kind":"plain","computed":true},"organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's organization.","description_kind":"plain","computed":true},"ucm_id":{"type":"string","description":"Enterprise datastore id","description_kind":"plain","computed":true}},"description":"Account","description_kind":"plain"}},"gateway":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"**Deprecated** `gateway` Use `router` attribute instead","description_kind":"plain","deprecated":true},"max_items":1},"interface":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"id","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description":"Interface type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned interface identifier","description_kind":"plain","optional":true}},"description":"Virtual device interface","description_kind":"plain"},"max_items":1},"link_protocol":{"nesting_mode":"set","block":{"attributes":{"type":{"type":"string","description":"Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN","description_kind":"plain","optional":true},"vlan_c_tag":{"type":"number","description":"Vlan Customer Tag information, vlanCTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_s_tag":{"type":"number","description":"Vlan Provider Tag information, vlanSTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_tag":{"type":"number","description":"Vlan Tag information, vlanTag value specified for DOT1Q connections","description_kind":"plain","optional":true,"computed":true}},"description":"Connection link protocol","description_kind":"plain"},"max_items":1},"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Access point location","description_kind":"plain"},"max_items":1},"network":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Network identifier","description_kind":"plain","optional":true}},"description":"network access point information","description_kind":"plain"},"max_items":1},"port":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Port name","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"description":"Redundancy Information","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Port identifier","description_kind":"plain","optional":true,"computed":true}},"description":"Port access point information","description_kind":"plain"},"max_items":1},"profile":{"nesting_mode":"set","block":{"attributes":{"access_point_type_configs":{"type":["list",["object",{"type":"string","uuid":"string"}]],"description":"Access point config information","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","computed":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","computed":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","required":true}},"description":"Service Profile","description_kind":"plain"},"max_items":1},"router":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"Cloud Router access point information that replaces `gateway`","description_kind":"plain"},"max_items":1},"virtual_device":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned Virtual Device Name","description_kind":"plain","optional":true},"type":{"type":"string","description":"Virtual Device type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned Virtual Device identifier","description_kind":"plain","optional":true}},"description":"Virtual device","description_kind":"plain"},"max_items":1}},"description":"Point of access details","description_kind":"plain"},"max_items":1},"additional_info":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Additional information key","description_kind":"plain","optional":true},"value":{"type":"string","description":"Additional information value","description_kind":"plain","optional":true}},"description":"Connection side additional information","description_kind":"plain"}},"service_token":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Service token description","description_kind":"plain","computed":true},"href":{"type":"string","description":"An absolute URL that is the subject of the link's context","description_kind":"plain","computed":true},"type":{"type":"string","description":"Token type - VC_TOKEN","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned service token identifier","description_kind":"plain","optional":true}},"description":"For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets","description_kind":"plain"},"max_items":1}},"description":"Requester or Customer side connection configuration object of the multi-segment connection","description_kind":"plain"},"min_items":1,"max_items":1},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain"},"min_items":1},"order":{"nesting_mode":"set","block":{"attributes":{"billing_tier":{"type":"string","description":"Billing tier for connection bandwidth","description_kind":"plain","optional":true,"computed":true},"order_id":{"type":"string","description":"Order Identification","description_kind":"plain","optional":true,"computed":true},"order_number":{"type":"string","description":"Order Reference Number","description_kind":"plain","optional":true,"computed":true},"purchase_order_number":{"type":"string","description":"Purchase order number","description_kind":"plain","optional":true,"computed":true}},"description":"Order details","description_kind":"plain"},"max_items":1},"project":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource URL","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project Id","description_kind":"plain","optional":true,"computed":true}},"description":"Project information","description_kind":"plain"},"max_items":1},"redundancy":{"nesting_mode":"set","block":{"attributes":{"group":{"type":"string","description":"Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group)","description_kind":"plain","optional":true,"computed":true},"priority":{"type":"string","description":"Connection priority in redundancy group - PRIMARY, SECONDARY","description_kind":"plain","optional":true,"computed":true}},"description":"Connection Redundancy Configuration","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"z_side":{"nesting_mode":"set","block":{"block_types":{"access_point":{"nesting_mode":"set","block":{"attributes":{"authentication_key":{"type":"string","description":"Authentication key for provider based connections","description_kind":"plain","optional":true},"peering_type":{"type":"string","description":"Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL","description_kind":"plain","optional":true},"provider_connection_id":{"type":"string","description":"Provider assigned Connection Id","description_kind":"plain","computed":true},"seller_region":{"type":"string","description":"Access point seller region","description_kind":"plain","optional":true},"type":{"type":"string","description":"Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK","description_kind":"plain","optional":true}},"block_types":{"account":{"nesting_mode":"set","block":{"attributes":{"account_name":{"type":"string","description":"Legal name of the accountholder.","description_kind":"plain","computed":true},"account_number":{"type":"number","description":"Equinix-assigned account number.","description_kind":"plain","computed":true},"global_cust_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_org_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's parent organization.","description_kind":"plain","computed":true},"org_id":{"type":"number","description":"Equinix-assigned ID of the subscriber's organization.","description_kind":"plain","computed":true},"organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's organization.","description_kind":"plain","computed":true},"ucm_id":{"type":"string","description":"Enterprise datastore id","description_kind":"plain","computed":true}},"description":"Account","description_kind":"plain"}},"gateway":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"**Deprecated** `gateway` Use `router` attribute instead","description_kind":"plain","deprecated":true},"max_items":1},"interface":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"id","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description":"Interface type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned interface identifier","description_kind":"plain","optional":true}},"description":"Virtual device interface","description_kind":"plain"},"max_items":1},"link_protocol":{"nesting_mode":"set","block":{"attributes":{"type":{"type":"string","description":"Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN","description_kind":"plain","optional":true},"vlan_c_tag":{"type":"number","description":"Vlan Customer Tag information, vlanCTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_s_tag":{"type":"number","description":"Vlan Provider Tag information, vlanSTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_tag":{"type":"number","description":"Vlan Tag information, vlanTag value specified for DOT1Q connections","description_kind":"plain","optional":true,"computed":true}},"description":"Connection link protocol","description_kind":"plain"},"max_items":1},"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Access point location","description_kind":"plain"},"max_items":1},"network":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Network identifier","description_kind":"plain","optional":true}},"description":"network access point information","description_kind":"plain"},"max_items":1},"port":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Port name","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"description":"Redundancy Information","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Port identifier","description_kind":"plain","optional":true,"computed":true}},"description":"Port access point information","description_kind":"plain"},"max_items":1},"profile":{"nesting_mode":"set","block":{"attributes":{"access_point_type_configs":{"type":["list",["object",{"type":"string","uuid":"string"}]],"description":"Access point config information","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","computed":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","computed":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","required":true}},"description":"Service Profile","description_kind":"plain"},"max_items":1},"router":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"Cloud Router access point information that replaces `gateway`","description_kind":"plain"},"max_items":1},"virtual_device":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned Virtual Device Name","description_kind":"plain","optional":true},"type":{"type":"string","description":"Virtual Device type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned Virtual Device identifier","description_kind":"plain","optional":true}},"description":"Virtual device","description_kind":"plain"},"max_items":1}},"description":"Point of access details","description_kind":"plain"},"max_items":1},"additional_info":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Additional information key","description_kind":"plain","optional":true},"value":{"type":"string","description":"Additional information value","description_kind":"plain","optional":true}},"description":"Connection side additional information","description_kind":"plain"}},"service_token":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Service token description","description_kind":"plain","computed":true},"href":{"type":"string","description":"An absolute URL that is the subject of the link's context","description_kind":"plain","computed":true},"type":{"type":"string","description":"Token type - VC_TOKEN","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned service token identifier","description_kind":"plain","optional":true}},"description":"For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets","description_kind":"plain"},"max_items":1}},"description":"Destination or Provider side connection configuration object of the multi-segment connection","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection","description_kind":"plain"}},"equinix_fabric_network":{"version":0,"block":{"attributes":{"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Information on asset change operation","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"A permanent record of asset creation, modification, or deletion","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this network","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Network URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"operation":{"type":["set",["object",{"equinix_status":"string"}]],"description":"Network operation information that is associated with this Fabric Network","description_kind":"plain","computed":true},"scope":{"type":"string","description":"Fabric Network scope","description_kind":"plain","required":true},"state":{"type":"string","description":"Fabric Network overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Supported Network types - EVPLAN, EPLAN, IPWAN","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix-assigned network identifier","description_kind":"plain","computed":true}},"block_types":{"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Fabric Network location","description_kind":"plain"},"max_items":1},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on Fabric Network configuration or status changes","description_kind":"plain"},"min_items":1},"project":{"nesting_mode":"set","block":{"attributes":{"project_id":{"type":"string","description":"Customer project identifier","description_kind":"plain","required":true}},"description":"Fabric Network project","description_kind":"plain"},"min_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric Network","description_kind":"plain"}},"equinix_fabric_routing_protocol":{"version":0,"block":{"attributes":{"bgp_auth_key":{"type":"string","description":"BGP authorization key","description_kind":"plain","optional":true},"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Routing Protocol configuration Changes","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Routing Protocol lifecycle change information","description_kind":"plain","computed":true},"connection_uuid":{"type":"string","description":"Connection URI associated with Routing Protocol","description_kind":"plain","required":true},"customer_asn":{"type":"number","description":"Customer-provided ASN","description_kind":"plain","optional":true},"description":{"type":"string","description":"Customer-provided Fabric Routing Protocol description","description_kind":"plain","optional":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Routing Protocol URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Routing Protocol name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","optional":true},"operation":{"type":["set",["object",{"errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]]}]],"description":"Routing Protocol type-specific operational data","description_kind":"plain","computed":true},"state":{"type":"string","description":"Routing Protocol overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the routing protocol type like BGP or DIRECT","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned routing protocol identifier","description_kind":"plain","optional":true,"computed":true}},"block_types":{"bfd":{"nesting_mode":"set","block":{"attributes":{"enabled":{"type":"bool","description":"Bidirectional Forwarding Detection enablement","description_kind":"plain","required":true},"interval":{"type":"string","description":"Interval range between the received BFD control packets","description_kind":"plain","optional":true}},"description":"Bidirectional Forwarding Detection","description_kind":"plain"}},"bgp_ipv4":{"nesting_mode":"set","block":{"attributes":{"customer_peer_ip":{"type":"string","description":"Customer side peering ip","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Admin status for the BGP session","description_kind":"plain","optional":true},"equinix_peer_ip":{"type":"string","description":"Equinix side peering ip","description_kind":"plain","computed":true}},"description":"Routing Protocol BGP IPv4","description_kind":"plain"}},"bgp_ipv6":{"nesting_mode":"set","block":{"attributes":{"customer_peer_ip":{"type":"string","description":"Customer side peering ip","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Admin status for the BGP session","description_kind":"plain","optional":true},"equinix_peer_ip":{"type":"string","description":"Equinix side peering ip","description_kind":"plain","computed":true}},"description":"Routing Protocol BGP IPv6","description_kind":"plain"}},"direct_ipv4":{"nesting_mode":"set","block":{"attributes":{"equinix_iface_ip":{"type":"string","description":"Equinix side Interface IP address","description_kind":"plain","required":true}},"description":"Routing Protocol Direct IPv4","description_kind":"plain"}},"direct_ipv6":{"nesting_mode":"set","block":{"attributes":{"equinix_iface_ip":{"type":"string","description":"Equinix side Interface IP address\n\n","description_kind":"plain","optional":true}},"description":"Routing Protocol Direct IPv6","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection","description_kind":"plain"}},"equinix_fabric_service_profile":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Service Profile Owner Account Information","description_kind":"plain","computed":true},"allowed_emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","optional":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","required":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","required":true},"self_profile":{"type":"bool","description":"Self Profile indicating if the profile is created for customer's self use","description_kind":"plain","optional":true},"state":{"type":"string","description":"Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED","description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","optional":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","computed":true},"view_point":{"type":"string","description":"Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide","description_kind":"plain","optional":true},"visibility":{"type":"string","description":"Service profile visibility - PUBLIC, PRIVATE","description_kind":"plain","optional":true}},"block_types":{"access_point_type_configs":{"nesting_mode":"list","block":{"attributes":{"allow_bandwidth_auto_approval":{"type":"bool","description":"Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller","description_kind":"plain","optional":true},"allow_bandwidth_upgrade":{"type":"bool","description":"Availability of a bandwidth upgrade. The default is false","description_kind":"plain","optional":true},"allow_custom_bandwidth":{"type":"bool","description":"Setting to enable or disable the ability of the buyer to customize the bandwidth","description_kind":"plain","optional":true},"allow_remote_connections":{"type":"bool","description":"Setting to allow or prohibit remote connections to the service profile","description_kind":"plain","optional":true},"bandwidth_alert_threshold":{"type":"number","description":"Percentage of port bandwidth at which an allocation alert is generated","description_kind":"plain","optional":true},"connection_label":{"type":"string","description":"Custom name for Connection","description_kind":"plain","optional":true},"connection_redundancy_required":{"type":"bool","description":"Mandate redundant connections","description_kind":"plain","optional":true},"enable_auto_generate_service_key":{"type":"bool","description":"Enable auto generate service key","description_kind":"plain","optional":true},"supported_bandwidths":{"type":["list","number"],"description":"Supported bandwidths","description_kind":"plain","optional":true},"type":{"type":"string","description":"Type of access point type config - VD, COLO","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Colo/Port Uuid","description_kind":"plain","computed":true}},"block_types":{"api_config":{"nesting_mode":"set","block":{"attributes":{"allow_over_subscription":{"type":"bool","description":"Setting showing that oversubscription support is available (true) or not (false). The default is false","description_kind":"plain","optional":true},"api_available":{"type":"bool","description":"Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API.","description_kind":"plain","optional":true},"bandwidth_from_api":{"type":"bool","description":"Indicates if the connection bandwidth can be obtained directly from the cloud service provider.","description_kind":"plain","optional":true},"equinix_managed_port":{"type":"bool","description":"Setting indicating that the port is managed by Equinix (true) or not (false)","description_kind":"plain","optional":true},"equinix_managed_vlan":{"type":"bool","description":"Setting indicating that the VLAN is managed by Equinix (true) or not (false)","description_kind":"plain","optional":true},"integration_id":{"type":"string","description":"A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API.","description_kind":"plain","optional":true},"over_subscription_limit":{"type":"number","description":"Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps.","description_kind":"plain","optional":true}},"description":"Api configuration details","description_kind":"plain"},"max_items":1},"authentication_key":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Description of authorization key","description_kind":"plain","optional":true},"label":{"type":"string","description":"Name of the parameter that must be provided to authorize the connection.","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Requirement to configure an authentication key.","description_kind":"plain","optional":true}},"description":"Authentication key details","description_kind":"plain"},"max_items":1},"link_protocol_config":{"nesting_mode":"set","block":{"attributes":{"encapsulation":{"type":"string","description":"Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard.","description_kind":"plain","optional":true},"encapsulation_strategy":{"type":"string","description":"Additional tagging information required by the seller profile.","description_kind":"plain","optional":true},"reuse_vlan_s_tag":{"type":"bool","description":"Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection.","description_kind":"plain","optional":true}},"description":"Link protocol configuration details","description_kind":"plain"},"max_items":1}},"description":"Access point config information","description_kind":"plain"}},"custom_fields":{"nesting_mode":"list","block":{"attributes":{"capture_in_email":{"type":"bool","description":"Required field","description_kind":"plain","optional":true},"data_type":{"type":"string","description":"Data type","description_kind":"plain","required":true},"description":{"type":"string","description":"Description","description_kind":"plain","optional":true},"label":{"type":"string","description":"Label","description_kind":"plain","required":true},"options":{"type":["list","string"],"description":"Options","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Required field","description_kind":"plain","required":true}},"description":"Custom Fields","description_kind":"plain"}},"marketing_info":{"nesting_mode":"set","block":{"attributes":{"logo":{"type":"string","description":"Logo","description_kind":"plain","optional":true},"promotion":{"type":"bool","description":"Promotion","description_kind":"plain","optional":true}},"block_types":{"process_step":{"nesting_mode":"list","block":{"attributes":{"description":{"type":"string","description":"Description","description_kind":"plain","optional":true},"sub_title":{"type":"string","description":"Sub Title","description_kind":"plain","optional":true},"title":{"type":"string","description":"Title","description_kind":"plain","optional":true}},"description":"Process Step","description_kind":"plain"}}},"description":"Marketing Info","description_kind":"plain"},"max_items":1},"metros":{"nesting_mode":"list","block":{"attributes":{"code":{"type":"string","description":"Metro Code - Example SV","description_kind":"plain","optional":true},"display_name":{"type":"string","description":"Display Name","description_kind":"plain","optional":true},"ibxs":{"type":["list","string"],"description":"IBX- Equinix International Business Exchange list","description_kind":"plain","optional":true},"in_trail":{"type":"bool","description":"In Trail","description_kind":"plain","optional":true},"name":{"type":"string","description":"Metro Name","description_kind":"plain","optional":true},"seller_regions":{"type":["map","string"],"description":"Seller Regions","description_kind":"plain","optional":true}},"description":"Access point config information","description_kind":"plain"}},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain"}},"ports":{"nesting_mode":"list","block":{"attributes":{"cross_connect_id":{"type":"string","description":"Cross Connect Id","description_kind":"plain","optional":true},"seller_region":{"type":"string","description":"Seller Region","description_kind":"plain","optional":true},"seller_region_description":{"type":"string","description":"Seller Region details","description_kind":"plain","optional":true},"type":{"type":"string","description":"Colo/Port Type","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Colo/Port Uuid","description_kind":"plain","required":true}},"block_types":{"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Colo/Port Location","description_kind":"plain"},"max_items":1}},"description":"Ports","description_kind":"plain"}},"project":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource URL","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project Id","description_kind":"plain","optional":true,"computed":true}},"description":"Project information","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"virtual_devices":{"nesting_mode":"list","block":{"attributes":{"interface_uuid":{"type":"string","description":"Device Interface Uuid","description_kind":"plain","optional":true},"type":{"type":"string","description":"Virtual Device Type","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Virtual Device Uuid","description_kind":"plain","required":true}},"block_types":{"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Device Location","description_kind":"plain"},"max_items":1}},"description":"Virtual Devices","description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric Service Profile","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":{"authorization_code":{"type":"string","description":"Only used with Fabric Shared connection. Fabric uses this token to be able to give more detailed information about the Metal end of the network, when viewing resources from within Fabric.","description_kind":"plain","computed":true},"contact_email":{"type":"string","description":"The preferred email used for communication and notifications about the Equinix Fabric interconnection","description_kind":"plain","optional":true,"computed":true},"description":{"type":"string","description":"Description of the connection resource","description_kind":"plain","optional":true,"computed":true},"facility":{"type":"string","description":"Facility where the connection will be created","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","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,"computed":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":"Connection speed - Values must be in the format '\u003cnumber\u003eMbps' or '\u003cnumber\u003eGpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF.","description_kind":"plain","optional":true,"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","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, shared or shared_port_vlan","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},"vrfs":{"type":["list","string"],"description":"Only used with shared connection. VRFs to attach. Pass one VRF for Primary/Single connection and two VRFs 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. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `\"custom_data\"`, the device will be updated in-place instead of recreated.","description_kind":"plain","optional":true,"sensitive":true},"deployed_facility":{"type":"string","description":"The facility where the device is deployed","description_kind":"plain","deprecated":true,"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","deprecated":true,"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 or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached","description_kind":"plain","optional":true,"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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated.","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 specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. 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},"sos_hostname":{"type":"string","description":"The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) access to the device","description_kind":"plain","computed":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. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `\"user_data\"`, the device will be updated in-place instead of recreated.","description_kind":"plain","optional":true,"sensitive":true},"user_ssh_key_ids":{"type":["list","string"],"description":"Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. 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":{"behavior":{"nesting_mode":"list","block":{"attributes":{"allow_changes":{"type":["list","string"],"description":"List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data`","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"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":"The unique identifier for this Metal Gateway","description_kind":"plain","computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the Public or VRF IP Reservation to associate","description_kind":"plain","optional":true,"computed":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway","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}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"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,"computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","optional":true,"computed":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,"computed":true},"updated":{"type":"string","description_kind":"plain","computed":true},"website":{"type":"string","description":"Website link","description_kind":"plain","optional":true,"computed":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,"computed":true},"zip_code":{"type":"string","description":"Zip Code","description_kind":"plain","required":true}},"description":"Address information block","description_kind":"plain"}}},"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":"The unique identifier for the organization member.","description_kind":"plain","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. The `layer2` flag can be set only for bond ports.","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 (layer3 bonded mode without any vlan attached) before delete/destroy","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":"markdown","optional":true,"computed":true},"created":{"type":"string","description":"The timestamp for when the project was created","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the project. The maximum length is 80 characters","description_kind":"plain","required":true},"organization_id":{"type":"string","description":"The UUID of organization under which the project is created","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":"The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers","description_kind":"markdown","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":"Address information block","description_kind":"plain"}}},"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":"The unique identifier of the resource","description_kind":"plain","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","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","deprecated":true,"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},"termination_time":{"type":"string","description_kind":"plain","computed":true},"termintation_time":{"type":"string","description_kind":"plain","deprecated":true,"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":"The unique identifier of the resource","description_kind":"plain","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","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","deprecated":true,"optional":true,"computed":true},"id":{"type":"string","description":"The unique identifier for this Metal Vlan","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro in which to create the VLAN","description_kind":"plain","optional":true,"computed":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}},"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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which ACL template is scoped to","description_kind":"plain","optional":true,"computed":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},"cloud_init_file_id":{"type":"string","description":"Unique identifier of applied cloud init file","description_kind":"plain","optional":true},"connectivity":{"type":"string","description":"Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT","description_kind":"plain","optional":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","required":true},"diverse_device_id":{"type":"string","description":"Unique ID of an existing device","description_kind":"plain","optional":true,"computed":true},"diverse_device_name":{"type":"string","description":"Diverse Device Name of an existing device","description_kind":"plain","computed":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","optional":true,"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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which device is scoped to","description_kind":"plain","optional":true,"computed":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},"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},"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},"cloud_init_file_id":{"type":"string","description":"Unique identifier of applied cloud init file","description_kind":"plain","optional":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","optional":true,"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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which device is scoped to","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},"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":"Device link name","description_kind":"plain","required":true},"project_id":{"type":"string","description":"project_id","description_kind":"plain","optional":true,"computed":true},"redundancy_type":{"type":"string","description":"(Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID`","description_kind":"plain","optional":true},"status":{"type":"string","description":"Device link provisioning status","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"Device link subnet CIDR.","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":"Definition of one or more, inter metro connections belonging to the device link","description_kind":"plain","deprecated":true}},"metro_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},"metro_code":{"type":"string","description_kind":"plain","required":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":"Definition of one or more, inter or intra metro connections belonging to the device 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_file":{"version":0,"block":{"attributes":{"byol":{"type":"bool","description":"Boolean value that determines device licensing mode: bring your own license or subscription","description_kind":"plain","required":true},"content":{"type":"string","description":"Uploaded file content, expected to be a UTF-8 encoded string","description_kind":"plain","required":true,"sensitive":true},"device_type_code":{"type":"string","description":"Device type code","description_kind":"plain","required":true},"file_name":{"type":"string","description":"File name","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"File upload location metro code","description_kind":"plain","required":true},"process_type":{"type":"string","description":"File process type (LICENSE or CLOUD_INIT)","description_kind":"plain","required":true},"self_managed":{"type":"bool","description":"Boolean value that determines device management mode: self-managed or equinix-managed","description_kind":"plain","required":true},"status":{"type":"string","description":"File upload status","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of file resource","description_kind":"plain","computed":true}},"description":"Resource allows creation and management of Equinix Network Edge device files","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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which ssh key is scoped to","description_kind":"plain","optional":true,"computed":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},"type":{"type":"string","description":"The type of SSH key: RSA (default) or DSA","description_kind":"plain","optional":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 seller profile with a given name and / or organization","description_kind":"plain","deprecated":true}},"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","deprecated":true}},"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","deprecated":true}},"equinix_fabric_cloud_router":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_number":"number"}]],"description":"Customer account information that is associated with this Fabric Cloud Router","description_kind":"plain","computed":true},"bgp_ipv4_routes_count":{"type":"number","description":"Number of IPv4 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"bgp_ipv6_routes_count":{"type":"number","description":"Number of IPv6 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Fabric Cloud Router lifecycle change information","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this Fabric Cloud Router instance","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided Fabric Cloud Router description","description_kind":"plain","computed":true},"distinct_ipv4_prefixes_count":{"type":"number","description":"Number of distinct IPv4 routes","description_kind":"plain","computed":true},"distinct_ipv6_prefixes_count":{"type":"number","description":"Number of distinct IPv6 routes","description_kind":"plain","computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Cloud Router URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"location":{"type":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"description":"Fabric Cloud Router location","description_kind":"plain","computed":true},"name":{"type":"string","description":"Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on Fabric Cloud Router configuration or status changes","description_kind":"plain","computed":true},"order":{"type":["set",["object",{"billing_tier":"string","order_id":"string","order_number":"string","purchase_order_number":"string"}]],"description":"Order information related to this Fabric Cloud Router","description_kind":"plain","computed":true},"package":{"type":["set",["object",{"code":"string"}]],"description":"Fabric Cloud Router Package Type","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"href":"string","project_id":"string"}]],"description":"Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects","description_kind":"plain","computed":true},"state":{"type":"string","description":"Fabric Cloud Router overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the FCR type like; XF_ROUTER","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Fabric Cloud Router identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch Fabric Cloud Router for a given UUID","description_kind":"plain"}},"equinix_fabric_connection":{"version":0,"block":{"attributes":{"a_side":{"type":["set",["object",{"access_point":["set",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"authentication_key":"string","gateway":["set",["object",{"href":"string","uuid":"string"}]],"interface":["set",["object",{"id":"number","type":"string","uuid":"string"}]],"link_protocol":["set",["object",{"type":"string","vlan_c_tag":"number","vlan_s_tag":"number","vlan_tag":"number"}]],"location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"network":["set",["object",{"href":"string","uuid":"string"}]],"peering_type":"string","port":["set",["object",{"href":"string","name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"uuid":"string"}]],"profile":["set",["object",{"access_point_type_configs":["list",["object",{"type":"string","uuid":"string"}]],"description":"string","href":"string","name":"string","type":"string","uuid":"string"}]],"provider_connection_id":"string","router":["set",["object",{"href":"string","uuid":"string"}]],"seller_region":"string","type":"string","virtual_device":["set",["object",{"href":"string","name":"string","type":"string","uuid":"string"}]]}]],"additional_info":["list",["object",{"key":"string","value":"string"}]],"service_token":["set",["object",{"description":"string","href":"string","type":"string","uuid":"string"}]]}]],"description":"Requester or Customer side connection configuration object of the multi-segment connection","description_kind":"plain","computed":true},"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Customer account information that is associated with this connection","description_kind":"plain","computed":true},"additional_info":{"type":["list",["map","string"]],"description":"Connection additional information","description_kind":"plain","computed":true},"bandwidth":{"type":"number","description":"Connection bandwidth in Mbps","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided connection description","description_kind":"plain","computed":true},"direction":{"type":"string","description":"Connection directionality from the requester point of view","description_kind":"plain","computed":true},"href":{"type":"string","description":"Connection URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_remote":{"type":"bool","description":"Connection property derived from access point locations","description_kind":"plain","computed":true},"name":{"type":"string","description":"Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"equinix_status":"string","errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]],"provider_status":"string"}]],"description":"Connection type-specific operational data","description_kind":"plain","computed":true},"order":{"type":["set",["object",{"billing_tier":"string","order_id":"string","order_number":"string","purchase_order_number":"string"}]],"description":"Order details","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"href":"string","project_id":"string"}]],"description":"Project information","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"group":"string","priority":"string"}]],"description":"Connection Redundancy Configuration","description_kind":"plain","computed":true},"state":{"type":"string","description":"Connection overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned connection identifier","description_kind":"plain","required":true},"z_side":{"type":["set",["object",{"access_point":["set",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"authentication_key":"string","gateway":["set",["object",{"href":"string","uuid":"string"}]],"interface":["set",["object",{"id":"number","type":"string","uuid":"string"}]],"link_protocol":["set",["object",{"type":"string","vlan_c_tag":"number","vlan_s_tag":"number","vlan_tag":"number"}]],"location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"network":["set",["object",{"href":"string","uuid":"string"}]],"peering_type":"string","port":["set",["object",{"href":"string","name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"uuid":"string"}]],"profile":["set",["object",{"access_point_type_configs":["list",["object",{"type":"string","uuid":"string"}]],"description":"string","href":"string","name":"string","type":"string","uuid":"string"}]],"provider_connection_id":"string","router":["set",["object",{"href":"string","uuid":"string"}]],"seller_region":"string","type":"string","virtual_device":["set",["object",{"href":"string","name":"string","type":"string","uuid":"string"}]]}]],"additional_info":["list",["object",{"key":"string","value":"string"}]],"service_token":["set",["object",{"description":"string","href":"string","type":"string","uuid":"string"}]]}]],"description":"Destination or Provider side connection configuration object of the multi-segment connection","description_kind":"plain","computed":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch connection for a given UUID","description_kind":"plain"}},"equinix_fabric_network":{"version":0,"block":{"attributes":{"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Information on asset change operation","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"A permanent record of asset creation, modification, or deletion","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this network","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Network URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"location":{"type":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"description":"Fabric Network location","description_kind":"plain","computed":true},"name":{"type":"string","description":"Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on Fabric Network configuration or status changes","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"equinix_status":"string"}]],"description":"Network operation information that is associated with this Fabric Network","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"project_id":"string"}]],"description":"Fabric Network project","description_kind":"plain","computed":true},"scope":{"type":"string","description":"Fabric Network scope","description_kind":"plain","computed":true},"state":{"type":"string","description":"Fabric Network overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Supported Network types - EVPLAN, EPLAN, IPWAN","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned network identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch Fabric Network for a given UUID","description_kind":"plain"}},"equinix_fabric_port":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Customer account information that is associated with this port","description_kind":"plain","computed":true},"available_bandwidth":{"type":"number","description":"Port available bandwidth in Mbps","description_kind":"plain","computed":true},"bandwidth":{"type":"number","description":"Port bandwidth in Mbps","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures port lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"Port description","description_kind":"plain","computed":true},"device":{"type":["set",["object",{"name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]]}]],"description":"Port device","description_kind":"plain","computed":true},"encapsulation":{"type":["set",["object",{"tag_protocol_id":"string","type":"string"}]],"description":"Port encapsulation protocol","description_kind":"plain","computed":true},"href":{"type":"string","description":"Port URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"lag_enabled":{"type":"bool","description":"Port Lag","description_kind":"plain","computed":true},"location":{"type":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"description":"Port location information","description_kind":"plain","computed":true},"name":{"type":"string","description":"Port name","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"connection_count":"number","op_status_changed_at":"string","operational_status":"string"}]],"description":"Port specific operational data","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"description":"Port redundancy information","description_kind":"plain","computed":true},"service_type":{"type":"string","description":"Port service type","description_kind":"plain","computed":true},"state":{"type":"string","description":"Port state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Port type","description_kind":"plain","computed":true},"used_bandwidth":{"type":"number","description":"Port used bandwidth in Mbps","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned port identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch port by uuid","description_kind":"plain"}},"equinix_fabric_ports":{"version":0,"block":{"attributes":{"data":{"type":["list",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"available_bandwidth":"number","bandwidth":"number","change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"string","device":["set",["object",{"name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]]}]],"encapsulation":["set",["object",{"tag_protocol_id":"string","type":"string"}]],"href":"string","lag_enabled":"bool","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"name":"string","operation":["set",["object",{"connection_count":"number","op_status_changed_at":"string","operational_status":"string"}]],"redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"service_type":"string","state":"string","type":"string","used_bandwidth":"number","uuid":"string"}]],"description":"List of Ports","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"filters":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Query Parameter to Get Ports By Name","description_kind":"plain","required":true}},"description":"name","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Fabric V4 API compatible data resource that allow user to fetch port by name","description_kind":"plain"}},"equinix_fabric_routing_protocol":{"version":0,"block":{"attributes":{"bfd":{"type":["set",["object",{"enabled":"bool","interval":"string"}]],"description":"Bidirectional Forwarding Detection","description_kind":"plain","computed":true},"bgp_auth_key":{"type":"string","description":"BGP authorization key","description_kind":"plain","computed":true},"bgp_ipv4":{"type":["set",["object",{"customer_peer_ip":"string","enabled":"bool","equinix_peer_ip":"string"}]],"description":"Routing Protocol BGP IPv4","description_kind":"plain","computed":true},"bgp_ipv6":{"type":["set",["object",{"customer_peer_ip":"string","enabled":"bool","equinix_peer_ip":"string"}]],"description":"Routing Protocol BGP IPv6","description_kind":"plain","computed":true},"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Routing Protocol configuration Changes","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Routing Protocol lifecycle change information","description_kind":"plain","computed":true},"connection_uuid":{"type":"string","description":"Connection URI associated with Routing Protocol","description_kind":"plain","required":true},"customer_asn":{"type":"number","description":"Customer-provided ASN","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided Fabric Routing Protocol description","description_kind":"plain","computed":true},"direct_ipv4":{"type":["set",["object",{"equinix_iface_ip":"string"}]],"description":"Routing Protocol Direct IPv4","description_kind":"plain","computed":true},"direct_ipv6":{"type":["set",["object",{"equinix_iface_ip":"string"}]],"description":"Routing Protocol Direct IPv6","description_kind":"plain","computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Routing Protocol URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Routing Protocol name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]]}]],"description":"Routing Protocol type-specific operational data","description_kind":"plain","computed":true},"state":{"type":"string","description":"Routing Protocol overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the routing protocol type like BGP or DIRECT","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned routing protocol identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch routing protocol for a given UUID","description_kind":"plain"}},"equinix_fabric_service_profile":{"version":0,"block":{"attributes":{"access_point_type_configs":{"type":["list",["object",{"allow_bandwidth_auto_approval":"bool","allow_bandwidth_upgrade":"bool","allow_custom_bandwidth":"bool","allow_remote_connections":"bool","api_config":["set",["object",{"allow_over_subscription":"bool","api_available":"bool","bandwidth_from_api":"bool","equinix_managed_port":"bool","equinix_managed_vlan":"bool","integration_id":"string","over_subscription_limit":"number"}]],"authentication_key":["set",["object",{"description":"string","label":"string","required":"bool"}]],"bandwidth_alert_threshold":"number","connection_label":"string","connection_redundancy_required":"bool","enable_auto_generate_service_key":"bool","link_protocol_config":["set",["object",{"encapsulation":"string","encapsulation_strategy":"string","reuse_vlan_s_tag":"bool"}]],"supported_bandwidths":["list","number"],"type":"string","uuid":"string"}]],"description":"Access point config information","description_kind":"plain","computed":true},"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Service Profile Owner Account Information","description_kind":"plain","computed":true},"allowed_emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"custom_fields":{"type":["list",["object",{"capture_in_email":"bool","data_type":"string","description":"string","label":"string","options":["list","string"],"required":"bool"}]],"description":"Custom Fields","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","computed":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"marketing_info":{"type":["set",["object",{"logo":"string","process_step":["list",["object",{"description":"string","sub_title":"string","title":"string"}]],"promotion":"bool"}]],"description":"Marketing Info","description_kind":"plain","computed":true},"metros":{"type":["list",["object",{"code":"string","display_name":"string","ibxs":["list","string"],"in_trail":"bool","name":"string","seller_regions":["map","string"]}]],"description":"Access point config information","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain","computed":true},"ports":{"type":["list",["object",{"cross_connect_id":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"seller_region":"string","seller_region_description":"string","type":"string","uuid":"string"}]],"description":"Ports","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"href":"string","project_id":"string"}]],"description":"Project information","description_kind":"plain","computed":true},"self_profile":{"type":"bool","description":"Self Profile indicating if the profile is created for customer's self use","description_kind":"plain","computed":true},"state":{"type":"string","description":"Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","computed":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","required":true},"view_point":{"type":"string","description":"Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide","description_kind":"plain","computed":true},"virtual_devices":{"type":["list",["object",{"interface_uuid":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"type":"string","uuid":"string"}]],"description":"Virtual Devices","description_kind":"plain","computed":true},"visibility":{"type":"string","description":"Service profile visibility - PUBLIC, PRIVATE","description_kind":"plain","computed":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch Service Profile by UUID filter criteria","description_kind":"plain"}},"equinix_fabric_service_profiles":{"version":0,"block":{"attributes":{"data":{"type":["list",["object",{"access_point_type_configs":["list",["object",{"allow_bandwidth_auto_approval":"bool","allow_bandwidth_upgrade":"bool","allow_custom_bandwidth":"bool","allow_remote_connections":"bool","api_config":["set",["object",{"allow_over_subscription":"bool","api_available":"bool","bandwidth_from_api":"bool","equinix_managed_port":"bool","equinix_managed_vlan":"bool","integration_id":"string","over_subscription_limit":"number"}]],"authentication_key":["set",["object",{"description":"string","label":"string","required":"bool"}]],"bandwidth_alert_threshold":"number","connection_label":"string","connection_redundancy_required":"bool","enable_auto_generate_service_key":"bool","link_protocol_config":["set",["object",{"encapsulation":"string","encapsulation_strategy":"string","reuse_vlan_s_tag":"bool"}]],"supported_bandwidths":["list","number"],"type":"string","uuid":"string"}]],"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"allowed_emails":["list","string"],"change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"custom_fields":["list",["object",{"capture_in_email":"bool","data_type":"string","description":"string","label":"string","options":["list","string"],"required":"bool"}]],"description":"string","href":"string","marketing_info":["set",["object",{"logo":"string","process_step":["list",["object",{"description":"string","sub_title":"string","title":"string"}]],"promotion":"bool"}]],"metros":["list",["object",{"code":"string","display_name":"string","ibxs":["list","string"],"in_trail":"bool","name":"string","seller_regions":["map","string"]}]],"name":"string","notifications":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"ports":["list",["object",{"cross_connect_id":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"seller_region":"string","seller_region_description":"string","type":"string","uuid":"string"}]],"project":["set",["object",{"href":"string","project_id":"string"}]],"self_profile":"bool","state":"string","tags":["list","string"],"type":"string","uuid":"string","view_point":"string","virtual_devices":["list",["object",{"interface_uuid":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"type":"string","uuid":"string"}]],"visibility":"string"}]],"description":"List of Service Profiles","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"view_point":{"type":"string","description":"flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"set","block":{"attributes":{"operator":{"type":"string","description":"Possible operator to use on filters = - equal","description_kind":"plain","optional":true},"property":{"type":"string","description":"Search Criteria for Service Profile - /name, /uuid, /state, /metros/code, /visibility, /type","description_kind":"plain","optional":true},"values":{"type":["list","string"],"description":"Values","description_kind":"plain","optional":true}},"description":"Service Profile Search Filter","description_kind":"plain"},"max_items":1},"sort":{"nesting_mode":"list","block":{"attributes":{"direction":{"type":"string","description":"Priority type- DESC, ASC","description_kind":"plain","optional":true},"property":{"type":"string","description":"Search operation sort criteria /name /state /changeLog/createdDateTime /changeLog/updatedDateTime","description_kind":"plain","optional":true}},"description":"Service Profile Sort criteria for Search Request response payload","description_kind":"plain"}}},"description":"Fabric V4 API compatible data resource that allow user to fetch Service Profile by name filter criteria","description_kind":"plain"}},"equinix_metal_connection":{"version":0,"block":{"attributes":{"authorization_code":{"type":"string","description":"Only used with Fabric Shared connection. Fabric uses this token to be able to give more detailed information about the Metal end of the network, when viewing resources from within Fabric.","description_kind":"plain","computed":true},"connection_id":{"type":"string","description":"ID of the connection to lookup","description_kind":"plain","required":true},"contact_email":{"type":"string","description":"The preferred email used for communication and notifications about the Equinix Fabric interconnection","description_kind":"plain","computed":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","deprecated":true,"computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","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":"Connection speed - Values will be in the format '\u003cnumber\u003eMbps' or '\u003cnumber\u003eGpbs', for example '100Mbps`, '50Gbps', etc.","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},"vrfs":{"type":["list","string"],"description":"Attached vrfs, 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","deprecated":true,"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},"sos_hostname":{"type":"string","description":"The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) access to the device","description_kind":"plain","computed":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_devices":{"version":0,"block":{"attributes":{"devices":{"type":["list",["object",{"access_private_ipv4":"string","access_public_ipv4":"string","access_public_ipv6":"string","always_pxe":"bool","billing_cycle":"string","description":"string","device_id":"string","facility":"string","hardware_reservation_id":"string","hostname":"string","ipxe_script_url":"string","metro":"string","network":["list",["object",{"address":"string","cidr":"number","family":"number","gateway":"string","public":"bool"}]],"network_type":"string","operating_system":"string","plan":"string","ports":["list",["object",{"bonded":"bool","id":"string","mac":"string","name":"string","type":"string"}]],"project_id":"string","root_password":"string","sos_hostname":"string","ssh_key_ids":["list","string"],"state":"string","storage":"string","tags":["list","string"]}]],"description":"List of devices that match specified filters","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"The id of the organization to query for devices","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"The id of the project to query for devices","description_kind":"plain","optional":true},"search":{"type":"string","description":"Search string to filter devices by hostname, description, short_id, reservation short_id, tags, plan name, plan slug, facility code, facility name, operating system name, operating system slug, IP addresses.","description_kind":"plain","optional":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_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 list of capacity specifications by plan","description_kind":"plain"}}},"description_kind":"plain","deprecated":true}},"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":"The unique identifier of the resource","description_kind":"plain","computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the associated IP Reservation","description_kind":"plain","computed":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway","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 gateway resource","description_kind":"plain","computed":true},"vlan_id":{"type":"string","description":"UUID of the associated VLAN","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":"Facility for the reservation","description_kind":"plain","deprecated":true,"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 blocks will be listed anyway. If you omit this and metro, all the block from the project will be listed","description_kind":"plain","deprecated":true,"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 blocks 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 list of capacity specifications by plan","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":{"address":{"type":["list",["object",{"address":"string","city":"string","country":"string","state":"string","zip_code":"string"}]],"description":"Business' address","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string","description_kind":"plain","optional":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Organization","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}},"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":"The unique identifier of the resource","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the connection resource","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":"ID of project to which the connection belongs","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":"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":"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":"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","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":"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":"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","deprecated":true,"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","deprecated":true,"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","deprecated":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","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","deprecated":true,"optional":true,"computed":true},"id":{"type":"string","description":"The unique identifier for this Metal Vlan","description_kind":"plain","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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which billing account is scoped to","description_kind":"plain","optional":true,"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},"connectivity":{"type":"string","description":"Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT","description_kind":"plain","computed":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","computed":true},"diverse_device_id":{"type":"string","description":"Unique ID of an existing device","description_kind":"plain","computed":true},"diverse_device_name":{"type":"string","description":"Diverse Device Name of an existing 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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which device is scoped to","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","cloud_init_file_id":"string","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"],"project_id":"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\" in developer portal. This argument can also be specified with the `EQUINIX_API_CLIENTID` shell environment variable.","description_kind":"plain","optional":true},"client_secret":{"type":"string","description":"API Consumer secret available under \"My Apps\" in developer portal. This argument can also be specified with the `EQUINIX_API_CLIENTSECRET` shell environment variable.","description_kind":"plain","optional":true},"endpoint":{"type":"string","description":"The Equinix API base URL to point out desired environment. This argument can also be specified with the `EQUINIX_API_ENDPOINT` shell environment variable. (Defaults to `https://api.equinix.com`)","description_kind":"plain","optional":true},"max_retries":{"type":"number","description":"Maximum number of retries in case of network failure.","description_kind":"plain","optional":true},"max_retry_wait_seconds":{"type":"number","description":"Maximum number of seconds to wait before retrying a request.","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. Canceled requests may still result in provisioned resources. (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. (Default is client specific)","description_kind":"plain","optional":true},"token":{"type":"string","description":"API tokens are generated from API Consumer clients using the [OAuth2 API](https://developer.equinix.com/dev-docs/fabric/getting-started/getting-access-token#request-access-and-refresh-tokens). This argument can also be specified with the `EQUINIX_API_TOKEN` shell environment variable.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"equinix_fabric_cloud_router":{"version":0,"block":{"attributes":{"bgp_ipv4_routes_count":{"type":"number","description":"Number of IPv4 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"bgp_ipv6_routes_count":{"type":"number","description":"Number of IPv6 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Fabric Cloud Router lifecycle change information","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this Fabric Cloud Router instance","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided Fabric Cloud Router description","description_kind":"plain","optional":true},"distinct_ipv4_prefixes_count":{"type":"number","description":"Number of distinct IPv4 routes","description_kind":"plain","computed":true},"distinct_ipv6_prefixes_count":{"type":"number","description":"Number of distinct IPv6 routes","description_kind":"plain","computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Cloud Router URI information","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"state":{"type":"string","description":"Fabric Cloud Router overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the FCR type like; XF_ROUTER","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix-assigned Fabric Cloud Router identifier","description_kind":"plain","optional":true,"computed":true}},"block_types":{"account":{"nesting_mode":"set","block":{"attributes":{"account_number":{"type":"number","description":"Account Number","description_kind":"plain","optional":true,"computed":true}},"description":"Customer account information that is associated with this Fabric Cloud Router","description_kind":"plain"},"min_items":1,"max_items":1},"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Fabric Cloud Router location","description_kind":"plain"},"min_items":1,"max_items":1},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on Fabric Cloud Router configuration or status changes","description_kind":"plain"},"min_items":1},"order":{"nesting_mode":"set","block":{"attributes":{"billing_tier":{"type":"string","description":"Billing tier for connection bandwidth","description_kind":"plain","optional":true,"computed":true},"order_id":{"type":"string","description":"Order Identification","description_kind":"plain","optional":true,"computed":true},"order_number":{"type":"string","description":"Order Reference Number","description_kind":"plain","optional":true,"computed":true},"purchase_order_number":{"type":"string","description":"Purchase order number","description_kind":"plain","optional":true,"computed":true}},"description":"Order information related to this Fabric Cloud Router","description_kind":"plain"},"max_items":1},"package":{"nesting_mode":"set","block":{"attributes":{"code":{"type":"string","description":"Fabric Cloud Router package code","description_kind":"plain","required":true}},"description":"Fabric Cloud Router Package Type","description_kind":"plain"},"min_items":1,"max_items":1},"project":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource URL","description_kind":"plain","optional":true,"computed":true},"project_id":{"type":"string","description":"Project Id","description_kind":"plain","optional":true,"computed":true}},"description":"Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric Cloud Router","description_kind":"plain"}},"equinix_fabric_connection":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Customer account information that is associated with this connection","description_kind":"plain","computed":true},"additional_info":{"type":["list",["map","string"]],"description":"Connection additional information","description_kind":"plain","optional":true},"bandwidth":{"type":"number","description":"Connection bandwidth in Mbps","description_kind":"plain","required":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided connection description","description_kind":"plain","optional":true},"direction":{"type":"string","description":"Connection directionality from the requester point of view","description_kind":"plain","computed":true},"href":{"type":"string","description":"Connection URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_remote":{"type":"bool","description":"Connection property derived from access point locations","description_kind":"plain","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},"operation":{"type":["set",["object",{"equinix_status":"string","errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]],"provider_status":"string"}]],"description":"Connection type-specific operational data","description_kind":"plain","computed":true},"state":{"type":"string","description":"Connection overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix-assigned connection identifier","description_kind":"plain","computed":true}},"block_types":{"a_side":{"nesting_mode":"set","block":{"block_types":{"access_point":{"nesting_mode":"set","block":{"attributes":{"authentication_key":{"type":"string","description":"Authentication key for provider based connections","description_kind":"plain","optional":true},"peering_type":{"type":"string","description":"Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL","description_kind":"plain","optional":true},"provider_connection_id":{"type":"string","description":"Provider assigned Connection Id","description_kind":"plain","computed":true},"seller_region":{"type":"string","description":"Access point seller region","description_kind":"plain","optional":true},"type":{"type":"string","description":"Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK","description_kind":"plain","optional":true}},"block_types":{"account":{"nesting_mode":"set","block":{"attributes":{"account_name":{"type":"string","description":"Legal name of the accountholder.","description_kind":"plain","computed":true},"account_number":{"type":"number","description":"Equinix-assigned account number.","description_kind":"plain","computed":true},"global_cust_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_org_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's parent organization.","description_kind":"plain","computed":true},"org_id":{"type":"number","description":"Equinix-assigned ID of the subscriber's organization.","description_kind":"plain","computed":true},"organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's organization.","description_kind":"plain","computed":true},"ucm_id":{"type":"string","description":"Enterprise datastore id","description_kind":"plain","computed":true}},"description":"Account","description_kind":"plain"}},"gateway":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"**Deprecated** `gateway` Use `router` attribute instead","description_kind":"plain","deprecated":true},"max_items":1},"interface":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"id","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description":"Interface type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned interface identifier","description_kind":"plain","optional":true}},"description":"Virtual device interface","description_kind":"plain"},"max_items":1},"link_protocol":{"nesting_mode":"set","block":{"attributes":{"type":{"type":"string","description":"Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN","description_kind":"plain","optional":true},"vlan_c_tag":{"type":"number","description":"Vlan Customer Tag information, vlanCTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_s_tag":{"type":"number","description":"Vlan Provider Tag information, vlanSTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_tag":{"type":"number","description":"Vlan Tag information, vlanTag value specified for DOT1Q connections","description_kind":"plain","optional":true,"computed":true}},"description":"Connection link protocol","description_kind":"plain"},"max_items":1},"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Access point location","description_kind":"plain"},"max_items":1},"network":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Network identifier","description_kind":"plain","optional":true}},"description":"network access point information","description_kind":"plain"},"max_items":1},"port":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Port name","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"description":"Redundancy Information","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Port identifier","description_kind":"plain","optional":true,"computed":true}},"description":"Port access point information","description_kind":"plain"},"max_items":1},"profile":{"nesting_mode":"set","block":{"attributes":{"access_point_type_configs":{"type":["list",["object",{"type":"string","uuid":"string"}]],"description":"Access point config information","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","computed":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","computed":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","required":true}},"description":"Service Profile","description_kind":"plain"},"max_items":1},"router":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"Cloud Router access point information that replaces `gateway`","description_kind":"plain"},"max_items":1},"virtual_device":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned Virtual Device Name","description_kind":"plain","optional":true},"type":{"type":"string","description":"Virtual Device type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned Virtual Device identifier","description_kind":"plain","optional":true}},"description":"Virtual device","description_kind":"plain"},"max_items":1}},"description":"Point of access details","description_kind":"plain"},"max_items":1},"additional_info":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Additional information key","description_kind":"plain","optional":true},"value":{"type":"string","description":"Additional information value","description_kind":"plain","optional":true}},"description":"Connection side additional information","description_kind":"plain"}},"service_token":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Service token description","description_kind":"plain","computed":true},"href":{"type":"string","description":"An absolute URL that is the subject of the link's context","description_kind":"plain","computed":true},"type":{"type":"string","description":"Token type - VC_TOKEN","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned service token identifier","description_kind":"plain","optional":true}},"description":"For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets","description_kind":"plain"},"max_items":1}},"description":"Requester or Customer side connection configuration object of the multi-segment connection","description_kind":"plain"},"min_items":1,"max_items":1},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain"},"min_items":1},"order":{"nesting_mode":"set","block":{"attributes":{"billing_tier":{"type":"string","description":"Billing tier for connection bandwidth","description_kind":"plain","optional":true,"computed":true},"order_id":{"type":"string","description":"Order Identification","description_kind":"plain","optional":true,"computed":true},"order_number":{"type":"string","description":"Order Reference Number","description_kind":"plain","optional":true,"computed":true},"purchase_order_number":{"type":"string","description":"Purchase order number","description_kind":"plain","optional":true,"computed":true}},"description":"Order details","description_kind":"plain"},"max_items":1},"project":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource URL","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project Id","description_kind":"plain","optional":true,"computed":true}},"description":"Project information","description_kind":"plain"},"max_items":1},"redundancy":{"nesting_mode":"set","block":{"attributes":{"group":{"type":"string","description":"Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group)","description_kind":"plain","optional":true,"computed":true},"priority":{"type":"string","description":"Connection priority in redundancy group - PRIMARY, SECONDARY","description_kind":"plain","optional":true,"computed":true}},"description":"Connection Redundancy Configuration","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"z_side":{"nesting_mode":"set","block":{"block_types":{"access_point":{"nesting_mode":"set","block":{"attributes":{"authentication_key":{"type":"string","description":"Authentication key for provider based connections","description_kind":"plain","optional":true},"peering_type":{"type":"string","description":"Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL","description_kind":"plain","optional":true},"provider_connection_id":{"type":"string","description":"Provider assigned Connection Id","description_kind":"plain","computed":true},"seller_region":{"type":"string","description":"Access point seller region","description_kind":"plain","optional":true},"type":{"type":"string","description":"Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK","description_kind":"plain","optional":true}},"block_types":{"account":{"nesting_mode":"set","block":{"attributes":{"account_name":{"type":"string","description":"Legal name of the accountholder.","description_kind":"plain","computed":true},"account_number":{"type":"number","description":"Equinix-assigned account number.","description_kind":"plain","computed":true},"global_cust_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_org_id":{"type":"string","description":"Equinix-assigned ID of the subscriber's parent organization.","description_kind":"plain","computed":true},"global_organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's parent organization.","description_kind":"plain","computed":true},"org_id":{"type":"number","description":"Equinix-assigned ID of the subscriber's organization.","description_kind":"plain","computed":true},"organization_name":{"type":"string","description":"Equinix-assigned name of the subscriber's organization.","description_kind":"plain","computed":true},"ucm_id":{"type":"string","description":"Enterprise datastore id","description_kind":"plain","computed":true}},"description":"Account","description_kind":"plain"}},"gateway":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"**Deprecated** `gateway` Use `router` attribute instead","description_kind":"plain","deprecated":true},"max_items":1},"interface":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"number","description":"id","description_kind":"plain","optional":true,"computed":true},"type":{"type":"string","description":"Interface type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned interface identifier","description_kind":"plain","optional":true}},"description":"Virtual device interface","description_kind":"plain"},"max_items":1},"link_protocol":{"nesting_mode":"set","block":{"attributes":{"type":{"type":"string","description":"Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN","description_kind":"plain","optional":true},"vlan_c_tag":{"type":"number","description":"Vlan Customer Tag information, vlanCTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_s_tag":{"type":"number","description":"Vlan Provider Tag information, vlanSTag value specified for QINQ connections","description_kind":"plain","optional":true,"computed":true},"vlan_tag":{"type":"number","description":"Vlan Tag information, vlanTag value specified for DOT1Q connections","description_kind":"plain","optional":true,"computed":true}},"description":"Connection link protocol","description_kind":"plain"},"max_items":1},"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Access point location","description_kind":"plain"},"max_items":1},"network":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Network identifier","description_kind":"plain","optional":true}},"description":"network access point information","description_kind":"plain"},"max_items":1},"port":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Port name","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"description":"Redundancy Information","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Port identifier","description_kind":"plain","optional":true,"computed":true}},"description":"Port access point information","description_kind":"plain"},"max_items":1},"profile":{"nesting_mode":"set","block":{"attributes":{"access_point_type_configs":{"type":["list",["object",{"type":"string","uuid":"string"}]],"description":"Access point config information","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","computed":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","computed":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","required":true}},"description":"Service Profile","description_kind":"plain"},"max_items":1},"router":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned virtual gateway identifier","description_kind":"plain","optional":true}},"description":"Cloud Router access point information that replaces `gateway`","description_kind":"plain"},"max_items":1},"virtual_device":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource Identifier","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned Virtual Device Name","description_kind":"plain","optional":true},"type":{"type":"string","description":"Virtual Device type","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned Virtual Device identifier","description_kind":"plain","optional":true}},"description":"Virtual device","description_kind":"plain"},"max_items":1}},"description":"Point of access details","description_kind":"plain"},"max_items":1},"additional_info":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Additional information key","description_kind":"plain","optional":true},"value":{"type":"string","description":"Additional information value","description_kind":"plain","optional":true}},"description":"Connection side additional information","description_kind":"plain"}},"service_token":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Service token description","description_kind":"plain","computed":true},"href":{"type":"string","description":"An absolute URL that is the subject of the link's context","description_kind":"plain","computed":true},"type":{"type":"string","description":"Token type - VC_TOKEN","description_kind":"plain","optional":true},"uuid":{"type":"string","description":"Equinix-assigned service token identifier","description_kind":"plain","optional":true}},"description":"For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets","description_kind":"plain"},"max_items":1}},"description":"Destination or Provider side connection configuration object of the multi-segment connection","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection","description_kind":"plain"}},"equinix_fabric_network":{"version":0,"block":{"attributes":{"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Information on asset change operation","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"A permanent record of asset creation, modification, or deletion","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this network","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Network URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","required":true},"operation":{"type":["set",["object",{"equinix_status":"string"}]],"description":"Network operation information that is associated with this Fabric Network","description_kind":"plain","computed":true},"scope":{"type":"string","description":"Fabric Network scope","description_kind":"plain","required":true},"state":{"type":"string","description":"Fabric Network overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Supported Network types - EVPLAN, EPLAN, IPWAN","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix-assigned network identifier","description_kind":"plain","computed":true}},"block_types":{"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Fabric Network location","description_kind":"plain"},"max_items":1},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on Fabric Network configuration or status changes","description_kind":"plain"},"min_items":1},"project":{"nesting_mode":"set","block":{"attributes":{"project_id":{"type":"string","description":"Customer project identifier","description_kind":"plain","required":true}},"description":"Fabric Network project","description_kind":"plain"},"min_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric Network","description_kind":"plain"}},"equinix_fabric_routing_protocol":{"version":0,"block":{"attributes":{"bgp_auth_key":{"type":"string","description":"BGP authorization key","description_kind":"plain","optional":true,"computed":true},"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Routing Protocol configuration Changes","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Routing Protocol lifecycle change information","description_kind":"plain","computed":true},"connection_uuid":{"type":"string","description":"Connection URI associated with Routing Protocol","description_kind":"plain","required":true},"customer_asn":{"type":"number","description":"Customer-provided ASN","description_kind":"plain","optional":true,"computed":true},"description":{"type":"string","description":"Customer-provided Fabric Routing Protocol description","description_kind":"plain","optional":true,"computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Routing Protocol URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Routing Protocol name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","optional":true,"computed":true},"operation":{"type":["set",["object",{"errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]]}]],"description":"Routing Protocol type-specific operational data","description_kind":"plain","computed":true},"state":{"type":"string","description":"Routing Protocol overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the routing protocol type like BGP or DIRECT","description_kind":"plain","optional":true,"computed":true},"uuid":{"type":"string","description":"Equinix-assigned routing protocol identifier","description_kind":"plain","optional":true,"computed":true}},"block_types":{"bfd":{"nesting_mode":"set","block":{"attributes":{"enabled":{"type":"bool","description":"Bidirectional Forwarding Detection enablement","description_kind":"plain","required":true},"interval":{"type":"string","description":"Interval range between the received BFD control packets","description_kind":"plain","optional":true}},"description":"Bidirectional Forwarding Detection","description_kind":"plain"}},"bgp_ipv4":{"nesting_mode":"set","block":{"attributes":{"customer_peer_ip":{"type":"string","description":"Customer side peering ip","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Admin status for the BGP session","description_kind":"plain","optional":true},"equinix_peer_ip":{"type":"string","description":"Equinix side peering ip","description_kind":"plain","computed":true}},"description":"Routing Protocol BGP IPv4","description_kind":"plain"}},"bgp_ipv6":{"nesting_mode":"set","block":{"attributes":{"customer_peer_ip":{"type":"string","description":"Customer side peering ip","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Admin status for the BGP session","description_kind":"plain","optional":true},"equinix_peer_ip":{"type":"string","description":"Equinix side peering ip","description_kind":"plain","computed":true}},"description":"Routing Protocol BGP IPv6","description_kind":"plain"}},"direct_ipv4":{"nesting_mode":"set","block":{"attributes":{"equinix_iface_ip":{"type":"string","description":"Equinix side Interface IP address","description_kind":"plain","required":true}},"description":"Routing Protocol Direct IPv4","description_kind":"plain"}},"direct_ipv6":{"nesting_mode":"set","block":{"attributes":{"equinix_iface_ip":{"type":"string","description":"Equinix side Interface IP address\n\n","description_kind":"plain","optional":true}},"description":"Routing Protocol Direct IPv6","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection","description_kind":"plain"}},"equinix_fabric_service_profile":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Service Profile Owner Account Information","description_kind":"plain","computed":true},"allowed_emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","optional":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","required":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","required":true},"self_profile":{"type":"bool","description":"Self Profile indicating if the profile is created for customer's self use","description_kind":"plain","optional":true},"state":{"type":"string","description":"Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED","description_kind":"plain","optional":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","optional":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","computed":true},"view_point":{"type":"string","description":"Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide","description_kind":"plain","optional":true},"visibility":{"type":"string","description":"Service profile visibility - PUBLIC, PRIVATE","description_kind":"plain","optional":true}},"block_types":{"access_point_type_configs":{"nesting_mode":"list","block":{"attributes":{"allow_bandwidth_auto_approval":{"type":"bool","description":"Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller","description_kind":"plain","optional":true},"allow_bandwidth_upgrade":{"type":"bool","description":"Availability of a bandwidth upgrade. The default is false","description_kind":"plain","optional":true},"allow_custom_bandwidth":{"type":"bool","description":"Setting to enable or disable the ability of the buyer to customize the bandwidth","description_kind":"plain","optional":true},"allow_remote_connections":{"type":"bool","description":"Setting to allow or prohibit remote connections to the service profile","description_kind":"plain","optional":true},"bandwidth_alert_threshold":{"type":"number","description":"Percentage of port bandwidth at which an allocation alert is generated","description_kind":"plain","optional":true},"connection_label":{"type":"string","description":"Custom name for Connection","description_kind":"plain","optional":true},"connection_redundancy_required":{"type":"bool","description":"Mandate redundant connections","description_kind":"plain","optional":true},"enable_auto_generate_service_key":{"type":"bool","description":"Enable auto generate service key","description_kind":"plain","optional":true},"supported_bandwidths":{"type":["list","number"],"description":"Supported bandwidths","description_kind":"plain","optional":true},"type":{"type":"string","description":"Type of access point type config - VD, COLO","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Colo/Port Uuid","description_kind":"plain","computed":true}},"block_types":{"api_config":{"nesting_mode":"set","block":{"attributes":{"allow_over_subscription":{"type":"bool","description":"Setting showing that oversubscription support is available (true) or not (false). The default is false","description_kind":"plain","optional":true},"api_available":{"type":"bool","description":"Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API.","description_kind":"plain","optional":true},"bandwidth_from_api":{"type":"bool","description":"Indicates if the connection bandwidth can be obtained directly from the cloud service provider.","description_kind":"plain","optional":true},"equinix_managed_port":{"type":"bool","description":"Setting indicating that the port is managed by Equinix (true) or not (false)","description_kind":"plain","optional":true},"equinix_managed_vlan":{"type":"bool","description":"Setting indicating that the VLAN is managed by Equinix (true) or not (false)","description_kind":"plain","optional":true},"integration_id":{"type":"string","description":"A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API.","description_kind":"plain","optional":true},"over_subscription_limit":{"type":"number","description":"Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps.","description_kind":"plain","optional":true}},"description":"Api configuration details","description_kind":"plain"},"max_items":1},"authentication_key":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Description of authorization key","description_kind":"plain","optional":true},"label":{"type":"string","description":"Name of the parameter that must be provided to authorize the connection.","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Requirement to configure an authentication key.","description_kind":"plain","optional":true}},"description":"Authentication key details","description_kind":"plain"},"max_items":1},"link_protocol_config":{"nesting_mode":"set","block":{"attributes":{"encapsulation":{"type":"string","description":"Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard.","description_kind":"plain","optional":true},"encapsulation_strategy":{"type":"string","description":"Additional tagging information required by the seller profile.","description_kind":"plain","optional":true},"reuse_vlan_s_tag":{"type":"bool","description":"Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection.","description_kind":"plain","optional":true}},"description":"Link protocol configuration details","description_kind":"plain"},"max_items":1}},"description":"Access point config information","description_kind":"plain"}},"custom_fields":{"nesting_mode":"list","block":{"attributes":{"capture_in_email":{"type":"bool","description":"Required field","description_kind":"plain","optional":true},"data_type":{"type":"string","description":"Data type","description_kind":"plain","required":true},"description":{"type":"string","description":"Description","description_kind":"plain","optional":true},"label":{"type":"string","description":"Label","description_kind":"plain","required":true},"options":{"type":["list","string"],"description":"Options","description_kind":"plain","optional":true},"required":{"type":"bool","description":"Required field","description_kind":"plain","required":true}},"description":"Custom Fields","description_kind":"plain"}},"marketing_info":{"nesting_mode":"set","block":{"attributes":{"logo":{"type":"string","description":"Logo","description_kind":"plain","optional":true},"promotion":{"type":"bool","description":"Promotion","description_kind":"plain","optional":true}},"block_types":{"process_step":{"nesting_mode":"list","block":{"attributes":{"description":{"type":"string","description":"Description","description_kind":"plain","optional":true},"sub_title":{"type":"string","description":"Sub Title","description_kind":"plain","optional":true},"title":{"type":"string","description":"Title","description_kind":"plain","optional":true}},"description":"Process Step","description_kind":"plain"}}},"description":"Marketing Info","description_kind":"plain"},"max_items":1},"metros":{"nesting_mode":"list","block":{"attributes":{"code":{"type":"string","description":"Metro Code - Example SV","description_kind":"plain","optional":true},"display_name":{"type":"string","description":"Display Name","description_kind":"plain","optional":true},"ibxs":{"type":["list","string"],"description":"IBX- Equinix International Business Exchange list","description_kind":"plain","optional":true},"in_trail":{"type":"bool","description":"In Trail","description_kind":"plain","optional":true},"name":{"type":"string","description":"Metro Name","description_kind":"plain","optional":true},"seller_regions":{"type":["map","string"],"description":"Seller Regions","description_kind":"plain","optional":true}},"description":"Access point config information","description_kind":"plain"}},"notifications":{"nesting_mode":"list","block":{"attributes":{"emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","required":true},"send_interval":{"type":"string","description":"Send interval","description_kind":"plain","optional":true},"type":{"type":"string","description":"Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS","description_kind":"plain","required":true}},"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain"}},"ports":{"nesting_mode":"list","block":{"attributes":{"cross_connect_id":{"type":"string","description":"Cross Connect Id","description_kind":"plain","optional":true},"seller_region":{"type":"string","description":"Seller Region","description_kind":"plain","optional":true},"seller_region_description":{"type":"string","description":"Seller Region details","description_kind":"plain","optional":true},"type":{"type":"string","description":"Colo/Port Type","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Colo/Port Uuid","description_kind":"plain","required":true}},"block_types":{"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Colo/Port Location","description_kind":"plain"},"max_items":1}},"description":"Ports","description_kind":"plain"}},"project":{"nesting_mode":"set","block":{"attributes":{"href":{"type":"string","description":"Unique Resource URL","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"Project Id","description_kind":"plain","optional":true,"computed":true}},"description":"Project information","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},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"virtual_devices":{"nesting_mode":"list","block":{"attributes":{"interface_uuid":{"type":"string","description":"Device Interface Uuid","description_kind":"plain","optional":true},"type":{"type":"string","description":"Virtual Device Type","description_kind":"plain","required":true},"uuid":{"type":"string","description":"Virtual Device Uuid","description_kind":"plain","required":true}},"block_types":{"location":{"nesting_mode":"set","block":{"attributes":{"ibx":{"type":"string","description":"IBX Code","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"Access point metro code","description_kind":"plain","optional":true,"computed":true},"metro_name":{"type":"string","description":"Access point metro name","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description":"Access point region","description_kind":"plain","optional":true,"computed":true}},"description":"Device Location","description_kind":"plain"},"max_items":1}},"description":"Virtual Devices","description_kind":"plain"}}},"description":"Fabric V4 API compatible resource allows creation and management of Equinix Fabric Service Profile","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":{"authorization_code":{"type":"string","description":"Only used with Fabric Shared connection. Fabric uses this token to be able to give more detailed information about the Metal end of the network, when viewing resources from within Fabric.","description_kind":"plain","computed":true},"contact_email":{"type":"string","description":"The preferred email used for communication and notifications about the Equinix Fabric interconnection","description_kind":"plain","optional":true,"computed":true},"description":{"type":"string","description":"Description of the connection resource","description_kind":"plain","optional":true,"computed":true},"facility":{"type":"string","description":"Facility where the connection will be created","description_kind":"plain","deprecated":true,"optional":true,"computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","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,"computed":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_fabric_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard)","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Connection speed - Values must be in the format '\u003cnumber\u003eMbps' or '\u003cnumber\u003eGpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF.","description_kind":"plain","optional":true,"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","optional":true},"token":{"type":"string","description":"Only used with shared connection. Fabric Token required to continue the setup process with [equinix_fabric_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard)","description_kind":"plain","deprecated":true,"computed":true},"type":{"type":"string","description":"Connection type - dedicated, shared or shared_port_vlan","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},"vrfs":{"type":["list","string"],"description":"Only used with shared connection. VRFs to attach. Pass one VRF for Primary/Single connection and two VRFs 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. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `\"custom_data\"`, the device will be updated in-place instead of recreated.","description_kind":"plain","optional":true,"sensitive":true},"deployed_facility":{"type":"string","description":"The facility where the device is deployed","description_kind":"plain","deprecated":true,"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","deprecated":true,"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 or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached","description_kind":"plain","optional":true,"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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated.","description_kind":"plain","required":true},"plan":{"type":"string","description":"The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/)","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 specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. 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},"sos_hostname":{"type":"string","description":"The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) access to the device","description_kind":"plain","computed":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. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `\"user_data\"`, the device will be updated in-place instead of recreated.","description_kind":"plain","optional":true,"sensitive":true},"user_ssh_key_ids":{"type":["list","string"],"description":"Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. 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":{"behavior":{"nesting_mode":"list","block":{"attributes":{"allow_changes":{"type":["list","string"],"description":"List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data`","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"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":"Provides an Equinix Metal device resource. This can be used to create, modify, and delete devices.\n\n~\u003e **NOTE:** All arguments including the `root_password` and `user_data` will be stored in the raw state as plain-text. [Read more about sensitive data in state](https://developer.hashicorp.com/terraform/language/state/sensitive-data).","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":"The unique identifier for this Metal Gateway","description_kind":"plain","computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the Public or VRF IP Reservation to associate","description_kind":"plain","optional":true,"computed":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway","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}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"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,"computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","optional":true,"computed":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,"computed":true},"updated":{"type":"string","description_kind":"plain","computed":true},"website":{"type":"string","description":"Website link","description_kind":"plain","optional":true,"computed":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,"computed":true},"zip_code":{"type":"string","description":"Zip Code","description_kind":"plain","required":true}},"description":"Address information block","description_kind":"plain"}}},"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":"The unique identifier for the organization member.","description_kind":"plain","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. The `layer2` flag can be set only for bond ports.","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 (layer3 bonded mode without any vlan attached) before delete/destroy","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":"markdown","optional":true,"computed":true},"created":{"type":"string","description":"The timestamp for when the project was created","description_kind":"plain","computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the project. The maximum length is 80 characters","description_kind":"plain","required":true},"organization_id":{"type":"string","description":"The UUID of organization under which the project is created","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":"The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers","description_kind":"markdown","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":"Address information block","description_kind":"plain"}}},"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":"The unique identifier of the resource","description_kind":"plain","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","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","deprecated":true,"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},"termination_time":{"type":"string","description_kind":"plain","computed":true},"termintation_time":{"type":"string","description_kind":"plain","deprecated":true,"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":"The unique identifier of the resource","description_kind":"plain","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","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. Only used for dedicated connections","description_kind":"plain","optional":true,"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","optional":true,"computed":true},"customer_ipv6":{"type":"string","description":"The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet.","description_kind":"plain","optional":true,"computed":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,"computed":true},"metal_ipv6":{"type":"string","description":"The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet.","description_kind":"plain","optional":true,"computed":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,"computed":true},"nni_vnid":{"type":"number","description":"Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/","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},"subnet_ipv6":{"type":"string","description":"A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127.\n\t\t\t\t * For a /127 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 /126 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},"virtual_circuit_id":{"type":"string","description":"UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created.","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://deploy.equinix.com/developers/docs/metal/interconnections/introduction/","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the VRF to associate","description_kind":"plain","optional":true}},"description":"Use this resource to associate VLAN with a Dedicated Port from [Equinix Fabric - software-defined interconnections](https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/#associating-a-vlan-with-a-dedicated-port).\n\nSee the [Virtual Routing and Forwarding documentation](https://deploy.equinix.com/developers/docs/metal/layer2-networking/vrf/) for product details and API reference material.","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","deprecated":true,"optional":true,"computed":true},"id":{"type":"string","description":"The unique identifier for this Metal Vlan","description_kind":"plain","computed":true},"metro":{"type":"string","description":"Metro in which to create the VLAN","description_kind":"plain","optional":true,"computed":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}},"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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which ACL template is scoped to","description_kind":"plain","optional":true,"computed":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},"cloud_init_file_id":{"type":"string","description":"Unique identifier of applied cloud init file","description_kind":"plain","optional":true},"connectivity":{"type":"string","description":"Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT","description_kind":"plain","optional":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","required":true},"diverse_device_id":{"type":"string","description":"Unique ID of an existing device","description_kind":"plain","optional":true,"computed":true},"diverse_device_name":{"type":"string","description":"Diverse Device Name of an existing device","description_kind":"plain","computed":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","optional":true,"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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which device is scoped to","description_kind":"plain","optional":true,"computed":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},"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},"license_id":{"type":"string","description":"License id. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true,"sensitive":true},"license_key":{"type":"string","description":"License key. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true,"sensitive":true},"panorama_auth_key":{"type":"string","description":"Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices","description_kind":"plain","optional":true,"sensitive":true},"panorama_ip_address":{"type":"string","description":"Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices","description_kind":"plain","optional":true},"private_address":{"type":"string","description":"Private address. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true},"private_cidr_mask":{"type":"string","description":"Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true},"private_gateway":{"type":"string","description":"Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server","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},"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},"license_id":{"type":"string","description":"License id. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true,"sensitive":true},"license_key":{"type":"string","description":"License key. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true,"sensitive":true},"panorama_auth_key":{"type":"string","description":"Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices","description_kind":"plain","optional":true,"sensitive":true},"panorama_ip_address":{"type":"string","description":"Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices","description_kind":"plain","optional":true},"private_address":{"type":"string","description":"Private address. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true},"private_cidr_mask":{"type":"string","description":"Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server","description_kind":"plain","optional":true},"private_gateway":{"type":"string","description":"Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server","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},"cloud_init_file_id":{"type":"string","description":"Unique identifier of applied cloud init file","description_kind":"plain","optional":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","optional":true,"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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which device is scoped to","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},"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":"Device link name","description_kind":"plain","required":true},"project_id":{"type":"string","description":"project_id","description_kind":"plain","optional":true,"computed":true},"redundancy_type":{"type":"string","description":"(Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID`","description_kind":"plain","optional":true},"status":{"type":"string","description":"Device link provisioning status","description_kind":"plain","computed":true},"subnet":{"type":"string","description":"Device link subnet CIDR.","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":"Definition of one or more, inter metro connections belonging to the device link","description_kind":"plain","deprecated":true}},"metro_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},"metro_code":{"type":"string","description_kind":"plain","required":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":"Definition of one or more, inter or intra metro connections belonging to the device 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_file":{"version":0,"block":{"attributes":{"byol":{"type":"bool","description":"Boolean value that determines device licensing mode: bring your own license or subscription","description_kind":"plain","required":true},"content":{"type":"string","description":"Uploaded file content, expected to be a UTF-8 encoded string","description_kind":"plain","required":true,"sensitive":true},"device_type_code":{"type":"string","description":"Device type code","description_kind":"plain","required":true},"file_name":{"type":"string","description":"File name","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metro_code":{"type":"string","description":"File upload location metro code","description_kind":"plain","required":true},"process_type":{"type":"string","description":"File process type (LICENSE or CLOUD_INIT)","description_kind":"plain","required":true},"self_managed":{"type":"bool","description":"Boolean value that determines device management mode: self-managed or equinix-managed","description_kind":"plain","required":true},"status":{"type":"string","description":"File upload status","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Unique identifier of file resource","description_kind":"plain","computed":true}},"description":"Resource allows creation and management of Equinix Network Edge device files","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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which ssh key is scoped to","description_kind":"plain","optional":true,"computed":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},"type":{"type":"string","description":"The type of SSH key: RSA (default) or DSA","description_kind":"plain","optional":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_fabric_cloud_router":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_number":"number"}]],"description":"Customer account information that is associated with this Fabric Cloud Router","description_kind":"plain","computed":true},"bgp_ipv4_routes_count":{"type":"number","description":"Number of IPv4 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"bgp_ipv6_routes_count":{"type":"number","description":"Number of IPv6 BGP routes in use (including non-distinct prefixes)","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Fabric Cloud Router lifecycle change information","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this Fabric Cloud Router instance","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided Fabric Cloud Router description","description_kind":"plain","computed":true},"distinct_ipv4_prefixes_count":{"type":"number","description":"Number of distinct IPv4 routes","description_kind":"plain","computed":true},"distinct_ipv6_prefixes_count":{"type":"number","description":"Number of distinct IPv6 routes","description_kind":"plain","computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Cloud Router URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"location":{"type":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"description":"Fabric Cloud Router location","description_kind":"plain","computed":true},"name":{"type":"string","description":"Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on Fabric Cloud Router configuration or status changes","description_kind":"plain","computed":true},"order":{"type":["set",["object",{"billing_tier":"string","order_id":"string","order_number":"string","purchase_order_number":"string"}]],"description":"Order information related to this Fabric Cloud Router","description_kind":"plain","computed":true},"package":{"type":["set",["object",{"code":"string"}]],"description":"Fabric Cloud Router Package Type","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"href":"string","project_id":"string"}]],"description":"Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects","description_kind":"plain","computed":true},"state":{"type":"string","description":"Fabric Cloud Router overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the FCR type like; XF_ROUTER","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned Fabric Cloud Router identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch Fabric Cloud Router for a given UUID","description_kind":"plain"}},"equinix_fabric_cloud_routers":{"version":0,"block":{"attributes":{"data":{"type":["list",["object",{"account":["set",["object",{"account_number":"number"}]],"bgp_ipv4_routes_count":"number","bgp_ipv6_routes_count":"number","change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"connections_count":"number","description":"string","distinct_ipv4_prefixes_count":"number","distinct_ipv6_prefixes_count":"number","equinix_asn":"number","href":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"name":"string","notifications":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"order":["set",["object",{"billing_tier":"string","order_id":"string","order_number":"string","purchase_order_number":"string"}]],"package":["set",["object",{"code":"string"}]],"project":["set",["object",{"href":"string","project_id":"string"}]],"state":"string","type":"string","uuid":"string"}]],"description":"List of Cloud Routers","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"operator":{"type":"string","description":"Possible operators to use on the filter property. Can be one of the following: [= - equal, != - not equal, \u003e - greater than, \u003e= - greater than or equal to, \u003c - less than, \u003c= - less than or equal to, [NOT] BETWEEN - (not) between, [NOT] LIKE - (not) like, [NOT] IN - (not) in","description_kind":"plain","required":true},"or":{"type":"bool","description":"Boolean flag indicating whether this filter is included in the OR group. There can only be one OR group and it can have a maximum of 3 filters. The OR group only counts as 1 of the 8 possible filters","description_kind":"plain","optional":true},"property":{"type":"string","description":"The API response property which you want to filter your request on. Can be one of the following: \"/project/projectId\", \"/name\", \"/uuid\", \"/state\", \"/location/metroCode\", \"/location/metroName\", \"/package/code\", \"/*\"","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The values that you want to apply the property+operator combination to in order to filter your data search","description_kind":"plain","required":true}},"description":"Filters for the Data Source Search Request. Maximum of 8 total filters.","description_kind":"plain"},"min_items":1,"max_items":10},"pagination":{"nesting_mode":"set","block":{"attributes":{"limit":{"type":"number","description":"Number of elements to be requested per page. Number must be between 1 and 100. Default is 20","description_kind":"plain","optional":true},"offset":{"type":"number","description":"The page offset for the pagination request. Index of the first element. Default is 0.","description_kind":"plain","optional":true}},"description":"Pagination details for the Data Source Search Request","description_kind":"plain"},"max_items":1},"sort":{"nesting_mode":"list","block":{"attributes":{"direction":{"type":"string","description":"The sorting direction. Can be one of: [DESC, ASC], Defaults to DESC","description_kind":"plain","optional":true},"property":{"type":"string","description":"The property name to use in sorting. Can be one of the following: [/name, /uuid, /state, /location/metroCode, /location/metroName, /package/code, /changeLog/createdDateTime, /changeLog/updatedDateTime], Defaults to /changeLog/updatedDateTime","description_kind":"plain","optional":true}},"description":"Filters for the Data Source Search Request","description_kind":"plain"}}},"description":"Fabric V4 API compatible data resource that allow user to fetch Fabric Cloud Routers matching custom search criteria","description_kind":"plain"}},"equinix_fabric_connection":{"version":0,"block":{"attributes":{"a_side":{"type":["set",["object",{"access_point":["set",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"authentication_key":"string","gateway":["set",["object",{"href":"string","uuid":"string"}]],"interface":["set",["object",{"id":"number","type":"string","uuid":"string"}]],"link_protocol":["set",["object",{"type":"string","vlan_c_tag":"number","vlan_s_tag":"number","vlan_tag":"number"}]],"location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"network":["set",["object",{"href":"string","uuid":"string"}]],"peering_type":"string","port":["set",["object",{"href":"string","name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"uuid":"string"}]],"profile":["set",["object",{"access_point_type_configs":["list",["object",{"type":"string","uuid":"string"}]],"description":"string","href":"string","name":"string","type":"string","uuid":"string"}]],"provider_connection_id":"string","router":["set",["object",{"href":"string","uuid":"string"}]],"seller_region":"string","type":"string","virtual_device":["set",["object",{"href":"string","name":"string","type":"string","uuid":"string"}]]}]],"additional_info":["list",["object",{"key":"string","value":"string"}]],"service_token":["set",["object",{"description":"string","href":"string","type":"string","uuid":"string"}]]}]],"description":"Requester or Customer side connection configuration object of the multi-segment connection","description_kind":"plain","computed":true},"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Customer account information that is associated with this connection","description_kind":"plain","computed":true},"additional_info":{"type":["list",["map","string"]],"description":"Connection additional information","description_kind":"plain","computed":true},"bandwidth":{"type":"number","description":"Connection bandwidth in Mbps","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided connection description","description_kind":"plain","computed":true},"direction":{"type":"string","description":"Connection directionality from the requester point of view","description_kind":"plain","computed":true},"href":{"type":"string","description":"Connection URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_remote":{"type":"bool","description":"Connection property derived from access point locations","description_kind":"plain","computed":true},"name":{"type":"string","description":"Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"equinix_status":"string","errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]],"provider_status":"string"}]],"description":"Connection type-specific operational data","description_kind":"plain","computed":true},"order":{"type":["set",["object",{"billing_tier":"string","order_id":"string","order_number":"string","purchase_order_number":"string"}]],"description":"Order details","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"href":"string","project_id":"string"}]],"description":"Project information","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"group":"string","priority":"string"}]],"description":"Connection Redundancy Configuration","description_kind":"plain","computed":true},"state":{"type":"string","description":"Connection overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned connection identifier","description_kind":"plain","required":true},"z_side":{"type":["set",["object",{"access_point":["set",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"authentication_key":"string","gateway":["set",["object",{"href":"string","uuid":"string"}]],"interface":["set",["object",{"id":"number","type":"string","uuid":"string"}]],"link_protocol":["set",["object",{"type":"string","vlan_c_tag":"number","vlan_s_tag":"number","vlan_tag":"number"}]],"location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"network":["set",["object",{"href":"string","uuid":"string"}]],"peering_type":"string","port":["set",["object",{"href":"string","name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"uuid":"string"}]],"profile":["set",["object",{"access_point_type_configs":["list",["object",{"type":"string","uuid":"string"}]],"description":"string","href":"string","name":"string","type":"string","uuid":"string"}]],"provider_connection_id":"string","router":["set",["object",{"href":"string","uuid":"string"}]],"seller_region":"string","type":"string","virtual_device":["set",["object",{"href":"string","name":"string","type":"string","uuid":"string"}]]}]],"additional_info":["list",["object",{"key":"string","value":"string"}]],"service_token":["set",["object",{"description":"string","href":"string","type":"string","uuid":"string"}]]}]],"description":"Destination or Provider side connection configuration object of the multi-segment connection","description_kind":"plain","computed":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch connection for a given UUID","description_kind":"plain"}},"equinix_fabric_connections":{"version":0,"block":{"attributes":{"data":{"type":["list",["object",{"a_side":["set",["object",{"access_point":["set",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"authentication_key":"string","gateway":["set",["object",{"href":"string","uuid":"string"}]],"interface":["set",["object",{"id":"number","type":"string","uuid":"string"}]],"link_protocol":["set",["object",{"type":"string","vlan_c_tag":"number","vlan_s_tag":"number","vlan_tag":"number"}]],"location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"network":["set",["object",{"href":"string","uuid":"string"}]],"peering_type":"string","port":["set",["object",{"href":"string","name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"uuid":"string"}]],"profile":["set",["object",{"access_point_type_configs":["list",["object",{"type":"string","uuid":"string"}]],"description":"string","href":"string","name":"string","type":"string","uuid":"string"}]],"provider_connection_id":"string","router":["set",["object",{"href":"string","uuid":"string"}]],"seller_region":"string","type":"string","virtual_device":["set",["object",{"href":"string","name":"string","type":"string","uuid":"string"}]]}]],"additional_info":["list",["object",{"key":"string","value":"string"}]],"service_token":["set",["object",{"description":"string","href":"string","type":"string","uuid":"string"}]]}]],"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"additional_info":["list",["map","string"]],"bandwidth":"number","change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"string","direction":"string","href":"string","is_remote":"bool","name":"string","notifications":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"operation":["set",["object",{"equinix_status":"string","errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]],"provider_status":"string"}]],"order":["set",["object",{"billing_tier":"string","order_id":"string","order_number":"string","purchase_order_number":"string"}]],"project":["set",["object",{"href":"string","project_id":"string"}]],"redundancy":["set",["object",{"group":"string","priority":"string"}]],"state":"string","type":"string","uuid":"string","z_side":["set",["object",{"access_point":["set",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"authentication_key":"string","gateway":["set",["object",{"href":"string","uuid":"string"}]],"interface":["set",["object",{"id":"number","type":"string","uuid":"string"}]],"link_protocol":["set",["object",{"type":"string","vlan_c_tag":"number","vlan_s_tag":"number","vlan_tag":"number"}]],"location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"network":["set",["object",{"href":"string","uuid":"string"}]],"peering_type":"string","port":["set",["object",{"href":"string","name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"uuid":"string"}]],"profile":["set",["object",{"access_point_type_configs":["list",["object",{"type":"string","uuid":"string"}]],"description":"string","href":"string","name":"string","type":"string","uuid":"string"}]],"provider_connection_id":"string","router":["set",["object",{"href":"string","uuid":"string"}]],"seller_region":"string","type":"string","virtual_device":["set",["object",{"href":"string","name":"string","type":"string","uuid":"string"}]]}]],"additional_info":["list",["object",{"key":"string","value":"string"}]],"service_token":["set",["object",{"description":"string","href":"string","type":"string","uuid":"string"}]]}]]}]],"description":"List of Cloud Routers","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"outer_operator":{"type":"string","description":"Determines if the filter list will be grouped by AND or by OR. One of [AND, OR]","description_kind":"plain","required":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"group":{"type":"string","description":"Optional custom id parameter to assign this filter to an inner AND or OR group. Group id must be prefixed with AND_ or OR_. Ensure intended grouped elements have the same given id. Ungrouped filters will be placed in the filter list group by themselves.","description_kind":"plain","optional":true},"operator":{"type":"string","description":"Operators to use on your filtered field with the values given. One of [ =, !=, \u003e, \u003e=, \u003c, \u003c=, BETWEEN, NOT BETWEEN, LIKE, NOT LIKE, IN, NOT IN, IS NOT NULL, IS NULL]","description_kind":"plain","required":true},"property":{"type":"string","description":"Possible field names to use on filters. One of [/isRemote /name /uuid /type /geoScope /account/orgId /aSide/accessPoint/account/accountName /aSide/accessPoint/account/accountNumber /aSide/accessPoint/router/uuid /aSide/accessPoint/linkProtocol/vlanCTag /aSide/accessPoint/linkProtocol/vlanSTag /aSide/accessPoint/linkProtocol/vlanTagMin /aSide/accessPoint/linkProtocol/vlanTagMax /aSide/accessPoint/location/metroCode /aSide/accessPoint/location/metroName /aSide/accessPoint/name /aSide/accessPoint/port/uuid /aSide/accessPoint/port/name /aSide/accessPoint/type /aSide/accessPoint/virtualDevice/name /aSide/accessPoint/virtualDevice/uuid /aSide/serviceToken/uuid /change/status /operation/equinixStatus /operation/providerStatus /project/projectId /redundancy/group /redundancy/priority /zSide/accessPoint/account/accountName /zSide/accessPoint/authenticationKey /zSide/accessPoint/linkProtocol/vlanCTag /zSide/accessPoint/linkProtocol/vlanSTag /zSide/accessPoint/linkProtocol/vlanTagMin /zSide/accessPoint/linkProtocol/vlanTagMax /zSide/accessPoint/location/metroCode /zSide/accessPoint/location/metroName /zSide/accessPoint/name /zSide/accessPoint/port/uuid /zSide/accessPoint/network/uuid /zSide/accessPoint/port/name /zSide/accessPoint/profile/uuid /zSide/accessPoint/type /zSide/accessPoint/virtualDevice/name /zSide/accessPoint/virtualDevice/uuid /zSide/serviceToken/uuid /zSide/internetAccess/uuid *]","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The values that you want to apply the property+operator combination to in order to filter your data search","description_kind":"plain","required":true}},"description":"Filters for the Data Source Search Request","description_kind":"plain"},"min_items":1,"max_items":10},"pagination":{"nesting_mode":"set","block":{"attributes":{"limit":{"type":"number","description":"Number of elements to be requested per page. Number must be between 1 and 100. Default is 20","description_kind":"plain","optional":true},"offset":{"type":"number","description":"The page offset for the pagination request. Index of the first element. Default is 0.","description_kind":"plain","optional":true}},"description":"Pagination details for the Data Source Search Request","description_kind":"plain"},"max_items":1},"sort":{"nesting_mode":"list","block":{"attributes":{"direction":{"type":"string","description":"The sorting direction. Can be one of: [DESC, ASC], Defaults to DESC","description_kind":"plain","optional":true},"property":{"type":"string","description":"The property name to use in sorting. One of [/name /direction /aSide/accessPoint/name /aSide/accessPoint/type /aSide/accessPoint/account/accountName /aSide/accessPoint/location/metroName /aSide/accessPoint/location/metroCode /aSide/accessPoint/linkProtocol/vlanCTag /aSide/accessPoint/linkProtocol/vlanSTag /zSide/accessPoint/name /zSide/accessPoint/type /zSide/accessPoint/account/accountName /zSide/accessPoint/location/metroName /zSide/accessPoint/location/metroCode /zSide/accessPoint/linkProtocol/vlanCTag /zSide/accessPoint/linkProtocol/vlanSTag /zSide/accessPoint/authenticationKey /bandwidth /geoScope /uuid /changeLog/createdDateTime /changeLog/updatedDateTime /operation/equinixStatus /operation/providerStatus /redundancy/priority]. Defaults to /changeLog/updatedDateTime","description_kind":"plain","optional":true}},"description":"Filters for the Data Source Search Request","description_kind":"plain"}}},"description":"Fabric V4 API compatible data resource that allow user to fetch connection for a given UUID","description_kind":"plain"}},"equinix_fabric_network":{"version":0,"block":{"attributes":{"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Information on asset change operation","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"A permanent record of asset creation, modification, or deletion","description_kind":"plain","computed":true},"connections_count":{"type":"number","description":"Number of connections associated with this network","description_kind":"plain","computed":true},"href":{"type":"string","description":"Fabric Network URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"location":{"type":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"description":"Fabric Network location","description_kind":"plain","computed":true},"name":{"type":"string","description":"Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on Fabric Network configuration or status changes","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"equinix_status":"string"}]],"description":"Network operation information that is associated with this Fabric Network","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"project_id":"string"}]],"description":"Fabric Network project","description_kind":"plain","computed":true},"scope":{"type":"string","description":"Fabric Network scope","description_kind":"plain","computed":true},"state":{"type":"string","description":"Fabric Network overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Supported Network types - EVPLAN, EPLAN, IPWAN","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned network identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch Fabric Network for a given UUID","description_kind":"plain"}},"equinix_fabric_networks":{"version":0,"block":{"attributes":{"data":{"type":["list",["object",{"change":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"connections_count":"number","href":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"name":"string","notifications":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"operation":["set",["object",{"equinix_status":"string"}]],"project":["set",["object",{"project_id":"string"}]],"scope":"string","state":"string","type":"string","uuid":"string"}]],"description":"List of Cloud Routers","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"outer_operator":{"type":"string","description":"Determines if the filter list will be grouped by AND or by OR. One of [AND, OR]","description_kind":"plain","required":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"group":{"type":"string","description":"Optional custom id parameter to assign this filter to an inner AND or OR group. Group id must be prefixed with AND_ or OR_. Ensure intended grouped elements have the same given id. Ungrouped filters will be placed in the filter list group by themselves.","description_kind":"plain","optional":true},"operator":{"type":"string","description":"Operators to use on your filtered field with the values given. One of [ =, !=, \u003e, \u003e=, \u003c, \u003c=, BETWEEN, NOT BETWEEN, LIKE, NOT LIKE, ILIKE, NOT ILIKE, IN, NOT IN]","description_kind":"plain","required":true},"property":{"type":"string","description":"Possible field names to use on filters. One of [/name /uuid /scope /type /operation/equinixStatus /location/region /project/projectId /account/globalCustId /account/orgId /deletedDate /_*]","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The values that you want to apply the property+operator combination to in order to filter your data search","description_kind":"plain","required":true}},"description":"Filters for the Data Source Search Request","description_kind":"plain"},"min_items":1,"max_items":10},"pagination":{"nesting_mode":"set","block":{"attributes":{"limit":{"type":"number","description":"Number of elements to be requested per page. Number must be between 1 and 100. Default is 20","description_kind":"plain","optional":true},"offset":{"type":"number","description":"The page offset for the pagination request. Index of the first element. Default is 0.","description_kind":"plain","optional":true}},"description":"Pagination details for the Data Source Search Request","description_kind":"plain"},"max_items":1},"sort":{"nesting_mode":"list","block":{"attributes":{"direction":{"type":"string","description":"The sorting direction. Can be one of: [DESC, ASC], Defaults to DESC","description_kind":"plain","optional":true},"property":{"type":"string","description":"The property name to use in sorting. One of [/name /uuid /scope /operation/equinixStatus /location/region /changeLog/createdDateTime /changeLog/updatedDateTime]. Defaults to /changeLog/updatedDateTime","description_kind":"plain","optional":true}},"description":"Filters for the Data Source Search Request","description_kind":"plain"}}},"description":"Fabric V4 API compatible data resource that allow user to fetch Fabric Network for a given UUID","description_kind":"plain"}},"equinix_fabric_port":{"version":0,"block":{"attributes":{"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Customer account information that is associated with this port","description_kind":"plain","computed":true},"available_bandwidth":{"type":"number","description":"Port available bandwidth in Mbps","description_kind":"plain","computed":true},"bandwidth":{"type":"number","description":"Port bandwidth in Mbps","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures port lifecycle change information","description_kind":"plain","computed":true},"description":{"type":"string","description":"Port description","description_kind":"plain","computed":true},"device":{"type":["set",["object",{"name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]]}]],"description":"Port device","description_kind":"plain","computed":true},"encapsulation":{"type":["set",["object",{"tag_protocol_id":"string","type":"string"}]],"description":"Port encapsulation protocol","description_kind":"plain","computed":true},"href":{"type":"string","description":"Port URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"lag_enabled":{"type":"bool","description":"Port Lag","description_kind":"plain","computed":true},"location":{"type":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"description":"Port location information","description_kind":"plain","computed":true},"name":{"type":"string","description":"Port name","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"connection_count":"number","op_status_changed_at":"string","operational_status":"string"}]],"description":"Port specific operational data","description_kind":"plain","computed":true},"redundancy":{"type":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"description":"Port redundancy information","description_kind":"plain","computed":true},"service_type":{"type":"string","description":"Port service type","description_kind":"plain","computed":true},"state":{"type":"string","description":"Port state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Port type","description_kind":"plain","computed":true},"used_bandwidth":{"type":"number","description":"Port used bandwidth in Mbps","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned port identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch port by uuid","description_kind":"plain"}},"equinix_fabric_ports":{"version":0,"block":{"attributes":{"data":{"type":["list",["object",{"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"available_bandwidth":"number","bandwidth":"number","change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"string","device":["set",["object",{"name":"string","redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]]}]],"encapsulation":["set",["object",{"tag_protocol_id":"string","type":"string"}]],"href":"string","lag_enabled":"bool","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"name":"string","operation":["set",["object",{"connection_count":"number","op_status_changed_at":"string","operational_status":"string"}]],"redundancy":["set",["object",{"enabled":"bool","group":"string","priority":"string"}]],"service_type":"string","state":"string","type":"string","used_bandwidth":"number","uuid":"string"}]],"description":"List of Ports","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"filters":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Query Parameter to Get Ports By Name","description_kind":"plain","required":true}},"description":"name","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"Fabric V4 API compatible data resource that allow user to fetch port by name","description_kind":"plain"}},"equinix_fabric_routing_protocol":{"version":0,"block":{"attributes":{"bfd":{"type":["set",["object",{"enabled":"bool","interval":"string"}]],"description":"Bidirectional Forwarding Detection","description_kind":"plain","computed":true},"bgp_auth_key":{"type":"string","description":"BGP authorization key","description_kind":"plain","computed":true},"bgp_ipv4":{"type":["set",["object",{"customer_peer_ip":"string","enabled":"bool","equinix_peer_ip":"string"}]],"description":"Routing Protocol BGP IPv4","description_kind":"plain","computed":true},"bgp_ipv6":{"type":["set",["object",{"customer_peer_ip":"string","enabled":"bool","equinix_peer_ip":"string"}]],"description":"Routing Protocol BGP IPv6","description_kind":"plain","computed":true},"change":{"type":["set",["object",{"href":"string","type":"string","uuid":"string"}]],"description":"Routing Protocol configuration Changes","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures Routing Protocol lifecycle change information","description_kind":"plain","computed":true},"connection_uuid":{"type":"string","description":"Connection URI associated with Routing Protocol","description_kind":"plain","required":true},"customer_asn":{"type":"number","description":"Customer-provided ASN","description_kind":"plain","computed":true},"description":{"type":"string","description":"Customer-provided Fabric Routing Protocol description","description_kind":"plain","computed":true},"direct_ipv4":{"type":["set",["object",{"equinix_iface_ip":"string"}]],"description":"Routing Protocol Direct IPv4","description_kind":"plain","computed":true},"direct_ipv6":{"type":["set",["object",{"equinix_iface_ip":"string"}]],"description":"Routing Protocol Direct IPv6","description_kind":"plain","computed":true},"equinix_asn":{"type":"number","description":"Equinix ASN","description_kind":"plain","computed":true},"href":{"type":"string","description":"Routing Protocol URI information","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Routing Protocol name. An alpha-numeric 24 characters string which can include only hyphens and underscores","description_kind":"plain","computed":true},"operation":{"type":["set",["object",{"errors":["list",["object",{"additional_info":["list",["object",{"property":"string","reason":"string"}]],"correlation_id":"string","details":"string","error_code":"string","error_message":"string","help":"string"}]]}]],"description":"Routing Protocol type-specific operational data","description_kind":"plain","computed":true},"state":{"type":"string","description":"Routing Protocol overall state","description_kind":"plain","computed":true},"type":{"type":"string","description":"Defines the routing protocol type like BGP or DIRECT","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix-assigned routing protocol identifier","description_kind":"plain","required":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch routing protocol for a given UUID","description_kind":"plain"}},"equinix_fabric_service_profile":{"version":0,"block":{"attributes":{"access_point_type_configs":{"type":["list",["object",{"allow_bandwidth_auto_approval":"bool","allow_bandwidth_upgrade":"bool","allow_custom_bandwidth":"bool","allow_remote_connections":"bool","api_config":["set",["object",{"allow_over_subscription":"bool","api_available":"bool","bandwidth_from_api":"bool","equinix_managed_port":"bool","equinix_managed_vlan":"bool","integration_id":"string","over_subscription_limit":"number"}]],"authentication_key":["set",["object",{"description":"string","label":"string","required":"bool"}]],"bandwidth_alert_threshold":"number","connection_label":"string","connection_redundancy_required":"bool","enable_auto_generate_service_key":"bool","link_protocol_config":["set",["object",{"encapsulation":"string","encapsulation_strategy":"string","reuse_vlan_s_tag":"bool"}]],"supported_bandwidths":["list","number"],"type":"string","uuid":"string"}]],"description":"Access point config information","description_kind":"plain","computed":true},"account":{"type":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"description":"Service Profile Owner Account Information","description_kind":"plain","computed":true},"allowed_emails":{"type":["list","string"],"description":"Array of contact emails","description_kind":"plain","computed":true},"change_log":{"type":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"description":"Captures connection lifecycle change information","description_kind":"plain","computed":true},"custom_fields":{"type":["list",["object",{"capture_in_email":"bool","data_type":"string","description":"string","label":"string","options":["list","string"],"required":"bool"}]],"description":"Custom Fields","description_kind":"plain","computed":true},"description":{"type":"string","description":"User-provided service description","description_kind":"plain","computed":true},"href":{"type":"string","description":"Service Profile URI response attribute","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"marketing_info":{"type":["set",["object",{"logo":"string","process_step":["list",["object",{"description":"string","sub_title":"string","title":"string"}]],"promotion":"bool"}]],"description":"Marketing Info","description_kind":"plain","computed":true},"metros":{"type":["list",["object",{"code":"string","display_name":"string","ibxs":["list","string"],"in_trail":"bool","name":"string","seller_regions":["map","string"]}]],"description":"Access point config information","description_kind":"plain","computed":true},"name":{"type":"string","description":"Customer-assigned service profile name","description_kind":"plain","computed":true},"notifications":{"type":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"description":"Preferences for notifications on connection configuration or status changes","description_kind":"plain","computed":true},"ports":{"type":["list",["object",{"cross_connect_id":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"seller_region":"string","seller_region_description":"string","type":"string","uuid":"string"}]],"description":"Ports","description_kind":"plain","computed":true},"project":{"type":["set",["object",{"href":"string","project_id":"string"}]],"description":"Project information","description_kind":"plain","computed":true},"self_profile":{"type":"bool","description":"Self Profile indicating if the profile is created for customer's self use","description_kind":"plain","computed":true},"state":{"type":"string","description":"Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED","description_kind":"plain","computed":true},"tags":{"type":["list","string"],"description":"Tags attached to the connection","description_kind":"plain","computed":true},"type":{"type":"string","description":"Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"Equinix assigned service profile identifier","description_kind":"plain","required":true},"view_point":{"type":"string","description":"Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide","description_kind":"plain","computed":true},"virtual_devices":{"type":["list",["object",{"interface_uuid":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"type":"string","uuid":"string"}]],"description":"Virtual Devices","description_kind":"plain","computed":true},"visibility":{"type":"string","description":"Service profile visibility - PUBLIC, PRIVATE","description_kind":"plain","computed":true}},"description":"Fabric V4 API compatible data resource that allow user to fetch Service Profile by UUID filter criteria","description_kind":"plain"}},"equinix_fabric_service_profiles":{"version":0,"block":{"attributes":{"and_filters":{"type":"bool","description":"Optional boolean flag to indicate if the filters will be AND'd together. Defaults to false","description_kind":"plain","optional":true},"data":{"type":["list",["object",{"access_point_type_configs":["list",["object",{"allow_bandwidth_auto_approval":"bool","allow_bandwidth_upgrade":"bool","allow_custom_bandwidth":"bool","allow_remote_connections":"bool","api_config":["set",["object",{"allow_over_subscription":"bool","api_available":"bool","bandwidth_from_api":"bool","equinix_managed_port":"bool","equinix_managed_vlan":"bool","integration_id":"string","over_subscription_limit":"number"}]],"authentication_key":["set",["object",{"description":"string","label":"string","required":"bool"}]],"bandwidth_alert_threshold":"number","connection_label":"string","connection_redundancy_required":"bool","enable_auto_generate_service_key":"bool","link_protocol_config":["set",["object",{"encapsulation":"string","encapsulation_strategy":"string","reuse_vlan_s_tag":"bool"}]],"supported_bandwidths":["list","number"],"type":"string","uuid":"string"}]],"account":["set",["object",{"account_name":"string","account_number":"number","global_cust_id":"string","global_org_id":"string","global_organization_name":"string","org_id":"number","organization_name":"string","ucm_id":"string"}]],"allowed_emails":["list","string"],"change_log":["set",["object",{"created_by":"string","created_by_email":"string","created_by_full_name":"string","created_date_time":"string","deleted_by":"string","deleted_by_email":"string","deleted_by_full_name":"string","deleted_date_time":"string","updated_by":"string","updated_by_email":"string","updated_by_full_name":"string","updated_date_time":"string"}]],"custom_fields":["list",["object",{"capture_in_email":"bool","data_type":"string","description":"string","label":"string","options":["list","string"],"required":"bool"}]],"description":"string","href":"string","marketing_info":["set",["object",{"logo":"string","process_step":["list",["object",{"description":"string","sub_title":"string","title":"string"}]],"promotion":"bool"}]],"metros":["list",["object",{"code":"string","display_name":"string","ibxs":["list","string"],"in_trail":"bool","name":"string","seller_regions":["map","string"]}]],"name":"string","notifications":["list",["object",{"emails":["list","string"],"send_interval":"string","type":"string"}]],"ports":["list",["object",{"cross_connect_id":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"seller_region":"string","seller_region_description":"string","type":"string","uuid":"string"}]],"project":["set",["object",{"href":"string","project_id":"string"}]],"self_profile":"bool","state":"string","tags":["list","string"],"type":"string","uuid":"string","view_point":"string","virtual_devices":["list",["object",{"interface_uuid":"string","location":["set",["object",{"ibx":"string","metro_code":"string","metro_name":"string","region":"string"}]],"type":"string","uuid":"string"}]],"visibility":"string"}]],"description":"List of Service Profiles","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"view_point":{"type":"string","description":"flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide","description_kind":"plain","optional":true}},"block_types":{"filter":{"nesting_mode":"list","block":{"attributes":{"operator":{"type":"string","description":"Operators to use on your filtered field with the values given. One of [=]","description_kind":"plain","required":true},"property":{"type":"string","description":"Property to apply operator and values to. One of [/name /uuid /state /metros/code /visibility /type /project/projectId]","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"The values that you want to apply the property+operator combination to in order to filter your data search","description_kind":"plain","required":true}},"description":"Filters for the Data Source Search Request (If and_filters is not set to true you cannot provide more than one filter block)","description_kind":"plain"},"min_items":1,"max_items":10},"pagination":{"nesting_mode":"set","block":{"attributes":{"limit":{"type":"number","description":"Number of elements to be requested per page. Number must be between 1 and 100. Default is 20","description_kind":"plain","optional":true},"offset":{"type":"number","description":"The page offset for the pagination request. Index of the first element. Default is 0.","description_kind":"plain","optional":true}},"description":"Pagination details for the Data Source Search Request","description_kind":"plain"},"max_items":1},"sort":{"nesting_mode":"list","block":{"attributes":{"direction":{"type":"string","description":"The sorting direction. Can be one of: [DESC, ASC], Defaults to DESC","description_kind":"plain","optional":true},"property":{"type":"string","description":"The property name to use in sorting. One of [/name /uuid /state /location/metroCode /location/metroName /package/code /changeLog/createdDateTime /changeLog/updatedDateTime]. Defaults to /changeLog/updatedDateTime","description_kind":"plain","optional":true}},"description":"Filters for the Data Source Search Request","description_kind":"plain"}}},"description":"Fabric V4 API compatible data resource that allow user to fetch Service Profile by name filter criteria","description_kind":"plain"}},"equinix_metal_connection":{"version":0,"block":{"attributes":{"authorization_code":{"type":"string","description":"Only used with Fabric Shared connection. Fabric uses this token to be able to give more detailed information about the Metal end of the network, when viewing resources from within Fabric.","description_kind":"plain","computed":true},"connection_id":{"type":"string","description":"ID of the connection to lookup","description_kind":"plain","required":true},"contact_email":{"type":"string","description":"The preferred email used for communication and notifications about the Equinix Fabric interconnection","description_kind":"plain","computed":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","deprecated":true,"computed":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","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_fabric_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard)","description_kind":"plain","computed":true},"speed":{"type":"string","description":"Connection speed - Values will be in the format '\u003cnumber\u003eMbps' or '\u003cnumber\u003eGpbs', for example '100Mbps`, '50Gbps', etc.","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_fabric_connection](https://registry.terraform.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.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},"vrfs":{"type":["list","string"],"description":"Attached vrfs, 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","deprecated":true,"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},"sos_hostname":{"type":"string","description":"The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) access to the device","description_kind":"plain","computed":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":"The datasource can be used to fetch a single device.\n\nIf you need to fetch a list of devices which meet filter criteria, you can use the [equinix_metal_devices](equinix_metal_devices.md) datasource.\n\n~\u003e **Note:** All arguments including the `root_password` and `user_data` will be stored in the raw state as plain-text. [Read more about sensitive data in state](https://developer.hashicorp.com/terraform/language/state/sensitive-data).","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_devices":{"version":0,"block":{"attributes":{"devices":{"type":["list",["object",{"access_private_ipv4":"string","access_public_ipv4":"string","access_public_ipv6":"string","always_pxe":"bool","billing_cycle":"string","description":"string","device_id":"string","facility":"string","hardware_reservation_id":"string","hostname":"string","ipxe_script_url":"string","metro":"string","network":["list",["object",{"address":"string","cidr":"number","family":"number","gateway":"string","public":"bool"}]],"network_type":"string","operating_system":"string","plan":"string","ports":["list",["object",{"bonded":"bool","id":"string","mac":"string","name":"string","type":"string"}]],"project_id":"string","root_password":"string","sos_hostname":"string","ssh_key_ids":["list","string"],"state":"string","storage":"string","tags":["list","string"]}]],"description":"List of devices that match specified filters","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"The id of the organization to query for devices","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"The id of the project to query for devices","description_kind":"plain","optional":true},"search":{"type":"string","description":"Search string to filter devices by hostname, description, short_id, reservation short_id, tags, plan name, plan slug, facility code, facility name, operating system name, operating system slug, IP addresses.","description_kind":"plain","optional":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_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 list of capacity specifications by plan","description_kind":"plain"}}},"description_kind":"plain","deprecated":true}},"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":"The unique identifier of the resource","description_kind":"plain","computed":true},"ip_reservation_id":{"type":"string","description":"UUID of the associated IP Reservation","description_kind":"plain","computed":true},"private_ipv4_subnet_size":{"type":"number","description":"Size of the private IPv4 subnet to create for this gateway","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 gateway resource","description_kind":"plain","computed":true},"vlan_id":{"type":"string","description":"UUID of the associated VLAN","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":"Facility for the reservation","description_kind":"plain","deprecated":true,"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 blocks will be listed anyway. If you omit this and metro, all the block from the project will be listed","description_kind":"plain","deprecated":true,"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 blocks 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 list of capacity specifications by plan","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":{"address":{"type":["list",["object",{"address":"string","city":"string","country":"string","state":"string","zip_code":"string"}]],"description":"Business' address","description_kind":"plain","computed":true},"description":{"type":"string","description":"Description string","description_kind":"plain","optional":true},"id":{"type":"string","description":"The unique identifier of the resource","description_kind":"plain","computed":true},"logo":{"type":"string","description":"Logo URL","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Organization","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}},"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":"The unique identifier of the resource","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of the connection resource","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":"ID of project to which the connection belongs","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":"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":"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":"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","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":"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":"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","deprecated":true,"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","deprecated":true,"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","deprecated":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","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},"customer_ipv6":{"type":"string","description":"The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet.","description_kind":"plain","optional":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},"metal_ipv6":{"type":"string","description":"The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet.","description_kind":"plain","optional":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://deploy.equinix.com/developers/docs/metal/interconnections/introduction/","description_kind":"plain","computed":true},"nni_vnid":{"type":"number","description":"Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/","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},"subnet_ipv6":{"type":"string","description":"A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127.\n\t\t\t\t * For a /127 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 /126 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","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://deploy.equinix.com/developers/docs/metal/interconnections/introduction/","description_kind":"plain","computed":true},"vrf_id":{"type":"string","description":"UUID of the associated VRF","description_kind":"plain","computed":true}},"description":"Use this data source to retrieve a virtual circuit resource from [Equinix Fabric - software-defined interconnections](https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/)\n\nSee the [Virtual Routing and Forwarding documentation](https://deploy.equinix.com/developers/docs/metal/layer2-networking/vrf/) for product details and API reference material.\n","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","deprecated":true,"optional":true,"computed":true},"id":{"type":"string","description":"The unique identifier for this Metal Vlan","description_kind":"plain","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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which billing account is scoped to","description_kind":"plain","optional":true,"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","license_id":"string","license_key":"string","panorama_auth_key":"string","panorama_ip_address":"string","private_address":"string","private_cidr_mask":"string","private_gateway":"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","license_id":"string","license_key":"string","panorama_auth_key":"string","panorama_ip_address":"string","private_address":"string","private_cidr_mask":"string","private_gateway":"string","root_password":"string"}]]}]],"num_of_nodes":"number"}]],"description":"An object that has the cluster details","description_kind":"plain","computed":true},"connectivity":{"type":"string","description":"Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT","description_kind":"plain","computed":true},"core_count":{"type":"number","description":"Number of CPU cores used by device","description_kind":"plain","computed":true},"diverse_device_id":{"type":"string","description":"Unique ID of an existing device","description_kind":"plain","computed":true},"diverse_device_name":{"type":"string","description":"Diverse Device Name of an existing 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},"project_id":{"type":"string","description":"The unique identifier of Project Resource to which device is scoped to","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","cloud_init_file_id":"string","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"],"project_id":"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/go.mod b/go.mod index 17a2da3..0b6db32 100644 --- a/go.mod +++ b/go.mod @@ -3,88 +3,94 @@ module github.com/crossplane-contrib/provider-jet-equinix go 1.22.5 require ( - github.com/crossplane/crossplane-runtime v0.19.2 - github.com/crossplane/crossplane-tools v0.0.0-20220310165030-1f43fc12793e + dario.cat/mergo v1.0.0 + github.com/crossplane/crossplane-runtime v1.16.0 + github.com/crossplane/crossplane-tools v0.0.0-20240516011917-bfb5045f0903 + github.com/crossplane/upjet v1.4.0 + github.com/equinix/terraform-provider-equinix v1.39.1-0.20240719163601-ff3f466a27ce + github.com/hashicorp/terraform-json v0.22.1 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 github.com/pkg/errors v0.9.1 - github.com/upbound/upjet v0.9.0-rc.0.0.20230309200654-acc1fd691d21 gopkg.in/alecthomas/kingpin.v2 v2.2.6 - k8s.io/apimachinery v0.26.1 - k8s.io/client-go v0.26.1 - sigs.k8s.io/controller-runtime v0.14.1 - sigs.k8s.io/controller-tools v0.11.1 + k8s.io/apimachinery v0.29.1 + k8s.io/client-go v0.29.1 + sigs.k8s.io/controller-runtime v0.17.0 + sigs.k8s.io/controller-tools v0.14.0 ) require ( + github.com/ProtonMail/go-crypto v1.1.0-alpha.2 // indirect github.com/agext/levenshtein v1.2.3 // indirect + github.com/alecthomas/kingpin/v2 v2.4.0 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/antchfx/htmlquery v1.2.4 // indirect github.com/antchfx/xpath v1.2.0 // indirect - github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/armon/go-metrics v0.3.9 // indirect - github.com/armon/go-radix v1.0.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v3 v3.0.0 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/dave/jennifer v1.4.1 // indirect + github.com/cloudflare/circl v1.3.7 // indirect + github.com/dave/jennifer v1.7.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.9.0 // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/equinix/equinix-sdk-go v0.42.0 // indirect + github.com/equinix/ne-go v1.17.0 // indirect + github.com/equinix/oauth2-go v1.0.0 // indirect + github.com/equinix/rest-go v1.3.0 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.8.0 // indirect github.com/fatih/camelcase v1.0.0 // indirect - github.com/fatih/color v1.13.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-logr/zapr v1.2.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/swag v0.21.1 // indirect - github.com/gobuffalo/flect v0.3.0 // indirect + github.com/fatih/color v1.16.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-resty/resty/v2 v2.3.0 // indirect + github.com/gobuffalo/flect v1.0.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/gnostic v0.6.9 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect - github.com/hashicorp/go-hclog v1.2.1 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-plugin v1.4.4 // indirect - github.com/hashicorp/go-retryablehttp v0.6.6 // indirect - github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 // indirect - github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 // indirect - github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 // indirect - github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-plugin v1.6.0 // indirect + github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/hcl/v2 v2.14.1 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/hc-install v0.7.0 // indirect + github.com/hashicorp/hcl/v2 v2.20.1 // indirect github.com/hashicorp/logutils v1.0.0 // indirect - github.com/hashicorp/terraform-json v0.14.0 // indirect - github.com/hashicorp/terraform-plugin-go v0.14.0 // indirect - github.com/hashicorp/terraform-plugin-log v0.7.0 // indirect - github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0 // indirect - github.com/hashicorp/vault/api v1.5.0 // indirect - github.com/hashicorp/vault/sdk v0.4.1 // indirect - github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d // indirect + github.com/hashicorp/terraform-exec v0.21.0 // indirect + github.com/hashicorp/terraform-plugin-framework v1.8.0 // indirect + github.com/hashicorp/terraform-plugin-framework-timeouts v0.4.1 // indirect + github.com/hashicorp/terraform-plugin-framework-validators v0.12.0 // indirect + github.com/hashicorp/terraform-plugin-go v0.23.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect + github.com/hashicorp/terraform-plugin-testing v1.8.0 // indirect + github.com/hashicorp/terraform-registry-address v0.2.3 // indirect + github.com/hashicorp/terraform-svchost v0.1.1 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect github.com/iancoleman/strcase v0.2.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/imdario/mergo v0.3.16 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect @@ -95,49 +101,49 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/muvaf/typewriter v0.0.0-20220131201631-921e94e8e8d7 // indirect github.com/oklog/run v1.0.0 // indirect - github.com/pierrec/lz4 v2.5.2+incompatible // indirect - github.com/prometheus/client_golang v1.14.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect - github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/spf13/afero v1.9.2 // indirect - github.com/spf13/cobra v1.6.1 // indirect + github.com/packethost/packngo v0.31.0 // indirect + github.com/prometheus/client_golang v1.18.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/tmccombs/hcl2json v0.3.3 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect - github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect - github.com/vmihailenco/tagparser v0.1.1 // indirect - github.com/yuin/goldmark v1.4.13 // indirect - github.com/zclconf/go-cty v1.11.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.7.0 // indirect - go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/mod v0.9.0 // indirect + github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xhit/go-str2duration/v2 v2.1.0 // indirect + github.com/yuin/goldmark v1.7.1 // indirect + github.com/zclconf/go-cty v1.14.4 // indirect + github.com/zclconf/go-cty-yaml v1.0.3 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect + golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.6.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.56.3 // indirect - google.golang.org/protobuf v1.33.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.17.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/grpc v1.63.2 // indirect + google.golang.org/protobuf v1.34.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/square/go-jose.v2 v2.5.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.26.1 // indirect - k8s.io/apiextensions-apiserver v0.26.1 // indirect - k8s.io/component-base v0.26.1 // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect - k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + k8s.io/api v0.29.1 // indirect + k8s.io/apiextensions-apiserver v0.29.1 // indirect + k8s.io/component-base v0.29.1 // indirect + k8s.io/klog/v2 v2.110.1 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 8ef6533..290d552 100644 --- a/go.sum +++ b/go.sum @@ -1,990 +1,507 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg= +github.com/ProtonMail/go-crypto v1.1.0-alpha.2/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= +github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/kong v0.2.16/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/antchfx/htmlquery v1.2.4 h1:qLteofCMe/KGovBI6SQgmou2QNyedFUW+pE+BpeZ494= github.com/antchfx/htmlquery v1.2.4/go.mod h1:2xO6iu3EVWs7R2JYqBbp8YzG50gj/ofqs5/0VZoDZLc= github.com/antchfx/xpath v1.2.0 h1:mbwv7co+x0RwgeGAOHdrKy89GvHaGvxxBtPK0uF9Zr8= github.com/antchfx/xpath v1.2.0/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= -github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= -github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= -github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3eG1c= -github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= +github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/crossplane/crossplane-runtime v0.19.2 h1:9qBnhpqKN4x6apF2siaQ6PvgxqBXbGcKmgeD8mSIDO8= -github.com/crossplane/crossplane-runtime v0.19.2/go.mod h1:OJQ1NxtQK2ZTRmvtnQPoy8LsXsARTnVydRVDQEgIuz4= -github.com/crossplane/crossplane-tools v0.0.0-20220310165030-1f43fc12793e h1:HqLaMji3FRPwEBA5P6twPz0HbE6no0XOnByLU5O1noM= -github.com/crossplane/crossplane-tools v0.0.0-20220310165030-1f43fc12793e/go.mod h1:xFf30hwHd5n0/a0D4ZomId8nxQTTjE0Hc1j4/rWxefc= -github.com/dave/jennifer v1.4.1 h1:XyqG6cn5RQsTj3qlWQTKlRGAyrTcsk1kUmWdZBzRjDw= -github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA= +github.com/crossplane/crossplane-runtime v1.16.0 h1:lz+l0wEB3qowdTmN7t0PZkfuNSvfOoEhQrEYFbYqMow= +github.com/crossplane/crossplane-runtime v1.16.0/go.mod h1:Pz2tdGVMF6KDGzHZOkvKro0nKc8EzK0sb/nSA7pH4Dc= +github.com/crossplane/crossplane-tools v0.0.0-20240516011917-bfb5045f0903 h1:bL8QbWkmzkdK7swURaaKEFiYS8+ib4fYU74eyRpCrYg= +github.com/crossplane/crossplane-tools v0.0.0-20240516011917-bfb5045f0903/go.mod h1:cN0Y7PFGQMM8mcagXVCbeQoKtipmFWQTPZYyziCPBUI= +github.com/crossplane/upjet v1.4.0 h1:twKCU8omU7VAA7E5fpbQkqDHjVnoTb8EXqmB805Q37o= +github.com/crossplane/upjet v1.4.0/go.mod h1:3pDVtCgyBc5f2Zx4K5HEPxxhjndmOc5CHCJNpIivK/g= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/dave/jennifer v1.7.0 h1:uRbSBH9UTS64yXbh4FrMHfgfY762RD+C7bUPKODpSJE= +github.com/dave/jennifer v1.7.0/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= -github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/equinix/equinix-sdk-go v0.42.0 h1:jjgdFs0rx6nOwsu/dLh6ImopD0M1Rn7QIn9ZSMWzWUc= +github.com/equinix/equinix-sdk-go v0.42.0/go.mod h1:hEb3XLaedz7xhl/dpPIS6eOIiXNPeqNiVoyDrT6paIg= +github.com/equinix/ne-go v1.17.0 h1:+wZq0GNognpiTHTsBXtATOCphTFvnowF046NzQXj0n0= +github.com/equinix/ne-go v1.17.0/go.mod h1:eHkkxM4nbTB7DZ9X9zGnwfYnxIJWIsU3aHA+FAoZ1EI= +github.com/equinix/oauth2-go v1.0.0 h1:fHtAPGq82PdgtK5vEThs8Vwz6f7D/8SX4tE3NJu+KcU= +github.com/equinix/oauth2-go v1.0.0/go.mod h1:4pulXvUNMktJlewLPnUeJyMW52iCoF1aM+A/Z5xY1ws= +github.com/equinix/rest-go v1.3.0 h1:m38scYTOfV6N+gcrwchgVDutDffYd+QoYCMm9Jn6jyk= +github.com/equinix/rest-go v1.3.0/go.mod h1:7pjEgOdG2MZO9BGkQzSurSgVQxRfzc1enceXJS6hYDw= +github.com/equinix/terraform-provider-equinix v1.39.1-0.20240719163601-ff3f466a27ce h1:BdHJCQIAxB4Yc3ncxnZqJxvDIDNQ54cXr23gbP2njGQ= +github.com/equinix/terraform-provider-equinix v1.39.1-0.20240719163601-ff3f466a27ce/go.mod h1:zfuF8bMfkc9aOO6nkmz4kV/cKr4IxhmA2fDd2avNsU0= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro= +github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= -github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= -github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= -github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= +github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So= +github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/gobuffalo/flect v0.3.0 h1:erfPWM+K1rFNIQeRPdeEXxo8yFr/PO17lhRnS8FUrtk= -github.com/gobuffalo/flect v0.3.0/go.mod h1:5pf3aGnsvqvCj50AVni7mJJF8ICxGZ8HomberC3pXLE= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA= +github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/addlicense v0.0.0-20210428195630-6d92264d7170/go.mod h1:EMjYTRimagHs1FwlIqKyX3wAM0u3rA+McvlIIWmSamA= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= -github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/google/pprof v0.0.0-20240117000934-35fc243c5815 h1:WzfWbQz/Ze8v6l++GGbGNFZnUShVpP/0xffCPLL+ax8= +github.com/google/pprof v0.0.0-20240117000934-35fc243c5815/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= +github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= -github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.1 h1:YQsLlGDJgwhXFpucSPyVbCBviQtjlHv3jLTlp8YmtEw= -github.com/hashicorp/go-hclog v1.2.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637 h1:Ud/6/AdmJ1R7ibdS0Wo5MWPj0T1R0fkpaD087bBaW8I= +github.com/hashicorp/go-cty v1.4.1-0.20200723130312-85980079f637/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= -github.com/hashicorp/go-plugin v1.4.4 h1:NVdrSdFRt3SkZtNckJ6tog7gbpRrcbOjQi/rgF7JYWQ= -github.com/hashicorp/go-plugin v1.4.4/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= -github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= -github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= -github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= -github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-plugin v1.6.0 h1:wgd4KxHJTVGGqWBq4QPB1i5BZNEx9BR8+OFmHDmTk8A= +github.com/hashicorp/go-plugin v1.6.0/go.mod h1:lBS5MtSSBZk0SHc66KACcjjlU6WzEVP/8pwz68aMkCI= +github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= +github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/hc-install v0.7.0 h1:Uu9edVqjKQxxuD28mR5TikkKDd/p55S8vzPC1659aBk= +github.com/hashicorp/hc-install v0.7.0/go.mod h1:ELmmzZlGnEcqoUMKUuykHaPCIR1sYLYX+KSggWSKZuA= github.com/hashicorp/hcl/v2 v2.9.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg= -github.com/hashicorp/hcl/v2 v2.14.1 h1:x0BpjfZ+CYdbiz+8yZTQ+gdLO7IXvOut7Da+XJayx34= -github.com/hashicorp/hcl/v2 v2.14.1/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= +github.com/hashicorp/hcl/v2 v2.20.1 h1:M6hgdyz7HYt1UN9e61j+qKJBqR3orTWbI1HKBJEdxtc= +github.com/hashicorp/hcl/v2 v2.20.1/go.mod h1:TZDqQ4kNKCbh1iJp99FdPiUaVDDUPivbqxZulxDYqL4= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s= -github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM= -github.com/hashicorp/terraform-plugin-go v0.14.0 h1:ttnSlS8bz3ZPYbMb84DpcPhY4F5DsQtcAS7cHo8uvP4= -github.com/hashicorp/terraform-plugin-go v0.14.0/go.mod h1:2nNCBeRLaenyQEi78xrGrs9hMbulveqG/zDMQSvVJTE= -github.com/hashicorp/terraform-plugin-log v0.7.0 h1:SDxJUyT8TwN4l5b5/VkiTIaQgY6R+Y2BQ0sRZftGKQs= -github.com/hashicorp/terraform-plugin-log v0.7.0/go.mod h1:p4R1jWBXRTvL4odmEkFfDdhUjHf9zcs/BCoNHAc7IK4= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0 h1:FtCLTiTcykdsURXPt/ku7fYXm3y19nbzbZcUxHx9RbI= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.0/go.mod h1:80wf5oad1tW+oLnbXS4UTYmDCrl7BuN1Q+IA91X1a4Y= -github.com/hashicorp/vault/api v1.5.0 h1:Bp6yc2bn7CWkOrVIzFT/Qurzx528bdavF3nz590eu28= -github.com/hashicorp/vault/api v1.5.0/go.mod h1:LkMdrZnWNrFaQyYYazWVn7KshilfDidgVBq6YiTq/bM= -github.com/hashicorp/vault/sdk v0.4.1 h1:3SaHOJY687jY1fnB61PtL0cOkKItphrbLmux7T92HBo= -github.com/hashicorp/vault/sdk v0.4.1/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVWkd/RG0D2XQ= +github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg= +github.com/hashicorp/terraform-json v0.22.1 h1:xft84GZR0QzjPVWs4lRUwvTcPnegqlyS7orfb5Ltvec= +github.com/hashicorp/terraform-json v0.22.1/go.mod h1:JbWSQCLFSXFFhg42T7l9iJwdGXBYV8fmmD6o/ML4p3A= +github.com/hashicorp/terraform-plugin-framework v1.8.0 h1:P07qy8RKLcoBkCrY2RHJer5AEvJnDuXomBgou6fD8kI= +github.com/hashicorp/terraform-plugin-framework v1.8.0/go.mod h1:/CpTukO88PcL/62noU7cuyaSJ4Rsim+A/pa+3rUVufY= +github.com/hashicorp/terraform-plugin-framework-timeouts v0.4.1 h1:gm5b1kHgFFhaKFhm4h2TgvMUlNzFAtUqlcOWnWPm+9E= +github.com/hashicorp/terraform-plugin-framework-timeouts v0.4.1/go.mod h1:MsjL1sQ9L7wGwzJ5RjcI6FzEMdyoBnw+XK8ZnOvQOLY= +github.com/hashicorp/terraform-plugin-framework-validators v0.12.0 h1:HOjBuMbOEzl7snOdOoUfE2Jgeto6JOjLVQ39Ls2nksc= +github.com/hashicorp/terraform-plugin-framework-validators v0.12.0/go.mod h1:jfHGE/gzjxYz6XoUwi/aYiiKrJDeutQNUtGQXkaHklg= +github.com/hashicorp/terraform-plugin-go v0.23.0 h1:AALVuU1gD1kPb48aPQUjug9Ir/125t+AAurhqphJ2Co= +github.com/hashicorp/terraform-plugin-go v0.23.0/go.mod h1:1E3Cr9h2vMlahWMbsSEcNrOCxovCZhOOIXjFHbjc/lQ= +github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= +github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= +github.com/hashicorp/terraform-plugin-mux v0.16.0 h1:RCzXHGDYwUwwqfYYWJKBFaS3fQsWn/ZECEiW7p2023I= +github.com/hashicorp/terraform-plugin-mux v0.16.0/go.mod h1:PF79mAsPc8CpusXPfEVa4X8PtkB+ngWoiUClMrNZlYo= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 h1:kJiWGx2kiQVo97Y5IOGR4EMcZ8DtMswHhUuFibsCQQE= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0/go.mod h1:sl/UoabMc37HA6ICVMmGO+/0wofkVIRxf+BMb/dnoIg= +github.com/hashicorp/terraform-plugin-testing v1.8.0 h1:wdYIgwDk4iO933gC4S8KbKdnMQShu6BXuZQPScmHvpk= +github.com/hashicorp/terraform-plugin-testing v1.8.0/go.mod h1:o2kOgf18ADUaZGhtOl0YCkfIxg01MAiMATT2EtIHlZk= +github.com/hashicorp/terraform-registry-address v0.2.3 h1:2TAiKJ1A3MAkZlH1YI/aTVcLZRu7JseiXNRHbOAyoTI= +github.com/hashicorp/terraform-registry-address v0.2.3/go.mod h1:lFHA76T8jfQteVfT7caREqguFrW3c4MFSPhZB7HHgUM= +github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= +github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= -github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jarcoal/httpmock v1.0.6/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jarcoal/httpmock v1.0.8 h1:8kI16SoO6LQKgPE7PvQuV+YuD/inwHd7fOOe2zMbo4k= +github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= -github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/muvaf/typewriter v0.0.0-20220131201631-921e94e8e8d7 h1:CxRHKnh1YJXgNKxcos9rrKL6AcmOl1AS/fygmxFDzh4= github.com/muvaf/typewriter v0.0.0-20220131201631-921e94e8e8d7/go.mod h1:SAAdeMEiFXR8LcHffvIdiLI1w243DCH2DuHq7UrA5YQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce h1:RPclfga2SEJmgMmz2k+Mg7cowZ8yv4Trqw9UsJby758= -github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= -github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= -github.com/onsi/gomega v1.24.2/go.mod h1:gs3J10IS7Z7r7eXRoNJIrNqU4ToQukCJhFtKrWgHWnk= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= -github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/onsi/ginkgo/v2 v2.14.0 h1:vSmGj2Z5YPb9JwCWT6z6ihcUvDhuXLc3sJiqd3jMKAY= +github.com/onsi/ginkgo/v2 v2.14.0/go.mod h1:JkUdW7JkN0V6rFvsHcJ478egV3XH9NxpD27Hal/PhZw= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/packethost/packngo v0.31.0 h1:LLH90ardhULWbagBIc3I3nl2uU75io0a7AwY6hyi0S4= +github.com/packethost/packngo v0.31.0/go.mod h1:Io6VJqzkiqmIEQbpOjeIw9v8q9PfcTEq8TEY/tMQsfw= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= +github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= +github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tmccombs/hcl2json v0.3.3 h1:+DLNYqpWE0CsOQiEZu+OZm5ZBImake3wtITYxQ8uLFQ= github.com/tmccombs/hcl2json v0.3.3/go.mod h1:Y2chtz2x9bAeRTvSibVRVgbLJhLJXKlUeIvjeVdnm4w= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/upbound/upjet v0.9.0-rc.0.0.20230309200654-acc1fd691d21 h1:sAf3kEQ/J6EjE/e9WQe6N83KYQiw0DY7QNbWhymVKaw= -github.com/upbound/upjet v0.9.0-rc.0.0.20230309200654-acc1fd691d21/go.mod h1:wwCuupQRfs+SL6LGAlAHu5Z/oPffvWaBQ9Luf+7CIZ8= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.1 h1:3bajkSilaCbjdKVsKdZjZCLBNPL9pYzrCakKaf4U49U= +github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.8.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= -github.com/zclconf/go-cty v1.11.0 h1:726SxLdi2SDnjY+BStqB9J1hNp4+2WlzyXLuimibIe0= -github.com/zclconf/go-cty v1.11.0/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= +github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8= +github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b h1:FosyBZYxY34Wul7O/MSKey3txpPYyCqVO5ZyceuQJEI= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/zclconf/go-cty-yaml v1.0.3 h1:og/eOQ7lvA/WWhHGFETVWNduJM7Rjsv2RRpx1sdFMLc= +github.com/zclconf/go-cty-yaml v1.0.3/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= -gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= -google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= +google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= -k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= -k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= -k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= -k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= -k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= -k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= -k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= -k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= -k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= -k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.14.1 h1:vThDes9pzg0Y+UbCPY3Wj34CGIYPgdmspPm2GIpxpzM= -sigs.k8s.io/controller-runtime v0.14.1/go.mod h1:GaRkrY8a7UZF0kqFFbUKG7n9ICiTY5T55P1RiE3UZlU= -sigs.k8s.io/controller-tools v0.11.1 h1:blfU7DbmXuACWHfpZR645KCq8cLOc6nfkipGSGnH+Wk= -sigs.k8s.io/controller-tools v0.11.1/go.mod h1:dm4bN3Yp1ZP+hbbeSLF8zOEHsI1/bf15u3JNcgRv2TM= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +k8s.io/api v0.29.1 h1:DAjwWX/9YT7NQD4INu49ROJuZAAAP/Ijki48GUPzxqw= +k8s.io/api v0.29.1/go.mod h1:7Kl10vBRUXhnQQI8YR/R327zXC8eJ7887/+Ybta+RoQ= +k8s.io/apiextensions-apiserver v0.29.1 h1:S9xOtyk9M3Sk1tIpQMu9wXHm5O2MX6Y1kIpPMimZBZw= +k8s.io/apiextensions-apiserver v0.29.1/go.mod h1:zZECpujY5yTW58co8V2EQR4BD6A9pktVgHhvc0uLfeU= +k8s.io/apimachinery v0.29.1 h1:KY4/E6km/wLBguvCZv8cKTeOwwOBqFNjwJIdMkMbbRc= +k8s.io/apimachinery v0.29.1/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU= +k8s.io/client-go v0.29.1 h1:19B/+2NGEwnFLzt0uB5kNJnfTsbV8w6TgQRz9l7ti7A= +k8s.io/client-go v0.29.1/go.mod h1:TDG/psL9hdet0TI9mGyHJSgRkW3H9JZk2dNEUS7bRks= +k8s.io/component-base v0.29.1 h1:MUimqJPCRnnHsskTTjKD+IC1EHBbRCVyi37IoFBrkYw= +k8s.io/component-base v0.29.1/go.mod h1:fP9GFjxYrLERq1GcWWZAE3bqbNcDKDytn2srWuHTtKc= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.17.0 h1:fjJQf8Ukya+VjogLO6/bNX9HE6Y2xpsO5+fyS26ur/s= +sigs.k8s.io/controller-runtime v0.17.0/go.mod h1:+MngTvIQQQhfXtwfdGw/UOQ/aIaqsYywfCINOtwMO/s= +sigs.k8s.io/controller-tools v0.14.0 h1:rnNoCC5wSXlrNoBKKzL70LNJKIQKEzT6lloG6/LF73A= +sigs.k8s.io/controller-tools v0.14.0/go.mod h1:TV7uOtNNnnR72SpzhStvPkoS/U5ir0nMudrkrC4M9Sc= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/hack/prepare.sh b/hack/prepare.sh index fe0bf63..da98ce0 100755 --- a/hack/prepare.sh +++ b/hack/prepare.sh @@ -15,7 +15,7 @@ # limitations under the License. # Please set ProviderNameLower & ProviderNameUpper environment variables before running this script. -# See: https://github.com/upbound/upjet/blob/main/docs/generating-a-provider.md +# See: https://github.com/crossplane/upjet/blob/main/docs/generating-a-provider.md set -euo pipefail REPLACE_FILES='./* ./.github :!build/** :!go.* :!hack/prepare.sh' diff --git a/internal/clients/equinix.go b/internal/clients/equinix.go index 0c3d376..d65a6ac 100644 --- a/internal/clients/equinix.go +++ b/internal/clients/equinix.go @@ -21,11 +21,12 @@ import ( "encoding/json" "github.com/crossplane/crossplane-runtime/pkg/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/upjet/pkg/terraform" "github.com/crossplane-contrib/provider-jet-equinix/apis/v1alpha1" ) @@ -46,17 +47,37 @@ const ( keyResponseMaxPageSize = "response_max_page_size" ) +type SetupConfig struct { + NativeProviderPath *string + NativeProviderSource *string + NativeProviderVersion *string + TerraformVersion *string + DefaultScheduler terraform.ProviderScheduler + TerraformProvider *schema.Provider +} + +func prepareTerraformProviderConfiguration(creds map[string]string, pc v1alpha1.ProviderConfig) map[string]any { + config := map[string]any{} + for _, key := range []string{ + keyEndpoint, + keyRequestTimeout, + keyResponseMaxPageSize, + keyAuthToken, + keyClientID, + keyClientSecret, + } { + if creds[key] != "" { + config[key] = creds[key] + } + } + return config +} + // TerraformSetupBuilder builds Terraform a terraform.SetupFn function which // returns Terraform provider setup configuration -func TerraformSetupBuilder(version, providerSource, providerVersion string) terraform.SetupFn { +func TerraformSetupBuilder(tfProvider *schema.Provider) terraform.SetupFn { return func(ctx context.Context, client client.Client, mg resource.Managed) (terraform.Setup, error) { - ps := terraform.Setup{ - Version: version, - Requirement: terraform.ProviderRequirement{ - Source: providerSource, - Version: providerVersion, - }, - } + ps := terraform.Setup{} configRef := mg.GetProviderConfigReference() if configRef == nil { @@ -81,20 +102,7 @@ func TerraformSetupBuilder(version, providerSource, providerVersion string) terr return ps, errors.Wrap(err, errUnmarshalCredentials) } - // set credentials in Terraform provider configuration - ps.Configuration = map[string]interface{}{} - for _, key := range []string{ - keyEndpoint, - keyRequestTimeout, - keyResponseMaxPageSize, - keyAuthToken, - keyClientID, - keyClientSecret, - } { - if equinixCreds[key] != "" { - ps.Configuration[key] = equinixCreds[key] - } - } + ps.Configuration = prepareTerraformProviderConfiguration(equinixCreds, *pc) return ps, nil } } diff --git a/internal/controller/providerconfig/config.go b/internal/controller/providerconfig/config.go index 53396d7..f25f494 100644 --- a/internal/controller/providerconfig/config.go +++ b/internal/controller/providerconfig/config.go @@ -18,12 +18,11 @@ package providerconfig import ( ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/source" "github.com/crossplane/crossplane-runtime/pkg/event" "github.com/crossplane/crossplane-runtime/pkg/reconciler/providerconfig" "github.com/crossplane/crossplane-runtime/pkg/resource" - "github.com/upbound/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller" "github.com/crossplane-contrib/provider-jet-equinix/apis/v1alpha1" ) @@ -42,7 +41,7 @@ func Setup(mgr ctrl.Manager, o controller.Options) error { Named(name). WithOptions(o.ForControllerRuntime()). For(&v1alpha1.ProviderConfig{}). - Watches(&source.Kind{Type: &v1alpha1.ProviderConfigUsage{}}, &resource.EnqueueRequestForProviderConfig{}). + Watches(&v1alpha1.ProviderConfigUsage{}, &resource.EnqueueRequestForProviderConfig{}). Complete(providerconfig.NewReconciler(mgr, of, providerconfig.WithLogger(o.Logger.WithValues("controller", name)), providerconfig.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))))) diff --git a/internal/features/features.go b/internal/features/features.go index dd2d609..3f88a74 100644 --- a/internal/features/features.go +++ b/internal/features/features.go @@ -21,4 +21,9 @@ const ( // External Secret Stores. See the below design for more details. // https://github.com/crossplane/crossplane/blob/390ddd/design/design-doc-external-secret-stores.md EnableAlphaExternalSecretStores feature.Flag = "EnableAlphaExternalSecretStores" + + // EnableBetaManagementPolicies enables beta support for + // Management Policies. See the below design for more details. + // https://github.com/crossplane/crossplane/pull/3531 + EnableBetaManagementPolicies feature.Flag = "EnableBetaManagementPolicies" ) From 30135886e201b27fdffd2fb54bd355f10abea52a Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Fri, 19 Jul 2024 20:15:54 -0400 Subject: [PATCH 03/12] chore: generate package/ internal/ examples* apis/ for TF provider 2.2.0 Signed-off-by: Marques Johansson --- apis/ecx/v1alpha1/zz_generated.deepcopy.go | 1306 ----- apis/ecx/v1alpha1/zz_generated.managed.go | 218 - apis/ecx/v1alpha1/zz_generated.managedlist.go | 47 - apis/ecx/v1alpha1/zz_generated.resolvers.go | 51 - apis/ecx/v1alpha1/zz_generated_terraformed.go | 248 - apis/ecx/v1alpha1/zz_groupversion_info.go | 44 - apis/ecx/v1alpha1/zz_l2connection_types.go | 482 -- .../v1alpha1/zz_l2connectionaccepter_types.go | 108 - .../ecx/v1alpha1/zz_l2serviceprofile_types.go | 300 -- .../v1alpha1/zz_cloudrouter_terraformed.go | 141 + apis/fabric/v1alpha1/zz_cloudrouter_types.go | 343 +- .../v1alpha1/zz_connection_terraformed.go | 141 + apis/fabric/v1alpha1/zz_connection_types.go | 1183 ++++- .../v1alpha1/zz_generated.conversion_hubs.go | 34 + apis/fabric/v1alpha1/zz_generated.deepcopy.go | 4592 +++++++++++++++-- apis/fabric/v1alpha1/zz_generated.managed.go | 130 +- .../v1alpha1/zz_generated_terraformed.go | 396 -- .../fabric/v1alpha1/zz_network_terraformed.go | 141 + apis/fabric/v1alpha1/zz_network_types.go | 227 +- .../zz_routingprotocol_terraformed.go | 141 + .../v1alpha1/zz_routingprotocol_types.go | 182 +- .../v1alpha1/zz_serviceprofile_terraformed.go | 141 + .../v1alpha1/zz_serviceprofile_types.go | 880 +++- .../v1alpha1/zz_bgpsession_terraformed.go | 141 + apis/metal/v1alpha1/zz_bgpsession_types.go | 63 +- .../v1alpha1/zz_connection_terraformed.go | 141 + apis/metal/v1alpha1/zz_connection_types.go | 198 +- apis/metal/v1alpha1/zz_device_terraformed.go | 143 + apis/metal/v1alpha1/zz_device_types.go | 454 +- .../zz_devicenetworktype_terraformed.go | 141 + .../v1alpha1/zz_devicenetworktype_types.go | 51 +- apis/metal/v1alpha1/zz_gateway_terraformed.go | 141 + apis/metal/v1alpha1/zz_gateway_types.go | 90 +- .../v1alpha1/zz_generated.conversion_hubs.go | 79 + apis/metal/v1alpha1/zz_generated.deepcopy.go | 2867 ++++++++-- apis/metal/v1alpha1/zz_generated.managed.go | 520 +- apis/metal/v1alpha1/zz_generated.resolvers.go | 579 --- .../v1alpha1/zz_generated_terraformed.go | 1508 ------ .../v1alpha1/zz_ipattachment_terraformed.go | 141 + apis/metal/v1alpha1/zz_ipattachment_types.go | 53 +- .../v1alpha1/zz_organization_terraformed.go | 141 + apis/metal/v1alpha1/zz_organization_types.go | 130 +- .../zz_organizationmember_terraformed.go | 141 + .../v1alpha1/zz_organizationmember_types.go | 94 +- apis/metal/v1alpha1/zz_port_terraformed.go | 141 + apis/metal/v1alpha1/zz_port_types.go | 90 +- .../zz_portvlanattachment_terraformed.go | 141 + .../v1alpha1/zz_portvlanattachment_types.go | 74 +- apis/metal/v1alpha1/zz_project_terraformed.go | 141 + apis/metal/v1alpha1/zz_project_types.go | 112 +- .../v1alpha1/zz_projectapikey_terraformed.go | 141 + apis/metal/v1alpha1/zz_projectapikey_types.go | 66 +- .../v1alpha1/zz_projectsshkey_terraformed.go | 141 + apis/metal/v1alpha1/zz_projectsshkey_types.go | 67 +- .../zz_reservedipblock_terraformed.go | 141 + .../v1alpha1/zz_reservedipblock_types.go | 151 +- .../zz_spotmarketrequest_terraformed.go | 141 + .../v1alpha1/zz_spotmarketrequest_types.go | 197 +- apis/metal/v1alpha1/zz_sshkey_terraformed.go | 141 + apis/metal/v1alpha1/zz_sshkey_types.go | 52 +- .../v1alpha1/zz_userapikey_terraformed.go | 141 + apis/metal/v1alpha1/zz_userapikey_types.go | 48 +- .../v1alpha1/zz_virtualcircuit_terraformed.go | 141 + .../metal/v1alpha1/zz_virtualcircuit_types.go | 300 +- apis/metal/v1alpha1/zz_vlan_terraformed.go | 141 + apis/metal/v1alpha1/zz_vlan_types.go | 73 +- apis/metal/v1alpha1/zz_vrf_terraformed.go | 141 + apis/metal/v1alpha1/zz_vrf_types.go | 95 +- .../v1alpha1/zz_acltemplate_terraformed.go | 141 + apis/network/v1alpha1/zz_acltemplate_types.go | 151 +- apis/network/v1alpha1/zz_bgp_terraformed.go | 141 + apis/network/v1alpha1/zz_bgp_types.go | 104 +- .../network/v1alpha1/zz_device_terraformed.go | 141 + apis/network/v1alpha1/zz_device_types.go | 939 +++- .../v1alpha1/zz_devicelink_terraformed.go | 141 + apis/network/v1alpha1/zz_devicelink_types.go | 260 +- apis/network/v1alpha1/zz_file_terraformed.go | 141 + apis/network/v1alpha1/zz_file_types.go | 115 +- .../v1alpha1/zz_generated.conversion_hubs.go | 40 + .../network/v1alpha1/zz_generated.deepcopy.go | 2039 +++++++- apis/network/v1alpha1/zz_generated.managed.go | 182 +- .../v1alpha1/zz_generated_terraformed.go | 544 -- .../network/v1alpha1/zz_sshkey_terraformed.go | 141 + apis/network/v1alpha1/zz_sshkey_types.go | 71 +- .../v1alpha1/zz_sshuser_terraformed.go | 141 + apis/network/v1alpha1/zz_sshuser_types.go | 60 +- apis/v1alpha1/zz_generated.deepcopy.go | 1 - apis/zz_register.go | 4 +- examples-generated/ecx/l2connection.yaml | 28 - .../ecx/l2connectionaccepter.yaml | 14 - examples-generated/ecx/l2serviceprofile.yaml | 44 - .../fabric/v1alpha1/cloudrouter.yaml | 27 + .../fabric/v1alpha1/connection.yaml | 38 + .../fabric/v1alpha1/network.yaml | 20 + .../fabric/v1alpha1/serviceprofile.yaml | 35 + .../metal/{ => v1alpha1}/bgpsession.yaml | 15 +- .../metal/{ => v1alpha1}/connection.yaml | 29 +- .../metal/{ => v1alpha1}/device.yaml | 7 +- .../metal/{ => v1alpha1}/gateway.yaml | 15 +- .../metal/{ => v1alpha1}/ipattachment.yaml | 11 +- .../metal/{ => v1alpha1}/organization.yaml | 3 - .../{ => v1alpha1}/organizationmember.yaml | 7 +- .../metal/{ => v1alpha1}/project.yaml | 3 - .../metal/{ => v1alpha1}/projectapikey.yaml | 7 +- .../metal/{ => v1alpha1}/projectsshkey.yaml | 11 +- .../metal/{ => v1alpha1}/reservedipblock.yaml | 7 +- .../{ => v1alpha1}/spotmarketrequest.yaml | 7 +- .../metal/{ => v1alpha1}/sshkey.yaml | 7 +- .../metal/{ => v1alpha1}/userapikey.yaml | 3 - .../metal/{ => v1alpha1}/virtualcircuit.yaml | 19 +- .../metal/{ => v1alpha1}/vlan.yaml | 7 +- .../metal/{ => v1alpha1}/vrf.yaml | 7 +- .../network/{ => v1alpha1}/acltemplate.yaml | 3 - .../network/{ => v1alpha1}/bgp.yaml | 3 - .../network/{ => v1alpha1}/device.yaml | 3 - .../network/{ => v1alpha1}/devicelink.yaml | 3 - .../network/{ => v1alpha1}/file.yaml | 3 - .../network/{ => v1alpha1}/sshkey.yaml | 3 - .../network/{ => v1alpha1}/sshuser.yaml | 3 - examples/ecx/l2connection.yaml | 18 - .../ecx/l2connection/zz_controller.go | 63 - .../ecx/l2connectionaccepter/zz_controller.go | 63 - .../ecx/l2serviceprofile/zz_controller.go | 63 - .../fabric/cloudrouter/zz_controller.go | 56 +- .../fabric/connection/zz_controller.go | 56 +- .../fabric/network/zz_controller.go | 56 +- .../fabric/routingprotocol/zz_controller.go | 56 +- .../fabric/serviceprofile/zz_controller.go | 56 +- .../metal/bgpsession/zz_controller.go | 56 +- .../metal/connection/zz_controller.go | 56 +- .../controller/metal/device/zz_controller.go | 56 +- .../metal/devicenetworktype/zz_controller.go | 56 +- .../controller/metal/gateway/zz_controller.go | 56 +- .../metal/ipattachment/zz_controller.go | 56 +- .../metal/organization/zz_controller.go | 56 +- .../metal/organizationmember/zz_controller.go | 56 +- .../controller/metal/port/zz_controller.go | 56 +- .../metal/portvlanattachment/zz_controller.go | 56 +- .../controller/metal/project/zz_controller.go | 56 +- .../metal/projectapikey/zz_controller.go | 56 +- .../metal/projectsshkey/zz_controller.go | 56 +- .../metal/reservedipblock/zz_controller.go | 56 +- .../metal/spotmarketrequest/zz_controller.go | 56 +- .../controller/metal/sshkey/zz_controller.go | 56 +- .../metal/userapikey/zz_controller.go | 56 +- .../metal/virtualcircuit/zz_controller.go | 56 +- .../controller/metal/vlan/zz_controller.go | 56 +- .../controller/metal/vrf/zz_controller.go | 56 +- .../network/acltemplate/zz_controller.go | 56 +- .../controller/network/bgp/zz_controller.go | 56 +- .../network/device/zz_controller.go | 56 +- .../network/devicelink/zz_controller.go | 56 +- .../controller/network/file/zz_controller.go | 56 +- .../network/sshkey/zz_controller.go | 56 +- .../network/sshuser/zz_controller.go | 56 +- internal/controller/zz_setup.go | 22 +- ...t.crossplane.io_l2connectionaccepters.yaml | 342 -- ...uinix.jet.crossplane.io_l2connections.yaml | 761 --- ...x.jet.crossplane.io_l2serviceprofiles.yaml | 510 -- ...nix.jet.crossplane.io_providerconfigs.yaml | 60 +- ...et.crossplane.io_providerconfigusages.yaml | 38 +- ...quinix.jet.crossplane.io_storeconfigs.yaml | 237 +- ...quinix.jet.crossplane.io_cloudrouters.yaml | 748 ++- ...equinix.jet.crossplane.io_connections.yaml | 2188 ++++++-- ...ic.equinix.jet.crossplane.io_networks.yaml | 546 +- ...ix.jet.crossplane.io_routingprotocols.yaml | 400 +- ...nix.jet.crossplane.io_serviceprofiles.yaml | 1625 +++++- ...equinix.jet.crossplane.io_bgpsessions.yaml | 377 +- ...equinix.jet.crossplane.io_connections.yaml | 690 +-- ....jet.crossplane.io_devicenetworktypes.yaml | 345 +- ...tal.equinix.jet.crossplane.io_devices.yaml | 1047 ++-- ...al.equinix.jet.crossplane.io_gateways.yaml | 541 +- ...uinix.jet.crossplane.io_ipattachments.yaml | 367 +- ...jet.crossplane.io_organizationmembers.yaml | 462 +- ...uinix.jet.crossplane.io_organizations.yaml | 418 +- ...metal.equinix.jet.crossplane.io_ports.yaml | 392 +- ...jet.crossplane.io_portvlanattachments.yaml | 374 +- ...inix.jet.crossplane.io_projectapikeys.yaml | 366 +- ...al.equinix.jet.crossplane.io_projects.yaml | 484 +- ...inix.jet.crossplane.io_projectsshkeys.yaml | 394 +- ...ix.jet.crossplane.io_reservedipblocks.yaml | 622 +-- ....jet.crossplane.io_spotmarketrequests.yaml | 558 +- ...tal.equinix.jet.crossplane.io_sshkeys.yaml | 303 +- ...equinix.jet.crossplane.io_userapikeys.yaml | 281 +- ...nix.jet.crossplane.io_virtualcircuits.yaml | 889 ++-- ...metal.equinix.jet.crossplane.io_vlans.yaml | 397 +- ...metal.equinix.jet.crossplane.io_vrves.yaml | 430 +- ...quinix.jet.crossplane.io_acltemplates.yaml | 463 +- ...etwork.equinix.jet.crossplane.io_bgps.yaml | 387 +- ...equinix.jet.crossplane.io_devicelinks.yaml | 604 ++- ...ork.equinix.jet.crossplane.io_devices.yaml | 2097 ++++++-- ...twork.equinix.jet.crossplane.io_files.yaml | 400 +- ...ork.equinix.jet.crossplane.io_sshkeys.yaml | 325 +- ...rk.equinix.jet.crossplane.io_sshusers.yaml | 318 +- 194 files changed, 34624 insertions(+), 17381 deletions(-) delete mode 100644 apis/ecx/v1alpha1/zz_generated.deepcopy.go delete mode 100644 apis/ecx/v1alpha1/zz_generated.managed.go delete mode 100644 apis/ecx/v1alpha1/zz_generated.managedlist.go delete mode 100644 apis/ecx/v1alpha1/zz_generated.resolvers.go delete mode 100755 apis/ecx/v1alpha1/zz_generated_terraformed.go delete mode 100755 apis/ecx/v1alpha1/zz_groupversion_info.go delete mode 100755 apis/ecx/v1alpha1/zz_l2connection_types.go delete mode 100755 apis/ecx/v1alpha1/zz_l2connectionaccepter_types.go delete mode 100755 apis/ecx/v1alpha1/zz_l2serviceprofile_types.go create mode 100755 apis/fabric/v1alpha1/zz_cloudrouter_terraformed.go create mode 100755 apis/fabric/v1alpha1/zz_connection_terraformed.go create mode 100755 apis/fabric/v1alpha1/zz_generated.conversion_hubs.go delete mode 100755 apis/fabric/v1alpha1/zz_generated_terraformed.go create mode 100755 apis/fabric/v1alpha1/zz_network_terraformed.go create mode 100755 apis/fabric/v1alpha1/zz_routingprotocol_terraformed.go create mode 100755 apis/fabric/v1alpha1/zz_serviceprofile_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_bgpsession_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_connection_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_device_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_devicenetworktype_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_gateway_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_generated.conversion_hubs.go delete mode 100644 apis/metal/v1alpha1/zz_generated.resolvers.go delete mode 100755 apis/metal/v1alpha1/zz_generated_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_ipattachment_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_organization_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_organizationmember_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_port_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_portvlanattachment_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_project_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_projectapikey_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_projectsshkey_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_reservedipblock_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_spotmarketrequest_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_sshkey_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_userapikey_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_virtualcircuit_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_vlan_terraformed.go create mode 100755 apis/metal/v1alpha1/zz_vrf_terraformed.go create mode 100755 apis/network/v1alpha1/zz_acltemplate_terraformed.go create mode 100755 apis/network/v1alpha1/zz_bgp_terraformed.go create mode 100755 apis/network/v1alpha1/zz_device_terraformed.go create mode 100755 apis/network/v1alpha1/zz_devicelink_terraformed.go create mode 100755 apis/network/v1alpha1/zz_file_terraformed.go create mode 100755 apis/network/v1alpha1/zz_generated.conversion_hubs.go delete mode 100755 apis/network/v1alpha1/zz_generated_terraformed.go create mode 100755 apis/network/v1alpha1/zz_sshkey_terraformed.go create mode 100755 apis/network/v1alpha1/zz_sshuser_terraformed.go delete mode 100644 examples-generated/ecx/l2connection.yaml delete mode 100644 examples-generated/ecx/l2connectionaccepter.yaml delete mode 100644 examples-generated/ecx/l2serviceprofile.yaml create mode 100644 examples-generated/fabric/v1alpha1/cloudrouter.yaml create mode 100644 examples-generated/fabric/v1alpha1/connection.yaml create mode 100644 examples-generated/fabric/v1alpha1/network.yaml create mode 100644 examples-generated/fabric/v1alpha1/serviceprofile.yaml rename examples-generated/metal/{ => v1alpha1}/bgpsession.yaml (77%) rename examples-generated/metal/{ => v1alpha1}/connection.yaml (56%) rename examples-generated/metal/{ => v1alpha1}/device.yaml (78%) rename examples-generated/metal/{ => v1alpha1}/gateway.yaml (66%) rename examples-generated/metal/{ => v1alpha1}/ipattachment.yaml (78%) rename examples-generated/metal/{ => v1alpha1}/organization.yaml (98%) rename examples-generated/metal/{ => v1alpha1}/organizationmember.yaml (78%) rename examples-generated/metal/{ => v1alpha1}/project.yaml (97%) rename examples-generated/metal/{ => v1alpha1}/projectapikey.yaml (76%) rename examples-generated/metal/{ => v1alpha1}/projectsshkey.yaml (88%) rename examples-generated/metal/{ => v1alpha1}/reservedipblock.yaml (76%) rename examples-generated/metal/{ => v1alpha1}/spotmarketrequest.yaml (82%) rename examples-generated/metal/{ => v1alpha1}/sshkey.yaml (87%) rename examples-generated/metal/{ => v1alpha1}/userapikey.yaml (98%) rename examples-generated/metal/{ => v1alpha1}/virtualcircuit.yaml (63%) rename examples-generated/metal/{ => v1alpha1}/vlan.yaml (75%) rename examples-generated/metal/{ => v1alpha1}/vrf.yaml (87%) rename examples-generated/network/{ => v1alpha1}/acltemplate.yaml (98%) rename examples-generated/network/{ => v1alpha1}/bgp.yaml (98%) rename examples-generated/network/{ => v1alpha1}/device.yaml (99%) rename examples-generated/network/{ => v1alpha1}/devicelink.yaml (99%) rename examples-generated/network/{ => v1alpha1}/file.yaml (98%) rename examples-generated/network/{ => v1alpha1}/sshkey.yaml (98%) rename examples-generated/network/{ => v1alpha1}/sshuser.yaml (98%) delete mode 100644 examples/ecx/l2connection.yaml delete mode 100755 internal/controller/ecx/l2connection/zz_controller.go delete mode 100755 internal/controller/ecx/l2connectionaccepter/zz_controller.go delete mode 100755 internal/controller/ecx/l2serviceprofile/zz_controller.go delete mode 100644 package/crds/ecx.equinix.jet.crossplane.io_l2connectionaccepters.yaml delete mode 100644 package/crds/ecx.equinix.jet.crossplane.io_l2connections.yaml delete mode 100644 package/crds/ecx.equinix.jet.crossplane.io_l2serviceprofiles.yaml diff --git a/apis/ecx/v1alpha1/zz_generated.deepcopy.go b/apis/ecx/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 9938f4f..0000000 --- a/apis/ecx/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,1306 +0,0 @@ -//go:build !ignore_autogenerated -// +build !ignore_autogenerated - -/* -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 controller-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - "github.com/crossplane/crossplane-runtime/apis/common/v1" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ActionsObservation) DeepCopyInto(out *ActionsObservation) { - *out = *in - if in.Message != nil { - in, out := &in.Message, &out.Message - *out = new(string) - **out = **in - } - if in.OperationID != nil { - in, out := &in.OperationID, &out.OperationID - *out = new(string) - **out = **in - } - if in.RequiredData != nil { - in, out := &in.RequiredData, &out.RequiredData - *out = make([]RequiredDataObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Type != nil { - in, out := &in.Type, &out.Type - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ActionsObservation. -func (in *ActionsObservation) DeepCopy() *ActionsObservation { - if in == nil { - return nil - } - out := new(ActionsObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ActionsParameters) DeepCopyInto(out *ActionsParameters) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ActionsParameters. -func (in *ActionsParameters) DeepCopy() *ActionsParameters { - if in == nil { - return nil - } - out := new(ActionsParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ActionsRequiredDataObservation) DeepCopyInto(out *ActionsRequiredDataObservation) { - *out = *in - if in.Editable != nil { - in, out := &in.Editable, &out.Editable - *out = new(bool) - **out = **in - } - if in.Key != nil { - in, out := &in.Key, &out.Key - *out = new(string) - **out = **in - } - if in.Label != nil { - in, out := &in.Label, &out.Label - *out = new(string) - **out = **in - } - if in.ValidationPattern != nil { - in, out := &in.ValidationPattern, &out.ValidationPattern - *out = new(string) - **out = **in - } - if in.Value != nil { - in, out := &in.Value, &out.Value - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ActionsRequiredDataObservation. -func (in *ActionsRequiredDataObservation) DeepCopy() *ActionsRequiredDataObservation { - if in == nil { - return nil - } - out := new(ActionsRequiredDataObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ActionsRequiredDataParameters) DeepCopyInto(out *ActionsRequiredDataParameters) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ActionsRequiredDataParameters. -func (in *ActionsRequiredDataParameters) DeepCopy() *ActionsRequiredDataParameters { - if in == nil { - return nil - } - out := new(ActionsRequiredDataParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AdditionalInfoObservation) DeepCopyInto(out *AdditionalInfoObservation) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdditionalInfoObservation. -func (in *AdditionalInfoObservation) DeepCopy() *AdditionalInfoObservation { - if in == nil { - return nil - } - out := new(AdditionalInfoObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AdditionalInfoParameters) DeepCopyInto(out *AdditionalInfoParameters) { - *out = *in - if in.Name != nil { - in, out := &in.Name, &out.Name - *out = new(string) - **out = **in - } - if in.Value != nil { - in, out := &in.Value, &out.Value - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdditionalInfoParameters. -func (in *AdditionalInfoParameters) DeepCopy() *AdditionalInfoParameters { - if in == nil { - return nil - } - out := new(AdditionalInfoParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FeaturesObservation) DeepCopyInto(out *FeaturesObservation) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeaturesObservation. -func (in *FeaturesObservation) DeepCopy() *FeaturesObservation { - if in == nil { - return nil - } - out := new(FeaturesObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FeaturesParameters) DeepCopyInto(out *FeaturesParameters) { - *out = *in - if in.AllowRemoteConnections != nil { - in, out := &in.AllowRemoteConnections, &out.AllowRemoteConnections - *out = new(bool) - **out = **in - } - if in.TestProfile != nil { - in, out := &in.TestProfile, &out.TestProfile - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FeaturesParameters. -func (in *FeaturesParameters) DeepCopy() *FeaturesParameters { - if in == nil { - return nil - } - out := new(FeaturesParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2Connection) DeepCopyInto(out *L2Connection) { - *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 L2Connection. -func (in *L2Connection) DeepCopy() *L2Connection { - if in == nil { - return nil - } - out := new(L2Connection) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *L2Connection) 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 *L2ConnectionAccepter) DeepCopyInto(out *L2ConnectionAccepter) { - *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 L2ConnectionAccepter. -func (in *L2ConnectionAccepter) DeepCopy() *L2ConnectionAccepter { - if in == nil { - return nil - } - out := new(L2ConnectionAccepter) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *L2ConnectionAccepter) 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 *L2ConnectionAccepterList) DeepCopyInto(out *L2ConnectionAccepterList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]L2ConnectionAccepter, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionAccepterList. -func (in *L2ConnectionAccepterList) DeepCopy() *L2ConnectionAccepterList { - if in == nil { - return nil - } - out := new(L2ConnectionAccepterList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *L2ConnectionAccepterList) 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 *L2ConnectionAccepterObservation) DeepCopyInto(out *L2ConnectionAccepterObservation) { - *out = *in - if in.AwsConnectionID != nil { - in, out := &in.AwsConnectionID, &out.AwsConnectionID - *out = new(string) - **out = **in - } - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionAccepterObservation. -func (in *L2ConnectionAccepterObservation) DeepCopy() *L2ConnectionAccepterObservation { - if in == nil { - return nil - } - out := new(L2ConnectionAccepterObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionAccepterParameters) DeepCopyInto(out *L2ConnectionAccepterParameters) { - *out = *in - if in.AccessKeySecretRef != nil { - in, out := &in.AccessKeySecretRef, &out.AccessKeySecretRef - *out = new(v1.SecretKeySelector) - **out = **in - } - if in.AwsProfile != nil { - in, out := &in.AwsProfile, &out.AwsProfile - *out = new(string) - **out = **in - } - if in.ConnectionID != nil { - in, out := &in.ConnectionID, &out.ConnectionID - *out = new(string) - **out = **in - } - if in.SecretKeySecretRef != nil { - in, out := &in.SecretKeySecretRef, &out.SecretKeySecretRef - *out = new(v1.SecretKeySelector) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionAccepterParameters. -func (in *L2ConnectionAccepterParameters) DeepCopy() *L2ConnectionAccepterParameters { - if in == nil { - return nil - } - out := new(L2ConnectionAccepterParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionAccepterSpec) DeepCopyInto(out *L2ConnectionAccepterSpec) { - *out = *in - in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) - in.ForProvider.DeepCopyInto(&out.ForProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionAccepterSpec. -func (in *L2ConnectionAccepterSpec) DeepCopy() *L2ConnectionAccepterSpec { - if in == nil { - return nil - } - out := new(L2ConnectionAccepterSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionAccepterStatus) DeepCopyInto(out *L2ConnectionAccepterStatus) { - *out = *in - in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) - in.AtProvider.DeepCopyInto(&out.AtProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionAccepterStatus. -func (in *L2ConnectionAccepterStatus) DeepCopy() *L2ConnectionAccepterStatus { - if in == nil { - return nil - } - out := new(L2ConnectionAccepterStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionList) DeepCopyInto(out *L2ConnectionList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]L2Connection, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionList. -func (in *L2ConnectionList) DeepCopy() *L2ConnectionList { - if in == nil { - return nil - } - out := new(L2ConnectionList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *L2ConnectionList) 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 *L2ConnectionObservation) DeepCopyInto(out *L2ConnectionObservation) { - *out = *in - if in.Actions != nil { - in, out := &in.Actions, &out.Actions - *out = make([]ActionsObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) - **out = **in - } - if in.ProviderStatus != nil { - in, out := &in.ProviderStatus, &out.ProviderStatus - *out = new(string) - **out = **in - } - if in.RedundancyGroup != nil { - in, out := &in.RedundancyGroup, &out.RedundancyGroup - *out = new(string) - **out = **in - } - if in.RedundancyType != nil { - in, out := &in.RedundancyType, &out.RedundancyType - *out = new(string) - **out = **in - } - if in.RedundantUUID != nil { - in, out := &in.RedundantUUID, &out.RedundantUUID - *out = new(string) - **out = **in - } - if in.SecondaryConnection != nil { - in, out := &in.SecondaryConnection, &out.SecondaryConnection - *out = make([]SecondaryConnectionObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Status != nil { - in, out := &in.Status, &out.Status - *out = new(string) - **out = **in - } - if in.UUID != nil { - in, out := &in.UUID, &out.UUID - *out = new(string) - **out = **in - } - if in.VendorToken != nil { - in, out := &in.VendorToken, &out.VendorToken - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionObservation. -func (in *L2ConnectionObservation) DeepCopy() *L2ConnectionObservation { - if in == nil { - return nil - } - out := new(L2ConnectionObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionParameters) DeepCopyInto(out *L2ConnectionParameters) { - *out = *in - if in.AdditionalInfo != nil { - in, out := &in.AdditionalInfo, &out.AdditionalInfo - *out = make([]AdditionalInfoParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.AuthorizationKey != nil { - in, out := &in.AuthorizationKey, &out.AuthorizationKey - *out = new(string) - **out = **in - } - if in.DeviceInterfaceID != nil { - in, out := &in.DeviceInterfaceID, &out.DeviceInterfaceID - *out = new(float64) - **out = **in - } - if in.DeviceUUID != nil { - in, out := &in.DeviceUUID, &out.DeviceUUID - *out = new(string) - **out = **in - } - if in.Name != nil { - in, out := &in.Name, &out.Name - *out = new(string) - **out = **in - } - if in.NamedTag != nil { - in, out := &in.NamedTag, &out.NamedTag - *out = new(string) - **out = **in - } - if in.Notifications != nil { - in, out := &in.Notifications, &out.Notifications - *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.PortUUID != nil { - in, out := &in.PortUUID, &out.PortUUID - *out = new(string) - **out = **in - } - if in.ProfileUUID != nil { - in, out := &in.ProfileUUID, &out.ProfileUUID - *out = new(string) - **out = **in - } - if in.ProfileUUIDRef != nil { - in, out := &in.ProfileUUIDRef, &out.ProfileUUIDRef - *out = new(v1.Reference) - (*in).DeepCopyInto(*out) - } - if in.ProfileUUIDSelector != nil { - in, out := &in.ProfileUUIDSelector, &out.ProfileUUIDSelector - *out = new(v1.Selector) - (*in).DeepCopyInto(*out) - } - if in.PurchaseOrderNumber != nil { - in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber - *out = new(string) - **out = **in - } - if in.SecondaryConnection != nil { - in, out := &in.SecondaryConnection, &out.SecondaryConnection - *out = make([]SecondaryConnectionParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.SellerMetroCode != nil { - in, out := &in.SellerMetroCode, &out.SellerMetroCode - *out = new(string) - **out = **in - } - if in.SellerRegion != nil { - in, out := &in.SellerRegion, &out.SellerRegion - *out = new(string) - **out = **in - } - if in.ServiceToken != nil { - in, out := &in.ServiceToken, &out.ServiceToken - *out = new(string) - **out = **in - } - if in.Speed != nil { - in, out := &in.Speed, &out.Speed - *out = new(float64) - **out = **in - } - if in.SpeedUnit != nil { - in, out := &in.SpeedUnit, &out.SpeedUnit - *out = new(string) - **out = **in - } - if in.VlanCtag != nil { - in, out := &in.VlanCtag, &out.VlanCtag - *out = new(float64) - **out = **in - } - if in.VlanStag != nil { - in, out := &in.VlanStag, &out.VlanStag - *out = new(float64) - **out = **in - } - if in.ZsidePortUUID != nil { - in, out := &in.ZsidePortUUID, &out.ZsidePortUUID - *out = new(string) - **out = **in - } - if in.ZsideServiceToken != nil { - in, out := &in.ZsideServiceToken, &out.ZsideServiceToken - *out = new(string) - **out = **in - } - if in.ZsideVlanCtag != nil { - in, out := &in.ZsideVlanCtag, &out.ZsideVlanCtag - *out = new(float64) - **out = **in - } - if in.ZsideVlanStag != nil { - in, out := &in.ZsideVlanStag, &out.ZsideVlanStag - *out = new(float64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionParameters. -func (in *L2ConnectionParameters) DeepCopy() *L2ConnectionParameters { - if in == nil { - return nil - } - out := new(L2ConnectionParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionSpec) DeepCopyInto(out *L2ConnectionSpec) { - *out = *in - in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) - in.ForProvider.DeepCopyInto(&out.ForProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionSpec. -func (in *L2ConnectionSpec) DeepCopy() *L2ConnectionSpec { - if in == nil { - return nil - } - out := new(L2ConnectionSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ConnectionStatus) DeepCopyInto(out *L2ConnectionStatus) { - *out = *in - in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) - in.AtProvider.DeepCopyInto(&out.AtProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ConnectionStatus. -func (in *L2ConnectionStatus) DeepCopy() *L2ConnectionStatus { - if in == nil { - return nil - } - out := new(L2ConnectionStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2Serviceprofile) DeepCopyInto(out *L2Serviceprofile) { - *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 L2Serviceprofile. -func (in *L2Serviceprofile) DeepCopy() *L2Serviceprofile { - if in == nil { - return nil - } - out := new(L2Serviceprofile) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *L2Serviceprofile) 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 *L2ServiceprofileList) DeepCopyInto(out *L2ServiceprofileList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]L2Serviceprofile, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ServiceprofileList. -func (in *L2ServiceprofileList) DeepCopy() *L2ServiceprofileList { - if in == nil { - return nil - } - out := new(L2ServiceprofileList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *L2ServiceprofileList) 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 *L2ServiceprofileObservation) DeepCopyInto(out *L2ServiceprofileObservation) { - *out = *in - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) - **out = **in - } - if in.State != nil { - in, out := &in.State, &out.State - *out = new(string) - **out = **in - } - if in.UUID != nil { - in, out := &in.UUID, &out.UUID - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ServiceprofileObservation. -func (in *L2ServiceprofileObservation) DeepCopy() *L2ServiceprofileObservation { - if in == nil { - return nil - } - out := new(L2ServiceprofileObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ServiceprofileParameters) DeepCopyInto(out *L2ServiceprofileParameters) { - *out = *in - if in.APIIntegration != nil { - in, out := &in.APIIntegration, &out.APIIntegration - *out = new(bool) - **out = **in - } - if in.AuthkeyLabel != nil { - in, out := &in.AuthkeyLabel, &out.AuthkeyLabel - *out = new(string) - **out = **in - } - if in.BandwidthAlertThreshold != nil { - in, out := &in.BandwidthAlertThreshold, &out.BandwidthAlertThreshold - *out = new(float64) - **out = **in - } - if in.BandwidthThresholdNotifications != nil { - in, out := &in.BandwidthThresholdNotifications, &out.BandwidthThresholdNotifications - *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.ConnectionNameLabel != nil { - in, out := &in.ConnectionNameLabel, &out.ConnectionNameLabel - *out = new(string) - **out = **in - } - if in.CtagLabel != nil { - in, out := &in.CtagLabel, &out.CtagLabel - *out = new(string) - **out = **in - } - if in.Description != nil { - in, out := &in.Description, &out.Description - *out = new(string) - **out = **in - } - if in.EquinixManagedPortVlan != nil { - in, out := &in.EquinixManagedPortVlan, &out.EquinixManagedPortVlan - *out = new(bool) - **out = **in - } - if in.Features != nil { - in, out := &in.Features, &out.Features - *out = make([]FeaturesParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.IntegrationID != nil { - in, out := &in.IntegrationID, &out.IntegrationID - *out = new(string) - **out = **in - } - if in.Name != nil { - in, out := &in.Name, &out.Name - *out = new(string) - **out = **in - } - if in.Oversubscription != nil { - in, out := &in.Oversubscription, &out.Oversubscription - *out = new(string) - **out = **in - } - if in.OversubscriptionAllowed != nil { - in, out := &in.OversubscriptionAllowed, &out.OversubscriptionAllowed - *out = new(bool) - **out = **in - } - if in.Port != nil { - in, out := &in.Port, &out.Port - *out = make([]PortParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Private != nil { - in, out := &in.Private, &out.Private - *out = new(bool) - **out = **in - } - if in.PrivateUserEmails != nil { - in, out := &in.PrivateUserEmails, &out.PrivateUserEmails - *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.ProfileStatuschangeNotifications != nil { - in, out := &in.ProfileStatuschangeNotifications, &out.ProfileStatuschangeNotifications - *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.RedundancyRequired != nil { - in, out := &in.RedundancyRequired, &out.RedundancyRequired - *out = new(bool) - **out = **in - } - if in.SecondaryVlanFromPrimary != nil { - in, out := &in.SecondaryVlanFromPrimary, &out.SecondaryVlanFromPrimary - *out = new(bool) - **out = **in - } - if in.ServicekeyAutogenerated != nil { - in, out := &in.ServicekeyAutogenerated, &out.ServicekeyAutogenerated - *out = new(bool) - **out = **in - } - if in.SpeedBand != nil { - in, out := &in.SpeedBand, &out.SpeedBand - *out = make([]SpeedBandParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.SpeedCustomizationAllowed != nil { - in, out := &in.SpeedCustomizationAllowed, &out.SpeedCustomizationAllowed - *out = new(bool) - **out = **in - } - if in.SpeedFromAPI != nil { - in, out := &in.SpeedFromAPI, &out.SpeedFromAPI - *out = new(bool) - **out = **in - } - if in.TagType != nil { - in, out := &in.TagType, &out.TagType - *out = new(string) - **out = **in - } - if in.VcStatuschangeNotifications != nil { - in, out := &in.VcStatuschangeNotifications, &out.VcStatuschangeNotifications - *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 L2ServiceprofileParameters. -func (in *L2ServiceprofileParameters) DeepCopy() *L2ServiceprofileParameters { - if in == nil { - return nil - } - out := new(L2ServiceprofileParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ServiceprofileSpec) DeepCopyInto(out *L2ServiceprofileSpec) { - *out = *in - in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) - in.ForProvider.DeepCopyInto(&out.ForProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ServiceprofileSpec. -func (in *L2ServiceprofileSpec) DeepCopy() *L2ServiceprofileSpec { - if in == nil { - return nil - } - out := new(L2ServiceprofileSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *L2ServiceprofileStatus) DeepCopyInto(out *L2ServiceprofileStatus) { - *out = *in - in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) - in.AtProvider.DeepCopyInto(&out.AtProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new L2ServiceprofileStatus. -func (in *L2ServiceprofileStatus) DeepCopy() *L2ServiceprofileStatus { - if in == nil { - return nil - } - out := new(L2ServiceprofileStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PortObservation) DeepCopyInto(out *PortObservation) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortObservation. -func (in *PortObservation) DeepCopy() *PortObservation { - if in == nil { - return nil - } - out := new(PortObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PortParameters) DeepCopyInto(out *PortParameters) { - *out = *in - if in.MetroCode != nil { - in, out := &in.MetroCode, &out.MetroCode - *out = new(string) - **out = **in - } - if in.UUID != nil { - in, out := &in.UUID, &out.UUID - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortParameters. -func (in *PortParameters) DeepCopy() *PortParameters { - if in == nil { - return nil - } - out := new(PortParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RequiredDataObservation) DeepCopyInto(out *RequiredDataObservation) { - *out = *in - if in.Editable != nil { - in, out := &in.Editable, &out.Editable - *out = new(bool) - **out = **in - } - if in.Key != nil { - in, out := &in.Key, &out.Key - *out = new(string) - **out = **in - } - if in.Label != nil { - in, out := &in.Label, &out.Label - *out = new(string) - **out = **in - } - if in.ValidationPattern != nil { - in, out := &in.ValidationPattern, &out.ValidationPattern - *out = new(string) - **out = **in - } - if in.Value != nil { - in, out := &in.Value, &out.Value - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequiredDataObservation. -func (in *RequiredDataObservation) DeepCopy() *RequiredDataObservation { - if in == nil { - return nil - } - out := new(RequiredDataObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RequiredDataParameters) DeepCopyInto(out *RequiredDataParameters) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RequiredDataParameters. -func (in *RequiredDataParameters) DeepCopy() *RequiredDataParameters { - if in == nil { - return nil - } - out := new(RequiredDataParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecondaryConnectionActionsObservation) DeepCopyInto(out *SecondaryConnectionActionsObservation) { - *out = *in - if in.Message != nil { - in, out := &in.Message, &out.Message - *out = new(string) - **out = **in - } - if in.OperationID != nil { - in, out := &in.OperationID, &out.OperationID - *out = new(string) - **out = **in - } - if in.RequiredData != nil { - in, out := &in.RequiredData, &out.RequiredData - *out = make([]ActionsRequiredDataObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Type != nil { - in, out := &in.Type, &out.Type - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecondaryConnectionActionsObservation. -func (in *SecondaryConnectionActionsObservation) DeepCopy() *SecondaryConnectionActionsObservation { - if in == nil { - return nil - } - out := new(SecondaryConnectionActionsObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecondaryConnectionActionsParameters) DeepCopyInto(out *SecondaryConnectionActionsParameters) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecondaryConnectionActionsParameters. -func (in *SecondaryConnectionActionsParameters) DeepCopy() *SecondaryConnectionActionsParameters { - if in == nil { - return nil - } - out := new(SecondaryConnectionActionsParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecondaryConnectionObservation) DeepCopyInto(out *SecondaryConnectionObservation) { - *out = *in - if in.Actions != nil { - in, out := &in.Actions, &out.Actions - *out = make([]SecondaryConnectionActionsObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ProviderStatus != nil { - in, out := &in.ProviderStatus, &out.ProviderStatus - *out = new(string) - **out = **in - } - if in.RedundancyGroup != nil { - in, out := &in.RedundancyGroup, &out.RedundancyGroup - *out = new(string) - **out = **in - } - if in.RedundancyType != nil { - in, out := &in.RedundancyType, &out.RedundancyType - *out = new(string) - **out = **in - } - if in.RedundantUUID != nil { - in, out := &in.RedundantUUID, &out.RedundantUUID - *out = new(string) - **out = **in - } - if in.Status != nil { - in, out := &in.Status, &out.Status - *out = new(string) - **out = **in - } - if in.UUID != nil { - in, out := &in.UUID, &out.UUID - *out = new(string) - **out = **in - } - if in.VendorToken != nil { - in, out := &in.VendorToken, &out.VendorToken - *out = new(string) - **out = **in - } - if in.ZsidePortUUID != nil { - in, out := &in.ZsidePortUUID, &out.ZsidePortUUID - *out = new(string) - **out = **in - } - if in.ZsideVlanCtag != nil { - in, out := &in.ZsideVlanCtag, &out.ZsideVlanCtag - *out = new(float64) - **out = **in - } - if in.ZsideVlanStag != nil { - in, out := &in.ZsideVlanStag, &out.ZsideVlanStag - *out = new(float64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecondaryConnectionObservation. -func (in *SecondaryConnectionObservation) DeepCopy() *SecondaryConnectionObservation { - if in == nil { - return nil - } - out := new(SecondaryConnectionObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecondaryConnectionParameters) DeepCopyInto(out *SecondaryConnectionParameters) { - *out = *in - if in.AuthorizationKey != nil { - in, out := &in.AuthorizationKey, &out.AuthorizationKey - *out = new(string) - **out = **in - } - if in.DeviceInterfaceID != nil { - in, out := &in.DeviceInterfaceID, &out.DeviceInterfaceID - *out = new(float64) - **out = **in - } - if in.DeviceUUID != nil { - in, out := &in.DeviceUUID, &out.DeviceUUID - *out = new(string) - **out = **in - } - if in.Name != nil { - in, out := &in.Name, &out.Name - *out = new(string) - **out = **in - } - if in.PortUUID != nil { - in, out := &in.PortUUID, &out.PortUUID - *out = new(string) - **out = **in - } - if in.ProfileUUID != nil { - in, out := &in.ProfileUUID, &out.ProfileUUID - *out = new(string) - **out = **in - } - if in.SellerMetroCode != nil { - in, out := &in.SellerMetroCode, &out.SellerMetroCode - *out = new(string) - **out = **in - } - if in.SellerRegion != nil { - in, out := &in.SellerRegion, &out.SellerRegion - *out = new(string) - **out = **in - } - if in.ServiceToken != nil { - in, out := &in.ServiceToken, &out.ServiceToken - *out = new(string) - **out = **in - } - if in.Speed != nil { - in, out := &in.Speed, &out.Speed - *out = new(float64) - **out = **in - } - if in.SpeedUnit != nil { - in, out := &in.SpeedUnit, &out.SpeedUnit - *out = new(string) - **out = **in - } - if in.VlanCtag != nil { - in, out := &in.VlanCtag, &out.VlanCtag - *out = new(float64) - **out = **in - } - if in.VlanStag != nil { - in, out := &in.VlanStag, &out.VlanStag - *out = new(float64) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecondaryConnectionParameters. -func (in *SecondaryConnectionParameters) DeepCopy() *SecondaryConnectionParameters { - if in == nil { - return nil - } - out := new(SecondaryConnectionParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SpeedBandObservation) DeepCopyInto(out *SpeedBandObservation) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpeedBandObservation. -func (in *SpeedBandObservation) DeepCopy() *SpeedBandObservation { - if in == nil { - return nil - } - out := new(SpeedBandObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SpeedBandParameters) DeepCopyInto(out *SpeedBandParameters) { - *out = *in - if in.Speed != nil { - in, out := &in.Speed, &out.Speed - *out = new(float64) - **out = **in - } - if in.SpeedUnit != nil { - in, out := &in.SpeedUnit, &out.SpeedUnit - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpeedBandParameters. -func (in *SpeedBandParameters) DeepCopy() *SpeedBandParameters { - if in == nil { - return nil - } - out := new(SpeedBandParameters) - in.DeepCopyInto(out) - return out -} diff --git a/apis/ecx/v1alpha1/zz_generated.managed.go b/apis/ecx/v1alpha1/zz_generated.managed.go deleted file mode 100644 index d200936..0000000 --- a/apis/ecx/v1alpha1/zz_generated.managed.go +++ /dev/null @@ -1,218 +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. -*/ -// Code generated by angryjet. DO NOT EDIT. - -package v1alpha1 - -import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" - -// GetCondition of this L2Connection. -func (mg *L2Connection) GetCondition(ct xpv1.ConditionType) xpv1.Condition { - return mg.Status.GetCondition(ct) -} - -// GetDeletionPolicy of this L2Connection. -func (mg *L2Connection) GetDeletionPolicy() xpv1.DeletionPolicy { - return mg.Spec.DeletionPolicy -} - -// GetProviderConfigReference of this L2Connection. -func (mg *L2Connection) GetProviderConfigReference() *xpv1.Reference { - return mg.Spec.ProviderConfigReference -} - -/* -GetProviderReference of this L2Connection. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *L2Connection) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - -// GetPublishConnectionDetailsTo of this L2Connection. -func (mg *L2Connection) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { - return mg.Spec.PublishConnectionDetailsTo -} - -// GetWriteConnectionSecretToReference of this L2Connection. -func (mg *L2Connection) GetWriteConnectionSecretToReference() *xpv1.SecretReference { - return mg.Spec.WriteConnectionSecretToReference -} - -// SetConditions of this L2Connection. -func (mg *L2Connection) SetConditions(c ...xpv1.Condition) { - mg.Status.SetConditions(c...) -} - -// SetDeletionPolicy of this L2Connection. -func (mg *L2Connection) SetDeletionPolicy(r xpv1.DeletionPolicy) { - mg.Spec.DeletionPolicy = r -} - -// SetProviderConfigReference of this L2Connection. -func (mg *L2Connection) SetProviderConfigReference(r *xpv1.Reference) { - mg.Spec.ProviderConfigReference = r -} - -/* -SetProviderReference of this L2Connection. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *L2Connection) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - -// SetPublishConnectionDetailsTo of this L2Connection. -func (mg *L2Connection) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { - mg.Spec.PublishConnectionDetailsTo = r -} - -// SetWriteConnectionSecretToReference of this L2Connection. -func (mg *L2Connection) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { - mg.Spec.WriteConnectionSecretToReference = r -} - -// GetCondition of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) GetCondition(ct xpv1.ConditionType) xpv1.Condition { - return mg.Status.GetCondition(ct) -} - -// GetDeletionPolicy of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) GetDeletionPolicy() xpv1.DeletionPolicy { - return mg.Spec.DeletionPolicy -} - -// GetProviderConfigReference of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) GetProviderConfigReference() *xpv1.Reference { - return mg.Spec.ProviderConfigReference -} - -/* -GetProviderReference of this L2ConnectionAccepter. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *L2ConnectionAccepter) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - -// GetPublishConnectionDetailsTo of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { - return mg.Spec.PublishConnectionDetailsTo -} - -// GetWriteConnectionSecretToReference of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) GetWriteConnectionSecretToReference() *xpv1.SecretReference { - return mg.Spec.WriteConnectionSecretToReference -} - -// SetConditions of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) SetConditions(c ...xpv1.Condition) { - mg.Status.SetConditions(c...) -} - -// SetDeletionPolicy of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) SetDeletionPolicy(r xpv1.DeletionPolicy) { - mg.Spec.DeletionPolicy = r -} - -// SetProviderConfigReference of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) SetProviderConfigReference(r *xpv1.Reference) { - mg.Spec.ProviderConfigReference = r -} - -/* -SetProviderReference of this L2ConnectionAccepter. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *L2ConnectionAccepter) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - -// SetPublishConnectionDetailsTo of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { - mg.Spec.PublishConnectionDetailsTo = r -} - -// SetWriteConnectionSecretToReference of this L2ConnectionAccepter. -func (mg *L2ConnectionAccepter) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { - mg.Spec.WriteConnectionSecretToReference = r -} - -// GetCondition of this L2Serviceprofile. -func (mg *L2Serviceprofile) GetCondition(ct xpv1.ConditionType) xpv1.Condition { - return mg.Status.GetCondition(ct) -} - -// GetDeletionPolicy of this L2Serviceprofile. -func (mg *L2Serviceprofile) GetDeletionPolicy() xpv1.DeletionPolicy { - return mg.Spec.DeletionPolicy -} - -// GetProviderConfigReference of this L2Serviceprofile. -func (mg *L2Serviceprofile) GetProviderConfigReference() *xpv1.Reference { - return mg.Spec.ProviderConfigReference -} - -/* -GetProviderReference of this L2Serviceprofile. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *L2Serviceprofile) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - -// GetPublishConnectionDetailsTo of this L2Serviceprofile. -func (mg *L2Serviceprofile) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { - return mg.Spec.PublishConnectionDetailsTo -} - -// GetWriteConnectionSecretToReference of this L2Serviceprofile. -func (mg *L2Serviceprofile) GetWriteConnectionSecretToReference() *xpv1.SecretReference { - return mg.Spec.WriteConnectionSecretToReference -} - -// SetConditions of this L2Serviceprofile. -func (mg *L2Serviceprofile) SetConditions(c ...xpv1.Condition) { - mg.Status.SetConditions(c...) -} - -// SetDeletionPolicy of this L2Serviceprofile. -func (mg *L2Serviceprofile) SetDeletionPolicy(r xpv1.DeletionPolicy) { - mg.Spec.DeletionPolicy = r -} - -// SetProviderConfigReference of this L2Serviceprofile. -func (mg *L2Serviceprofile) SetProviderConfigReference(r *xpv1.Reference) { - mg.Spec.ProviderConfigReference = r -} - -/* -SetProviderReference of this L2Serviceprofile. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *L2Serviceprofile) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - -// SetPublishConnectionDetailsTo of this L2Serviceprofile. -func (mg *L2Serviceprofile) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { - mg.Spec.PublishConnectionDetailsTo = r -} - -// SetWriteConnectionSecretToReference of this L2Serviceprofile. -func (mg *L2Serviceprofile) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { - mg.Spec.WriteConnectionSecretToReference = r -} diff --git a/apis/ecx/v1alpha1/zz_generated.managedlist.go b/apis/ecx/v1alpha1/zz_generated.managedlist.go deleted file mode 100644 index f397a13..0000000 --- a/apis/ecx/v1alpha1/zz_generated.managedlist.go +++ /dev/null @@ -1,47 +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. -*/ -// Code generated by angryjet. DO NOT EDIT. - -package v1alpha1 - -import resource "github.com/crossplane/crossplane-runtime/pkg/resource" - -// GetItems of this L2ConnectionAccepterList. -func (l *L2ConnectionAccepterList) 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 L2ConnectionList. -func (l *L2ConnectionList) 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 L2ServiceprofileList. -func (l *L2ServiceprofileList) GetItems() []resource.Managed { - items := make([]resource.Managed, len(l.Items)) - for i := range l.Items { - items[i] = &l.Items[i] - } - return items -} diff --git a/apis/ecx/v1alpha1/zz_generated.resolvers.go b/apis/ecx/v1alpha1/zz_generated.resolvers.go deleted file mode 100644 index f0234d6..0000000 --- a/apis/ecx/v1alpha1/zz_generated.resolvers.go +++ /dev/null @@ -1,51 +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. -*/ -// Code generated by angryjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "context" - reference "github.com/crossplane/crossplane-runtime/pkg/reference" - errors "github.com/pkg/errors" - client "sigs.k8s.io/controller-runtime/pkg/client" -) - -// ResolveReferences of this L2Connection. -func (mg *L2Connection) 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.ProfileUUID), - Extract: reference.ExternalName(), - Reference: mg.Spec.ForProvider.ProfileUUIDRef, - Selector: mg.Spec.ForProvider.ProfileUUIDSelector, - To: reference.To{ - List: &L2ServiceprofileList{}, - Managed: &L2Serviceprofile{}, - }, - }) - if err != nil { - return errors.Wrap(err, "mg.Spec.ForProvider.ProfileUUID") - } - mg.Spec.ForProvider.ProfileUUID = reference.ToPtrValue(rsp.ResolvedValue) - mg.Spec.ForProvider.ProfileUUIDRef = rsp.ResolvedReference - - return nil -} diff --git a/apis/ecx/v1alpha1/zz_generated_terraformed.go b/apis/ecx/v1alpha1/zz_generated_terraformed.go deleted file mode 100755 index af31dc1..0000000 --- a/apis/ecx/v1alpha1/zz_generated_terraformed.go +++ /dev/null @@ -1,248 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "github.com/pkg/errors" - - "github.com/upbound/upjet/pkg/resource" - "github.com/upbound/upjet/pkg/resource/json" -) - -// GetTerraformResourceType returns Terraform resource type for this L2Connection -func (mg *L2Connection) GetTerraformResourceType() string { - return "equinix_ecx_l2_connection" -} - -// GetConnectionDetailsMapping for this L2Connection -func (tr *L2Connection) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this L2Connection -func (tr *L2Connection) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this L2Connection -func (tr *L2Connection) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this L2Connection -func (tr *L2Connection) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this L2Connection -func (tr *L2Connection) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this L2Connection -func (tr *L2Connection) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this L2Connection using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *L2Connection) LateInitialize(attrs []byte) (bool, error) { - params := &L2ConnectionParameters{} - 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 *L2Connection) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this L2ConnectionAccepter -func (mg *L2ConnectionAccepter) GetTerraformResourceType() string { - return "equinix_ecx_l2_connection_accepter" -} - -// GetConnectionDetailsMapping for this L2ConnectionAccepter -func (tr *L2ConnectionAccepter) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"access_key": "spec.forProvider.accessKeySecretRef", "secret_key": "spec.forProvider.secretKeySecretRef"} -} - -// GetObservation of this L2ConnectionAccepter -func (tr *L2ConnectionAccepter) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this L2ConnectionAccepter -func (tr *L2ConnectionAccepter) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this L2ConnectionAccepter -func (tr *L2ConnectionAccepter) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this L2ConnectionAccepter -func (tr *L2ConnectionAccepter) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this L2ConnectionAccepter -func (tr *L2ConnectionAccepter) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this L2ConnectionAccepter using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *L2ConnectionAccepter) LateInitialize(attrs []byte) (bool, error) { - params := &L2ConnectionAccepterParameters{} - 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 *L2ConnectionAccepter) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this L2Serviceprofile -func (mg *L2Serviceprofile) GetTerraformResourceType() string { - return "equinix_ecx_l2_serviceprofile" -} - -// GetConnectionDetailsMapping for this L2Serviceprofile -func (tr *L2Serviceprofile) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this L2Serviceprofile -func (tr *L2Serviceprofile) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this L2Serviceprofile -func (tr *L2Serviceprofile) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this L2Serviceprofile -func (tr *L2Serviceprofile) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this L2Serviceprofile -func (tr *L2Serviceprofile) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this L2Serviceprofile -func (tr *L2Serviceprofile) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this L2Serviceprofile using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *L2Serviceprofile) LateInitialize(attrs []byte) (bool, error) { - params := &L2ServiceprofileParameters{} - 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 *L2Serviceprofile) GetTerraformSchemaVersion() int { - return 0 -} diff --git a/apis/ecx/v1alpha1/zz_groupversion_info.go b/apis/ecx/v1alpha1/zz_groupversion_info.go deleted file mode 100755 index 8615353..0000000 --- a/apis/ecx/v1alpha1/zz_groupversion_info.go +++ /dev/null @@ -1,44 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -// +kubebuilder:object:generate=true -// +groupName=ecx.equinix.jet.crossplane.io -// +versionName=v1alpha1 -package v1alpha1 - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/scheme" -) - -// Package type metadata. -const ( - CRDGroup = "ecx.equinix.jet.crossplane.io" - CRDVersion = "v1alpha1" -) - -var ( - // CRDGroupVersion is the API Group Version used to register the objects - CRDGroupVersion = schema.GroupVersion{Group: CRDGroup, Version: CRDVersion} - - // SchemeBuilder is used to add go types to the GroupVersionKind scheme - SchemeBuilder = &scheme.Builder{GroupVersion: CRDGroupVersion} - - // AddToScheme adds the types in this group-version to the given scheme. - AddToScheme = SchemeBuilder.AddToScheme -) diff --git a/apis/ecx/v1alpha1/zz_l2connection_types.go b/apis/ecx/v1alpha1/zz_l2connection_types.go deleted file mode 100755 index fdfed01..0000000 --- a/apis/ecx/v1alpha1/zz_l2connection_types.go +++ /dev/null @@ -1,482 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - - v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" -) - -type ActionsObservation struct { - Message *string `json:"message,omitempty" tf:"message,omitempty"` - - OperationID *string `json:"operationId,omitempty" tf:"operation_id,omitempty"` - - RequiredData []RequiredDataObservation `json:"requiredData,omitempty" tf:"required_data,omitempty"` - - Type *string `json:"type,omitempty" tf:"type,omitempty"` -} - -type ActionsParameters struct { -} - -type ActionsRequiredDataObservation struct { - Editable *bool `json:"editable,omitempty" tf:"editable,omitempty"` - - Key *string `json:"key,omitempty" tf:"key,omitempty"` - - Label *string `json:"label,omitempty" tf:"label,omitempty"` - - ValidationPattern *string `json:"validationPattern,omitempty" tf:"validation_pattern,omitempty"` - - // additional information value - Value *string `json:"value,omitempty" tf:"value,omitempty"` -} - -type ActionsRequiredDataParameters struct { -} - -type AdditionalInfoObservation struct { -} - -type AdditionalInfoParameters struct { - - // secondary connection name - // Additional information key - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` - - // additional information value - // Additional information value - // +kubebuilder:validation:Required - Value *string `json:"value" tf:"value,omitempty"` -} - -type L2ConnectionObservation struct { - - // One or more pending actions to complete connection provisioning. - // One or more pending actions to complete connection provisioning - Actions []ActionsObservation `json:"actions,omitempty" tf:"actions,omitempty"` - - ID *string `json:"id,omitempty" tf:"id,omitempty"` - - // Connection provisioning status on service provider's side. - // Connection provisioning status on service provider's side - ProviderStatus *string `json:"providerStatus,omitempty" tf:"provider_status,omitempty"` - - // Unique identifier of group containing a primary and secondary connection. - // Unique identifier of group containing a primary and secondary connection - RedundancyGroup *string `json:"redundancyGroup,omitempty" tf:"redundancy_group,omitempty"` - - // Connection redundancy type, applicable for HA connections. Valid values are - // PRIMARY, SECONDARY. - // Connection redundancy type, applicable for HA connections. Either primary or secondary - RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` - - // Unique identifier of the redundant connection, applicable for HA connections. - // Unique identifier of the redundant connection, applicable for HA connections - RedundantUUID *string `json:"redundantUuid,omitempty" tf:"redundant_uuid,omitempty"` - - // Definition of secondary connection for redundant, HA - // connectivity. See Secondary Connection below for more details. - // Definition of secondary connection for redundant, HA connectivity - // +kubebuilder:validation:Optional - SecondaryConnection []SecondaryConnectionObservation `json:"secondaryConnection,omitempty" tf:"secondary_connection,omitempty"` - - // Connection provisioning status on Equinix Fabric side. - // Connection provisioning status on Equinix Fabric side - Status *string `json:"status,omitempty" tf:"status,omitempty"` - - // Unique identifier of the connection. - // Unique identifier of the connection - UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` - - // The Equinix Fabric Token the connection was created with. Applicable if the - // connection was created with a service_token (a-side) or zside_service_token (z-side). - // The Equinix Fabric Token the connection was created with. Applicable if the connection was created with a ServiceToken (a-side) or ZSideServiceToken (z-side) - VendorToken *string `json:"vendorToken,omitempty" tf:"vendor_token,omitempty"` -} - -type L2ConnectionParameters struct { - - // one or more additional information key-value objects - // One or more additional information key-value objects - // +kubebuilder:validation:Optional - AdditionalInfo []AdditionalInfoParameters `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` - - // Unique identifier authorizing Equinix to provision a connection - // towards a cloud service provider. At Equinix, an Authorization Key is a generic term and is NOT - // encrypted on Equinix Fabric. Cloud Service Providers might use a different name to refer to this - // key such as Service Key or Authentication Key. Value depends on a provider service profile, - // more information on Equinix Fabric how to guide. - // Text field used to authorize connection on the provider side. Value depends on a provider service profile used for connection - // +kubebuilder:validation:Optional - AuthorizationKey *string `json:"authorizationKey,omitempty" tf:"authorization_key,omitempty"` - - // Applicable with device_uuid, identifier of network interface - // on a given device, used for a connection. If not specified then first available interface will be - // selected. - // Identifier of network interface on a given device, used for a connection. If not specified then first available interface will be selected - // +kubebuilder:validation:Optional - DeviceInterfaceID *float64 `json:"deviceInterfaceId,omitempty" tf:"device_interface_id,omitempty"` - - // Unique identifier of - // the Network Edge virtual device from which the connection would originate. - // Unique identifier of the Network Edge virtual device from which the connection would originate - // +kubebuilder:validation:Optional - DeviceUUID *string `json:"deviceUuid,omitempty" tf:"device_uuid,omitempty"` - - // Connection name. An alpha-numeric 24 characters string which can include only - // hyphens and underscores - // Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` - - // The type of peering to set up when connecting to Azure Express Route. - // Valid values: PRIVATE, MICROSOFT, MANUAL*, PUBLIC*. - // 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) - // +kubebuilder:validation:Optional - NamedTag *string `json:"namedTag,omitempty" tf:"named_tag,omitempty"` - - // A list of email addresses used for sending connection update - // notifications. - // A list of email addresses used for sending connection update notifications - // +kubebuilder:validation:Required - Notifications []*string `json:"notifications" tf:"notifications,omitempty"` - - // Unique identifier of - // the Equinix Fabric Port from which the connection would originate. - // Unique identifier of the buyer's port from which the connection would originate - // +kubebuilder:validation:Optional - PortUUID *string `json:"portUuid,omitempty" tf:"port_uuid,omitempty"` - - // Unique identifier of the service provider's profile. - // Unique identifier of the service provider's service profile - // +crossplane:generate:reference:type=L2Serviceprofile - // +kubebuilder:validation:Optional - ProfileUUID *string `json:"profileUuid,omitempty" tf:"profile_uuid,omitempty"` - - // Reference to a L2Serviceprofile to populate profileUuid. - // +kubebuilder:validation:Optional - ProfileUUIDRef *v1.Reference `json:"profileUuidRef,omitempty" tf:"-"` - - // Selector for a L2Serviceprofile to populate profileUuid. - // +kubebuilder:validation:Optional - ProfileUUIDSelector *v1.Selector `json:"profileUuidSelector,omitempty" tf:"-"` - - // Connection's purchase order number to reflect on the invoice - // Connection's purchase order number to reflect on the invoice - // +kubebuilder:validation:Optional - PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` - - // Definition of secondary connection for redundant, HA - // connectivity. See Secondary Connection below for more details. - // Definition of secondary connection for redundant, HA connectivity - // +kubebuilder:validation:Optional - SecondaryConnection []SecondaryConnectionParameters `json:"secondaryConnection,omitempty" tf:"secondary_connection,omitempty"` - - // The metro code that denotes the connection’s remote/destination - // side (z-side). - // The metro code that denotes the connection's remote side (z-side) - // +kubebuilder:validation:Optional - SellerMetroCode *string `json:"sellerMetroCode,omitempty" tf:"seller_metro_code,omitempty"` - - // The region in which the seller port resides. - // The region in which the seller port resides - // +kubebuilder:validation:Optional - SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` - - // - A-side - // service tokens authorize you to create a connection from a customer port, which created the token - // for you, to a service profile or your own port. - // More details in A-Side Fabric Service Tokens. - // Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity from a shared multi-tenant port (a-side) - // +kubebuilder:validation:Optional - ServiceToken *string `json:"serviceToken,omitempty" tf:"service_token,omitempty"` - - // Speed/Bandwidth to be allocated to the connection. - // Speed/Bandwidth to be allocated to the connection - // +kubebuilder:validation:Required - Speed *float64 `json:"speed" tf:"speed,omitempty"` - - // Unit of the speed/bandwidth to be allocated to the connection. - // Unit of the speed/bandwidth to be allocated to the connection - // +kubebuilder:validation:Required - SpeedUnit *string `json:"speedUnit" tf:"speed_unit,omitempty"` - - // C-Tag/Inner-Tag of the connection - a numeric character ranging from 2 - // - 4094. - // C-Tag/Inner-Tag of the connection, a numeric character ranging from 2 - 4094 - // +kubebuilder:validation:Optional - VlanCtag *float64 `json:"vlanCtag,omitempty" tf:"vlan_ctag,omitempty"` - - // S-Tag/Outer-Tag of the connection - a numeric - // character ranging from 2 - 4094. - // S-Tag/Outer-Tag of the connection, a numeric character ranging from 2 - 4094 - // +kubebuilder:validation:Optional - VlanStag *float64 `json:"vlanStag,omitempty" tf:"vlan_stag,omitempty"` - - // Unique identifier of the port on the remote/destination side - // (z-side). Allows you to connect between your own ports or virtual devices across your company's - // Equinix Fabric deployment, with no need for a private service profile. - // Unique identifier of the port on the remote side (z-side) - // +kubebuilder:validation:Optional - ZsidePortUUID *string `json:"zsidePortUuid,omitempty" tf:"zside_port_uuid,omitempty"` - - // - Z-side - // service tokens authorize you to create a connection from your port or virtual device to a customer - // port which created the token for you. zside_service_token cannot be used with secondary_connection. - // More details in Z-Side Fabric Service Tokens. - // Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity to a shared multi-tenant port (z-side) - // +kubebuilder:validation:Optional - ZsideServiceToken *string `json:"zsideServiceToken,omitempty" tf:"zside_service_token,omitempty"` - - // C-Tag/Inner-Tag of the connection on the remote/destination - // side (z-side) - a numeric character ranging from 2 - 4094. - // secondary_connection is defined it will internally use same zside_vlan_ctag for the secondary - // connection. - // C-Tag/Inner-Tag of the connection on the remote side (z-side) - // +kubebuilder:validation:Optional - ZsideVlanCtag *float64 `json:"zsideVlanCtag,omitempty" tf:"zside_vlan_ctag,omitempty"` - - // S-Tag/Outer-Tag of the connection on the remote/destination - // side (z-side) - a numeric character ranging from 2 - 4094. - // S-Tag/Outer-Tag of the connection on the remote side (z-side) - // +kubebuilder:validation:Optional - ZsideVlanStag *float64 `json:"zsideVlanStag,omitempty" tf:"zside_vlan_stag,omitempty"` -} - -type RequiredDataObservation struct { - Editable *bool `json:"editable,omitempty" tf:"editable,omitempty"` - - Key *string `json:"key,omitempty" tf:"key,omitempty"` - - Label *string `json:"label,omitempty" tf:"label,omitempty"` - - ValidationPattern *string `json:"validationPattern,omitempty" tf:"validation_pattern,omitempty"` - - // additional information value - Value *string `json:"value,omitempty" tf:"value,omitempty"` -} - -type RequiredDataParameters struct { -} - -type SecondaryConnectionActionsObservation struct { - Message *string `json:"message,omitempty" tf:"message,omitempty"` - - OperationID *string `json:"operationId,omitempty" tf:"operation_id,omitempty"` - - RequiredData []ActionsRequiredDataObservation `json:"requiredData,omitempty" tf:"required_data,omitempty"` - - Type *string `json:"type,omitempty" tf:"type,omitempty"` -} - -type SecondaryConnectionActionsParameters struct { -} - -type SecondaryConnectionObservation struct { - - // One or more pending actions to complete connection provisioning. - // One or more pending actions to complete connection provisioning - Actions []SecondaryConnectionActionsObservation `json:"actions,omitempty" tf:"actions,omitempty"` - - // Connection provisioning status on service provider's side. - // Connection provisioning status on service provider's side - ProviderStatus *string `json:"providerStatus,omitempty" tf:"provider_status,omitempty"` - - // Unique identifier of group containing a primary and secondary connection. - // Unique identifier of group containing a primary and secondary connection - RedundancyGroup *string `json:"redundancyGroup,omitempty" tf:"redundancy_group,omitempty"` - - // Connection redundancy type, applicable for HA connections. Valid values are - // PRIMARY, SECONDARY. - // Connection redundancy type, applicable for HA connections. Either primary or secondary - RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` - - // Unique identifier of the redundant connection, applicable for HA connections. - // Unique identifier of the redundant connection, applicable for HA connections - RedundantUUID *string `json:"redundantUuid,omitempty" tf:"redundant_uuid,omitempty"` - - // Connection provisioning status on Equinix Fabric side. - // Connection provisioning status on Equinix Fabric side - Status *string `json:"status,omitempty" tf:"status,omitempty"` - - // Unique identifier of the connection. - // Unique identifier of the connection - UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` - - // The Equinix Fabric Token the connection was created with. Applicable if the - // connection was created with a service_token (a-side) or zside_service_token (z-side). - // The Equinix Fabric Token the connection was created with. Applicable if the connection was created with a ServiceToken (a-side) or ZSideServiceToken (z-side) - VendorToken *string `json:"vendorToken,omitempty" tf:"vendor_token,omitempty"` - - // Unique identifier of the port on the remote/destination side - // (z-side). Allows you to connect between your own ports or virtual devices across your company's - // Equinix Fabric deployment, with no need for a private service profile. - // Unique identifier of the port on the remote side (z-side) - ZsidePortUUID *string `json:"zsidePortUuid,omitempty" tf:"zside_port_uuid,omitempty"` - - // C-Tag/Inner-Tag of the connection on the remote/destination - // side (z-side) - a numeric character ranging from 2 - 4094. - // secondary_connection is defined it will internally use same zside_vlan_ctag for the secondary - // connection. - // C-Tag/Inner-Tag of the connection on the remote side (z-side) - ZsideVlanCtag *float64 `json:"zsideVlanCtag,omitempty" tf:"zside_vlan_ctag,omitempty"` - - // S-Tag/Outer-Tag of the connection on the remote/destination - // side (z-side) - a numeric character ranging from 2 - 4094. - // S-Tag/Outer-Tag of the connection on the remote side (z-side) - ZsideVlanStag *float64 `json:"zsideVlanStag,omitempty" tf:"zside_vlan_stag,omitempty"` -} - -type SecondaryConnectionParameters struct { - - // Unique identifier authorizing Equinix to provision a connection - // towards a cloud service provider. If not specified primary authorization_key will be used. However, - // some service providers may require different keys for each connection. More information on - // Equinix Fabric how to guide. - // Text field used to authorize connection on the provider side. Value depends on a provider service profile used for connection - // +kubebuilder:validation:Optional - AuthorizationKey *string `json:"authorizationKey,omitempty" tf:"authorization_key,omitempty"` - - // Applicable with device_uuid, identifier of network interface - // on a given device. If not specified then first available interface will be selected. - // Identifier of network interface on a given device, used for a connection. If not specified then first available interface will be selected - // +kubebuilder:validation:Optional - DeviceInterfaceID *float64 `json:"deviceInterfaceId,omitempty" tf:"device_interface_id,omitempty"` - - // Applicable with primary device_uuid. Identifier of the Network Edge - // virtual device from which the secondary connection would originate. If not specified primary - // device_uuid will be used. - // Unique identifier of the Network Edge virtual device from which the connection would originate - // +kubebuilder:validation:Optional - DeviceUUID *string `json:"deviceUuid,omitempty" tf:"device_uuid,omitempty"` - - // secondary connection name - // Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` - - // Applicable with primary port_uuid. Identifier of the Equinix Fabric Port from - // which the secondary connection would originate. If not specified primary port_uuid will be used. - // Unique identifier of the buyer's port from which the connection would originate - // +kubebuilder:validation:Optional - PortUUID *string `json:"portUuid,omitempty" tf:"port_uuid,omitempty"` - - // Unique identifier of the service provider's profile. - // Unique identifier of the service provider's service profile - // +kubebuilder:validation:Optional - ProfileUUID *string `json:"profileUuid,omitempty" tf:"profile_uuid,omitempty"` - - // The metro code that denotes the secondary connection’s - // destination (Z side). . - // The metro code that denotes the connection's remote side (z-side) - // +kubebuilder:validation:Optional - SellerMetroCode *string `json:"sellerMetroCode,omitempty" tf:"seller_metro_code,omitempty"` - - // The region in which the seller port resides. If not specified - // primary seller_region will be used. - // The region in which the seller port resides - // +kubebuilder:validation:Optional - SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` - - // Required with primary service_token. Unique Equinix Fabric key - // given by a provider that grants you authorization to enable connectivity from an Equinix Fabric Port or - // virtual device. Each connection (primary and secondary) requires a separate token. - // More details in Fabric Service Tokens. - // Unique Equinix Fabric key given by a provider that grants you authorization to enable connectivity from a shared multi-tenant port (a-side) - // +kubebuilder:validation:Optional - ServiceToken *string `json:"serviceToken,omitempty" tf:"service_token,omitempty"` - - // Speed/Bandwidth to be allocated to the secondary connection. If not - // specified primary speed will be used. - // Speed/Bandwidth to be allocated to the connection - // +kubebuilder:validation:Optional - Speed *float64 `json:"speed,omitempty" tf:"speed,omitempty"` - - // Unit of the speed/bandwidth to be allocated to the secondary - // connection. If not specified primary speed_unit will be used. - // Unit of the speed/bandwidth to be allocated to the connection - // +kubebuilder:validation:Optional - SpeedUnit *string `json:"speedUnit,omitempty" tf:"speed_unit,omitempty"` - - // Applicable with port_uuid. C-Tag/Inner-Tag of the secondary - // connection, a numeric character ranging from 2 - 4094. - // C-Tag/Inner-Tag of the connection, a numeric character ranging from 2 - 4094 - // +kubebuilder:validation:Optional - VlanCtag *float64 `json:"vlanCtag,omitempty" tf:"vlan_ctag,omitempty"` - - // S-Tag/Outer-Tag of the secondary connection, a - // numeric character ranging from 2 - 4094. - // S-Tag/Outer-Tag of the connection, a numeric character ranging from 2 - 4094 - // +kubebuilder:validation:Optional - VlanStag *float64 `json:"vlanStag,omitempty" tf:"vlan_stag,omitempty"` -} - -// L2ConnectionSpec defines the desired state of L2Connection -type L2ConnectionSpec struct { - v1.ResourceSpec `json:",inline"` - ForProvider L2ConnectionParameters `json:"forProvider"` -} - -// L2ConnectionStatus defines the observed state of L2Connection. -type L2ConnectionStatus struct { - v1.ResourceStatus `json:",inline"` - AtProvider L2ConnectionObservation `json:"atProvider,omitempty"` -} - -// +kubebuilder:object:root=true - -// L2Connection is the Schema for the L2Connections 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,equinix} -type L2Connection struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - Spec L2ConnectionSpec `json:"spec"` - Status L2ConnectionStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// L2ConnectionList contains a list of L2Connections -type L2ConnectionList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []L2Connection `json:"items"` -} - -// Repository type metadata. -var ( - L2Connection_Kind = "L2Connection" - L2Connection_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: L2Connection_Kind}.String() - L2Connection_KindAPIVersion = L2Connection_Kind + "." + CRDGroupVersion.String() - L2Connection_GroupVersionKind = CRDGroupVersion.WithKind(L2Connection_Kind) -) - -func init() { - SchemeBuilder.Register(&L2Connection{}, &L2ConnectionList{}) -} diff --git a/apis/ecx/v1alpha1/zz_l2connectionaccepter_types.go b/apis/ecx/v1alpha1/zz_l2connectionaccepter_types.go deleted file mode 100755 index c41df9c..0000000 --- a/apis/ecx/v1alpha1/zz_l2connectionaccepter_types.go +++ /dev/null @@ -1,108 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - - v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" -) - -type L2ConnectionAccepterObservation struct { - - // Identifier of a hosted Direct Connect connection on AWS side, - // applicable for accepter resource with connections to AWS only. - // Identifier of a hosted Direct Connect connection on AWS side, applicable for accepter resource with connections to AWS only - AwsConnectionID *string `json:"awsConnectionId,omitempty" tf:"aws_connection_id,omitempty"` - - ID *string `json:"id,omitempty" tf:"id,omitempty"` -} - -type L2ConnectionAccepterParameters struct { - - // and secret_key resource arguments - // Access Key used to accept connection on provider side - // +kubebuilder:validation:Optional - AccessKeySecretRef *v1.SecretKeySelector `json:"accessKeySecretRef,omitempty" tf:"-"` - - // argument or AWS_PROFILE environmental variable - // AWS Profile Name for retrieving credentials from shared credentials file - // +kubebuilder:validation:Optional - AwsProfile *string `json:"awsProfile,omitempty" tf:"aws_profile,omitempty"` - - // Identifier of Layer 2 connection that will be accepted. - // Identifier of layer 2 connection that will be accepted - // +kubebuilder:validation:Required - ConnectionID *string `json:"connectionId" tf:"connection_id,omitempty"` - - // Secret Key used to accept connection on provider side. - // Secret Key used to accept connection on provider side - // +kubebuilder:validation:Optional - SecretKeySecretRef *v1.SecretKeySelector `json:"secretKeySecretRef,omitempty" tf:"-"` -} - -// L2ConnectionAccepterSpec defines the desired state of L2ConnectionAccepter -type L2ConnectionAccepterSpec struct { - v1.ResourceSpec `json:",inline"` - ForProvider L2ConnectionAccepterParameters `json:"forProvider"` -} - -// L2ConnectionAccepterStatus defines the observed state of L2ConnectionAccepter. -type L2ConnectionAccepterStatus struct { - v1.ResourceStatus `json:",inline"` - AtProvider L2ConnectionAccepterObservation `json:"atProvider,omitempty"` -} - -// +kubebuilder:object:root=true - -// L2ConnectionAccepter is the Schema for the L2ConnectionAccepters 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,equinix} -type L2ConnectionAccepter struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - Spec L2ConnectionAccepterSpec `json:"spec"` - Status L2ConnectionAccepterStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// L2ConnectionAccepterList contains a list of L2ConnectionAccepters -type L2ConnectionAccepterList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []L2ConnectionAccepter `json:"items"` -} - -// Repository type metadata. -var ( - L2ConnectionAccepter_Kind = "L2ConnectionAccepter" - L2ConnectionAccepter_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: L2ConnectionAccepter_Kind}.String() - L2ConnectionAccepter_KindAPIVersion = L2ConnectionAccepter_Kind + "." + CRDGroupVersion.String() - L2ConnectionAccepter_GroupVersionKind = CRDGroupVersion.WithKind(L2ConnectionAccepter_Kind) -) - -func init() { - SchemeBuilder.Register(&L2ConnectionAccepter{}, &L2ConnectionAccepterList{}) -} diff --git a/apis/ecx/v1alpha1/zz_l2serviceprofile_types.go b/apis/ecx/v1alpha1/zz_l2serviceprofile_types.go deleted file mode 100755 index e5e7963..0000000 --- a/apis/ecx/v1alpha1/zz_l2serviceprofile_types.go +++ /dev/null @@ -1,300 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - - v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" -) - -type FeaturesObservation struct { -} - -type FeaturesParameters struct { - - // Indicates whether or not connections to this profile - // can be created from remote metro locations. - // Indicates whether or not connections to this profile can be created from remote metro locations - // +kubebuilder:validation:Required - AllowRemoteConnections *bool `json:"allowRemoteConnections" tf:"allow_remote_connections,omitempty"` - - // (Deprecated) Indicates whether or not this profile can be used for test - // connections. - // Indicates whether or not this profile can be used for test connections - // +kubebuilder:validation:Optional - TestProfile *bool `json:"testProfile,omitempty" tf:"test_profile,omitempty"` -} - -type L2ServiceprofileObservation struct { - ID *string `json:"id,omitempty" tf:"id,omitempty"` - - // Service profile provisioning status. - // Service profile provisioning status - State *string `json:"state,omitempty" tf:"state,omitempty"` - - // Unique identifier of the service profile. - // Unique identifier of the service profile - UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` -} - -type L2ServiceprofileParameters struct { - - // Boolean value that determines if API integration is enabled. It - // allows you to complete connection provisioning in less than five minutes. Without API Integration, - // additional manual steps will be required and the provisioning will likely take longer. - // Specifies the API integration ID that was provided to the customer during onboarding - // +kubebuilder:validation:Optional - APIIntegration *bool `json:"apiIntegration,omitempty" tf:"api_integration,omitempty"` - - // Name of the authentication key label to be used by the - // Authentication Key service. It allows Service Providers with QinQ ports to accept groups of - // connections or VLANs from Dot1q customers. This is similar to S-Tag/C-Tag capabilities. - // Name of the authentication key label to be used by the Authentication Key service - // +kubebuilder:validation:Optional - AuthkeyLabel *string `json:"authkeyLabel,omitempty" tf:"authkey_label,omitempty"` - - // Specifies the port bandwidth threshold percentage. If - // the bandwidth limit is met or exceeded, an alert is sent to the seller. - // Specifies the port bandwidth threshold percentage. If the bandwidth limit is met or exceeded, an alert is sent to the seller - // +kubebuilder:validation:Optional - BandwidthAlertThreshold *float64 `json:"bandwidthAlertThreshold,omitempty" tf:"bandwidth_alert_threshold,omitempty"` - - // A list of email addresses that will receive - // notifications about bandwidth thresholds. - // A list of email addresses that will receive notifications about bandwidth thresholds - // +kubebuilder:validation:Required - BandwidthThresholdNotifications []*string `json:"bandwidthThresholdNotifications" tf:"bandwidth_threshold_notifications,omitempty"` - - // Custom name used for calling a connections - // e.g. circuit. Defaults to Connection. - // Custom name used for calling a connections i.e. circuit. Defaults to Connection - // +kubebuilder:validation:Optional - ConnectionNameLabel *string `json:"connectionNameLabel,omitempty" tf:"connection_name_label,omitempty"` - - // C-Tag/Inner-Tag label name for the connections. - // C-Tag/Inner-Tag label name for the connections - // +kubebuilder:validation:Optional - CtagLabel *string `json:"ctagLabel,omitempty" tf:"ctag_label,omitempty"` - - // Description of the service profile. - // Description of the service profile - // +kubebuilder:validation:Optional - Description *string `json:"description,omitempty" tf:"description,omitempty"` - - // Applicable when api_integration is set to true. It - // indicates whether the port and VLAN details are managed by Equinix. - // Boolean value that indicates whether the port and VLAN details are managed by Equinix - // +kubebuilder:validation:Optional - EquinixManagedPortVlan *bool `json:"equinixManagedPortVlan,omitempty" tf:"equinix_managed_port_vlan,omitempty"` - - // Block of profile features configuration. See Features below - // for more details. - // Block of profile features configuration - // +kubebuilder:validation:Required - Features []FeaturesParameters `json:"features" tf:"features,omitempty"` - - // Specifies the API integration ID that was provided to the customer - // during onboarding. You can validate your API integration ID using the validateIntegrationId API. - // Specifies the API integration ID that was provided to the customer during onboarding - // +kubebuilder:validation:Optional - IntegrationID *string `json:"integrationId,omitempty" tf:"integration_id,omitempty"` - - // Name of the service profile. An alpha-numeric 50 characters string which can - // include only hyphens and underscores. - // Name of the service profile. An alpha-numeric 50 characters string which can include only hyphens and underscores - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` - - // You can set an alert for when a percentage of your profile has - // been sold. Service providers like to use this functionality to alert them when they need to add - // more ports or when they need to create a new service profile. Required with - // oversubscription_allowed, defaults to 1x. - // Oversubscription limit that will cause alerting. Default is 1x - // +kubebuilder:validation:Optional - Oversubscription *string `json:"oversubscription,omitempty" tf:"oversubscription,omitempty"` - - // 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. By selecting this service, you acknowledge that you will manage decisions - // on when to increase capacity on these link. - // 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 - // +kubebuilder:validation:Optional - OversubscriptionAllowed *bool `json:"oversubscriptionAllowed,omitempty" tf:"oversubscription_allowed,omitempty"` - - // One or more definitions of ports residing in locations, from which your - // customers will be able to access services using this service profile. See Port below for - // more details. - // One or more definitions of ports associated with the profile - // +kubebuilder:validation:Required - Port []PortParameters `json:"port" tf:"port,omitempty"` - - // Boolean value that indicates whether or not this is a private profile, - // i.e. not public like AWS/Azure/Oracle/Google, etc. If private, it can only be available for - // creating connections if correct permissions are granted. - // Boolean value that indicates whether or not this is a private profile. - // +kubebuilder:validation:Optional - Private *bool `json:"private,omitempty" tf:"private,omitempty"` - - // An array of users email ids who have permission to access this - // service profile. Argument is required when profile is set as private. - // A list of email addresses associated to users that will be allowed to access this service profile. Applicable for private profiles - // +kubebuilder:validation:Optional - PrivateUserEmails []*string `json:"privateUserEmails,omitempty" tf:"private_user_emails,omitempty"` - - // A list of email addresses that will receive - // notifications about profile status changes. - // A list of email addresses that will receive notifications about profile status changes - // +kubebuilder:validation:Required - ProfileStatuschangeNotifications []*string `json:"profileStatuschangeNotifications" tf:"profile_statuschange_notifications,omitempty"` - - // Boolean value that determines if your connections will require - // redundancy. if yes, then users need to create a secondary redundant connection. - // Boolean value that determines if yourconnections will require redundancy - // +kubebuilder:validation:Optional - RedundancyRequired *bool `json:"redundancyRequired,omitempty" tf:"redundancy_required,omitempty"` - - // Indicates whether the VLAN ID of. the secondary - // connection is the same as the primary connection. - // Indicates whether the VLAN ID of the secondary connection is the same as the primary connection - // +kubebuilder:validation:Optional - SecondaryVlanFromPrimary *bool `json:"secondaryVlanFromPrimary,omitempty" tf:"secondary_vlan_from_primary,omitempty"` - - // Boolean value that indicates whether multiple connections - // can be created with the same authorization key to connect to this service profile after the first - // connection has been approved by the seller. - // Boolean value that indicates whether multiple connections can be created with the same authorization key - // +kubebuilder:validation:Optional - ServicekeyAutogenerated *bool `json:"servicekeyAutogenerated,omitempty" tf:"servicekey_autogenerated,omitempty"` - - // One or more definitions of supported speed/bandwidth. Argument is - // required when speed_from_api is set to false. See Speed Band below for more - // details. - // One or more definitions of supported speed/bandwidth configurations - // +kubebuilder:validation:Optional - SpeedBand []SpeedBandParameters `json:"speedBand,omitempty" tf:"speed_band,omitempty"` - - // Boolean value that determines if customer is allowed - // to enter a custom connection speed. - // Boolean value that determines if customer is allowed to enter a custom connection speed - // +kubebuilder:validation:Optional - SpeedCustomizationAllowed *bool `json:"speedCustomizationAllowed,omitempty" tf:"speed_customization_allowed,omitempty"` - - // Boolean valuta that determines if connection speed will be derived - // from an API call. Argument has to be specified when api_integration is enabled. - // Boolean valuta that determines if connection speed will be derived from an API call - // +kubebuilder:validation:Optional - SpeedFromAPI *bool `json:"speedFromApi,omitempty" tf:"speed_from_api,omitempty"` - - // Specifies additional tagging information required by the seller profile - // for Dot1Q to QinQ translation. See Enhance Dot1q to QinQ translation support - // for additional information. Valid values are: - // Specifies additional tagging information required by the seller profile for Dot1Q to QinQ translation - // +kubebuilder:validation:Optional - TagType *string `json:"tagType,omitempty" tf:"tag_type,omitempty"` - - // A list of email addresses that will receive - // notifications about connections approvals and rejections. - // A list of email addresses that will receive notifications about connections approvals and rejections - // +kubebuilder:validation:Required - VcStatuschangeNotifications []*string `json:"vcStatuschangeNotifications" tf:"vc_statuschange_notifications,omitempty"` -} - -type PortObservation struct { -} - -type PortParameters struct { - - // The metro code of location where the port resides. - // Port location metro code - // +kubebuilder:validation:Required - MetroCode *string `json:"metroCode" tf:"metro_code,omitempty"` - - // Unique identifier of the port. - // Unique identifier of the port - // +kubebuilder:validation:Required - UUID *string `json:"uuid" tf:"uuid,omitempty"` -} - -type SpeedBandObservation struct { -} - -type SpeedBandParameters struct { - - // Speed/bandwidth supported by this service profile. - // Speed/bandwidth supported by given service profile - // +kubebuilder:validation:Required - Speed *float64 `json:"speed" tf:"speed,omitempty"` - - // Unit of the speed/bandwidth supported by this service profile. One of - // MB, GB. - // Unit of the speed/bandwidth supported by given service profile - // +kubebuilder:validation:Required - SpeedUnit *string `json:"speedUnit" tf:"speed_unit,omitempty"` -} - -// L2ServiceprofileSpec defines the desired state of L2Serviceprofile -type L2ServiceprofileSpec struct { - v1.ResourceSpec `json:",inline"` - ForProvider L2ServiceprofileParameters `json:"forProvider"` -} - -// L2ServiceprofileStatus defines the observed state of L2Serviceprofile. -type L2ServiceprofileStatus struct { - v1.ResourceStatus `json:",inline"` - AtProvider L2ServiceprofileObservation `json:"atProvider,omitempty"` -} - -// +kubebuilder:object:root=true - -// L2Serviceprofile is the Schema for the L2Serviceprofiles 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,equinix} -type L2Serviceprofile struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - Spec L2ServiceprofileSpec `json:"spec"` - Status L2ServiceprofileStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// L2ServiceprofileList contains a list of L2Serviceprofiles -type L2ServiceprofileList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []L2Serviceprofile `json:"items"` -} - -// Repository type metadata. -var ( - L2Serviceprofile_Kind = "L2Serviceprofile" - L2Serviceprofile_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: L2Serviceprofile_Kind}.String() - L2Serviceprofile_KindAPIVersion = L2Serviceprofile_Kind + "." + CRDGroupVersion.String() - L2Serviceprofile_GroupVersionKind = CRDGroupVersion.WithKind(L2Serviceprofile_Kind) -) - -func init() { - SchemeBuilder.Register(&L2Serviceprofile{}, &L2ServiceprofileList{}) -} diff --git a/apis/fabric/v1alpha1/zz_cloudrouter_terraformed.go b/apis/fabric/v1alpha1/zz_cloudrouter_terraformed.go new file mode 100755 index 0000000..3df726f --- /dev/null +++ b/apis/fabric/v1alpha1/zz_cloudrouter_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this CloudRouter +func (mg *CloudRouter) GetTerraformResourceType() string { + return "equinix_fabric_cloud_router" +} + +// GetConnectionDetailsMapping for this CloudRouter +func (tr *CloudRouter) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this CloudRouter +func (tr *CloudRouter) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this CloudRouter +func (tr *CloudRouter) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this CloudRouter +func (tr *CloudRouter) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this CloudRouter +func (tr *CloudRouter) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this CloudRouter +func (tr *CloudRouter) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this CloudRouter +func (tr *CloudRouter) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this CloudRouter +func (tr *CloudRouter) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this CloudRouter using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *CloudRouter) LateInitialize(attrs []byte) (bool, error) { + params := &CloudRouterParameters{} + 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 *CloudRouter) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/fabric/v1alpha1/zz_cloudrouter_types.go b/apis/fabric/v1alpha1/zz_cloudrouter_types.go index e307e31..ca159a4 100755 --- a/apis/fabric/v1alpha1/zz_cloudrouter_types.go +++ b/apis/fabric/v1alpha1/zz_cloudrouter_types.go @@ -25,202 +25,482 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type AccountInitParameters struct { + + // (Number) Account Number + // Account Number + AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` +} + type AccountObservation struct { + + // (Number) Account Number + // Account Number + AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` } type AccountParameters struct { + // (Number) Account Number // Account Number // +kubebuilder:validation:Optional AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` } +type ChangeLogInitParameters struct { +} + type ChangeLogObservation struct { + + // (String) CreatedBy *string `json:"createdBy,omitempty" tf:"created_by,omitempty"` + // (String) CreatedByEmail *string `json:"createdByEmail,omitempty" tf:"created_by_email,omitempty"` + // (String) CreatedByFullName *string `json:"createdByFullName,omitempty" tf:"created_by_full_name,omitempty"` + // (String) CreatedDateTime *string `json:"createdDateTime,omitempty" tf:"created_date_time,omitempty"` + // (String) DeletedBy *string `json:"deletedBy,omitempty" tf:"deleted_by,omitempty"` + // (String) DeletedByEmail *string `json:"deletedByEmail,omitempty" tf:"deleted_by_email,omitempty"` + // (String) DeletedByFullName *string `json:"deletedByFullName,omitempty" tf:"deleted_by_full_name,omitempty"` + // (String) DeletedDateTime *string `json:"deletedDateTime,omitempty" tf:"deleted_date_time,omitempty"` + // (String) UpdatedBy *string `json:"updatedBy,omitempty" tf:"updated_by,omitempty"` + // (String) UpdatedByEmail *string `json:"updatedByEmail,omitempty" tf:"updated_by_email,omitempty"` + // (String) UpdatedByFullName *string `json:"updatedByFullName,omitempty" tf:"updated_by_full_name,omitempty"` + // (String) UpdatedDateTime *string `json:"updatedDateTime,omitempty" tf:"updated_date_time,omitempty"` } type ChangeLogParameters struct { } +type CloudRouterInitParameters struct { + + // (Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema) + // Customer account information that is associated with this Fabric Cloud Router + Account []AccountInitParameters `json:"account,omitempty" tf:"account,omitempty"` + + // provided Fabric Cloud Router description + // Customer-provided Fabric Cloud Router description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Fabric Cloud Router URI information + // Fabric Cloud Router URI information + Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema) + // Fabric Cloud Router location + Location []LocationInitParameters `json:"location,omitempty" tf:"location,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema) + // Preferences for notifications on Fabric Cloud Router configuration or status changes + Notifications []NotificationsInitParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema) + // Order information related to this Fabric Cloud Router + Order []OrderInitParameters `json:"order,omitempty" tf:"order,omitempty"` + + // (Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema) + // Fabric Cloud Router Package Type + Package []PackageInitParameters `json:"package,omitempty" tf:"package,omitempty"` + + // (Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema) + // Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects + Project []ProjectInitParameters `json:"project,omitempty" tf:"project,omitempty"` + + // (String) Defines the FCR type like; XF_ROUTER + // Defines the FCR type like; XF_ROUTER + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned Fabric Cloud Router identifier + // Equinix-assigned Fabric Cloud Router identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type CloudRouterObservation struct { + // (Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema) + // Customer account information that is associated with this Fabric Cloud Router + Account []AccountObservation `json:"account,omitempty" tf:"account,omitempty"` + + // distinct prefixes) // Number of IPv4 BGP routes in use (including non-distinct prefixes) BGPIPv4RoutesCount *float64 `json:"bgpIpv4RoutesCount,omitempty" tf:"bgp_ipv4_routes_count,omitempty"` + // distinct prefixes) // Number of IPv6 BGP routes in use (including non-distinct prefixes) BGPIPv6RoutesCount *float64 `json:"bgpIpv6RoutesCount,omitempty" tf:"bgp_ipv6_routes_count,omitempty"` + // (Set of Object) Captures Fabric Cloud Router lifecycle change information (see below for nested schema) // Captures Fabric Cloud Router lifecycle change information ChangeLog []ChangeLogObservation `json:"changeLog,omitempty" tf:"change_log,omitempty"` + // (Number) Number of connections associated with this Fabric Cloud Router instance // Number of connections associated with this Fabric Cloud Router instance ConnectionsCount *float64 `json:"connectionsCount,omitempty" tf:"connections_count,omitempty"` + // provided Fabric Cloud Router description + // Customer-provided Fabric Cloud Router description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Number) Number of distinct IPv4 routes // Number of distinct IPv4 routes DistinctIPv4PrefixesCount *float64 `json:"distinctIpv4PrefixesCount,omitempty" tf:"distinct_ipv4_prefixes_count,omitempty"` + // (Number) Number of distinct IPv6 routes // Number of distinct IPv6 routes DistinctIPv6PrefixesCount *float64 `json:"distinctIpv6PrefixesCount,omitempty" tf:"distinct_ipv6_prefixes_count,omitempty"` + // (Number) Equinix ASN // Equinix ASN EquinixAsn *float64 `json:"equinixAsn,omitempty" tf:"equinix_asn,omitempty"` + // (String) Fabric Cloud Router URI information + // Fabric Cloud Router URI information + Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // (Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema) + // Fabric Cloud Router location + Location []LocationObservation `json:"location,omitempty" tf:"location,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema) + // Preferences for notifications on Fabric Cloud Router configuration or status changes + Notifications []NotificationsObservation `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema) + // Order information related to this Fabric Cloud Router + Order []OrderObservation `json:"order,omitempty" tf:"order,omitempty"` + + // (Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema) + // Fabric Cloud Router Package Type + Package []PackageObservation `json:"package,omitempty" tf:"package,omitempty"` + + // (Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema) + // Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects + Project []ProjectObservation `json:"project,omitempty" tf:"project,omitempty"` + + // (String) Fabric Cloud Router overall state // Fabric Cloud Router overall state State *string `json:"state,omitempty" tf:"state,omitempty"` + + // (String) Defines the FCR type like; XF_ROUTER + // Defines the FCR type like; XF_ROUTER + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned Fabric Cloud Router identifier + // Equinix-assigned Fabric Cloud Router identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type CloudRouterParameters struct { + // (Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema) // Customer account information that is associated with this Fabric Cloud Router - // +kubebuilder:validation:Required - Account []AccountParameters `json:"account" tf:"account,omitempty"` + // +kubebuilder:validation:Optional + Account []AccountParameters `json:"account,omitempty" tf:"account,omitempty"` + // provided Fabric Cloud Router description // Customer-provided Fabric Cloud Router description // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Fabric Cloud Router URI information // Fabric Cloud Router URI information // +kubebuilder:validation:Optional Href *string `json:"href,omitempty" tf:"href,omitempty"` + // (Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema) // Fabric Cloud Router location - // +kubebuilder:validation:Required - Location []LocationParameters `json:"location" tf:"location,omitempty"` + // +kubebuilder:validation:Optional + Location []LocationParameters `json:"location,omitempty" tf:"location,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema) // Preferences for notifications on Fabric Cloud Router configuration or status changes - // +kubebuilder:validation:Required - Notifications []NotificationsParameters `json:"notifications" tf:"notifications,omitempty"` + // +kubebuilder:validation:Optional + Notifications []NotificationsParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + // (Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema) // Order information related to this Fabric Cloud Router // +kubebuilder:validation:Optional Order []OrderParameters `json:"order,omitempty" tf:"order,omitempty"` + // (Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema) // Fabric Cloud Router Package Type - // +kubebuilder:validation:Required - Package []PackageParameters `json:"package" tf:"package,omitempty"` + // +kubebuilder:validation:Optional + Package []PackageParameters `json:"package,omitempty" tf:"package,omitempty"` + // (Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema) // Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects - // +kubebuilder:validation:Required - Project []ProjectParameters `json:"project" tf:"project,omitempty"` + // +kubebuilder:validation:Optional + Project []ProjectParameters `json:"project,omitempty" tf:"project,omitempty"` + // (String) Defines the FCR type like; XF_ROUTER // Defines the FCR type like; XF_ROUTER - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned Fabric Cloud Router identifier // Equinix-assigned Fabric Cloud Router identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type LocationInitParameters struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + type LocationObservation struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` } type LocationParameters struct { + // (String) IBX Code // IBX Code // +kubebuilder:validation:Optional Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + // (String) Access point metro code // Access point metro code // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + // (String) Access point metro name // Access point metro name // +kubebuilder:validation:Optional MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + // (String) Access point region // Access point region // +kubebuilder:validation:Optional Region *string `json:"region,omitempty" tf:"region,omitempty"` } +type NotificationsInitParameters struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // (String) Defines the FCR type like; XF_ROUTER + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type NotificationsObservation struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // (String) Defines the FCR type like; XF_ROUTER + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type NotificationsParameters struct { + // (List of String) Array of contact emails // Array of contact emails - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Emails []*string `json:"emails" tf:"emails,omitempty"` + // (String) Send interval // Send interval // +kubebuilder:validation:Optional SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + // (String) Defines the FCR type like; XF_ROUTER // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` } +type OrderInitParameters struct { + + // (String) Billing tier for connection bandwidth + // Billing tier for connection bandwidth + BillingTier *string `json:"billingTier,omitempty" tf:"billing_tier,omitempty"` + + // (String) Order Identification + // Order Identification + OrderID *string `json:"orderId,omitempty" tf:"order_id,omitempty"` + + // (String) Order Reference Number + // Order Reference Number + OrderNumber *string `json:"orderNumber,omitempty" tf:"order_number,omitempty"` + + // (String) Purchase order number + // Purchase order number + PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` +} + type OrderObservation struct { + + // (String) Billing tier for connection bandwidth + // Billing tier for connection bandwidth + BillingTier *string `json:"billingTier,omitempty" tf:"billing_tier,omitempty"` + + // (String) Order Identification + // Order Identification + OrderID *string `json:"orderId,omitempty" tf:"order_id,omitempty"` + + // (String) Order Reference Number + // Order Reference Number + OrderNumber *string `json:"orderNumber,omitempty" tf:"order_number,omitempty"` + + // (String) Purchase order number + // Purchase order number + PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` } type OrderParameters struct { + // (String) Billing tier for connection bandwidth // Billing tier for connection bandwidth // +kubebuilder:validation:Optional BillingTier *string `json:"billingTier,omitempty" tf:"billing_tier,omitempty"` + // (String) Order Identification // Order Identification // +kubebuilder:validation:Optional OrderID *string `json:"orderId,omitempty" tf:"order_id,omitempty"` + // (String) Order Reference Number // Order Reference Number // +kubebuilder:validation:Optional OrderNumber *string `json:"orderNumber,omitempty" tf:"order_number,omitempty"` + // (String) Purchase order number // Purchase order number // +kubebuilder:validation:Optional PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` } +type PackageInitParameters struct { + + // (String) Fabric Cloud Router package code + // Fabric Cloud Router package code + Code *string `json:"code,omitempty" tf:"code,omitempty"` +} + type PackageObservation struct { + + // (String) Fabric Cloud Router package code + // Fabric Cloud Router package code + Code *string `json:"code,omitempty" tf:"code,omitempty"` } type PackageParameters struct { + // (String) Fabric Cloud Router package code // Fabric Cloud Router package code - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Code *string `json:"code" tf:"code,omitempty"` } +type ProjectInitParameters struct { + + // (String) Fabric Cloud Router URI information + // Unique Resource URL + Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) Project Id + // Project Id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` +} + type ProjectObservation struct { + + // (String) Fabric Cloud Router URI information + // Unique Resource URL + Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) Project Id + // Project Id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type ProjectParameters struct { + // (String) Fabric Cloud Router URI information // Unique Resource URL // +kubebuilder:validation:Optional Href *string `json:"href,omitempty" tf:"href,omitempty"` + // (String) Project Id // Project Id // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` @@ -230,6 +510,17 @@ type ProjectParameters struct { type CloudRouterSpec struct { v1.ResourceSpec `json:",inline"` ForProvider CloudRouterParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider CloudRouterInitParameters `json:"initProvider,omitempty"` } // CloudRouterStatus defines the observed state of CloudRouter. @@ -239,19 +530,27 @@ type CloudRouterStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion -// CloudRouter is the Schema for the CloudRouters API. -// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// CloudRouter is the Schema for the CloudRouters API. Fabric V4 API compatible resource allows creation and management of Equinix Fabric Cloud Router // +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type CloudRouter struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec CloudRouterSpec `json:"spec"` - Status CloudRouterStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.account) || (has(self.initProvider) && has(self.initProvider.account))",message="spec.forProvider.account is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.location) || (has(self.initProvider) && has(self.initProvider.location))",message="spec.forProvider.location is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.notifications) || (has(self.initProvider) && has(self.initProvider.notifications))",message="spec.forProvider.notifications is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.__package__) || (has(self.initProvider) && has(self.initProvider.__package__))",message="spec.forProvider.package is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.project) || (has(self.initProvider) && has(self.initProvider.project))",message="spec.forProvider.project is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" + Spec CloudRouterSpec `json:"spec"` + Status CloudRouterStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/fabric/v1alpha1/zz_connection_terraformed.go b/apis/fabric/v1alpha1/zz_connection_terraformed.go new file mode 100755 index 0000000..a47d5d2 --- /dev/null +++ b/apis/fabric/v1alpha1/zz_connection_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Connection +func (mg *Connection) GetTerraformResourceType() string { + return "equinix_fabric_connection" +} + +// GetConnectionDetailsMapping for this Connection +func (tr *Connection) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Connection +func (tr *Connection) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Connection +func (tr *Connection) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Connection +func (tr *Connection) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Connection +func (tr *Connection) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Connection +func (tr *Connection) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Connection +func (tr *Connection) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Connection +func (tr *Connection) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Connection using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Connection) LateInitialize(attrs []byte) (bool, error) { + params := &ConnectionParameters{} + 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 *Connection) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/fabric/v1alpha1/zz_connection_types.go b/apis/fabric/v1alpha1/zz_connection_types.go index 0e1015b..fa48fc3 100755 --- a/apis/fabric/v1alpha1/zz_connection_types.go +++ b/apis/fabric/v1alpha1/zz_connection_types.go @@ -25,55 +25,88 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ASideInitParameters struct { + + // (Block Set, Max: 1) Point of access details (see below for nested schema) + // Point of access details + AccessPoint []AccessPointInitParameters `json:"accessPoint,omitempty" tf:"access_point,omitempty"` + + // (List of Map of String) Connection additional information + // Connection side additional information + AdditionalInfo []AdditionalInfoInitParameters `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + // For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets + ServiceToken []ServiceTokenInitParameters `json:"serviceToken,omitempty" tf:"service_token,omitempty"` +} + type ASideObservation struct { + // (Block Set, Max: 1) Point of access details (see below for nested schema) // Point of access details - // +kubebuilder:validation:Optional AccessPoint []AccessPointObservation `json:"accessPoint,omitempty" tf:"access_point,omitempty"` + // (List of Map of String) Connection additional information + // Connection side additional information + AdditionalInfo []AdditionalInfoObservation `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) // For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets - // +kubebuilder:validation:Optional ServiceToken []ServiceTokenObservation `json:"serviceToken,omitempty" tf:"service_token,omitempty"` } type ASideParameters struct { + // (Block Set, Max: 1) Point of access details (see below for nested schema) // Point of access details // +kubebuilder:validation:Optional AccessPoint []AccessPointParameters `json:"accessPoint,omitempty" tf:"access_point,omitempty"` + // (List of Map of String) Connection additional information // Connection side additional information // +kubebuilder:validation:Optional AdditionalInfo []AdditionalInfoParameters `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + // (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) // For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets // +kubebuilder:validation:Optional ServiceToken []ServiceTokenParameters `json:"serviceToken,omitempty" tf:"service_token,omitempty"` } +type AccessPointAccountInitParameters struct { +} + type AccessPointAccountObservation struct { + // (String) Legal name of the accountholder. // Legal name of the accountholder. AccountName *string `json:"accountName,omitempty" tf:"account_name,omitempty"` + // assigned account number. // Equinix-assigned account number. AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + // assigned ID of the subscriber's parent organization. // Equinix-assigned ID of the subscriber's parent organization. GlobalCustID *string `json:"globalCustId,omitempty" tf:"global_cust_id,omitempty"` + // assigned ID of the subscriber's parent organization. // Equinix-assigned ID of the subscriber's parent organization. GlobalOrgID *string `json:"globalOrgId,omitempty" tf:"global_org_id,omitempty"` + // assigned name of the subscriber's parent organization. // Equinix-assigned name of the subscriber's parent organization. GlobalOrganizationName *string `json:"globalOrganizationName,omitempty" tf:"global_organization_name,omitempty"` + // assigned ID of the subscriber's organization. // Equinix-assigned ID of the subscriber's organization. OrgID *float64 `json:"orgId,omitempty" tf:"org_id,omitempty"` + // assigned name of the subscriber's organization. // Equinix-assigned name of the subscriber's organization. OrganizationName *string `json:"organizationName,omitempty" tf:"organization_name,omitempty"` + // (String) Enterprise datastore id // Enterprise datastore id UcmID *string `json:"ucmId,omitempty" tf:"ucm_id,omitempty"` } @@ -81,89 +114,282 @@ type AccessPointAccountObservation struct { type AccessPointAccountParameters struct { } +type AccessPointGatewayInitParameters struct { + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointGatewayObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointGatewayParameters struct { + // assigned connection identifier // Equinix-assigned virtual gateway identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type AccessPointInitParameters struct { + + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + // Account + Account []AccessPointAccountInitParameters `json:"account,omitempty" tf:"account,omitempty"` + + // (String) Authentication key for provider based connections + // Authentication key for provider based connections + AuthenticationKey *string `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + + // (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + // **Deprecated** `gateway` Use `router` attribute instead + Gateway []GatewayInitParameters `json:"gateway,omitempty" tf:"gateway,omitempty"` + + // (Block Set, Max: 1) Virtual device interface (see below for nested schema) + // Virtual device interface + Interface []InterfaceInitParameters `json:"interface,omitempty" tf:"interface,omitempty"` + + // (Block Set, Max: 1) Connection link protocol (see below for nested schema) + // Connection link protocol + LinkProtocol []LinkProtocolInitParameters `json:"linkProtocol,omitempty" tf:"link_protocol,omitempty"` + + // (Block Set, Max: 1) Access point location (see below for nested schema) + // Access point location + Location []AccessPointLocationInitParameters `json:"location,omitempty" tf:"location,omitempty"` + + // (Block Set, Max: 1) network access point information (see below for nested schema) + // network access point information + Network []NetworkInitParameters `json:"network,omitempty" tf:"network,omitempty"` + + // PRIVATE,MICROSOFT,PUBLIC, MANUAL + // Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + PeeringType *string `json:"peeringType,omitempty" tf:"peering_type,omitempty"` + + // (Block Set, Max: 1) Port access point information (see below for nested schema) + // Port access point information + Port []PortInitParameters `json:"port,omitempty" tf:"port,omitempty"` + + // (Block Set, Max: 1) Service Profile (see below for nested schema) + // Service Profile + Profile []ProfileInitParameters `json:"profile,omitempty" tf:"profile,omitempty"` + + // (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + // Cloud Router access point information that replaces `gateway` + Router []RouterInitParameters `json:"router,omitempty" tf:"router,omitempty"` + + // (String) Access point seller region + // Access point seller region + SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Block Set, Max: 1) Virtual device (see below for nested schema) + // Virtual device + VirtualDevice []VirtualDeviceInitParameters `json:"virtualDevice,omitempty" tf:"virtual_device,omitempty"` +} + +type AccessPointInterfaceInitParameters struct { + + // (String) The ID of this resource. + // id + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Interface type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned interface identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointInterfaceObservation struct { + + // (String) The ID of this resource. + // id + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Interface type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned interface identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointInterfaceParameters struct { + // (String) The ID of this resource. // id // +kubebuilder:validation:Optional ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Interface type // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier // Equinix-assigned interface identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type AccessPointLinkProtocolInitParameters struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + // Vlan Customer Tag information, vlanCTag value specified for QINQ connections + VlanCTag *float64 `json:"vlanCTag,omitempty" tf:"vlan_c_tag,omitempty"` + + // (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + // Vlan Provider Tag information, vlanSTag value specified for QINQ connections + VlanSTag *float64 `json:"vlanSTag,omitempty" tf:"vlan_s_tag,omitempty"` + + // (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + // Vlan Tag information, vlanTag value specified for DOT1Q connections + VlanTag *float64 `json:"vlanTag,omitempty" tf:"vlan_tag,omitempty"` +} + type AccessPointLinkProtocolObservation struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + // Vlan Customer Tag information, vlanCTag value specified for QINQ connections + VlanCTag *float64 `json:"vlanCTag,omitempty" tf:"vlan_c_tag,omitempty"` + + // (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + // Vlan Provider Tag information, vlanSTag value specified for QINQ connections + VlanSTag *float64 `json:"vlanSTag,omitempty" tf:"vlan_s_tag,omitempty"` + + // (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + // Vlan Tag information, vlanTag value specified for DOT1Q connections + VlanTag *float64 `json:"vlanTag,omitempty" tf:"vlan_tag,omitempty"` } type AccessPointLinkProtocolParameters struct { + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections // Vlan Customer Tag information, vlanCTag value specified for QINQ connections // +kubebuilder:validation:Optional VlanCTag *float64 `json:"vlanCTag,omitempty" tf:"vlan_c_tag,omitempty"` + // (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections // Vlan Provider Tag information, vlanSTag value specified for QINQ connections // +kubebuilder:validation:Optional VlanSTag *float64 `json:"vlanSTag,omitempty" tf:"vlan_s_tag,omitempty"` + // (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections // Vlan Tag information, vlanTag value specified for DOT1Q connections // +kubebuilder:validation:Optional VlanTag *float64 `json:"vlanTag,omitempty" tf:"vlan_tag,omitempty"` } +type AccessPointLocationInitParameters struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + type AccessPointLocationObservation struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` } type AccessPointLocationParameters struct { + // (String) IBX Code // IBX Code // +kubebuilder:validation:Optional Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + // (String) Access point metro code // Access point metro code // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + // (String) Access point metro name // Access point metro name // +kubebuilder:validation:Optional MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + // (String) Access point region // Access point region // +kubebuilder:validation:Optional Region *string `json:"region,omitempty" tf:"region,omitempty"` } +type AccessPointNetworkInitParameters struct { + + // assigned connection identifier + // Equinix-assigned Network identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointNetworkObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // assigned connection identifier + // Equinix-assigned Network identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointNetworkParameters struct { + // assigned connection identifier // Equinix-assigned Network identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` @@ -171,325 +397,664 @@ type AccessPointNetworkParameters struct { type AccessPointObservation struct { + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) // Account - // +kubebuilder:validation:Optional Account []AccessPointAccountObservation `json:"account,omitempty" tf:"account,omitempty"` + // (String) Authentication key for provider based connections + // Authentication key for provider based connections + AuthenticationKey *string `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + + // (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) // **Deprecated** `gateway` Use `router` attribute instead - // +kubebuilder:validation:Optional Gateway []GatewayObservation `json:"gateway,omitempty" tf:"gateway,omitempty"` + // (Block Set, Max: 1) Virtual device interface (see below for nested schema) + // Virtual device interface + Interface []InterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` + + // (Block Set, Max: 1) Connection link protocol (see below for nested schema) + // Connection link protocol + LinkProtocol []LinkProtocolObservation `json:"linkProtocol,omitempty" tf:"link_protocol,omitempty"` + + // (Block Set, Max: 1) Access point location (see below for nested schema) + // Access point location + Location []AccessPointLocationObservation `json:"location,omitempty" tf:"location,omitempty"` + + // (Block Set, Max: 1) network access point information (see below for nested schema) // network access point information - // +kubebuilder:validation:Optional Network []NetworkObservation `json:"network,omitempty" tf:"network,omitempty"` + // PRIVATE,MICROSOFT,PUBLIC, MANUAL + // Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + PeeringType *string `json:"peeringType,omitempty" tf:"peering_type,omitempty"` + + // (Block Set, Max: 1) Port access point information (see below for nested schema) // Port access point information - // +kubebuilder:validation:Optional Port []PortObservation `json:"port,omitempty" tf:"port,omitempty"` + // (Block Set, Max: 1) Service Profile (see below for nested schema) // Service Profile - // +kubebuilder:validation:Optional Profile []ProfileObservation `json:"profile,omitempty" tf:"profile,omitempty"` + // (String) Provider assigned Connection Id // Provider assigned Connection Id ProviderConnectionID *string `json:"providerConnectionId,omitempty" tf:"provider_connection_id,omitempty"` + // (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) // Cloud Router access point information that replaces `gateway` - // +kubebuilder:validation:Optional Router []RouterObservation `json:"router,omitempty" tf:"router,omitempty"` + // (String) Access point seller region + // Access point seller region + SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Block Set, Max: 1) Virtual device (see below for nested schema) // Virtual device - // +kubebuilder:validation:Optional VirtualDevice []VirtualDeviceObservation `json:"virtualDevice,omitempty" tf:"virtual_device,omitempty"` } type AccessPointParameters struct { + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) // Account // +kubebuilder:validation:Optional Account []AccessPointAccountParameters `json:"account,omitempty" tf:"account,omitempty"` + // (String) Authentication key for provider based connections // Authentication key for provider based connections // +kubebuilder:validation:Optional AuthenticationKey *string `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + // (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) // **Deprecated** `gateway` Use `router` attribute instead // +kubebuilder:validation:Optional Gateway []GatewayParameters `json:"gateway,omitempty" tf:"gateway,omitempty"` + // (Block Set, Max: 1) Virtual device interface (see below for nested schema) // Virtual device interface // +kubebuilder:validation:Optional Interface []InterfaceParameters `json:"interface,omitempty" tf:"interface,omitempty"` + // (Block Set, Max: 1) Connection link protocol (see below for nested schema) // Connection link protocol // +kubebuilder:validation:Optional LinkProtocol []LinkProtocolParameters `json:"linkProtocol,omitempty" tf:"link_protocol,omitempty"` + // (Block Set, Max: 1) Access point location (see below for nested schema) // Access point location // +kubebuilder:validation:Optional Location []AccessPointLocationParameters `json:"location,omitempty" tf:"location,omitempty"` + // (Block Set, Max: 1) network access point information (see below for nested schema) // network access point information // +kubebuilder:validation:Optional Network []NetworkParameters `json:"network,omitempty" tf:"network,omitempty"` + // PRIVATE,MICROSOFT,PUBLIC, MANUAL // Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL // +kubebuilder:validation:Optional PeeringType *string `json:"peeringType,omitempty" tf:"peering_type,omitempty"` + // (Block Set, Max: 1) Port access point information (see below for nested schema) // Port access point information // +kubebuilder:validation:Optional Port []PortParameters `json:"port,omitempty" tf:"port,omitempty"` + // (Block Set, Max: 1) Service Profile (see below for nested schema) // Service Profile // +kubebuilder:validation:Optional Profile []ProfileParameters `json:"profile,omitempty" tf:"profile,omitempty"` + // (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) // Cloud Router access point information that replaces `gateway` // +kubebuilder:validation:Optional Router []RouterParameters `json:"router,omitempty" tf:"router,omitempty"` + // (String) Access point seller region // Access point seller region // +kubebuilder:validation:Optional SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // (Block Set, Max: 1) Virtual device (see below for nested schema) // Virtual device // +kubebuilder:validation:Optional VirtualDevice []VirtualDeviceParameters `json:"virtualDevice,omitempty" tf:"virtual_device,omitempty"` } +type AccessPointPortInitParameters struct { + + // assigned connection identifier + // Equinix-assigned Port identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointPortObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Port name Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) // Redundancy Information Redundancy []PortRedundancyObservation `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + + // assigned connection identifier + // Equinix-assigned Port identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointPortParameters struct { + // assigned connection identifier // Equinix-assigned Port identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type AccessPointProfileInitParameters struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix assigned service profile identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointProfileObservation struct { + // (List of Object) Access point config information (see below for nested schema) // Access point config information AccessPointTypeConfigs []ProfileAccessPointTypeConfigsObservation `json:"accessPointTypeConfigs,omitempty" tf:"access_point_type_configs,omitempty"` + // provided connection description // User-provided service description Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Connection URI information // Service Profile URI response attribute Href *string `json:"href,omitempty" tf:"href,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Customer-assigned service profile name Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix assigned service profile identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointProfileParameters struct { + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` + // assigned connection identifier // Equinix assigned service profile identifier - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional UUID *string `json:"uuid" tf:"uuid,omitempty"` } +type AccessPointRouterInitParameters struct { + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointRouterObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointRouterParameters struct { + // assigned connection identifier // Equinix-assigned virtual gateway identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type AccessPointTypeConfigsInitParameters struct { +} + type AccessPointTypeConfigsObservation struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointTypeConfigsParameters struct { } +type AccessPointVirtualDeviceInitParameters struct { + + // numeric 24 characters string which can include only hyphens and underscores + // Customer-assigned Virtual Device Name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Virtual Device type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned Virtual Device identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type AccessPointVirtualDeviceObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Customer-assigned Virtual Device Name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Virtual Device type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned Virtual Device identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type AccessPointVirtualDeviceParameters struct { + // numeric 24 characters string which can include only hyphens and underscores // Customer-assigned Virtual Device Name // +kubebuilder:validation:Optional Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Virtual Device type // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier // Equinix-assigned Virtual Device identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type AdditionalInfoInitParameters struct { + + // (String) Additional information key + // Additional information key + Key *string `json:"key,omitempty" tf:"key,omitempty"` + + // (String) Additional information value + // Additional information value + Value *string `json:"value,omitempty" tf:"value,omitempty"` +} + type AdditionalInfoObservation struct { + + // (String) Additional information key + // Additional information key + Key *string `json:"key,omitempty" tf:"key,omitempty"` + + // (String) Additional information value + // Additional information value + Value *string `json:"value,omitempty" tf:"value,omitempty"` } type AdditionalInfoParameters struct { + // (String) Additional information key // Additional information key // +kubebuilder:validation:Optional Key *string `json:"key,omitempty" tf:"key,omitempty"` + // (String) Additional information value // Additional information value // +kubebuilder:validation:Optional Value *string `json:"value,omitempty" tf:"value,omitempty"` } +type ConnectionAccountInitParameters struct { +} + type ConnectionAccountObservation struct { + + // (String) Legal name of the accountholder. AccountName *string `json:"accountName,omitempty" tf:"account_name,omitempty"` + // assigned account number. AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + // assigned ID of the subscriber's parent organization. GlobalCustID *string `json:"globalCustId,omitempty" tf:"global_cust_id,omitempty"` + // assigned ID of the subscriber's parent organization. GlobalOrgID *string `json:"globalOrgId,omitempty" tf:"global_org_id,omitempty"` + // assigned name of the subscriber's parent organization. GlobalOrganizationName *string `json:"globalOrganizationName,omitempty" tf:"global_organization_name,omitempty"` + // assigned ID of the subscriber's organization. OrgID *float64 `json:"orgId,omitempty" tf:"org_id,omitempty"` + // assigned name of the subscriber's organization. OrganizationName *string `json:"organizationName,omitempty" tf:"organization_name,omitempty"` + // (String) Enterprise datastore id UcmID *string `json:"ucmId,omitempty" tf:"ucm_id,omitempty"` } type ConnectionAccountParameters struct { } +type ConnectionChangeLogInitParameters struct { +} + type ConnectionChangeLogObservation struct { + + // (String) CreatedBy *string `json:"createdBy,omitempty" tf:"created_by,omitempty"` + // (String) CreatedByEmail *string `json:"createdByEmail,omitempty" tf:"created_by_email,omitempty"` + // (String) CreatedByFullName *string `json:"createdByFullName,omitempty" tf:"created_by_full_name,omitempty"` + // (String) CreatedDateTime *string `json:"createdDateTime,omitempty" tf:"created_date_time,omitempty"` + // (String) DeletedBy *string `json:"deletedBy,omitempty" tf:"deleted_by,omitempty"` + // (String) DeletedByEmail *string `json:"deletedByEmail,omitempty" tf:"deleted_by_email,omitempty"` + // (String) DeletedByFullName *string `json:"deletedByFullName,omitempty" tf:"deleted_by_full_name,omitempty"` + // (String) DeletedDateTime *string `json:"deletedDateTime,omitempty" tf:"deleted_date_time,omitempty"` + // (String) UpdatedBy *string `json:"updatedBy,omitempty" tf:"updated_by,omitempty"` + // (String) UpdatedByEmail *string `json:"updatedByEmail,omitempty" tf:"updated_by_email,omitempty"` + // (String) UpdatedByFullName *string `json:"updatedByFullName,omitempty" tf:"updated_by_full_name,omitempty"` + // (String) UpdatedDateTime *string `json:"updatedDateTime,omitempty" tf:"updated_date_time,omitempty"` } type ConnectionChangeLogParameters struct { } +type ConnectionInitParameters struct { + + // segment connection (see below for nested schema) + // Requester or Customer side connection configuration object of the multi-segment connection + ASide []ASideInitParameters `json:"aSide,omitempty" tf:"a_side,omitempty"` + + // (List of Map of String) Connection additional information + // Connection additional information + AdditionalInfo []map[string]*string `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // (Number) Connection bandwidth in Mbps + // Connection bandwidth in Mbps + Bandwidth *float64 `json:"bandwidth,omitempty" tf:"bandwidth,omitempty"` + + // provided connection description + // Customer-provided connection description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List, Min: 1) Preferences for notifications on connection configuration or status changes (see below for nested schema) + // Preferences for notifications on connection configuration or status changes + Notifications []ConnectionNotificationsInitParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Block Set, Min: 1, Max: 1) Order details (see below for nested schema) + // Order details + Order []ConnectionOrderInitParameters `json:"order,omitempty" tf:"order,omitempty"` + + // (Block Set, Max: 1) Project information (see below for nested schema) + // Project information + Project []ConnectionProjectInitParameters `json:"project,omitempty" tf:"project,omitempty"` + + // (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + // Connection Redundancy Configuration + Redundancy []ConnectionRedundancyInitParameters `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // segment connection (see below for nested schema) + // Destination or Provider side connection configuration object of the multi-segment connection + ZSide []ZSideInitParameters `json:"zSide,omitempty" tf:"z_side,omitempty"` +} + +type ConnectionNotificationsInitParameters struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type ConnectionNotificationsObservation struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type ConnectionNotificationsParameters struct { + // (List of String) Array of contact emails // Array of contact emails - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Emails []*string `json:"emails" tf:"emails,omitempty"` + // (String) Send interval // Send interval // +kubebuilder:validation:Optional SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` } type ConnectionObservation struct { + // segment connection (see below for nested schema) // Requester or Customer side connection configuration object of the multi-segment connection - // +kubebuilder:validation:Required ASide []ASideObservation `json:"aSide,omitempty" tf:"a_side,omitempty"` + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) // Customer account information that is associated with this connection Account []ConnectionAccountObservation `json:"account,omitempty" tf:"account,omitempty"` + // (List of Map of String) Connection additional information + // Connection additional information + AdditionalInfo []map[string]*string `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // (Number) Connection bandwidth in Mbps + // Connection bandwidth in Mbps + Bandwidth *float64 `json:"bandwidth,omitempty" tf:"bandwidth,omitempty"` + + // (Set of Object) Captures connection lifecycle change information (see below for nested schema) // Captures connection lifecycle change information ChangeLog []ConnectionChangeLogObservation `json:"changeLog,omitempty" tf:"change_log,omitempty"` + // provided connection description + // Customer-provided connection description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Connection directionality from the requester point of view // Connection directionality from the requester point of view Direction *string `json:"direction,omitempty" tf:"direction,omitempty"` + // (String) Connection URI information // Connection URI information Href *string `json:"href,omitempty" tf:"href,omitempty"` + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // (Boolean) Connection property derived from access point locations // Connection property derived from access point locations IsRemote *bool `json:"isRemote,omitempty" tf:"is_remote,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores + // Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List, Min: 1) Preferences for notifications on connection configuration or status changes (see below for nested schema) + // Preferences for notifications on connection configuration or status changes + Notifications []ConnectionNotificationsObservation `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // specific operational data (see below for nested schema) // Connection type-specific operational data Operation []OperationObservation `json:"operation,omitempty" tf:"operation,omitempty"` + // (Block Set, Min: 1, Max: 1) Order details (see below for nested schema) + // Order details + Order []ConnectionOrderObservation `json:"order,omitempty" tf:"order,omitempty"` + + // (Block Set, Max: 1) Project information (see below for nested schema) // Project information - // +kubebuilder:validation:Optional Project []ConnectionProjectObservation `json:"project,omitempty" tf:"project,omitempty"` + // (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + // Connection Redundancy Configuration + Redundancy []ConnectionRedundancyObservation `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + + // (String) Connection overall state // Connection overall state State *string `json:"state,omitempty" tf:"state,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier // Equinix-assigned connection identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + // segment connection (see below for nested schema) // Destination or Provider side connection configuration object of the multi-segment connection - // +kubebuilder:validation:Required ZSide []ZSideObservation `json:"zSide,omitempty" tf:"z_side,omitempty"` } +type ConnectionOrderInitParameters struct { + + // (String) Billing tier for connection bandwidth + // Billing tier for connection bandwidth + BillingTier *string `json:"billingTier,omitempty" tf:"billing_tier,omitempty"` + + // (String) Order Identification + // Order Identification + OrderID *string `json:"orderId,omitempty" tf:"order_id,omitempty"` + + // (String) Order Reference Number + // Order Reference Number + OrderNumber *string `json:"orderNumber,omitempty" tf:"order_number,omitempty"` + + // (String) Purchase order number + // Purchase order number + PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` +} + type ConnectionOrderObservation struct { + + // (String) Billing tier for connection bandwidth + // Billing tier for connection bandwidth + BillingTier *string `json:"billingTier,omitempty" tf:"billing_tier,omitempty"` + + // (String) Order Identification + // Order Identification + OrderID *string `json:"orderId,omitempty" tf:"order_id,omitempty"` + + // (String) Order Reference Number + // Order Reference Number + OrderNumber *string `json:"orderNumber,omitempty" tf:"order_number,omitempty"` + + // (String) Purchase order number + // Purchase order number + PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` } type ConnectionOrderParameters struct { + // (String) Billing tier for connection bandwidth // Billing tier for connection bandwidth // +kubebuilder:validation:Optional BillingTier *string `json:"billingTier,omitempty" tf:"billing_tier,omitempty"` + // (String) Order Identification // Order Identification // +kubebuilder:validation:Optional OrderID *string `json:"orderId,omitempty" tf:"order_id,omitempty"` + // (String) Order Reference Number // Order Reference Number // +kubebuilder:validation:Optional OrderNumber *string `json:"orderNumber,omitempty" tf:"order_number,omitempty"` + // (String) Purchase order number // Purchase order number // +kubebuilder:validation:Optional PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` @@ -497,334 +1062,635 @@ type ConnectionOrderParameters struct { type ConnectionParameters struct { + // segment connection (see below for nested schema) // Requester or Customer side connection configuration object of the multi-segment connection - // +kubebuilder:validation:Required - ASide []ASideParameters `json:"aSide" tf:"a_side,omitempty"` + // +kubebuilder:validation:Optional + ASide []ASideParameters `json:"aSide,omitempty" tf:"a_side,omitempty"` + // (List of Map of String) Connection additional information // Connection additional information // +kubebuilder:validation:Optional AdditionalInfo []map[string]*string `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + // (Number) Connection bandwidth in Mbps // Connection bandwidth in Mbps - // +kubebuilder:validation:Required - Bandwidth *float64 `json:"bandwidth" tf:"bandwidth,omitempty"` + // +kubebuilder:validation:Optional + Bandwidth *float64 `json:"bandwidth,omitempty" tf:"bandwidth,omitempty"` + // provided connection description // Customer-provided connection description // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Block List, Min: 1) Preferences for notifications on connection configuration or status changes (see below for nested schema) // Preferences for notifications on connection configuration or status changes - // +kubebuilder:validation:Required - Notifications []ConnectionNotificationsParameters `json:"notifications" tf:"notifications,omitempty"` + // +kubebuilder:validation:Optional + Notifications []ConnectionNotificationsParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + // (Block Set, Min: 1, Max: 1) Order details (see below for nested schema) // Order details // +kubebuilder:validation:Optional Order []ConnectionOrderParameters `json:"order,omitempty" tf:"order,omitempty"` + // (Block Set, Max: 1) Project information (see below for nested schema) // Project information // +kubebuilder:validation:Optional Project []ConnectionProjectParameters `json:"project,omitempty" tf:"project,omitempty"` + // (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) // Connection Redundancy Configuration // +kubebuilder:validation:Optional Redundancy []ConnectionRedundancyParameters `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` + // segment connection (see below for nested schema) // Destination or Provider side connection configuration object of the multi-segment connection - // +kubebuilder:validation:Required - ZSide []ZSideParameters `json:"zSide" tf:"z_side,omitempty"` + // +kubebuilder:validation:Optional + ZSide []ZSideParameters `json:"zSide,omitempty" tf:"z_side,omitempty"` +} + +type ConnectionProjectInitParameters struct { + + // (String) Project Id + // Project Id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type ConnectionProjectObservation struct { + // (String) Connection URI information // Unique Resource URL Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) Project Id + // Project Id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type ConnectionProjectParameters struct { + // (String) Project Id // Project Id // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } +type ConnectionRedundancyInitParameters struct { + + // (String) + // Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group) + Group *string `json:"group,omitempty" tf:"group,omitempty"` + + // (String) + // Connection priority in redundancy group - PRIMARY, SECONDARY + Priority *string `json:"priority,omitempty" tf:"priority,omitempty"` +} + type ConnectionRedundancyObservation struct { + + // (String) + // Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group) + Group *string `json:"group,omitempty" tf:"group,omitempty"` + + // (String) + // Connection priority in redundancy group - PRIMARY, SECONDARY + Priority *string `json:"priority,omitempty" tf:"priority,omitempty"` } type ConnectionRedundancyParameters struct { + // (String) // Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group) // +kubebuilder:validation:Optional Group *string `json:"group,omitempty" tf:"group,omitempty"` + // (String) // Connection priority in redundancy group - PRIMARY, SECONDARY // +kubebuilder:validation:Optional Priority *string `json:"priority,omitempty" tf:"priority,omitempty"` } +type ErrorsAdditionalInfoInitParameters struct { +} + type ErrorsAdditionalInfoObservation struct { + + // (String) Property *string `json:"property,omitempty" tf:"property,omitempty"` + // (String) Reason *string `json:"reason,omitempty" tf:"reason,omitempty"` } type ErrorsAdditionalInfoParameters struct { } +type ErrorsInitParameters struct { +} + type ErrorsObservation struct { + + // (List of Map of String) Connection additional information AdditionalInfo []ErrorsAdditionalInfoObservation `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + // (String) CorrelationID *string `json:"correlationId,omitempty" tf:"correlation_id,omitempty"` + // (String) Details *string `json:"details,omitempty" tf:"details,omitempty"` + // (String) ErrorCode *string `json:"errorCode,omitempty" tf:"error_code,omitempty"` + // (String) ErrorMessage *string `json:"errorMessage,omitempty" tf:"error_message,omitempty"` + // (String) Help *string `json:"help,omitempty" tf:"help,omitempty"` } type ErrorsParameters struct { } +type GatewayInitParameters struct { + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type GatewayObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type GatewayParameters struct { - // Equinix-assigned virtual gateway identifier - // +kubebuilder:validation:Optional + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + // +kubebuilder:validation:Optional + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + +type InterfaceInitParameters struct { + + // (String) The ID of this resource. + // id + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Interface type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned interface identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type InterfaceObservation struct { + + // (String) The ID of this resource. + // id + ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Interface type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned interface identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type InterfaceParameters struct { + // (String) The ID of this resource. // id // +kubebuilder:validation:Optional ID *float64 `json:"id,omitempty" tf:"id,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Interface type // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier // Equinix-assigned interface identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type LinkProtocolInitParameters struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + // Vlan Customer Tag information, vlanCTag value specified for QINQ connections + VlanCTag *float64 `json:"vlanCTag,omitempty" tf:"vlan_c_tag,omitempty"` + + // (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + // Vlan Provider Tag information, vlanSTag value specified for QINQ connections + VlanSTag *float64 `json:"vlanSTag,omitempty" tf:"vlan_s_tag,omitempty"` + + // (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + // Vlan Tag information, vlanTag value specified for DOT1Q connections + VlanTag *float64 `json:"vlanTag,omitempty" tf:"vlan_tag,omitempty"` +} + type LinkProtocolObservation struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + // Vlan Customer Tag information, vlanCTag value specified for QINQ connections + VlanCTag *float64 `json:"vlanCTag,omitempty" tf:"vlan_c_tag,omitempty"` + + // (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + // Vlan Provider Tag information, vlanSTag value specified for QINQ connections + VlanSTag *float64 `json:"vlanSTag,omitempty" tf:"vlan_s_tag,omitempty"` + + // (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + // Vlan Tag information, vlanTag value specified for DOT1Q connections + VlanTag *float64 `json:"vlanTag,omitempty" tf:"vlan_tag,omitempty"` } type LinkProtocolParameters struct { + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections // Vlan Customer Tag information, vlanCTag value specified for QINQ connections // +kubebuilder:validation:Optional VlanCTag *float64 `json:"vlanCTag,omitempty" tf:"vlan_c_tag,omitempty"` + // (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections // Vlan Provider Tag information, vlanSTag value specified for QINQ connections // +kubebuilder:validation:Optional VlanSTag *float64 `json:"vlanSTag,omitempty" tf:"vlan_s_tag,omitempty"` + // (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections // Vlan Tag information, vlanTag value specified for DOT1Q connections // +kubebuilder:validation:Optional VlanTag *float64 `json:"vlanTag,omitempty" tf:"vlan_tag,omitempty"` } +type NetworkInitParameters struct { + + // assigned connection identifier + // Equinix-assigned Network identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type NetworkObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // assigned connection identifier + // Equinix-assigned Network identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type NetworkParameters struct { + // assigned connection identifier // Equinix-assigned Network identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type OperationInitParameters struct { +} + type OperationObservation struct { + + // (String) EquinixStatus *string `json:"equinixStatus,omitempty" tf:"equinix_status,omitempty"` + // (List of Object) (see below for nested schema) Errors []ErrorsObservation `json:"errors,omitempty" tf:"errors,omitempty"` + // (String) ProviderStatus *string `json:"providerStatus,omitempty" tf:"provider_status,omitempty"` } type OperationParameters struct { } +type PortInitParameters struct { + + // assigned connection identifier + // Equinix-assigned Port identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type PortObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Port name Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) // Redundancy Information Redundancy []RedundancyObservation `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + + // assigned connection identifier + // Equinix-assigned Port identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type PortParameters struct { + // assigned connection identifier // Equinix-assigned Port identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type PortRedundancyInitParameters struct { +} + type PortRedundancyObservation struct { + + // (Boolean) Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + // (String) Group *string `json:"group,omitempty" tf:"group,omitempty"` + // (String) Priority *string `json:"priority,omitempty" tf:"priority,omitempty"` } type PortRedundancyParameters struct { } +type ProfileAccessPointTypeConfigsInitParameters struct { +} + type ProfileAccessPointTypeConfigsObservation struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type ProfileAccessPointTypeConfigsParameters struct { } +type ProfileInitParameters struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix assigned service profile identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type ProfileObservation struct { + // (List of Object) Access point config information (see below for nested schema) // Access point config information AccessPointTypeConfigs []AccessPointTypeConfigsObservation `json:"accessPointTypeConfigs,omitempty" tf:"access_point_type_configs,omitempty"` + // provided connection description // User-provided service description Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Connection URI information // Service Profile URI response attribute Href *string `json:"href,omitempty" tf:"href,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Customer-assigned service profile name Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix assigned service profile identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type ProfileParameters struct { + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` + // assigned connection identifier // Equinix assigned service profile identifier - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional UUID *string `json:"uuid" tf:"uuid,omitempty"` } +type RedundancyInitParameters struct { +} + type RedundancyObservation struct { + + // (Boolean) Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + // (String) Group *string `json:"group,omitempty" tf:"group,omitempty"` + // (String) Priority *string `json:"priority,omitempty" tf:"priority,omitempty"` } type RedundancyParameters struct { } +type RouterInitParameters struct { + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type RouterObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // assigned connection identifier + // Equinix-assigned virtual gateway identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type RouterParameters struct { + // assigned connection identifier // Equinix-assigned virtual gateway identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type ServiceTokenInitParameters struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Token type - VC_TOKEN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned service token identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type ServiceTokenObservation struct { + // provided connection description // Service token description Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Connection URI information // An absolute URL that is the subject of the link's context Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Token type - VC_TOKEN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned service token identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type ServiceTokenParameters struct { + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Token type - VC_TOKEN // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier // Equinix-assigned service token identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type VirtualDeviceInitParameters struct { + + // numeric 24 characters string which can include only hyphens and underscores + // Customer-assigned Virtual Device Name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Virtual Device type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned Virtual Device identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type VirtualDeviceObservation struct { + // (String) Connection URI information // Unique Resource Identifier Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Customer-assigned Virtual Device Name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Virtual Device type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned Virtual Device identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type VirtualDeviceParameters struct { + // numeric 24 characters string which can include only hyphens and underscores // Customer-assigned Virtual Device Name // +kubebuilder:validation:Optional Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Virtual Device type // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier // Equinix-assigned Virtual Device identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type ZSideAccessPointAccountInitParameters struct { +} + type ZSideAccessPointAccountObservation struct { + // (String) Legal name of the accountholder. // Legal name of the accountholder. AccountName *string `json:"accountName,omitempty" tf:"account_name,omitempty"` + // assigned account number. // Equinix-assigned account number. AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + // assigned ID of the subscriber's parent organization. // Equinix-assigned ID of the subscriber's parent organization. GlobalCustID *string `json:"globalCustId,omitempty" tf:"global_cust_id,omitempty"` + // assigned ID of the subscriber's parent organization. // Equinix-assigned ID of the subscriber's parent organization. GlobalOrgID *string `json:"globalOrgId,omitempty" tf:"global_org_id,omitempty"` + // assigned name of the subscriber's parent organization. // Equinix-assigned name of the subscriber's parent organization. GlobalOrganizationName *string `json:"globalOrganizationName,omitempty" tf:"global_organization_name,omitempty"` + // assigned ID of the subscriber's organization. // Equinix-assigned ID of the subscriber's organization. OrgID *float64 `json:"orgId,omitempty" tf:"org_id,omitempty"` + // assigned name of the subscriber's organization. // Equinix-assigned name of the subscriber's organization. OrganizationName *string `json:"organizationName,omitempty" tf:"organization_name,omitempty"` + // (String) Enterprise datastore id // Enterprise datastore id UcmID *string `json:"ucmId,omitempty" tf:"ucm_id,omitempty"` } @@ -832,23 +1698,121 @@ type ZSideAccessPointAccountObservation struct { type ZSideAccessPointAccountParameters struct { } +type ZSideAccessPointInitParameters struct { + + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + // Account + Account []ZSideAccessPointAccountInitParameters `json:"account,omitempty" tf:"account,omitempty"` + + // (String) Authentication key for provider based connections + // Authentication key for provider based connections + AuthenticationKey *string `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + + // (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + // **Deprecated** `gateway` Use `router` attribute instead + Gateway []AccessPointGatewayInitParameters `json:"gateway,omitempty" tf:"gateway,omitempty"` + + // (Block Set, Max: 1) Virtual device interface (see below for nested schema) + // Virtual device interface + Interface []AccessPointInterfaceInitParameters `json:"interface,omitempty" tf:"interface,omitempty"` + + // (Block Set, Max: 1) Connection link protocol (see below for nested schema) + // Connection link protocol + LinkProtocol []AccessPointLinkProtocolInitParameters `json:"linkProtocol,omitempty" tf:"link_protocol,omitempty"` + + // (Block Set, Max: 1) Access point location (see below for nested schema) + // Access point location + Location []ZSideAccessPointLocationInitParameters `json:"location,omitempty" tf:"location,omitempty"` + + // (Block Set, Max: 1) network access point information (see below for nested schema) + // network access point information + Network []AccessPointNetworkInitParameters `json:"network,omitempty" tf:"network,omitempty"` + + // PRIVATE,MICROSOFT,PUBLIC, MANUAL + // Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + PeeringType *string `json:"peeringType,omitempty" tf:"peering_type,omitempty"` + + // (Block Set, Max: 1) Port access point information (see below for nested schema) + // Port access point information + Port []AccessPointPortInitParameters `json:"port,omitempty" tf:"port,omitempty"` + + // (Block Set, Max: 1) Service Profile (see below for nested schema) + // Service Profile + Profile []AccessPointProfileInitParameters `json:"profile,omitempty" tf:"profile,omitempty"` + + // (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + // Cloud Router access point information that replaces `gateway` + Router []AccessPointRouterInitParameters `json:"router,omitempty" tf:"router,omitempty"` + + // (String) Access point seller region + // Access point seller region + SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Block Set, Max: 1) Virtual device (see below for nested schema) + // Virtual device + VirtualDevice []AccessPointVirtualDeviceInitParameters `json:"virtualDevice,omitempty" tf:"virtual_device,omitempty"` +} + +type ZSideAccessPointLocationInitParameters struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + type ZSideAccessPointLocationObservation struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` } type ZSideAccessPointLocationParameters struct { + // (String) IBX Code // IBX Code // +kubebuilder:validation:Optional Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + // (String) Access point metro code // Access point metro code // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + // (String) Access point metro name // Access point metro name // +kubebuilder:validation:Optional MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + // (String) Access point region // Access point region // +kubebuilder:validation:Optional Region *string `json:"region,omitempty" tf:"region,omitempty"` @@ -856,152 +1820,261 @@ type ZSideAccessPointLocationParameters struct { type ZSideAccessPointObservation struct { + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) // Account - // +kubebuilder:validation:Optional Account []ZSideAccessPointAccountObservation `json:"account,omitempty" tf:"account,omitempty"` + // (String) Authentication key for provider based connections + // Authentication key for provider based connections + AuthenticationKey *string `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + + // (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) // **Deprecated** `gateway` Use `router` attribute instead - // +kubebuilder:validation:Optional Gateway []AccessPointGatewayObservation `json:"gateway,omitempty" tf:"gateway,omitempty"` + // (Block Set, Max: 1) Virtual device interface (see below for nested schema) + // Virtual device interface + Interface []AccessPointInterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` + + // (Block Set, Max: 1) Connection link protocol (see below for nested schema) + // Connection link protocol + LinkProtocol []AccessPointLinkProtocolObservation `json:"linkProtocol,omitempty" tf:"link_protocol,omitempty"` + + // (Block Set, Max: 1) Access point location (see below for nested schema) + // Access point location + Location []ZSideAccessPointLocationObservation `json:"location,omitempty" tf:"location,omitempty"` + + // (Block Set, Max: 1) network access point information (see below for nested schema) // network access point information - // +kubebuilder:validation:Optional Network []AccessPointNetworkObservation `json:"network,omitempty" tf:"network,omitempty"` + // PRIVATE,MICROSOFT,PUBLIC, MANUAL + // Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + PeeringType *string `json:"peeringType,omitempty" tf:"peering_type,omitempty"` + + // (Block Set, Max: 1) Port access point information (see below for nested schema) // Port access point information - // +kubebuilder:validation:Optional Port []AccessPointPortObservation `json:"port,omitempty" tf:"port,omitempty"` + // (Block Set, Max: 1) Service Profile (see below for nested schema) // Service Profile - // +kubebuilder:validation:Optional Profile []AccessPointProfileObservation `json:"profile,omitempty" tf:"profile,omitempty"` + // (String) Provider assigned Connection Id // Provider assigned Connection Id ProviderConnectionID *string `json:"providerConnectionId,omitempty" tf:"provider_connection_id,omitempty"` + // (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) // Cloud Router access point information that replaces `gateway` - // +kubebuilder:validation:Optional Router []AccessPointRouterObservation `json:"router,omitempty" tf:"router,omitempty"` + // (String) Access point seller region + // Access point seller region + SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (Block Set, Max: 1) Virtual device (see below for nested schema) // Virtual device - // +kubebuilder:validation:Optional VirtualDevice []AccessPointVirtualDeviceObservation `json:"virtualDevice,omitempty" tf:"virtual_device,omitempty"` } type ZSideAccessPointParameters struct { + // (Set of Object) Customer account information that is associated with this connection (see below for nested schema) // Account // +kubebuilder:validation:Optional Account []ZSideAccessPointAccountParameters `json:"account,omitempty" tf:"account,omitempty"` + // (String) Authentication key for provider based connections // Authentication key for provider based connections // +kubebuilder:validation:Optional AuthenticationKey *string `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + // (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) // **Deprecated** `gateway` Use `router` attribute instead // +kubebuilder:validation:Optional Gateway []AccessPointGatewayParameters `json:"gateway,omitempty" tf:"gateway,omitempty"` + // (Block Set, Max: 1) Virtual device interface (see below for nested schema) // Virtual device interface // +kubebuilder:validation:Optional Interface []AccessPointInterfaceParameters `json:"interface,omitempty" tf:"interface,omitempty"` + // (Block Set, Max: 1) Connection link protocol (see below for nested schema) // Connection link protocol // +kubebuilder:validation:Optional LinkProtocol []AccessPointLinkProtocolParameters `json:"linkProtocol,omitempty" tf:"link_protocol,omitempty"` + // (Block Set, Max: 1) Access point location (see below for nested schema) // Access point location // +kubebuilder:validation:Optional Location []ZSideAccessPointLocationParameters `json:"location,omitempty" tf:"location,omitempty"` + // (Block Set, Max: 1) network access point information (see below for nested schema) // network access point information // +kubebuilder:validation:Optional Network []AccessPointNetworkParameters `json:"network,omitempty" tf:"network,omitempty"` + // PRIVATE,MICROSOFT,PUBLIC, MANUAL // Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL // +kubebuilder:validation:Optional PeeringType *string `json:"peeringType,omitempty" tf:"peering_type,omitempty"` + // (Block Set, Max: 1) Port access point information (see below for nested schema) // Port access point information // +kubebuilder:validation:Optional Port []AccessPointPortParameters `json:"port,omitempty" tf:"port,omitempty"` + // (Block Set, Max: 1) Service Profile (see below for nested schema) // Service Profile // +kubebuilder:validation:Optional Profile []AccessPointProfileParameters `json:"profile,omitempty" tf:"profile,omitempty"` + // (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) // Cloud Router access point information that replaces `gateway` // +kubebuilder:validation:Optional Router []AccessPointRouterParameters `json:"router,omitempty" tf:"router,omitempty"` + // (String) Access point seller region // Access point seller region // +kubebuilder:validation:Optional SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // (Block Set, Max: 1) Virtual device (see below for nested schema) // Virtual device // +kubebuilder:validation:Optional VirtualDevice []AccessPointVirtualDeviceParameters `json:"virtualDevice,omitempty" tf:"virtual_device,omitempty"` } +type ZSideAdditionalInfoInitParameters struct { + + // (String) Additional information key + // Additional information key + Key *string `json:"key,omitempty" tf:"key,omitempty"` + + // (String) Additional information value + // Additional information value + Value *string `json:"value,omitempty" tf:"value,omitempty"` +} + type ZSideAdditionalInfoObservation struct { + + // (String) Additional information key + // Additional information key + Key *string `json:"key,omitempty" tf:"key,omitempty"` + + // (String) Additional information value + // Additional information value + Value *string `json:"value,omitempty" tf:"value,omitempty"` } type ZSideAdditionalInfoParameters struct { + // (String) Additional information key // Additional information key // +kubebuilder:validation:Optional Key *string `json:"key,omitempty" tf:"key,omitempty"` + // (String) Additional information value // Additional information value // +kubebuilder:validation:Optional Value *string `json:"value,omitempty" tf:"value,omitempty"` } +type ZSideInitParameters struct { + + // (Block Set, Max: 1) Point of access details (see below for nested schema) + // Point of access details + AccessPoint []ZSideAccessPointInitParameters `json:"accessPoint,omitempty" tf:"access_point,omitempty"` + + // (List of Map of String) Connection additional information + // Connection side additional information + AdditionalInfo []ZSideAdditionalInfoInitParameters `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + // For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets + ServiceToken []ZSideServiceTokenInitParameters `json:"serviceToken,omitempty" tf:"service_token,omitempty"` +} + type ZSideObservation struct { + // (Block Set, Max: 1) Point of access details (see below for nested schema) // Point of access details - // +kubebuilder:validation:Optional AccessPoint []ZSideAccessPointObservation `json:"accessPoint,omitempty" tf:"access_point,omitempty"` + // (List of Map of String) Connection additional information + // Connection side additional information + AdditionalInfo []ZSideAdditionalInfoObservation `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) // For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets - // +kubebuilder:validation:Optional ServiceToken []ZSideServiceTokenObservation `json:"serviceToken,omitempty" tf:"service_token,omitempty"` } type ZSideParameters struct { + // (Block Set, Max: 1) Point of access details (see below for nested schema) // Point of access details // +kubebuilder:validation:Optional AccessPoint []ZSideAccessPointParameters `json:"accessPoint,omitempty" tf:"access_point,omitempty"` + // (List of Map of String) Connection additional information // Connection side additional information // +kubebuilder:validation:Optional AdditionalInfo []ZSideAdditionalInfoParameters `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + // (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) // For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets // +kubebuilder:validation:Optional ServiceToken []ZSideServiceTokenParameters `json:"serviceToken,omitempty" tf:"service_token,omitempty"` } +type ZSideServiceTokenInitParameters struct { + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Token type - VC_TOKEN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned service token identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type ZSideServiceTokenObservation struct { + // provided connection description // Service token description Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Connection URI information // An absolute URL that is the subject of the link's context Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + // Token type - VC_TOKEN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned connection identifier + // Equinix-assigned service token identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type ZSideServiceTokenParameters struct { + // (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC // Token type - VC_TOKEN // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned connection identifier // Equinix-assigned service token identifier // +kubebuilder:validation:Optional UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` @@ -1011,6 +2084,17 @@ type ZSideServiceTokenParameters struct { type ConnectionSpec struct { v1.ResourceSpec `json:",inline"` ForProvider ConnectionParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ConnectionInitParameters `json:"initProvider,omitempty"` } // ConnectionStatus defines the observed state of Connection. @@ -1020,19 +2104,26 @@ type ConnectionStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion -// Connection is the Schema for the Connections API. -// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// Connection is the Schema for the Connections API. Fabric V4 API compatible resource allows creation and management of Equinix Fabric connection // +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Connection struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ConnectionSpec `json:"spec"` - Status ConnectionStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.aSide) || (has(self.initProvider) && has(self.initProvider.aSide))",message="spec.forProvider.aSide is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.bandwidth) || (has(self.initProvider) && has(self.initProvider.bandwidth))",message="spec.forProvider.bandwidth is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.notifications) || (has(self.initProvider) && has(self.initProvider.notifications))",message="spec.forProvider.notifications is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.zSide) || (has(self.initProvider) && has(self.initProvider.zSide))",message="spec.forProvider.zSide is a required parameter" + Spec ConnectionSpec `json:"spec"` + Status ConnectionStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/fabric/v1alpha1/zz_generated.conversion_hubs.go b/apis/fabric/v1alpha1/zz_generated.conversion_hubs.go new file mode 100755 index 0000000..e95056f --- /dev/null +++ b/apis/fabric/v1alpha1/zz_generated.conversion_hubs.go @@ -0,0 +1,34 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +// Hub marks this type as a conversion hub. +func (tr *CloudRouter) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Connection) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Network) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *RoutingProtocol) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *ServiceProfile) Hub() {} diff --git a/apis/fabric/v1alpha1/zz_generated.deepcopy.go b/apis/fabric/v1alpha1/zz_generated.deepcopy.go index 98d7b84..28e3d94 100644 --- a/apis/fabric/v1alpha1/zz_generated.deepcopy.go +++ b/apis/fabric/v1alpha1/zz_generated.deepcopy.go @@ -1,5 +1,4 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated /* Copyright 2021 The Crossplane Authors. @@ -25,9 +24,94 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *APIConfigInitParameters) DeepCopyInto(out *APIConfigInitParameters) { + *out = *in + if in.APIAvailable != nil { + in, out := &in.APIAvailable, &out.APIAvailable + *out = new(bool) + **out = **in + } + if in.AllowOverSubscription != nil { + in, out := &in.AllowOverSubscription, &out.AllowOverSubscription + *out = new(bool) + **out = **in + } + if in.BandwidthFromAPI != nil { + in, out := &in.BandwidthFromAPI, &out.BandwidthFromAPI + *out = new(bool) + **out = **in + } + if in.EquinixManagedPort != nil { + in, out := &in.EquinixManagedPort, &out.EquinixManagedPort + *out = new(bool) + **out = **in + } + if in.EquinixManagedVlan != nil { + in, out := &in.EquinixManagedVlan, &out.EquinixManagedVlan + *out = new(bool) + **out = **in + } + if in.IntegrationID != nil { + in, out := &in.IntegrationID, &out.IntegrationID + *out = new(string) + **out = **in + } + if in.OverSubscriptionLimit != nil { + in, out := &in.OverSubscriptionLimit, &out.OverSubscriptionLimit + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIConfigInitParameters. +func (in *APIConfigInitParameters) DeepCopy() *APIConfigInitParameters { + if in == nil { + return nil + } + out := new(APIConfigInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *APIConfigObservation) DeepCopyInto(out *APIConfigObservation) { *out = *in + if in.APIAvailable != nil { + in, out := &in.APIAvailable, &out.APIAvailable + *out = new(bool) + **out = **in + } + if in.AllowOverSubscription != nil { + in, out := &in.AllowOverSubscription, &out.AllowOverSubscription + *out = new(bool) + **out = **in + } + if in.BandwidthFromAPI != nil { + in, out := &in.BandwidthFromAPI, &out.BandwidthFromAPI + *out = new(bool) + **out = **in + } + if in.EquinixManagedPort != nil { + in, out := &in.EquinixManagedPort, &out.EquinixManagedPort + *out = new(bool) + **out = **in + } + if in.EquinixManagedVlan != nil { + in, out := &in.EquinixManagedVlan, &out.EquinixManagedVlan + *out = new(bool) + **out = **in + } + if in.IntegrationID != nil { + in, out := &in.IntegrationID, &out.IntegrationID + *out = new(string) + **out = **in + } + if in.OverSubscriptionLimit != nil { + in, out := &in.OverSubscriptionLimit, &out.OverSubscriptionLimit + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIConfigObservation. @@ -90,6 +174,42 @@ func (in *APIConfigParameters) DeepCopy() *APIConfigParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ASideInitParameters) DeepCopyInto(out *ASideInitParameters) { + *out = *in + if in.AccessPoint != nil { + in, out := &in.AccessPoint, &out.AccessPoint + *out = make([]AccessPointInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = make([]AdditionalInfoInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ServiceToken != nil { + in, out := &in.ServiceToken, &out.ServiceToken + *out = make([]ServiceTokenInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ASideInitParameters. +func (in *ASideInitParameters) DeepCopy() *ASideInitParameters { + if in == nil { + return nil + } + out := new(ASideInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ASideObservation) DeepCopyInto(out *ASideObservation) { *out = *in @@ -100,6 +220,13 @@ func (in *ASideObservation) DeepCopyInto(out *ASideObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = make([]AdditionalInfoObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.ServiceToken != nil { in, out := &in.ServiceToken, &out.ServiceToken *out = make([]ServiceTokenObservation, len(*in)) @@ -155,6 +282,21 @@ func (in *ASideParameters) DeepCopy() *ASideParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointAccountInitParameters) DeepCopyInto(out *AccessPointAccountInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointAccountInitParameters. +func (in *AccessPointAccountInitParameters) DeepCopy() *AccessPointAccountInitParameters { + if in == nil { + return nil + } + out := new(AccessPointAccountInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointAccountObservation) DeepCopyInto(out *AccessPointAccountObservation) { *out = *in @@ -225,6 +367,26 @@ func (in *AccessPointAccountParameters) DeepCopy() *AccessPointAccountParameters return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointGatewayInitParameters) DeepCopyInto(out *AccessPointGatewayInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointGatewayInitParameters. +func (in *AccessPointGatewayInitParameters) DeepCopy() *AccessPointGatewayInitParameters { + if in == nil { + return nil + } + out := new(AccessPointGatewayInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointGatewayObservation) DeepCopyInto(out *AccessPointGatewayObservation) { *out = *in @@ -233,6 +395,11 @@ func (in *AccessPointGatewayObservation) DeepCopyInto(out *AccessPointGatewayObs *out = new(string) **out = **in } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointGatewayObservation. @@ -266,22 +433,110 @@ func (in *AccessPointGatewayParameters) DeepCopy() *AccessPointGatewayParameters } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AccessPointInterfaceObservation) DeepCopyInto(out *AccessPointInterfaceObservation) { +func (in *AccessPointInitParameters) DeepCopyInto(out *AccessPointInitParameters) { *out = *in + if in.Account != nil { + in, out := &in.Account, &out.Account + *out = make([]AccessPointAccountInitParameters, len(*in)) + copy(*out, *in) + } + if in.AuthenticationKey != nil { + in, out := &in.AuthenticationKey, &out.AuthenticationKey + *out = new(string) + **out = **in + } + if in.Gateway != nil { + in, out := &in.Gateway, &out.Gateway + *out = make([]GatewayInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]InterfaceInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LinkProtocol != nil { + in, out := &in.LinkProtocol, &out.LinkProtocol + *out = make([]LinkProtocolInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]AccessPointLocationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = make([]NetworkInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PeeringType != nil { + in, out := &in.PeeringType, &out.PeeringType + *out = new(string) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = make([]PortInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Profile != nil { + in, out := &in.Profile, &out.Profile + *out = make([]ProfileInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = make([]RouterInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SellerRegion != nil { + in, out := &in.SellerRegion, &out.SellerRegion + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VirtualDevice != nil { + in, out := &in.VirtualDevice, &out.VirtualDevice + *out = make([]VirtualDeviceInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointInterfaceObservation. -func (in *AccessPointInterfaceObservation) DeepCopy() *AccessPointInterfaceObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointInitParameters. +func (in *AccessPointInitParameters) DeepCopy() *AccessPointInitParameters { if in == nil { return nil } - out := new(AccessPointInterfaceObservation) + out := new(AccessPointInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AccessPointInterfaceParameters) DeepCopyInto(out *AccessPointInterfaceParameters) { +func (in *AccessPointInterfaceInitParameters) DeepCopyInto(out *AccessPointInterfaceInitParameters) { *out = *in if in.ID != nil { in, out := &in.ID, &out.ID @@ -300,41 +555,156 @@ func (in *AccessPointInterfaceParameters) DeepCopyInto(out *AccessPointInterface } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointInterfaceParameters. -func (in *AccessPointInterfaceParameters) DeepCopy() *AccessPointInterfaceParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointInterfaceInitParameters. +func (in *AccessPointInterfaceInitParameters) DeepCopy() *AccessPointInterfaceInitParameters { if in == nil { return nil } - out := new(AccessPointInterfaceParameters) + out := new(AccessPointInterfaceInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AccessPointLinkProtocolObservation) DeepCopyInto(out *AccessPointLinkProtocolObservation) { +func (in *AccessPointInterfaceObservation) DeepCopyInto(out *AccessPointInterfaceObservation) { *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointLinkProtocolObservation. -func (in *AccessPointLinkProtocolObservation) DeepCopy() *AccessPointLinkProtocolObservation { - if in == nil { - return nil + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in } - out := new(AccessPointLinkProtocolObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AccessPointLinkProtocolParameters) DeepCopyInto(out *AccessPointLinkProtocolParameters) { - *out = *in if in.Type != nil { in, out := &in.Type, &out.Type *out = new(string) **out = **in } - if in.VlanCTag != nil { - in, out := &in.VlanCTag, &out.VlanCTag + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointInterfaceObservation. +func (in *AccessPointInterfaceObservation) DeepCopy() *AccessPointInterfaceObservation { + if in == nil { + return nil + } + out := new(AccessPointInterfaceObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointInterfaceParameters) DeepCopyInto(out *AccessPointInterfaceParameters) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointInterfaceParameters. +func (in *AccessPointInterfaceParameters) DeepCopy() *AccessPointInterfaceParameters { + if in == nil { + return nil + } + out := new(AccessPointInterfaceParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointLinkProtocolInitParameters) DeepCopyInto(out *AccessPointLinkProtocolInitParameters) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VlanCTag != nil { + in, out := &in.VlanCTag, &out.VlanCTag + *out = new(float64) + **out = **in + } + if in.VlanSTag != nil { + in, out := &in.VlanSTag, &out.VlanSTag + *out = new(float64) + **out = **in + } + if in.VlanTag != nil { + in, out := &in.VlanTag, &out.VlanTag + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointLinkProtocolInitParameters. +func (in *AccessPointLinkProtocolInitParameters) DeepCopy() *AccessPointLinkProtocolInitParameters { + if in == nil { + return nil + } + out := new(AccessPointLinkProtocolInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointLinkProtocolObservation) DeepCopyInto(out *AccessPointLinkProtocolObservation) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VlanCTag != nil { + in, out := &in.VlanCTag, &out.VlanCTag + *out = new(float64) + **out = **in + } + if in.VlanSTag != nil { + in, out := &in.VlanSTag, &out.VlanSTag + *out = new(float64) + **out = **in + } + if in.VlanTag != nil { + in, out := &in.VlanTag, &out.VlanTag + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointLinkProtocolObservation. +func (in *AccessPointLinkProtocolObservation) DeepCopy() *AccessPointLinkProtocolObservation { + if in == nil { + return nil + } + out := new(AccessPointLinkProtocolObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointLinkProtocolParameters) DeepCopyInto(out *AccessPointLinkProtocolParameters) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VlanCTag != nil { + in, out := &in.VlanCTag, &out.VlanCTag *out = new(float64) **out = **in } @@ -360,9 +730,64 @@ func (in *AccessPointLinkProtocolParameters) DeepCopy() *AccessPointLinkProtocol return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointLocationInitParameters) DeepCopyInto(out *AccessPointLocationInitParameters) { + *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointLocationInitParameters. +func (in *AccessPointLocationInitParameters) DeepCopy() *AccessPointLocationInitParameters { + if in == nil { + return nil + } + out := new(AccessPointLocationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointLocationObservation) DeepCopyInto(out *AccessPointLocationObservation) { *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointLocationObservation. @@ -410,6 +835,26 @@ func (in *AccessPointLocationParameters) DeepCopy() *AccessPointLocationParamete return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointNetworkInitParameters) DeepCopyInto(out *AccessPointNetworkInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointNetworkInitParameters. +func (in *AccessPointNetworkInitParameters) DeepCopy() *AccessPointNetworkInitParameters { + if in == nil { + return nil + } + out := new(AccessPointNetworkInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointNetworkObservation) DeepCopyInto(out *AccessPointNetworkObservation) { *out = *in @@ -418,6 +863,11 @@ func (in *AccessPointNetworkObservation) DeepCopyInto(out *AccessPointNetworkObs *out = new(string) **out = **in } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointNetworkObservation. @@ -460,6 +910,11 @@ func (in *AccessPointObservation) DeepCopyInto(out *AccessPointObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AuthenticationKey != nil { + in, out := &in.AuthenticationKey, &out.AuthenticationKey + *out = new(string) + **out = **in + } if in.Gateway != nil { in, out := &in.Gateway, &out.Gateway *out = make([]GatewayObservation, len(*in)) @@ -467,6 +922,27 @@ func (in *AccessPointObservation) DeepCopyInto(out *AccessPointObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]InterfaceObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LinkProtocol != nil { + in, out := &in.LinkProtocol, &out.LinkProtocol + *out = make([]LinkProtocolObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]AccessPointLocationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Network != nil { in, out := &in.Network, &out.Network *out = make([]NetworkObservation, len(*in)) @@ -474,6 +950,11 @@ func (in *AccessPointObservation) DeepCopyInto(out *AccessPointObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.PeeringType != nil { + in, out := &in.PeeringType, &out.PeeringType + *out = new(string) + **out = **in + } if in.Port != nil { in, out := &in.Port, &out.Port *out = make([]PortObservation, len(*in)) @@ -500,6 +981,16 @@ func (in *AccessPointObservation) DeepCopyInto(out *AccessPointObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.SellerRegion != nil { + in, out := &in.SellerRegion, &out.SellerRegion + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.VirtualDevice != nil { in, out := &in.VirtualDevice, &out.VirtualDevice *out = make([]VirtualDeviceObservation, len(*in)) @@ -622,6 +1113,26 @@ func (in *AccessPointParameters) DeepCopy() *AccessPointParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointPortInitParameters) DeepCopyInto(out *AccessPointPortInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointPortInitParameters. +func (in *AccessPointPortInitParameters) DeepCopy() *AccessPointPortInitParameters { + if in == nil { + return nil + } + out := new(AccessPointPortInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointPortObservation) DeepCopyInto(out *AccessPointPortObservation) { *out = *in @@ -642,6 +1153,11 @@ func (in *AccessPointPortObservation) DeepCopyInto(out *AccessPointPortObservati (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointPortObservation. @@ -675,9 +1191,34 @@ func (in *AccessPointPortParameters) DeepCopy() *AccessPointPortParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AccessPointProfileObservation) DeepCopyInto(out *AccessPointProfileObservation) { +func (in *AccessPointProfileInitParameters) DeepCopyInto(out *AccessPointProfileInitParameters) { *out = *in - if in.AccessPointTypeConfigs != nil { + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointProfileInitParameters. +func (in *AccessPointProfileInitParameters) DeepCopy() *AccessPointProfileInitParameters { + if in == nil { + return nil + } + out := new(AccessPointProfileInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointProfileObservation) DeepCopyInto(out *AccessPointProfileObservation) { + *out = *in + if in.AccessPointTypeConfigs != nil { in, out := &in.AccessPointTypeConfigs, &out.AccessPointTypeConfigs *out = make([]ProfileAccessPointTypeConfigsObservation, len(*in)) for i := range *in { @@ -699,6 +1240,16 @@ func (in *AccessPointProfileObservation) DeepCopyInto(out *AccessPointProfileObs *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointProfileObservation. @@ -736,6 +1287,26 @@ func (in *AccessPointProfileParameters) DeepCopy() *AccessPointProfileParameters return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointRouterInitParameters) DeepCopyInto(out *AccessPointRouterInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointRouterInitParameters. +func (in *AccessPointRouterInitParameters) DeepCopy() *AccessPointRouterInitParameters { + if in == nil { + return nil + } + out := new(AccessPointRouterInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointRouterObservation) DeepCopyInto(out *AccessPointRouterObservation) { *out = *in @@ -744,6 +1315,11 @@ func (in *AccessPointRouterObservation) DeepCopyInto(out *AccessPointRouterObser *out = new(string) **out = **in } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointRouterObservation. @@ -776,6 +1352,21 @@ func (in *AccessPointRouterParameters) DeepCopy() *AccessPointRouterParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointTypeConfigsInitParameters) DeepCopyInto(out *AccessPointTypeConfigsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointTypeConfigsInitParameters. +func (in *AccessPointTypeConfigsInitParameters) DeepCopy() *AccessPointTypeConfigsInitParameters { + if in == nil { + return nil + } + out := new(AccessPointTypeConfigsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointTypeConfigsObservation) DeepCopyInto(out *AccessPointTypeConfigsObservation) { *out = *in @@ -816,6 +1407,36 @@ func (in *AccessPointTypeConfigsParameters) DeepCopy() *AccessPointTypeConfigsPa return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccessPointVirtualDeviceInitParameters) DeepCopyInto(out *AccessPointVirtualDeviceInitParameters) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointVirtualDeviceInitParameters. +func (in *AccessPointVirtualDeviceInitParameters) DeepCopy() *AccessPointVirtualDeviceInitParameters { + if in == nil { + return nil + } + out := new(AccessPointVirtualDeviceInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccessPointVirtualDeviceObservation) DeepCopyInto(out *AccessPointVirtualDeviceObservation) { *out = *in @@ -824,6 +1445,21 @@ func (in *AccessPointVirtualDeviceObservation) DeepCopyInto(out *AccessPointVirt *out = new(string) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccessPointVirtualDeviceObservation. @@ -866,9 +1502,34 @@ func (in *AccessPointVirtualDeviceParameters) DeepCopy() *AccessPointVirtualDevi return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AccountInitParameters) DeepCopyInto(out *AccountInitParameters) { + *out = *in + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccountInitParameters. +func (in *AccountInitParameters) DeepCopy() *AccountInitParameters { + if in == nil { + return nil + } + out := new(AccountInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AccountObservation) DeepCopyInto(out *AccountObservation) { *out = *in + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AccountObservation. @@ -901,9 +1562,44 @@ func (in *AccountParameters) DeepCopy() *AccountParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdditionalInfoInitParameters) DeepCopyInto(out *AdditionalInfoInitParameters) { + *out = *in + if in.Key != nil { + in, out := &in.Key, &out.Key + *out = new(string) + **out = **in + } + if in.Value != nil { + in, out := &in.Value, &out.Value + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdditionalInfoInitParameters. +func (in *AdditionalInfoInitParameters) DeepCopy() *AdditionalInfoInitParameters { + if in == nil { + return nil + } + out := new(AdditionalInfoInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AdditionalInfoObservation) DeepCopyInto(out *AdditionalInfoObservation) { *out = *in + if in.Key != nil { + in, out := &in.Key, &out.Key + *out = new(string) + **out = **in + } + if in.Value != nil { + in, out := &in.Value, &out.Value + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdditionalInfoObservation. @@ -941,9 +1637,54 @@ func (in *AdditionalInfoParameters) DeepCopy() *AdditionalInfoParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationKeyInitParameters) DeepCopyInto(out *AuthenticationKeyInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Required != nil { + in, out := &in.Required, &out.Required + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationKeyInitParameters. +func (in *AuthenticationKeyInitParameters) DeepCopy() *AuthenticationKeyInitParameters { + if in == nil { + return nil + } + out := new(AuthenticationKeyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AuthenticationKeyObservation) DeepCopyInto(out *AuthenticationKeyObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Required != nil { + in, out := &in.Required, &out.Required + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationKeyObservation. @@ -986,9 +1727,44 @@ func (in *AuthenticationKeyParameters) DeepCopy() *AuthenticationKeyParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BGPIPv4InitParameters) DeepCopyInto(out *BGPIPv4InitParameters) { + *out = *in + if in.CustomerPeerIP != nil { + in, out := &in.CustomerPeerIP, &out.CustomerPeerIP + *out = new(string) + **out = **in + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPIPv4InitParameters. +func (in *BGPIPv4InitParameters) DeepCopy() *BGPIPv4InitParameters { + if in == nil { + return nil + } + out := new(BGPIPv4InitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BGPIPv4Observation) DeepCopyInto(out *BGPIPv4Observation) { *out = *in + if in.CustomerPeerIP != nil { + in, out := &in.CustomerPeerIP, &out.CustomerPeerIP + *out = new(string) + **out = **in + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } if in.EquinixPeerIP != nil { in, out := &in.EquinixPeerIP, &out.EquinixPeerIP *out = new(string) @@ -1032,27 +1808,32 @@ func (in *BGPIPv4Parameters) DeepCopy() *BGPIPv4Parameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *BGPIPv6Observation) DeepCopyInto(out *BGPIPv6Observation) { +func (in *BGPIPv6InitParameters) DeepCopyInto(out *BGPIPv6InitParameters) { *out = *in - if in.EquinixPeerIP != nil { - in, out := &in.EquinixPeerIP, &out.EquinixPeerIP + if in.CustomerPeerIP != nil { + in, out := &in.CustomerPeerIP, &out.CustomerPeerIP *out = new(string) **out = **in } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPIPv6Observation. -func (in *BGPIPv6Observation) DeepCopy() *BGPIPv6Observation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPIPv6InitParameters. +func (in *BGPIPv6InitParameters) DeepCopy() *BGPIPv6InitParameters { if in == nil { return nil } - out := new(BGPIPv6Observation) + out := new(BGPIPv6InitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *BGPIPv6Parameters) DeepCopyInto(out *BGPIPv6Parameters) { +func (in *BGPIPv6Observation) DeepCopyInto(out *BGPIPv6Observation) { *out = *in if in.CustomerPeerIP != nil { in, out := &in.CustomerPeerIP, &out.CustomerPeerIP @@ -1064,14 +1845,69 @@ func (in *BGPIPv6Parameters) DeepCopyInto(out *BGPIPv6Parameters) { *out = new(bool) **out = **in } + if in.EquinixPeerIP != nil { + in, out := &in.EquinixPeerIP, &out.EquinixPeerIP + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPIPv6Parameters. -func (in *BGPIPv6Parameters) DeepCopy() *BGPIPv6Parameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPIPv6Observation. +func (in *BGPIPv6Observation) DeepCopy() *BGPIPv6Observation { if in == nil { return nil } - out := new(BGPIPv6Parameters) + out := new(BGPIPv6Observation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BGPIPv6Parameters) DeepCopyInto(out *BGPIPv6Parameters) { + *out = *in + if in.CustomerPeerIP != nil { + in, out := &in.CustomerPeerIP, &out.CustomerPeerIP + *out = new(string) + **out = **in + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPIPv6Parameters. +func (in *BGPIPv6Parameters) DeepCopy() *BGPIPv6Parameters { + if in == nil { + return nil + } + out := new(BGPIPv6Parameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BfdInitParameters) DeepCopyInto(out *BfdInitParameters) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + if in.Interval != nil { + in, out := &in.Interval, &out.Interval + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BfdInitParameters. +func (in *BfdInitParameters) DeepCopy() *BfdInitParameters { + if in == nil { + return nil + } + out := new(BfdInitParameters) in.DeepCopyInto(out) return out } @@ -1079,6 +1915,16 @@ func (in *BGPIPv6Parameters) DeepCopy() *BGPIPv6Parameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BfdObservation) DeepCopyInto(out *BfdObservation) { *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + if in.Interval != nil { + in, out := &in.Interval, &out.Interval + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BfdObservation. @@ -1116,6 +1962,36 @@ func (in *BfdParameters) DeepCopy() *BfdParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChangeInitParameters) DeepCopyInto(out *ChangeInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChangeInitParameters. +func (in *ChangeInitParameters) DeepCopy() *ChangeInitParameters { + if in == nil { + return nil + } + out := new(ChangeInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChangeLogInitParameters) DeepCopyInto(out *ChangeLogInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChangeLogInitParameters. +func (in *ChangeLogInitParameters) DeepCopy() *ChangeLogInitParameters { + if in == nil { + return nil + } + out := new(ChangeLogInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ChangeLogObservation) DeepCopyInto(out *ChangeLogObservation) { *out = *in @@ -1278,6 +2154,88 @@ func (in *CloudRouter) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudRouterInitParameters) DeepCopyInto(out *CloudRouterInitParameters) { + *out = *in + if in.Account != nil { + in, out := &in.Account, &out.Account + *out = make([]AccountInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]LocationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]NotificationsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Order != nil { + in, out := &in.Order, &out.Order + *out = make([]OrderInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Package != nil { + in, out := &in.Package, &out.Package + *out = make([]PackageInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]ProjectInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudRouterInitParameters. +func (in *CloudRouterInitParameters) DeepCopy() *CloudRouterInitParameters { + if in == nil { + return nil + } + out := new(CloudRouterInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CloudRouterList) DeepCopyInto(out *CloudRouterList) { *out = *in @@ -1313,6 +2271,13 @@ func (in *CloudRouterList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CloudRouterObservation) DeepCopyInto(out *CloudRouterObservation) { *out = *in + if in.Account != nil { + in, out := &in.Account, &out.Account + *out = make([]AccountObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.BGPIPv4RoutesCount != nil { in, out := &in.BGPIPv4RoutesCount, &out.BGPIPv4RoutesCount *out = new(float64) @@ -1335,6 +2300,11 @@ func (in *CloudRouterObservation) DeepCopyInto(out *CloudRouterObservation) { *out = new(float64) **out = **in } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.DistinctIPv4PrefixesCount != nil { in, out := &in.DistinctIPv4PrefixesCount, &out.DistinctIPv4PrefixesCount *out = new(float64) @@ -1350,16 +2320,71 @@ func (in *CloudRouterObservation) DeepCopyInto(out *CloudRouterObservation) { *out = new(float64) **out = **in } + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]LocationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]NotificationsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Order != nil { + in, out := &in.Order, &out.Order + *out = make([]OrderObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Package != nil { + in, out := &in.Package, &out.Package + *out = make([]PackageObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]ProjectObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.State != nil { in, out := &in.State, &out.State *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudRouterObservation. @@ -1459,6 +2484,7 @@ func (in *CloudRouterSpec) DeepCopyInto(out *CloudRouterSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudRouterSpec. @@ -1515,6 +2541,21 @@ func (in *Connection) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionAccountInitParameters) DeepCopyInto(out *ConnectionAccountInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionAccountInitParameters. +func (in *ConnectionAccountInitParameters) DeepCopy() *ConnectionAccountInitParameters { + if in == nil { + return nil + } + out := new(ConnectionAccountInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConnectionAccountObservation) DeepCopyInto(out *ConnectionAccountObservation) { *out = *in @@ -1585,6 +2626,21 @@ func (in *ConnectionAccountParameters) DeepCopy() *ConnectionAccountParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionChangeLogInitParameters) DeepCopyInto(out *ConnectionChangeLogInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionChangeLogInitParameters. +func (in *ConnectionChangeLogInitParameters) DeepCopy() *ConnectionChangeLogInitParameters { + if in == nil { + return nil + } + out := new(ConnectionChangeLogInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConnectionChangeLogObservation) DeepCopyInto(out *ConnectionChangeLogObservation) { *out = *in @@ -1676,40 +2732,196 @@ func (in *ConnectionChangeLogParameters) DeepCopy() *ConnectionChangeLogParamete } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConnectionList) DeepCopyInto(out *ConnectionList) { +func (in *ConnectionInitParameters) DeepCopyInto(out *ConnectionInitParameters) { *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Connection, len(*in)) + if in.ASide != nil { + in, out := &in.ASide, &out.ASide + *out = make([]ASideInitParameters, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionList. -func (in *ConnectionList) DeepCopy() *ConnectionList { - if in == nil { - return nil - } - out := new(ConnectionList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ConnectionList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = make([]map[string]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + } + } + if in.Bandwidth != nil { + in, out := &in.Bandwidth, &out.Bandwidth + *out = new(float64) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]ConnectionNotificationsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Order != nil { + in, out := &in.Order, &out.Order + *out = make([]ConnectionOrderInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]ConnectionProjectInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Redundancy != nil { + in, out := &in.Redundancy, &out.Redundancy + *out = make([]ConnectionRedundancyInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.ZSide != nil { + in, out := &in.ZSide, &out.ZSide + *out = make([]ZSideInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionInitParameters. +func (in *ConnectionInitParameters) DeepCopy() *ConnectionInitParameters { + if in == nil { + return nil + } + out := new(ConnectionInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionList) DeepCopyInto(out *ConnectionList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Connection, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionList. +func (in *ConnectionList) DeepCopy() *ConnectionList { + if in == nil { + return nil + } + out := new(ConnectionList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ConnectionList) 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 *ConnectionNotificationsInitParameters) DeepCopyInto(out *ConnectionNotificationsInitParameters) { + *out = *in + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionNotificationsInitParameters. +func (in *ConnectionNotificationsInitParameters) DeepCopy() *ConnectionNotificationsInitParameters { + if in == nil { + return nil + } + out := new(ConnectionNotificationsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConnectionNotificationsObservation) DeepCopyInto(out *ConnectionNotificationsObservation) { *out = *in + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionNotificationsObservation. @@ -1775,6 +2987,33 @@ func (in *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = make([]map[string]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + } + } + if in.Bandwidth != nil { + in, out := &in.Bandwidth, &out.Bandwidth + *out = new(float64) + **out = **in + } if in.ChangeLog != nil { in, out := &in.ChangeLog, &out.ChangeLog *out = make([]ConnectionChangeLogObservation, len(*in)) @@ -1782,6 +3021,11 @@ func (in *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.Direction != nil { in, out := &in.Direction, &out.Direction *out = new(string) @@ -1802,6 +3046,18 @@ func (in *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { *out = new(bool) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]ConnectionNotificationsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Operation != nil { in, out := &in.Operation, &out.Operation *out = make([]OperationObservation, len(*in)) @@ -1809,6 +3065,13 @@ func (in *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Order != nil { + in, out := &in.Order, &out.Order + *out = make([]ConnectionOrderObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Project != nil { in, out := &in.Project, &out.Project *out = make([]ConnectionProjectObservation, len(*in)) @@ -1816,11 +3079,23 @@ func (in *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Redundancy != nil { + in, out := &in.Redundancy, &out.Redundancy + *out = make([]ConnectionRedundancyObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.State != nil { in, out := &in.State, &out.State *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -1846,22 +3121,42 @@ func (in *ConnectionObservation) DeepCopy() *ConnectionObservation { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConnectionOrderObservation) DeepCopyInto(out *ConnectionOrderObservation) { +func (in *ConnectionOrderInitParameters) DeepCopyInto(out *ConnectionOrderInitParameters) { *out = *in + if in.BillingTier != nil { + in, out := &in.BillingTier, &out.BillingTier + *out = new(string) + **out = **in + } + if in.OrderID != nil { + in, out := &in.OrderID, &out.OrderID + *out = new(string) + **out = **in + } + if in.OrderNumber != nil { + in, out := &in.OrderNumber, &out.OrderNumber + *out = new(string) + **out = **in + } + if in.PurchaseOrderNumber != nil { + in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionOrderObservation. -func (in *ConnectionOrderObservation) DeepCopy() *ConnectionOrderObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionOrderInitParameters. +func (in *ConnectionOrderInitParameters) DeepCopy() *ConnectionOrderInitParameters { if in == nil { return nil } - out := new(ConnectionOrderObservation) + out := new(ConnectionOrderInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConnectionOrderParameters) DeepCopyInto(out *ConnectionOrderParameters) { +func (in *ConnectionOrderObservation) DeepCopyInto(out *ConnectionOrderObservation) { *out = *in if in.BillingTier != nil { in, out := &in.BillingTier, &out.BillingTier @@ -1885,24 +3180,59 @@ func (in *ConnectionOrderParameters) DeepCopyInto(out *ConnectionOrderParameters } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionOrderParameters. -func (in *ConnectionOrderParameters) DeepCopy() *ConnectionOrderParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionOrderObservation. +func (in *ConnectionOrderObservation) DeepCopy() *ConnectionOrderObservation { if in == nil { return nil } - out := new(ConnectionOrderParameters) + out := new(ConnectionOrderObservation) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { +func (in *ConnectionOrderParameters) DeepCopyInto(out *ConnectionOrderParameters) { *out = *in - if in.ASide != nil { - in, out := &in.ASide, &out.ASide - *out = make([]ASideParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) + if in.BillingTier != nil { + in, out := &in.BillingTier, &out.BillingTier + *out = new(string) + **out = **in + } + if in.OrderID != nil { + in, out := &in.OrderID, &out.OrderID + *out = new(string) + **out = **in + } + if in.OrderNumber != nil { + in, out := &in.OrderNumber, &out.OrderNumber + *out = new(string) + **out = **in + } + if in.PurchaseOrderNumber != nil { + in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionOrderParameters. +func (in *ConnectionOrderParameters) DeepCopy() *ConnectionOrderParameters { + if in == nil { + return nil + } + out := new(ConnectionOrderParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { + *out = *in + if in.ASide != nil { + in, out := &in.ASide, &out.ASide + *out = make([]ASideParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) } } if in.AdditionalInfo != nil { @@ -1917,7 +3247,8 @@ func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { if val == nil { (*out)[key] = nil } else { - in, out := &val, &outVal + inVal := (*in)[key] + in, out := &inVal, &outVal *out = new(string) **out = **in } @@ -1993,6 +3324,26 @@ func (in *ConnectionParameters) DeepCopy() *ConnectionParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionProjectInitParameters) DeepCopyInto(out *ConnectionProjectInitParameters) { + *out = *in + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionProjectInitParameters. +func (in *ConnectionProjectInitParameters) DeepCopy() *ConnectionProjectInitParameters { + if in == nil { + return nil + } + out := new(ConnectionProjectInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConnectionProjectObservation) DeepCopyInto(out *ConnectionProjectObservation) { *out = *in @@ -2001,6 +3352,11 @@ func (in *ConnectionProjectObservation) DeepCopyInto(out *ConnectionProjectObser *out = new(string) **out = **in } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionProjectObservation. @@ -2033,9 +3389,44 @@ func (in *ConnectionProjectParameters) DeepCopy() *ConnectionProjectParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionRedundancyInitParameters) DeepCopyInto(out *ConnectionRedundancyInitParameters) { + *out = *in + if in.Group != nil { + in, out := &in.Group, &out.Group + *out = new(string) + **out = **in + } + if in.Priority != nil { + in, out := &in.Priority, &out.Priority + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionRedundancyInitParameters. +func (in *ConnectionRedundancyInitParameters) DeepCopy() *ConnectionRedundancyInitParameters { + if in == nil { + return nil + } + out := new(ConnectionRedundancyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConnectionRedundancyObservation) DeepCopyInto(out *ConnectionRedundancyObservation) { *out = *in + if in.Group != nil { + in, out := &in.Group, &out.Group + *out = new(string) + **out = **in + } + if in.Priority != nil { + in, out := &in.Priority, &out.Priority + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionRedundancyObservation. @@ -2078,6 +3469,7 @@ func (in *ConnectionSpec) DeepCopyInto(out *ConnectionSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionSpec. @@ -2107,9 +3499,96 @@ func (in *ConnectionStatus) DeepCopy() *ConnectionStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CustomFieldsInitParameters) DeepCopyInto(out *CustomFieldsInitParameters) { + *out = *in + if in.CaptureInEmail != nil { + in, out := &in.CaptureInEmail, &out.CaptureInEmail + *out = new(bool) + **out = **in + } + if in.DataType != nil { + in, out := &in.DataType, &out.DataType + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Options != nil { + in, out := &in.Options, &out.Options + *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.Required != nil { + in, out := &in.Required, &out.Required + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomFieldsInitParameters. +func (in *CustomFieldsInitParameters) DeepCopy() *CustomFieldsInitParameters { + if in == nil { + return nil + } + out := new(CustomFieldsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CustomFieldsObservation) DeepCopyInto(out *CustomFieldsObservation) { *out = *in + if in.CaptureInEmail != nil { + in, out := &in.CaptureInEmail, &out.CaptureInEmail + *out = new(bool) + **out = **in + } + if in.DataType != nil { + in, out := &in.DataType, &out.DataType + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Label != nil { + in, out := &in.Label, &out.Label + *out = new(string) + **out = **in + } + if in.Options != nil { + in, out := &in.Options, &out.Options + *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.Required != nil { + in, out := &in.Required, &out.Required + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CustomFieldsObservation. @@ -2173,9 +3652,34 @@ func (in *CustomFieldsParameters) DeepCopy() *CustomFieldsParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DirectIPv4InitParameters) DeepCopyInto(out *DirectIPv4InitParameters) { + *out = *in + if in.EquinixIfaceIP != nil { + in, out := &in.EquinixIfaceIP, &out.EquinixIfaceIP + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DirectIPv4InitParameters. +func (in *DirectIPv4InitParameters) DeepCopy() *DirectIPv4InitParameters { + if in == nil { + return nil + } + out := new(DirectIPv4InitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DirectIPv4Observation) DeepCopyInto(out *DirectIPv4Observation) { *out = *in + if in.EquinixIfaceIP != nil { + in, out := &in.EquinixIfaceIP, &out.EquinixIfaceIP + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DirectIPv4Observation. @@ -2208,9 +3712,34 @@ func (in *DirectIPv4Parameters) DeepCopy() *DirectIPv4Parameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DirectIPv6InitParameters) DeepCopyInto(out *DirectIPv6InitParameters) { + *out = *in + if in.EquinixIfaceIP != nil { + in, out := &in.EquinixIfaceIP, &out.EquinixIfaceIP + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DirectIPv6InitParameters. +func (in *DirectIPv6InitParameters) DeepCopy() *DirectIPv6InitParameters { + if in == nil { + return nil + } + out := new(DirectIPv6InitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DirectIPv6Observation) DeepCopyInto(out *DirectIPv6Observation) { *out = *in + if in.EquinixIfaceIP != nil { + in, out := &in.EquinixIfaceIP, &out.EquinixIfaceIP + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DirectIPv6Observation. @@ -2243,6 +3772,21 @@ func (in *DirectIPv6Parameters) DeepCopy() *DirectIPv6Parameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ErrorsAdditionalInfoInitParameters) DeepCopyInto(out *ErrorsAdditionalInfoInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ErrorsAdditionalInfoInitParameters. +func (in *ErrorsAdditionalInfoInitParameters) DeepCopy() *ErrorsAdditionalInfoInitParameters { + if in == nil { + return nil + } + out := new(ErrorsAdditionalInfoInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ErrorsAdditionalInfoObservation) DeepCopyInto(out *ErrorsAdditionalInfoObservation) { *out = *in @@ -2283,6 +3827,21 @@ func (in *ErrorsAdditionalInfoParameters) DeepCopy() *ErrorsAdditionalInfoParame return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ErrorsInitParameters) DeepCopyInto(out *ErrorsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ErrorsInitParameters. +func (in *ErrorsInitParameters) DeepCopy() *ErrorsInitParameters { + if in == nil { + return nil + } + out := new(ErrorsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ErrorsObservation) DeepCopyInto(out *ErrorsObservation) { *out = *in @@ -2346,28 +3905,33 @@ func (in *ErrorsParameters) DeepCopy() *ErrorsParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GatewayObservation) DeepCopyInto(out *GatewayObservation) { +func (in *GatewayInitParameters) DeepCopyInto(out *GatewayInitParameters) { *out = *in - if in.Href != nil { - in, out := &in.Href, &out.Href + if in.UUID != nil { + in, out := &in.UUID, &out.UUID *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayObservation. -func (in *GatewayObservation) DeepCopy() *GatewayObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayInitParameters. +func (in *GatewayInitParameters) DeepCopy() *GatewayInitParameters { if in == nil { return nil } - out := new(GatewayObservation) + out := new(GatewayInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GatewayParameters) DeepCopyInto(out *GatewayParameters) { +func (in *GatewayObservation) DeepCopyInto(out *GatewayObservation) { *out = *in + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -2375,8 +3939,28 @@ func (in *GatewayParameters) DeepCopyInto(out *GatewayParameters) { } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayParameters. -func (in *GatewayParameters) DeepCopy() *GatewayParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayObservation. +func (in *GatewayObservation) DeepCopy() *GatewayObservation { + if in == nil { + return nil + } + out := new(GatewayObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GatewayParameters) DeepCopyInto(out *GatewayParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayParameters. +func (in *GatewayParameters) DeepCopy() *GatewayParameters { if in == nil { return nil } @@ -2385,9 +3969,54 @@ func (in *GatewayParameters) DeepCopy() *GatewayParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceInitParameters) DeepCopyInto(out *InterfaceInitParameters) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceInitParameters. +func (in *InterfaceInitParameters) DeepCopy() *InterfaceInitParameters { + if in == nil { + return nil + } + out := new(InterfaceInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InterfaceObservation) DeepCopyInto(out *InterfaceObservation) { *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceObservation. @@ -2430,9 +4059,54 @@ func (in *InterfaceParameters) DeepCopy() *InterfaceParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinkProtocolConfigInitParameters) DeepCopyInto(out *LinkProtocolConfigInitParameters) { + *out = *in + if in.Encapsulation != nil { + in, out := &in.Encapsulation, &out.Encapsulation + *out = new(string) + **out = **in + } + if in.EncapsulationStrategy != nil { + in, out := &in.EncapsulationStrategy, &out.EncapsulationStrategy + *out = new(string) + **out = **in + } + if in.ReuseVlanSTag != nil { + in, out := &in.ReuseVlanSTag, &out.ReuseVlanSTag + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinkProtocolConfigInitParameters. +func (in *LinkProtocolConfigInitParameters) DeepCopy() *LinkProtocolConfigInitParameters { + if in == nil { + return nil + } + out := new(LinkProtocolConfigInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LinkProtocolConfigObservation) DeepCopyInto(out *LinkProtocolConfigObservation) { *out = *in + if in.Encapsulation != nil { + in, out := &in.Encapsulation, &out.Encapsulation + *out = new(string) + **out = **in + } + if in.EncapsulationStrategy != nil { + in, out := &in.EncapsulationStrategy, &out.EncapsulationStrategy + *out = new(string) + **out = **in + } + if in.ReuseVlanSTag != nil { + in, out := &in.ReuseVlanSTag, &out.ReuseVlanSTag + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinkProtocolConfigObservation. @@ -2475,9 +4149,64 @@ func (in *LinkProtocolConfigParameters) DeepCopy() *LinkProtocolConfigParameters return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinkProtocolInitParameters) DeepCopyInto(out *LinkProtocolInitParameters) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VlanCTag != nil { + in, out := &in.VlanCTag, &out.VlanCTag + *out = new(float64) + **out = **in + } + if in.VlanSTag != nil { + in, out := &in.VlanSTag, &out.VlanSTag + *out = new(float64) + **out = **in + } + if in.VlanTag != nil { + in, out := &in.VlanTag, &out.VlanTag + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinkProtocolInitParameters. +func (in *LinkProtocolInitParameters) DeepCopy() *LinkProtocolInitParameters { + if in == nil { + return nil + } + out := new(LinkProtocolInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LinkProtocolObservation) DeepCopyInto(out *LinkProtocolObservation) { *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VlanCTag != nil { + in, out := &in.VlanCTag, &out.VlanCTag + *out = new(float64) + **out = **in + } + if in.VlanSTag != nil { + in, out := &in.VlanSTag, &out.VlanSTag + *out = new(float64) + **out = **in + } + if in.VlanTag != nil { + in, out := &in.VlanTag, &out.VlanTag + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinkProtocolObservation. @@ -2525,9 +4254,64 @@ func (in *LinkProtocolParameters) DeepCopy() *LinkProtocolParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LocationInitParameters) DeepCopyInto(out *LocationInitParameters) { + *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocationInitParameters. +func (in *LocationInitParameters) DeepCopy() *LocationInitParameters { + if in == nil { + return nil + } + out := new(LocationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LocationObservation) DeepCopyInto(out *LocationObservation) { *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocationObservation. @@ -2575,9 +4359,58 @@ func (in *LocationParameters) DeepCopy() *LocationParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MarketingInfoInitParameters) DeepCopyInto(out *MarketingInfoInitParameters) { + *out = *in + if in.Logo != nil { + in, out := &in.Logo, &out.Logo + *out = new(string) + **out = **in + } + if in.ProcessStep != nil { + in, out := &in.ProcessStep, &out.ProcessStep + *out = make([]ProcessStepInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Promotion != nil { + in, out := &in.Promotion, &out.Promotion + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MarketingInfoInitParameters. +func (in *MarketingInfoInitParameters) DeepCopy() *MarketingInfoInitParameters { + if in == nil { + return nil + } + out := new(MarketingInfoInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MarketingInfoObservation) DeepCopyInto(out *MarketingInfoObservation) { *out = *in + if in.Logo != nil { + in, out := &in.Logo, &out.Logo + *out = new(string) + **out = **in + } + if in.ProcessStep != nil { + in, out := &in.ProcessStep, &out.ProcessStep + *out = make([]ProcessStepObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Promotion != nil { + in, out := &in.Promotion, &out.Promotion + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MarketingInfoObservation. @@ -2623,14 +4456,123 @@ func (in *MarketingInfoParameters) DeepCopy() *MarketingInfoParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MetrosObservation) DeepCopyInto(out *MetrosObservation) { +func (in *MetrosInitParameters) DeepCopyInto(out *MetrosInitParameters) { *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetrosObservation. -func (in *MetrosObservation) DeepCopy() *MetrosObservation { - if in == nil { - return nil + if in.Code != nil { + in, out := &in.Code, &out.Code + *out = new(string) + **out = **in + } + if in.DisplayName != nil { + in, out := &in.DisplayName, &out.DisplayName + *out = new(string) + **out = **in + } + if in.Ibxs != nil { + in, out := &in.Ibxs, &out.Ibxs + *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.InTrail != nil { + in, out := &in.InTrail, &out.InTrail + *out = new(bool) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.SellerRegions != nil { + in, out := &in.SellerRegions, &out.SellerRegions + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetrosInitParameters. +func (in *MetrosInitParameters) DeepCopy() *MetrosInitParameters { + if in == nil { + return nil + } + out := new(MetrosInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetrosObservation) DeepCopyInto(out *MetrosObservation) { + *out = *in + if in.Code != nil { + in, out := &in.Code, &out.Code + *out = new(string) + **out = **in + } + if in.DisplayName != nil { + in, out := &in.DisplayName, &out.DisplayName + *out = new(string) + **out = **in + } + if in.Ibxs != nil { + in, out := &in.Ibxs, &out.Ibxs + *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.InTrail != nil { + in, out := &in.InTrail, &out.InTrail + *out = new(bool) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.SellerRegions != nil { + in, out := &in.SellerRegions, &out.SellerRegions + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetrosObservation. +func (in *MetrosObservation) DeepCopy() *MetrosObservation { + if in == nil { + return nil } out := new(MetrosObservation) in.DeepCopyInto(out) @@ -2679,7 +4621,8 @@ func (in *MetrosParameters) DeepCopyInto(out *MetrosParameters) { if val == nil { (*out)[key] = nil } else { - in, out := &val, &outVal + inVal := (*in)[key] + in, out := &inVal, &outVal *out = new(string) **out = **in } @@ -2725,6 +4668,21 @@ func (in *Network) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkChangeLogInitParameters) DeepCopyInto(out *NetworkChangeLogInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkChangeLogInitParameters. +func (in *NetworkChangeLogInitParameters) DeepCopy() *NetworkChangeLogInitParameters { + if in == nil { + return nil + } + out := new(NetworkChangeLogInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkChangeLogObservation) DeepCopyInto(out *NetworkChangeLogObservation) { *out = *in @@ -2815,6 +4773,77 @@ func (in *NetworkChangeLogParameters) DeepCopy() *NetworkChangeLogParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkInitParameters) DeepCopyInto(out *NetworkInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkInitParameters. +func (in *NetworkInitParameters) DeepCopy() *NetworkInitParameters { + if in == nil { + return nil + } + out := new(NetworkInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkInitParameters_2) DeepCopyInto(out *NetworkInitParameters_2) { + *out = *in + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]NetworkLocationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]NetworkNotificationsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]NetworkProjectInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkInitParameters_2. +func (in *NetworkInitParameters_2) DeepCopy() *NetworkInitParameters_2 { + if in == nil { + return nil + } + out := new(NetworkInitParameters_2) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkList) DeepCopyInto(out *NetworkList) { *out = *in @@ -2848,22 +4877,42 @@ func (in *NetworkList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkLocationObservation) DeepCopyInto(out *NetworkLocationObservation) { +func (in *NetworkLocationInitParameters) DeepCopyInto(out *NetworkLocationInitParameters) { *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkLocationObservation. -func (in *NetworkLocationObservation) DeepCopy() *NetworkLocationObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkLocationInitParameters. +func (in *NetworkLocationInitParameters) DeepCopy() *NetworkLocationInitParameters { if in == nil { return nil } - out := new(NetworkLocationObservation) + out := new(NetworkLocationInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkLocationParameters) DeepCopyInto(out *NetworkLocationParameters) { +func (in *NetworkLocationObservation) DeepCopyInto(out *NetworkLocationObservation) { *out = *in if in.Ibx != nil { in, out := &in.Ibx, &out.Ibx @@ -2887,33 +4936,53 @@ func (in *NetworkLocationParameters) DeepCopyInto(out *NetworkLocationParameters } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkLocationParameters. -func (in *NetworkLocationParameters) DeepCopy() *NetworkLocationParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkLocationObservation. +func (in *NetworkLocationObservation) DeepCopy() *NetworkLocationObservation { if in == nil { return nil } - out := new(NetworkLocationParameters) + out := new(NetworkLocationObservation) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkNotificationsObservation) DeepCopyInto(out *NetworkNotificationsObservation) { +func (in *NetworkLocationParameters) DeepCopyInto(out *NetworkLocationParameters) { *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkNotificationsObservation. -func (in *NetworkNotificationsObservation) DeepCopy() *NetworkNotificationsObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkLocationParameters. +func (in *NetworkLocationParameters) DeepCopy() *NetworkLocationParameters { if in == nil { return nil } - out := new(NetworkNotificationsObservation) + out := new(NetworkLocationParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkNotificationsParameters) DeepCopyInto(out *NetworkNotificationsParameters) { +func (in *NetworkNotificationsInitParameters) DeepCopyInto(out *NetworkNotificationsInitParameters) { *out = *in if in.Emails != nil { in, out := &in.Emails, &out.Emails @@ -2938,30 +5007,107 @@ func (in *NetworkNotificationsParameters) DeepCopyInto(out *NetworkNotifications } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkNotificationsParameters. -func (in *NetworkNotificationsParameters) DeepCopy() *NetworkNotificationsParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkNotificationsInitParameters. +func (in *NetworkNotificationsInitParameters) DeepCopy() *NetworkNotificationsInitParameters { if in == nil { return nil } - out := new(NetworkNotificationsParameters) + out := new(NetworkNotificationsInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkObservation) DeepCopyInto(out *NetworkObservation) { +func (in *NetworkNotificationsObservation) DeepCopyInto(out *NetworkNotificationsObservation) { *out = *in - if in.Href != nil { - in, out := &in.Href, &out.Href - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkObservation. -func (in *NetworkObservation) DeepCopy() *NetworkObservation { - if in == nil { - return nil + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkNotificationsObservation. +func (in *NetworkNotificationsObservation) DeepCopy() *NetworkNotificationsObservation { + if in == nil { + return nil + } + out := new(NetworkNotificationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkNotificationsParameters) DeepCopyInto(out *NetworkNotificationsParameters) { + *out = *in + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkNotificationsParameters. +func (in *NetworkNotificationsParameters) DeepCopy() *NetworkNotificationsParameters { + if in == nil { + return nil + } + out := new(NetworkNotificationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkObservation) DeepCopyInto(out *NetworkObservation) { + *out = *in + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkObservation. +func (in *NetworkObservation) DeepCopy() *NetworkObservation { + if in == nil { + return nil } out := new(NetworkObservation) in.DeepCopyInto(out) @@ -3000,6 +5146,25 @@ func (in *NetworkObservation_2) DeepCopyInto(out *NetworkObservation_2) { *out = new(string) **out = **in } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]NetworkLocationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]NetworkNotificationsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Operation != nil { in, out := &in.Operation, &out.Operation *out = make([]NetworkOperationObservation, len(*in)) @@ -3007,11 +5172,28 @@ func (in *NetworkObservation_2) DeepCopyInto(out *NetworkObservation_2) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]NetworkProjectObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Scope != nil { + in, out := &in.Scope, &out.Scope + *out = new(string) + **out = **in + } if in.State != nil { in, out := &in.State, &out.State *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -3029,6 +5211,21 @@ func (in *NetworkObservation_2) DeepCopy() *NetworkObservation_2 { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkOperationInitParameters) DeepCopyInto(out *NetworkOperationInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkOperationInitParameters. +func (in *NetworkOperationInitParameters) DeepCopy() *NetworkOperationInitParameters { + if in == nil { + return nil + } + out := new(NetworkOperationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkOperationObservation) DeepCopyInto(out *NetworkOperationObservation) { *out = *in @@ -3135,9 +5332,34 @@ func (in *NetworkParameters_2) DeepCopy() *NetworkParameters_2 { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkProjectInitParameters) DeepCopyInto(out *NetworkProjectInitParameters) { + *out = *in + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkProjectInitParameters. +func (in *NetworkProjectInitParameters) DeepCopy() *NetworkProjectInitParameters { + if in == nil { + return nil + } + out := new(NetworkProjectInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkProjectObservation) DeepCopyInto(out *NetworkProjectObservation) { *out = *in + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkProjectObservation. @@ -3175,6 +5397,7 @@ func (in *NetworkSpec) DeepCopyInto(out *NetworkSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkSpec. @@ -3204,9 +5427,66 @@ func (in *NetworkStatus) DeepCopy() *NetworkStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NotificationsInitParameters) DeepCopyInto(out *NotificationsInitParameters) { + *out = *in + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotificationsInitParameters. +func (in *NotificationsInitParameters) DeepCopy() *NotificationsInitParameters { + if in == nil { + return nil + } + out := new(NotificationsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NotificationsObservation) DeepCopyInto(out *NotificationsObservation) { *out = *in + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NotificationsObservation. @@ -3255,6 +5535,21 @@ func (in *NotificationsParameters) DeepCopy() *NotificationsParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperationErrorsAdditionalInfoInitParameters) DeepCopyInto(out *OperationErrorsAdditionalInfoInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperationErrorsAdditionalInfoInitParameters. +func (in *OperationErrorsAdditionalInfoInitParameters) DeepCopy() *OperationErrorsAdditionalInfoInitParameters { + if in == nil { + return nil + } + out := new(OperationErrorsAdditionalInfoInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OperationErrorsAdditionalInfoObservation) DeepCopyInto(out *OperationErrorsAdditionalInfoObservation) { *out = *in @@ -3295,6 +5590,21 @@ func (in *OperationErrorsAdditionalInfoParameters) DeepCopy() *OperationErrorsAd return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperationErrorsInitParameters) DeepCopyInto(out *OperationErrorsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperationErrorsInitParameters. +func (in *OperationErrorsInitParameters) DeepCopy() *OperationErrorsInitParameters { + if in == nil { + return nil + } + out := new(OperationErrorsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OperationErrorsObservation) DeepCopyInto(out *OperationErrorsObservation) { *out = *in @@ -3357,6 +5667,21 @@ func (in *OperationErrorsParameters) DeepCopy() *OperationErrorsParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperationInitParameters) DeepCopyInto(out *OperationInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperationInitParameters. +func (in *OperationInitParameters) DeepCopy() *OperationInitParameters { + if in == nil { + return nil + } + out := new(OperationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OperationObservation) DeepCopyInto(out *OperationObservation) { *out = *in @@ -3405,22 +5730,7 @@ func (in *OperationParameters) DeepCopy() *OperationParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OrderObservation) DeepCopyInto(out *OrderObservation) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrderObservation. -func (in *OrderObservation) DeepCopy() *OrderObservation { - if in == nil { - return nil - } - out := new(OrderObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OrderParameters) DeepCopyInto(out *OrderParameters) { +func (in *OrderInitParameters) DeepCopyInto(out *OrderInitParameters) { *out = *in if in.BillingTier != nil { in, out := &in.BillingTier, &out.BillingTier @@ -3444,7 +5754,77 @@ func (in *OrderParameters) DeepCopyInto(out *OrderParameters) { } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrderParameters. +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrderInitParameters. +func (in *OrderInitParameters) DeepCopy() *OrderInitParameters { + if in == nil { + return nil + } + out := new(OrderInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrderObservation) DeepCopyInto(out *OrderObservation) { + *out = *in + if in.BillingTier != nil { + in, out := &in.BillingTier, &out.BillingTier + *out = new(string) + **out = **in + } + if in.OrderID != nil { + in, out := &in.OrderID, &out.OrderID + *out = new(string) + **out = **in + } + if in.OrderNumber != nil { + in, out := &in.OrderNumber, &out.OrderNumber + *out = new(string) + **out = **in + } + if in.PurchaseOrderNumber != nil { + in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrderObservation. +func (in *OrderObservation) DeepCopy() *OrderObservation { + if in == nil { + return nil + } + out := new(OrderObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrderParameters) DeepCopyInto(out *OrderParameters) { + *out = *in + if in.BillingTier != nil { + in, out := &in.BillingTier, &out.BillingTier + *out = new(string) + **out = **in + } + if in.OrderID != nil { + in, out := &in.OrderID, &out.OrderID + *out = new(string) + **out = **in + } + if in.OrderNumber != nil { + in, out := &in.OrderNumber, &out.OrderNumber + *out = new(string) + **out = **in + } + if in.PurchaseOrderNumber != nil { + in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrderParameters. func (in *OrderParameters) DeepCopy() *OrderParameters { if in == nil { return nil @@ -3454,9 +5834,34 @@ func (in *OrderParameters) DeepCopy() *OrderParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PackageInitParameters) DeepCopyInto(out *PackageInitParameters) { + *out = *in + if in.Code != nil { + in, out := &in.Code, &out.Code + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageInitParameters. +func (in *PackageInitParameters) DeepCopy() *PackageInitParameters { + if in == nil { + return nil + } + out := new(PackageInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PackageObservation) DeepCopyInto(out *PackageObservation) { *out = *in + if in.Code != nil { + in, out := &in.Code, &out.Code + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PackageObservation. @@ -3489,6 +5894,26 @@ func (in *PackageParameters) DeepCopy() *PackageParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortInitParameters) DeepCopyInto(out *PortInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortInitParameters. +func (in *PortInitParameters) DeepCopy() *PortInitParameters { + if in == nil { + return nil + } + out := new(PortInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortObservation) DeepCopyInto(out *PortObservation) { *out = *in @@ -3509,6 +5934,11 @@ func (in *PortObservation) DeepCopyInto(out *PortObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortObservation. @@ -3541,6 +5971,21 @@ func (in *PortParameters) DeepCopy() *PortParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortRedundancyInitParameters) DeepCopyInto(out *PortRedundancyInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortRedundancyInitParameters. +func (in *PortRedundancyInitParameters) DeepCopy() *PortRedundancyInitParameters { + if in == nil { + return nil + } + out := new(PortRedundancyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortRedundancyObservation) DeepCopyInto(out *PortRedundancyObservation) { *out = *in @@ -3586,9 +6031,111 @@ func (in *PortRedundancyParameters) DeepCopy() *PortRedundancyParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortsInitParameters) DeepCopyInto(out *PortsInitParameters) { + *out = *in + if in.CrossConnectID != nil { + in, out := &in.CrossConnectID, &out.CrossConnectID + *out = new(string) + **out = **in + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]PortsLocationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SellerRegion != nil { + in, out := &in.SellerRegion, &out.SellerRegion + *out = new(string) + **out = **in + } + if in.SellerRegionDescription != nil { + in, out := &in.SellerRegionDescription, &out.SellerRegionDescription + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortsInitParameters. +func (in *PortsInitParameters) DeepCopy() *PortsInitParameters { + if in == nil { + return nil + } + out := new(PortsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortsLocationInitParameters) DeepCopyInto(out *PortsLocationInitParameters) { + *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortsLocationInitParameters. +func (in *PortsLocationInitParameters) DeepCopy() *PortsLocationInitParameters { + if in == nil { + return nil + } + out := new(PortsLocationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortsLocationObservation) DeepCopyInto(out *PortsLocationObservation) { *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortsLocationObservation. @@ -3639,6 +6186,38 @@ func (in *PortsLocationParameters) DeepCopy() *PortsLocationParameters { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortsObservation) DeepCopyInto(out *PortsObservation) { *out = *in + if in.CrossConnectID != nil { + in, out := &in.CrossConnectID, &out.CrossConnectID + *out = new(string) + **out = **in + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]PortsLocationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SellerRegion != nil { + in, out := &in.SellerRegion, &out.SellerRegion + *out = new(string) + **out = **in + } + if in.SellerRegionDescription != nil { + in, out := &in.SellerRegionDescription, &out.SellerRegionDescription + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortsObservation. @@ -3699,14 +6278,59 @@ func (in *PortsParameters) DeepCopy() *PortsParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ProcessStepObservation) DeepCopyInto(out *ProcessStepObservation) { +func (in *ProcessStepInitParameters) DeepCopyInto(out *ProcessStepInitParameters) { *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProcessStepObservation. -func (in *ProcessStepObservation) DeepCopy() *ProcessStepObservation { - if in == nil { - return nil + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.SubTitle != nil { + in, out := &in.SubTitle, &out.SubTitle + *out = new(string) + **out = **in + } + if in.Title != nil { + in, out := &in.Title, &out.Title + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProcessStepInitParameters. +func (in *ProcessStepInitParameters) DeepCopy() *ProcessStepInitParameters { + if in == nil { + return nil + } + out := new(ProcessStepInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProcessStepObservation) DeepCopyInto(out *ProcessStepObservation) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.SubTitle != nil { + in, out := &in.SubTitle, &out.SubTitle + *out = new(string) + **out = **in + } + if in.Title != nil { + in, out := &in.Title, &out.Title + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProcessStepObservation. +func (in *ProcessStepObservation) DeepCopy() *ProcessStepObservation { + if in == nil { + return nil } out := new(ProcessStepObservation) in.DeepCopyInto(out) @@ -3743,6 +6367,21 @@ func (in *ProcessStepParameters) DeepCopy() *ProcessStepParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProfileAccessPointTypeConfigsInitParameters) DeepCopyInto(out *ProfileAccessPointTypeConfigsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProfileAccessPointTypeConfigsInitParameters. +func (in *ProfileAccessPointTypeConfigsInitParameters) DeepCopy() *ProfileAccessPointTypeConfigsInitParameters { + if in == nil { + return nil + } + out := new(ProfileAccessPointTypeConfigsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProfileAccessPointTypeConfigsObservation) DeepCopyInto(out *ProfileAccessPointTypeConfigsObservation) { *out = *in @@ -3783,6 +6422,31 @@ func (in *ProfileAccessPointTypeConfigsParameters) DeepCopy() *ProfileAccessPoin return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProfileInitParameters) DeepCopyInto(out *ProfileInitParameters) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProfileInitParameters. +func (in *ProfileInitParameters) DeepCopy() *ProfileInitParameters { + if in == nil { + return nil + } + out := new(ProfileInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProfileObservation) DeepCopyInto(out *ProfileObservation) { *out = *in @@ -3808,6 +6472,16 @@ func (in *ProfileObservation) DeepCopyInto(out *ProfileObservation) { *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProfileObservation. @@ -3845,9 +6519,44 @@ func (in *ProfileParameters) DeepCopy() *ProfileParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectInitParameters) DeepCopyInto(out *ProjectInitParameters) { + *out = *in + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectInitParameters. +func (in *ProjectInitParameters) DeepCopy() *ProjectInitParameters { + if in == nil { + return nil + } + out := new(ProjectInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProjectObservation) DeepCopyInto(out *ProjectObservation) { *out = *in + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectObservation. @@ -3885,6 +6594,21 @@ func (in *ProjectParameters) DeepCopy() *ProjectParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedundancyInitParameters) DeepCopyInto(out *RedundancyInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedundancyInitParameters. +func (in *RedundancyInitParameters) DeepCopy() *RedundancyInitParameters { + if in == nil { + return nil + } + out := new(RedundancyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RedundancyObservation) DeepCopyInto(out *RedundancyObservation) { *out = *in @@ -3930,6 +6654,26 @@ func (in *RedundancyParameters) DeepCopy() *RedundancyParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RouterInitParameters) DeepCopyInto(out *RouterInitParameters) { + *out = *in + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouterInitParameters. +func (in *RouterInitParameters) DeepCopy() *RouterInitParameters { + if in == nil { + return nil + } + out := new(RouterInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RouterObservation) DeepCopyInto(out *RouterObservation) { *out = *in @@ -3938,6 +6682,11 @@ func (in *RouterObservation) DeepCopyInto(out *RouterObservation) { *out = new(string) **out = **in } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RouterObservation. @@ -3997,6 +6746,36 @@ func (in *RoutingProtocol) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoutingProtocolChangeInitParameters) DeepCopyInto(out *RoutingProtocolChangeInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingProtocolChangeInitParameters. +func (in *RoutingProtocolChangeInitParameters) DeepCopy() *RoutingProtocolChangeInitParameters { + if in == nil { + return nil + } + out := new(RoutingProtocolChangeInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoutingProtocolChangeLogInitParameters) DeepCopyInto(out *RoutingProtocolChangeLogInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingProtocolChangeLogInitParameters. +func (in *RoutingProtocolChangeLogInitParameters) DeepCopy() *RoutingProtocolChangeLogInitParameters { + if in == nil { + return nil + } + out := new(RoutingProtocolChangeLogInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RoutingProtocolChangeLogObservation) DeepCopyInto(out *RoutingProtocolChangeLogObservation) { *out = *in @@ -4132,6 +6911,91 @@ func (in *RoutingProtocolChangeParameters) DeepCopy() *RoutingProtocolChangePara return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoutingProtocolInitParameters) DeepCopyInto(out *RoutingProtocolInitParameters) { + *out = *in + if in.BGPAuthKey != nil { + in, out := &in.BGPAuthKey, &out.BGPAuthKey + *out = new(string) + **out = **in + } + if in.BGPIPv4 != nil { + in, out := &in.BGPIPv4, &out.BGPIPv4 + *out = make([]BGPIPv4InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BGPIPv6 != nil { + in, out := &in.BGPIPv6, &out.BGPIPv6 + *out = make([]BGPIPv6InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Bfd != nil { + in, out := &in.Bfd, &out.Bfd + *out = make([]BfdInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ConnectionUUID != nil { + in, out := &in.ConnectionUUID, &out.ConnectionUUID + *out = new(string) + **out = **in + } + if in.CustomerAsn != nil { + in, out := &in.CustomerAsn, &out.CustomerAsn + *out = new(float64) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DirectIPv4 != nil { + in, out := &in.DirectIPv4, &out.DirectIPv4 + *out = make([]DirectIPv4InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DirectIPv6 != nil { + in, out := &in.DirectIPv6, &out.DirectIPv6 + *out = make([]DirectIPv6InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingProtocolInitParameters. +func (in *RoutingProtocolInitParameters) DeepCopy() *RoutingProtocolInitParameters { + if in == nil { + return nil + } + out := new(RoutingProtocolInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RoutingProtocolList) DeepCopyInto(out *RoutingProtocolList) { *out = *in @@ -4167,6 +7031,11 @@ func (in *RoutingProtocolList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RoutingProtocolObservation) DeepCopyInto(out *RoutingProtocolObservation) { *out = *in + if in.BGPAuthKey != nil { + in, out := &in.BGPAuthKey, &out.BGPAuthKey + *out = new(string) + **out = **in + } if in.BGPIPv4 != nil { in, out := &in.BGPIPv4, &out.BGPIPv4 *out = make([]BGPIPv4Observation, len(*in)) @@ -4181,10 +7050,17 @@ func (in *RoutingProtocolObservation) DeepCopyInto(out *RoutingProtocolObservati (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.Change != nil { - in, out := &in.Change, &out.Change - *out = make([]RoutingProtocolChangeObservation, len(*in)) - for i := range *in { + if in.Bfd != nil { + in, out := &in.Bfd, &out.Bfd + *out = make([]BfdObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Change != nil { + in, out := &in.Change, &out.Change + *out = make([]RoutingProtocolChangeObservation, len(*in)) + for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } @@ -4195,6 +7071,35 @@ func (in *RoutingProtocolObservation) DeepCopyInto(out *RoutingProtocolObservati (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ConnectionUUID != nil { + in, out := &in.ConnectionUUID, &out.ConnectionUUID + *out = new(string) + **out = **in + } + if in.CustomerAsn != nil { + in, out := &in.CustomerAsn, &out.CustomerAsn + *out = new(float64) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DirectIPv4 != nil { + in, out := &in.DirectIPv4, &out.DirectIPv4 + *out = make([]DirectIPv4Observation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.DirectIPv6 != nil { + in, out := &in.DirectIPv6, &out.DirectIPv6 + *out = make([]DirectIPv6Observation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.EquinixAsn != nil { in, out := &in.EquinixAsn, &out.EquinixAsn *out = new(float64) @@ -4210,6 +7115,11 @@ func (in *RoutingProtocolObservation) DeepCopyInto(out *RoutingProtocolObservati *out = new(string) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } if in.Operation != nil { in, out := &in.Operation, &out.Operation *out = make([]RoutingProtocolOperationObservation, len(*in)) @@ -4222,6 +7132,16 @@ func (in *RoutingProtocolObservation) DeepCopyInto(out *RoutingProtocolObservati *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingProtocolObservation. @@ -4234,6 +7154,21 @@ func (in *RoutingProtocolObservation) DeepCopy() *RoutingProtocolObservation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RoutingProtocolOperationInitParameters) DeepCopyInto(out *RoutingProtocolOperationInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingProtocolOperationInitParameters. +func (in *RoutingProtocolOperationInitParameters) DeepCopy() *RoutingProtocolOperationInitParameters { + if in == nil { + return nil + } + out := new(RoutingProtocolOperationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RoutingProtocolOperationObservation) DeepCopyInto(out *RoutingProtocolOperationObservation) { *out = *in @@ -4361,6 +7296,7 @@ func (in *RoutingProtocolSpec) DeepCopyInto(out *RoutingProtocolSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RoutingProtocolSpec. @@ -4417,9 +7353,178 @@ func (in *ServiceProfile) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceProfileAccessPointTypeConfigsInitParameters) DeepCopyInto(out *ServiceProfileAccessPointTypeConfigsInitParameters) { + *out = *in + if in.APIConfig != nil { + in, out := &in.APIConfig, &out.APIConfig + *out = make([]APIConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AllowBandwidthAutoApproval != nil { + in, out := &in.AllowBandwidthAutoApproval, &out.AllowBandwidthAutoApproval + *out = new(bool) + **out = **in + } + if in.AllowBandwidthUpgrade != nil { + in, out := &in.AllowBandwidthUpgrade, &out.AllowBandwidthUpgrade + *out = new(bool) + **out = **in + } + if in.AllowCustomBandwidth != nil { + in, out := &in.AllowCustomBandwidth, &out.AllowCustomBandwidth + *out = new(bool) + **out = **in + } + if in.AllowRemoteConnections != nil { + in, out := &in.AllowRemoteConnections, &out.AllowRemoteConnections + *out = new(bool) + **out = **in + } + if in.AuthenticationKey != nil { + in, out := &in.AuthenticationKey, &out.AuthenticationKey + *out = make([]AuthenticationKeyInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BandwidthAlertThreshold != nil { + in, out := &in.BandwidthAlertThreshold, &out.BandwidthAlertThreshold + *out = new(float64) + **out = **in + } + if in.ConnectionLabel != nil { + in, out := &in.ConnectionLabel, &out.ConnectionLabel + *out = new(string) + **out = **in + } + if in.ConnectionRedundancyRequired != nil { + in, out := &in.ConnectionRedundancyRequired, &out.ConnectionRedundancyRequired + *out = new(bool) + **out = **in + } + if in.EnableAutoGenerateServiceKey != nil { + in, out := &in.EnableAutoGenerateServiceKey, &out.EnableAutoGenerateServiceKey + *out = new(bool) + **out = **in + } + if in.LinkProtocolConfig != nil { + in, out := &in.LinkProtocolConfig, &out.LinkProtocolConfig + *out = make([]LinkProtocolConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SupportedBandwidths != nil { + in, out := &in.SupportedBandwidths, &out.SupportedBandwidths + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileAccessPointTypeConfigsInitParameters. +func (in *ServiceProfileAccessPointTypeConfigsInitParameters) DeepCopy() *ServiceProfileAccessPointTypeConfigsInitParameters { + if in == nil { + return nil + } + out := new(ServiceProfileAccessPointTypeConfigsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceProfileAccessPointTypeConfigsObservation) DeepCopyInto(out *ServiceProfileAccessPointTypeConfigsObservation) { *out = *in + if in.APIConfig != nil { + in, out := &in.APIConfig, &out.APIConfig + *out = make([]APIConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AllowBandwidthAutoApproval != nil { + in, out := &in.AllowBandwidthAutoApproval, &out.AllowBandwidthAutoApproval + *out = new(bool) + **out = **in + } + if in.AllowBandwidthUpgrade != nil { + in, out := &in.AllowBandwidthUpgrade, &out.AllowBandwidthUpgrade + *out = new(bool) + **out = **in + } + if in.AllowCustomBandwidth != nil { + in, out := &in.AllowCustomBandwidth, &out.AllowCustomBandwidth + *out = new(bool) + **out = **in + } + if in.AllowRemoteConnections != nil { + in, out := &in.AllowRemoteConnections, &out.AllowRemoteConnections + *out = new(bool) + **out = **in + } + if in.AuthenticationKey != nil { + in, out := &in.AuthenticationKey, &out.AuthenticationKey + *out = make([]AuthenticationKeyObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BandwidthAlertThreshold != nil { + in, out := &in.BandwidthAlertThreshold, &out.BandwidthAlertThreshold + *out = new(float64) + **out = **in + } + if in.ConnectionLabel != nil { + in, out := &in.ConnectionLabel, &out.ConnectionLabel + *out = new(string) + **out = **in + } + if in.ConnectionRedundancyRequired != nil { + in, out := &in.ConnectionRedundancyRequired, &out.ConnectionRedundancyRequired + *out = new(bool) + **out = **in + } + if in.EnableAutoGenerateServiceKey != nil { + in, out := &in.EnableAutoGenerateServiceKey, &out.EnableAutoGenerateServiceKey + *out = new(bool) + **out = **in + } + if in.LinkProtocolConfig != nil { + in, out := &in.LinkProtocolConfig, &out.LinkProtocolConfig + *out = make([]LinkProtocolConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SupportedBandwidths != nil { + in, out := &in.SupportedBandwidths, &out.SupportedBandwidths + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -4529,6 +7634,21 @@ func (in *ServiceProfileAccessPointTypeConfigsParameters) DeepCopy() *ServicePro return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceProfileAccountInitParameters) DeepCopyInto(out *ServiceProfileAccountInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileAccountInitParameters. +func (in *ServiceProfileAccountInitParameters) DeepCopy() *ServiceProfileAccountInitParameters { + if in == nil { + return nil + } + out := new(ServiceProfileAccountInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceProfileAccountObservation) DeepCopyInto(out *ServiceProfileAccountObservation) { *out = *in @@ -4599,6 +7719,21 @@ func (in *ServiceProfileAccountParameters) DeepCopy() *ServiceProfileAccountPara return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceProfileChangeLogInitParameters) DeepCopyInto(out *ServiceProfileChangeLogInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileChangeLogInitParameters. +func (in *ServiceProfileChangeLogInitParameters) DeepCopy() *ServiceProfileChangeLogInitParameters { + if in == nil { + return nil + } + out := new(ServiceProfileChangeLogInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceProfileChangeLogObservation) DeepCopyInto(out *ServiceProfileChangeLogObservation) { *out = *in @@ -4690,21 +7825,149 @@ func (in *ServiceProfileChangeLogParameters) DeepCopy() *ServiceProfileChangeLog } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceProfileList) DeepCopyInto(out *ServiceProfileList) { +func (in *ServiceProfileInitParameters) DeepCopyInto(out *ServiceProfileInitParameters) { *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ServiceProfile, len(*in)) + if in.AccessPointTypeConfigs != nil { + in, out := &in.AccessPointTypeConfigs, &out.AccessPointTypeConfigs + *out = make([]ServiceProfileAccessPointTypeConfigsInitParameters, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileList. -func (in *ServiceProfileList) DeepCopy() *ServiceProfileList { + if in.AllowedEmails != nil { + in, out := &in.AllowedEmails, &out.AllowedEmails + *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.CustomFields != nil { + in, out := &in.CustomFields, &out.CustomFields + *out = make([]CustomFieldsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.MarketingInfo != nil { + in, out := &in.MarketingInfo, &out.MarketingInfo + *out = make([]MarketingInfoInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Metros != nil { + in, out := &in.Metros, &out.Metros + *out = make([]MetrosInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]ServiceProfileNotificationsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]PortsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]ServiceProfileProjectInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SelfProfile != nil { + in, out := &in.SelfProfile, &out.SelfProfile + *out = new(bool) + **out = **in + } + if in.State != nil { + in, out := &in.State, &out.State + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.ViewPoint != nil { + in, out := &in.ViewPoint, &out.ViewPoint + *out = new(string) + **out = **in + } + if in.VirtualDevices != nil { + in, out := &in.VirtualDevices, &out.VirtualDevices + *out = make([]VirtualDevicesInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Visibility != nil { + in, out := &in.Visibility, &out.Visibility + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileInitParameters. +func (in *ServiceProfileInitParameters) DeepCopy() *ServiceProfileInitParameters { + if in == nil { + return nil + } + out := new(ServiceProfileInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceProfileList) DeepCopyInto(out *ServiceProfileList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ServiceProfile, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileList. +func (in *ServiceProfileList) DeepCopy() *ServiceProfileList { if in == nil { return nil } @@ -4722,22 +7985,43 @@ func (in *ServiceProfileList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceProfileNotificationsObservation) DeepCopyInto(out *ServiceProfileNotificationsObservation) { +func (in *ServiceProfileNotificationsInitParameters) DeepCopyInto(out *ServiceProfileNotificationsInitParameters) { *out = *in + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *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.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileNotificationsObservation. -func (in *ServiceProfileNotificationsObservation) DeepCopy() *ServiceProfileNotificationsObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileNotificationsInitParameters. +func (in *ServiceProfileNotificationsInitParameters) DeepCopy() *ServiceProfileNotificationsInitParameters { if in == nil { return nil } - out := new(ServiceProfileNotificationsObservation) + out := new(ServiceProfileNotificationsInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceProfileNotificationsParameters) DeepCopyInto(out *ServiceProfileNotificationsParameters) { +func (in *ServiceProfileNotificationsObservation) DeepCopyInto(out *ServiceProfileNotificationsObservation) { *out = *in if in.Emails != nil { in, out := &in.Emails, &out.Emails @@ -4762,80 +8046,65 @@ func (in *ServiceProfileNotificationsParameters) DeepCopyInto(out *ServiceProfil } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileNotificationsParameters. -func (in *ServiceProfileNotificationsParameters) DeepCopy() *ServiceProfileNotificationsParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileNotificationsObservation. +func (in *ServiceProfileNotificationsObservation) DeepCopy() *ServiceProfileNotificationsObservation { if in == nil { return nil } - out := new(ServiceProfileNotificationsParameters) + out := new(ServiceProfileNotificationsObservation) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceProfileObservation) DeepCopyInto(out *ServiceProfileObservation) { +func (in *ServiceProfileNotificationsParameters) DeepCopyInto(out *ServiceProfileNotificationsParameters) { *out = *in - if in.AccessPointTypeConfigs != nil { - in, out := &in.AccessPointTypeConfigs, &out.AccessPointTypeConfigs - *out = make([]ServiceProfileAccessPointTypeConfigsObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Account != nil { - in, out := &in.Account, &out.Account - *out = make([]ServiceProfileAccountObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ChangeLog != nil { - in, out := &in.ChangeLog, &out.ChangeLog - *out = make([]ServiceProfileChangeLogObservation, len(*in)) + if in.Emails != nil { + in, out := &in.Emails, &out.Emails + *out = make([]*string, len(*in)) for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } } } - if in.Href != nil { - in, out := &in.Href, &out.Href - *out = new(string) - **out = **in - } - if in.ID != nil { - in, out := &in.ID, &out.ID + if in.SendInterval != nil { + in, out := &in.SendInterval, &out.SendInterval *out = new(string) **out = **in } - if in.Project != nil { - in, out := &in.Project, &out.Project - *out = make([]ServiceProfileProjectObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.UUID != nil { - in, out := &in.UUID, &out.UUID + if in.Type != nil { + in, out := &in.Type, &out.Type *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileObservation. -func (in *ServiceProfileObservation) DeepCopy() *ServiceProfileObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileNotificationsParameters. +func (in *ServiceProfileNotificationsParameters) DeepCopy() *ServiceProfileNotificationsParameters { if in == nil { return nil } - out := new(ServiceProfileObservation) + out := new(ServiceProfileNotificationsParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) { +func (in *ServiceProfileObservation) DeepCopyInto(out *ServiceProfileObservation) { *out = *in if in.AccessPointTypeConfigs != nil { in, out := &in.AccessPointTypeConfigs, &out.AccessPointTypeConfigs - *out = make([]ServiceProfileAccessPointTypeConfigsParameters, len(*in)) + *out = make([]ServiceProfileAccessPointTypeConfigsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Account != nil { + in, out := &in.Account, &out.Account + *out = make([]ServiceProfileAccountObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -4851,9 +8120,16 @@ func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) } } } + if in.ChangeLog != nil { + in, out := &in.ChangeLog, &out.ChangeLog + *out = make([]ServiceProfileChangeLogObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.CustomFields != nil { in, out := &in.CustomFields, &out.CustomFields - *out = make([]CustomFieldsParameters, len(*in)) + *out = make([]CustomFieldsObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -4863,16 +8139,26 @@ func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) *out = new(string) **out = **in } + if in.Href != nil { + in, out := &in.Href, &out.Href + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } if in.MarketingInfo != nil { in, out := &in.MarketingInfo, &out.MarketingInfo - *out = make([]MarketingInfoParameters, len(*in)) + *out = make([]MarketingInfoObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } if in.Metros != nil { in, out := &in.Metros, &out.Metros - *out = make([]MetrosParameters, len(*in)) + *out = make([]MetrosObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -4884,21 +8170,21 @@ func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) } if in.Notifications != nil { in, out := &in.Notifications, &out.Notifications - *out = make([]ServiceProfileNotificationsParameters, len(*in)) + *out = make([]ServiceProfileNotificationsObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } if in.Ports != nil { in, out := &in.Ports, &out.Ports - *out = make([]PortsParameters, len(*in)) + *out = make([]PortsObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } if in.Project != nil { in, out := &in.Project, &out.Project - *out = make([]ServiceProfileProjectParameters, len(*in)) + *out = make([]ServiceProfileProjectObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -4929,6 +8215,11 @@ func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) *out = new(string) **out = **in } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } if in.ViewPoint != nil { in, out := &in.ViewPoint, &out.ViewPoint *out = new(string) @@ -4936,7 +8227,7 @@ func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) } if in.VirtualDevices != nil { in, out := &in.VirtualDevices, &out.VirtualDevices - *out = make([]VirtualDevicesParameters, len(*in)) + *out = make([]VirtualDevicesObservation, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -4948,8 +8239,136 @@ func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileParameters. -func (in *ServiceProfileParameters) DeepCopy() *ServiceProfileParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileObservation. +func (in *ServiceProfileObservation) DeepCopy() *ServiceProfileObservation { + if in == nil { + return nil + } + out := new(ServiceProfileObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceProfileParameters) DeepCopyInto(out *ServiceProfileParameters) { + *out = *in + if in.AccessPointTypeConfigs != nil { + in, out := &in.AccessPointTypeConfigs, &out.AccessPointTypeConfigs + *out = make([]ServiceProfileAccessPointTypeConfigsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AllowedEmails != nil { + in, out := &in.AllowedEmails, &out.AllowedEmails + *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.CustomFields != nil { + in, out := &in.CustomFields, &out.CustomFields + *out = make([]CustomFieldsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.MarketingInfo != nil { + in, out := &in.MarketingInfo, &out.MarketingInfo + *out = make([]MarketingInfoParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Metros != nil { + in, out := &in.Metros, &out.Metros + *out = make([]MetrosParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *out = make([]ServiceProfileNotificationsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]PortsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Project != nil { + in, out := &in.Project, &out.Project + *out = make([]ServiceProfileProjectParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SelfProfile != nil { + in, out := &in.SelfProfile, &out.SelfProfile + *out = new(bool) + **out = **in + } + if in.State != nil { + in, out := &in.State, &out.State + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.ViewPoint != nil { + in, out := &in.ViewPoint, &out.ViewPoint + *out = new(string) + **out = **in + } + if in.VirtualDevices != nil { + in, out := &in.VirtualDevices, &out.VirtualDevices + *out = make([]VirtualDevicesParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Visibility != nil { + in, out := &in.Visibility, &out.Visibility + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileParameters. +func (in *ServiceProfileParameters) DeepCopy() *ServiceProfileParameters { if in == nil { return nil } @@ -4958,6 +8377,26 @@ func (in *ServiceProfileParameters) DeepCopy() *ServiceProfileParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceProfileProjectInitParameters) DeepCopyInto(out *ServiceProfileProjectInitParameters) { + *out = *in + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileProjectInitParameters. +func (in *ServiceProfileProjectInitParameters) DeepCopy() *ServiceProfileProjectInitParameters { + if in == nil { + return nil + } + out := new(ServiceProfileProjectInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceProfileProjectObservation) DeepCopyInto(out *ServiceProfileProjectObservation) { *out = *in @@ -4966,6 +8405,11 @@ func (in *ServiceProfileProjectObservation) DeepCopyInto(out *ServiceProfileProj *out = new(string) **out = **in } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileProjectObservation. @@ -5003,6 +8447,7 @@ func (in *ServiceProfileSpec) DeepCopyInto(out *ServiceProfileSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProfileSpec. @@ -5032,6 +8477,31 @@ func (in *ServiceProfileStatus) DeepCopy() *ServiceProfileStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceTokenInitParameters) DeepCopyInto(out *ServiceTokenInitParameters) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceTokenInitParameters. +func (in *ServiceTokenInitParameters) DeepCopy() *ServiceTokenInitParameters { + if in == nil { + return nil + } + out := new(ServiceTokenInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceTokenObservation) DeepCopyInto(out *ServiceTokenObservation) { *out = *in @@ -5045,6 +8515,16 @@ func (in *ServiceTokenObservation) DeepCopyInto(out *ServiceTokenObservation) { *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceTokenObservation. @@ -5082,6 +8562,36 @@ func (in *ServiceTokenParameters) DeepCopy() *ServiceTokenParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualDeviceInitParameters) DeepCopyInto(out *VirtualDeviceInitParameters) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDeviceInitParameters. +func (in *VirtualDeviceInitParameters) DeepCopy() *VirtualDeviceInitParameters { + if in == nil { + return nil + } + out := new(VirtualDeviceInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VirtualDeviceObservation) DeepCopyInto(out *VirtualDeviceObservation) { *out = *in @@ -5090,6 +8600,21 @@ func (in *VirtualDeviceObservation) DeepCopyInto(out *VirtualDeviceObservation) *out = new(string) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDeviceObservation. @@ -5133,22 +8658,44 @@ func (in *VirtualDeviceParameters) DeepCopy() *VirtualDeviceParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VirtualDevicesLocationObservation) DeepCopyInto(out *VirtualDevicesLocationObservation) { +func (in *VirtualDevicesInitParameters) DeepCopyInto(out *VirtualDevicesInitParameters) { *out = *in + if in.InterfaceUUID != nil { + in, out := &in.InterfaceUUID, &out.InterfaceUUID + *out = new(string) + **out = **in + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]VirtualDevicesLocationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesLocationObservation. -func (in *VirtualDevicesLocationObservation) DeepCopy() *VirtualDevicesLocationObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesInitParameters. +func (in *VirtualDevicesInitParameters) DeepCopy() *VirtualDevicesInitParameters { if in == nil { return nil } - out := new(VirtualDevicesLocationObservation) + out := new(VirtualDevicesInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VirtualDevicesLocationParameters) DeepCopyInto(out *VirtualDevicesLocationParameters) { +func (in *VirtualDevicesLocationInitParameters) DeepCopyInto(out *VirtualDevicesLocationInitParameters) { *out = *in if in.Ibx != nil { in, out := &in.Ibx, &out.Ibx @@ -5165,150 +8712,415 @@ func (in *VirtualDevicesLocationParameters) DeepCopyInto(out *VirtualDevicesLoca *out = new(string) **out = **in } - if in.Region != nil { - in, out := &in.Region, &out.Region + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesLocationInitParameters. +func (in *VirtualDevicesLocationInitParameters) DeepCopy() *VirtualDevicesLocationInitParameters { + if in == nil { + return nil + } + out := new(VirtualDevicesLocationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualDevicesLocationObservation) DeepCopyInto(out *VirtualDevicesLocationObservation) { + *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesLocationObservation. +func (in *VirtualDevicesLocationObservation) DeepCopy() *VirtualDevicesLocationObservation { + if in == nil { + return nil + } + out := new(VirtualDevicesLocationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualDevicesLocationParameters) DeepCopyInto(out *VirtualDevicesLocationParameters) { + *out = *in + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesLocationParameters. +func (in *VirtualDevicesLocationParameters) DeepCopy() *VirtualDevicesLocationParameters { + if in == nil { + return nil + } + out := new(VirtualDevicesLocationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualDevicesObservation) DeepCopyInto(out *VirtualDevicesObservation) { + *out = *in + if in.InterfaceUUID != nil { + in, out := &in.InterfaceUUID, &out.InterfaceUUID + *out = new(string) + **out = **in + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]VirtualDevicesLocationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesObservation. +func (in *VirtualDevicesObservation) DeepCopy() *VirtualDevicesObservation { + if in == nil { + return nil + } + out := new(VirtualDevicesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualDevicesParameters) DeepCopyInto(out *VirtualDevicesParameters) { + *out = *in + if in.InterfaceUUID != nil { + in, out := &in.InterfaceUUID, &out.InterfaceUUID + *out = new(string) + **out = **in + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]VirtualDevicesLocationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesParameters. +func (in *VirtualDevicesParameters) DeepCopy() *VirtualDevicesParameters { + if in == nil { + return nil + } + out := new(VirtualDevicesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideAccessPointAccountInitParameters) DeepCopyInto(out *ZSideAccessPointAccountInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointAccountInitParameters. +func (in *ZSideAccessPointAccountInitParameters) DeepCopy() *ZSideAccessPointAccountInitParameters { + if in == nil { + return nil + } + out := new(ZSideAccessPointAccountInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideAccessPointAccountObservation) DeepCopyInto(out *ZSideAccessPointAccountObservation) { + *out = *in + if in.AccountName != nil { + in, out := &in.AccountName, &out.AccountName + *out = new(string) + **out = **in + } + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(float64) + **out = **in + } + if in.GlobalCustID != nil { + in, out := &in.GlobalCustID, &out.GlobalCustID + *out = new(string) + **out = **in + } + if in.GlobalOrgID != nil { + in, out := &in.GlobalOrgID, &out.GlobalOrgID + *out = new(string) + **out = **in + } + if in.GlobalOrganizationName != nil { + in, out := &in.GlobalOrganizationName, &out.GlobalOrganizationName + *out = new(string) + **out = **in + } + if in.OrgID != nil { + in, out := &in.OrgID, &out.OrgID + *out = new(float64) + **out = **in + } + if in.OrganizationName != nil { + in, out := &in.OrganizationName, &out.OrganizationName + *out = new(string) + **out = **in + } + if in.UcmID != nil { + in, out := &in.UcmID, &out.UcmID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointAccountObservation. +func (in *ZSideAccessPointAccountObservation) DeepCopy() *ZSideAccessPointAccountObservation { + if in == nil { + return nil + } + out := new(ZSideAccessPointAccountObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideAccessPointAccountParameters) DeepCopyInto(out *ZSideAccessPointAccountParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointAccountParameters. +func (in *ZSideAccessPointAccountParameters) DeepCopy() *ZSideAccessPointAccountParameters { + if in == nil { + return nil + } + out := new(ZSideAccessPointAccountParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideAccessPointInitParameters) DeepCopyInto(out *ZSideAccessPointInitParameters) { + *out = *in + if in.Account != nil { + in, out := &in.Account, &out.Account + *out = make([]ZSideAccessPointAccountInitParameters, len(*in)) + copy(*out, *in) + } + if in.AuthenticationKey != nil { + in, out := &in.AuthenticationKey, &out.AuthenticationKey + *out = new(string) + **out = **in + } + if in.Gateway != nil { + in, out := &in.Gateway, &out.Gateway + *out = make([]AccessPointGatewayInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]AccessPointInterfaceInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LinkProtocol != nil { + in, out := &in.LinkProtocol, &out.LinkProtocol + *out = make([]AccessPointLinkProtocolInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]ZSideAccessPointLocationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = make([]AccessPointNetworkInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PeeringType != nil { + in, out := &in.PeeringType, &out.PeeringType + *out = new(string) + **out = **in + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = make([]AccessPointPortInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Profile != nil { + in, out := &in.Profile, &out.Profile + *out = make([]AccessPointProfileInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = make([]AccessPointRouterInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SellerRegion != nil { + in, out := &in.SellerRegion, &out.SellerRegion + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type *out = new(string) **out = **in } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesLocationParameters. -func (in *VirtualDevicesLocationParameters) DeepCopy() *VirtualDevicesLocationParameters { - if in == nil { - return nil + if in.VirtualDevice != nil { + in, out := &in.VirtualDevice, &out.VirtualDevice + *out = make([]AccessPointVirtualDeviceInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } - out := new(VirtualDevicesLocationParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VirtualDevicesObservation) DeepCopyInto(out *VirtualDevicesObservation) { - *out = *in } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesObservation. -func (in *VirtualDevicesObservation) DeepCopy() *VirtualDevicesObservation { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointInitParameters. +func (in *ZSideAccessPointInitParameters) DeepCopy() *ZSideAccessPointInitParameters { if in == nil { return nil } - out := new(VirtualDevicesObservation) + out := new(ZSideAccessPointInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VirtualDevicesParameters) DeepCopyInto(out *VirtualDevicesParameters) { +func (in *ZSideAccessPointLocationInitParameters) DeepCopyInto(out *ZSideAccessPointLocationInitParameters) { *out = *in - if in.InterfaceUUID != nil { - in, out := &in.InterfaceUUID, &out.InterfaceUUID + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx *out = new(string) **out = **in } - if in.Location != nil { - in, out := &in.Location, &out.Location - *out = make([]VirtualDevicesLocationParameters, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in } - if in.Type != nil { - in, out := &in.Type, &out.Type + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName *out = new(string) **out = **in } - if in.UUID != nil { - in, out := &in.UUID, &out.UUID + if in.Region != nil { + in, out := &in.Region, &out.Region *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualDevicesParameters. -func (in *VirtualDevicesParameters) DeepCopy() *VirtualDevicesParameters { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointLocationInitParameters. +func (in *ZSideAccessPointLocationInitParameters) DeepCopy() *ZSideAccessPointLocationInitParameters { if in == nil { return nil } - out := new(VirtualDevicesParameters) + out := new(ZSideAccessPointLocationInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZSideAccessPointAccountObservation) DeepCopyInto(out *ZSideAccessPointAccountObservation) { +func (in *ZSideAccessPointLocationObservation) DeepCopyInto(out *ZSideAccessPointLocationObservation) { *out = *in - if in.AccountName != nil { - in, out := &in.AccountName, &out.AccountName - *out = new(string) - **out = **in - } - if in.AccountNumber != nil { - in, out := &in.AccountNumber, &out.AccountNumber - *out = new(float64) - **out = **in - } - if in.GlobalCustID != nil { - in, out := &in.GlobalCustID, &out.GlobalCustID - *out = new(string) - **out = **in - } - if in.GlobalOrgID != nil { - in, out := &in.GlobalOrgID, &out.GlobalOrgID + if in.Ibx != nil { + in, out := &in.Ibx, &out.Ibx *out = new(string) **out = **in } - if in.GlobalOrganizationName != nil { - in, out := &in.GlobalOrganizationName, &out.GlobalOrganizationName + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode *out = new(string) **out = **in } - if in.OrgID != nil { - in, out := &in.OrgID, &out.OrgID - *out = new(float64) - **out = **in - } - if in.OrganizationName != nil { - in, out := &in.OrganizationName, &out.OrganizationName + if in.MetroName != nil { + in, out := &in.MetroName, &out.MetroName *out = new(string) **out = **in } - if in.UcmID != nil { - in, out := &in.UcmID, &out.UcmID + if in.Region != nil { + in, out := &in.Region, &out.Region *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointAccountObservation. -func (in *ZSideAccessPointAccountObservation) DeepCopy() *ZSideAccessPointAccountObservation { - if in == nil { - return nil - } - out := new(ZSideAccessPointAccountObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZSideAccessPointAccountParameters) DeepCopyInto(out *ZSideAccessPointAccountParameters) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointAccountParameters. -func (in *ZSideAccessPointAccountParameters) DeepCopy() *ZSideAccessPointAccountParameters { - if in == nil { - return nil - } - out := new(ZSideAccessPointAccountParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ZSideAccessPointLocationObservation) DeepCopyInto(out *ZSideAccessPointLocationObservation) { - *out = *in -} - // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAccessPointLocationObservation. func (in *ZSideAccessPointLocationObservation) DeepCopy() *ZSideAccessPointLocationObservation { if in == nil { @@ -5364,6 +9176,11 @@ func (in *ZSideAccessPointObservation) DeepCopyInto(out *ZSideAccessPointObserva (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AuthenticationKey != nil { + in, out := &in.AuthenticationKey, &out.AuthenticationKey + *out = new(string) + **out = **in + } if in.Gateway != nil { in, out := &in.Gateway, &out.Gateway *out = make([]AccessPointGatewayObservation, len(*in)) @@ -5371,6 +9188,27 @@ func (in *ZSideAccessPointObservation) DeepCopyInto(out *ZSideAccessPointObserva (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Interface != nil { + in, out := &in.Interface, &out.Interface + *out = make([]AccessPointInterfaceObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LinkProtocol != nil { + in, out := &in.LinkProtocol, &out.LinkProtocol + *out = make([]AccessPointLinkProtocolObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Location != nil { + in, out := &in.Location, &out.Location + *out = make([]ZSideAccessPointLocationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Network != nil { in, out := &in.Network, &out.Network *out = make([]AccessPointNetworkObservation, len(*in)) @@ -5378,6 +9216,11 @@ func (in *ZSideAccessPointObservation) DeepCopyInto(out *ZSideAccessPointObserva (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.PeeringType != nil { + in, out := &in.PeeringType, &out.PeeringType + *out = new(string) + **out = **in + } if in.Port != nil { in, out := &in.Port, &out.Port *out = make([]AccessPointPortObservation, len(*in)) @@ -5404,6 +9247,16 @@ func (in *ZSideAccessPointObservation) DeepCopyInto(out *ZSideAccessPointObserva (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.SellerRegion != nil { + in, out := &in.SellerRegion, &out.SellerRegion + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.VirtualDevice != nil { in, out := &in.VirtualDevice, &out.VirtualDevice *out = make([]AccessPointVirtualDeviceObservation, len(*in)) @@ -5526,9 +9379,44 @@ func (in *ZSideAccessPointParameters) DeepCopy() *ZSideAccessPointParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideAdditionalInfoInitParameters) DeepCopyInto(out *ZSideAdditionalInfoInitParameters) { + *out = *in + if in.Key != nil { + in, out := &in.Key, &out.Key + *out = new(string) + **out = **in + } + if in.Value != nil { + in, out := &in.Value, &out.Value + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAdditionalInfoInitParameters. +func (in *ZSideAdditionalInfoInitParameters) DeepCopy() *ZSideAdditionalInfoInitParameters { + if in == nil { + return nil + } + out := new(ZSideAdditionalInfoInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ZSideAdditionalInfoObservation) DeepCopyInto(out *ZSideAdditionalInfoObservation) { *out = *in + if in.Key != nil { + in, out := &in.Key, &out.Key + *out = new(string) + **out = **in + } + if in.Value != nil { + in, out := &in.Value, &out.Value + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideAdditionalInfoObservation. @@ -5566,6 +9454,42 @@ func (in *ZSideAdditionalInfoParameters) DeepCopy() *ZSideAdditionalInfoParamete return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideInitParameters) DeepCopyInto(out *ZSideInitParameters) { + *out = *in + if in.AccessPoint != nil { + in, out := &in.AccessPoint, &out.AccessPoint + *out = make([]ZSideAccessPointInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = make([]ZSideAdditionalInfoInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ServiceToken != nil { + in, out := &in.ServiceToken, &out.ServiceToken + *out = make([]ZSideServiceTokenInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideInitParameters. +func (in *ZSideInitParameters) DeepCopy() *ZSideInitParameters { + if in == nil { + return nil + } + out := new(ZSideInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ZSideObservation) DeepCopyInto(out *ZSideObservation) { *out = *in @@ -5576,6 +9500,13 @@ func (in *ZSideObservation) DeepCopyInto(out *ZSideObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = make([]ZSideAdditionalInfoObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.ServiceToken != nil { in, out := &in.ServiceToken, &out.ServiceToken *out = make([]ZSideServiceTokenObservation, len(*in)) @@ -5631,6 +9562,31 @@ func (in *ZSideParameters) DeepCopy() *ZSideParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZSideServiceTokenInitParameters) DeepCopyInto(out *ZSideServiceTokenInitParameters) { + *out = *in + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideServiceTokenInitParameters. +func (in *ZSideServiceTokenInitParameters) DeepCopy() *ZSideServiceTokenInitParameters { + if in == nil { + return nil + } + out := new(ZSideServiceTokenInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ZSideServiceTokenObservation) DeepCopyInto(out *ZSideServiceTokenObservation) { *out = *in @@ -5644,6 +9600,16 @@ func (in *ZSideServiceTokenObservation) DeepCopyInto(out *ZSideServiceTokenObser *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.UUID != nil { + in, out := &in.UUID, &out.UUID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZSideServiceTokenObservation. diff --git a/apis/fabric/v1alpha1/zz_generated.managed.go b/apis/fabric/v1alpha1/zz_generated.managed.go index 68378b1..f1a3488 100644 --- a/apis/fabric/v1alpha1/zz_generated.managed.go +++ b/apis/fabric/v1alpha1/zz_generated.managed.go @@ -29,19 +29,16 @@ func (mg *CloudRouter) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this CloudRouter. +func (mg *CloudRouter) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this CloudRouter. func (mg *CloudRouter) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this CloudRouter. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *CloudRouter) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this CloudRouter. func (mg *CloudRouter) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -62,19 +59,16 @@ func (mg *CloudRouter) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this CloudRouter. +func (mg *CloudRouter) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this CloudRouter. func (mg *CloudRouter) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this CloudRouter. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *CloudRouter) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this CloudRouter. func (mg *CloudRouter) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -95,19 +89,16 @@ func (mg *Connection) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Connection. +func (mg *Connection) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Connection. func (mg *Connection) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Connection. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Connection) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Connection. func (mg *Connection) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -128,19 +119,16 @@ func (mg *Connection) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Connection. +func (mg *Connection) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Connection. func (mg *Connection) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Connection. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Connection) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Connection. func (mg *Connection) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -161,19 +149,16 @@ func (mg *Network) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Network. +func (mg *Network) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Network. func (mg *Network) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Network. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Network) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Network. func (mg *Network) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -194,19 +179,16 @@ func (mg *Network) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Network. +func (mg *Network) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Network. func (mg *Network) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Network. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Network) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Network. func (mg *Network) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -227,19 +209,16 @@ func (mg *RoutingProtocol) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this RoutingProtocol. +func (mg *RoutingProtocol) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this RoutingProtocol. func (mg *RoutingProtocol) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this RoutingProtocol. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *RoutingProtocol) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this RoutingProtocol. func (mg *RoutingProtocol) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -260,19 +239,16 @@ func (mg *RoutingProtocol) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this RoutingProtocol. +func (mg *RoutingProtocol) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this RoutingProtocol. func (mg *RoutingProtocol) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this RoutingProtocol. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *RoutingProtocol) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this RoutingProtocol. func (mg *RoutingProtocol) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -293,19 +269,16 @@ func (mg *ServiceProfile) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this ServiceProfile. +func (mg *ServiceProfile) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this ServiceProfile. func (mg *ServiceProfile) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this ServiceProfile. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *ServiceProfile) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this ServiceProfile. func (mg *ServiceProfile) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -326,19 +299,16 @@ func (mg *ServiceProfile) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this ServiceProfile. +func (mg *ServiceProfile) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this ServiceProfile. func (mg *ServiceProfile) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this ServiceProfile. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *ServiceProfile) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this ServiceProfile. func (mg *ServiceProfile) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r diff --git a/apis/fabric/v1alpha1/zz_generated_terraformed.go b/apis/fabric/v1alpha1/zz_generated_terraformed.go deleted file mode 100755 index f9f1bc6..0000000 --- a/apis/fabric/v1alpha1/zz_generated_terraformed.go +++ /dev/null @@ -1,396 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "github.com/pkg/errors" - - "github.com/upbound/upjet/pkg/resource" - "github.com/upbound/upjet/pkg/resource/json" -) - -// GetTerraformResourceType returns Terraform resource type for this CloudRouter -func (mg *CloudRouter) GetTerraformResourceType() string { - return "equinix_fabric_cloud_router" -} - -// GetConnectionDetailsMapping for this CloudRouter -func (tr *CloudRouter) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this CloudRouter -func (tr *CloudRouter) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this CloudRouter -func (tr *CloudRouter) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this CloudRouter -func (tr *CloudRouter) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this CloudRouter -func (tr *CloudRouter) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this CloudRouter -func (tr *CloudRouter) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this CloudRouter using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *CloudRouter) LateInitialize(attrs []byte) (bool, error) { - params := &CloudRouterParameters{} - 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 *CloudRouter) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Connection -func (mg *Connection) GetTerraformResourceType() string { - return "equinix_fabric_connection" -} - -// GetConnectionDetailsMapping for this Connection -func (tr *Connection) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Connection -func (tr *Connection) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Connection -func (tr *Connection) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Connection -func (tr *Connection) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Connection -func (tr *Connection) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Connection -func (tr *Connection) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Connection using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Connection) LateInitialize(attrs []byte) (bool, error) { - params := &ConnectionParameters{} - 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 *Connection) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Network -func (mg *Network) GetTerraformResourceType() string { - return "equinix_fabric_network" -} - -// GetConnectionDetailsMapping for this Network -func (tr *Network) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Network -func (tr *Network) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Network -func (tr *Network) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Network -func (tr *Network) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Network -func (tr *Network) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Network -func (tr *Network) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Network using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Network) LateInitialize(attrs []byte) (bool, error) { - params := &NetworkParameters_2{} - 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 *Network) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this RoutingProtocol -func (mg *RoutingProtocol) GetTerraformResourceType() string { - return "equinix_fabric_routing_protocol" -} - -// GetConnectionDetailsMapping for this RoutingProtocol -func (tr *RoutingProtocol) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this RoutingProtocol -func (tr *RoutingProtocol) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this RoutingProtocol -func (tr *RoutingProtocol) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this RoutingProtocol -func (tr *RoutingProtocol) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this RoutingProtocol -func (tr *RoutingProtocol) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this RoutingProtocol -func (tr *RoutingProtocol) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this RoutingProtocol using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *RoutingProtocol) LateInitialize(attrs []byte) (bool, error) { - params := &RoutingProtocolParameters{} - 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 *RoutingProtocol) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this ServiceProfile -func (mg *ServiceProfile) GetTerraformResourceType() string { - return "equinix_fabric_service_profile" -} - -// GetConnectionDetailsMapping for this ServiceProfile -func (tr *ServiceProfile) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this ServiceProfile -func (tr *ServiceProfile) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this ServiceProfile -func (tr *ServiceProfile) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this ServiceProfile -func (tr *ServiceProfile) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this ServiceProfile -func (tr *ServiceProfile) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this ServiceProfile -func (tr *ServiceProfile) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this ServiceProfile using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *ServiceProfile) LateInitialize(attrs []byte) (bool, error) { - params := &ServiceProfileParameters{} - 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 *ServiceProfile) GetTerraformSchemaVersion() int { - return 0 -} diff --git a/apis/fabric/v1alpha1/zz_network_terraformed.go b/apis/fabric/v1alpha1/zz_network_terraformed.go new file mode 100755 index 0000000..a86ef8a --- /dev/null +++ b/apis/fabric/v1alpha1/zz_network_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Network +func (mg *Network) GetTerraformResourceType() string { + return "equinix_fabric_network" +} + +// GetConnectionDetailsMapping for this Network +func (tr *Network) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Network +func (tr *Network) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Network +func (tr *Network) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Network +func (tr *Network) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Network +func (tr *Network) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Network +func (tr *Network) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Network +func (tr *Network) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Network +func (tr *Network) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Network using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Network) LateInitialize(attrs []byte) (bool, error) { + params := &NetworkParameters_2{} + 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 *Network) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/fabric/v1alpha1/zz_network_types.go b/apis/fabric/v1alpha1/zz_network_types.go index 91773a3..10187a0 100755 --- a/apis/fabric/v1alpha1/zz_network_types.go +++ b/apis/fabric/v1alpha1/zz_network_types.go @@ -25,113 +25,269 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ChangeInitParameters struct { +} + type ChangeObservation struct { + + // (String) Fabric Network URI information Href *string `json:"href,omitempty" tf:"href,omitempty"` + // EVPLAN, EPLAN, IPWAN Type *string `json:"type,omitempty" tf:"type,omitempty"` + // assigned network identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type ChangeParameters struct { } +type NetworkChangeLogInitParameters struct { +} + type NetworkChangeLogObservation struct { + + // (String) CreatedBy *string `json:"createdBy,omitempty" tf:"created_by,omitempty"` + // (String) CreatedByEmail *string `json:"createdByEmail,omitempty" tf:"created_by_email,omitempty"` + // (String) CreatedByFullName *string `json:"createdByFullName,omitempty" tf:"created_by_full_name,omitempty"` + // (String) CreatedDateTime *string `json:"createdDateTime,omitempty" tf:"created_date_time,omitempty"` + // (String) DeletedBy *string `json:"deletedBy,omitempty" tf:"deleted_by,omitempty"` + // (String) DeletedByEmail *string `json:"deletedByEmail,omitempty" tf:"deleted_by_email,omitempty"` + // (String) DeletedByFullName *string `json:"deletedByFullName,omitempty" tf:"deleted_by_full_name,omitempty"` + // (String) DeletedDateTime *string `json:"deletedDateTime,omitempty" tf:"deleted_date_time,omitempty"` + // (String) UpdatedBy *string `json:"updatedBy,omitempty" tf:"updated_by,omitempty"` + // (String) UpdatedByEmail *string `json:"updatedByEmail,omitempty" tf:"updated_by_email,omitempty"` + // (String) UpdatedByFullName *string `json:"updatedByFullName,omitempty" tf:"updated_by_full_name,omitempty"` + // (String) UpdatedDateTime *string `json:"updatedDateTime,omitempty" tf:"updated_date_time,omitempty"` } type NetworkChangeLogParameters struct { } +type NetworkInitParameters_2 struct { + + // (Block Set, Max: 1) Fabric Network location (see below for nested schema) + // Fabric Network location + Location []NetworkLocationInitParameters `json:"location,omitempty" tf:"location,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List, Min: 1) Preferences for notifications on Fabric Network configuration or status changes (see below for nested schema) + // Preferences for notifications on Fabric Network configuration or status changes + Notifications []NetworkNotificationsInitParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Block Set, Min: 1) Fabric Network project (see below for nested schema) + // Fabric Network project + Project []NetworkProjectInitParameters `json:"project,omitempty" tf:"project,omitempty"` + + // (String) Fabric Network scope + // Fabric Network scope + Scope *string `json:"scope,omitempty" tf:"scope,omitempty"` + + // EVPLAN, EPLAN, IPWAN + // Supported Network types - EVPLAN, EPLAN, IPWAN + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + +type NetworkLocationInitParameters struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + type NetworkLocationObservation struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` } type NetworkLocationParameters struct { + // (String) IBX Code // IBX Code // +kubebuilder:validation:Optional Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + // (String) Access point metro code // Access point metro code // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + // (String) Access point metro name // Access point metro name // +kubebuilder:validation:Optional MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + // (String) Access point region // Access point region // +kubebuilder:validation:Optional Region *string `json:"region,omitempty" tf:"region,omitempty"` } +type NetworkNotificationsInitParameters struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // EVPLAN, EPLAN, IPWAN + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type NetworkNotificationsObservation struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // EVPLAN, EPLAN, IPWAN + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type NetworkNotificationsParameters struct { + // (List of String) Array of contact emails // Array of contact emails - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Emails []*string `json:"emails" tf:"emails,omitempty"` + // (String) Send interval // Send interval // +kubebuilder:validation:Optional SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + // EVPLAN, EPLAN, IPWAN // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` } type NetworkObservation_2 struct { + // (Set of Object) Information on asset change operation (see below for nested schema) // Information on asset change operation Change []ChangeObservation `json:"change,omitempty" tf:"change,omitempty"` + // (Set of Object) A permanent record of asset creation, modification, or deletion (see below for nested schema) // A permanent record of asset creation, modification, or deletion ChangeLog []NetworkChangeLogObservation `json:"changeLog,omitempty" tf:"change_log,omitempty"` + // (Number) Number of connections associated with this network // Number of connections associated with this network ConnectionsCount *float64 `json:"connectionsCount,omitempty" tf:"connections_count,omitempty"` + // (String) Fabric Network URI information // Fabric Network URI information Href *string `json:"href,omitempty" tf:"href,omitempty"` + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // (Block Set, Max: 1) Fabric Network location (see below for nested schema) + // Fabric Network location + Location []NetworkLocationObservation `json:"location,omitempty" tf:"location,omitempty"` + + // numeric 24 characters string which can include only hyphens and underscores + // Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List, Min: 1) Preferences for notifications on Fabric Network configuration or status changes (see below for nested schema) + // Preferences for notifications on Fabric Network configuration or status changes + Notifications []NetworkNotificationsObservation `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Set of Object) Network operation information that is associated with this Fabric Network (see below for nested schema) // Network operation information that is associated with this Fabric Network Operation []NetworkOperationObservation `json:"operation,omitempty" tf:"operation,omitempty"` + // (Block Set, Min: 1) Fabric Network project (see below for nested schema) + // Fabric Network project + Project []NetworkProjectObservation `json:"project,omitempty" tf:"project,omitempty"` + + // (String) Fabric Network scope + // Fabric Network scope + Scope *string `json:"scope,omitempty" tf:"scope,omitempty"` + + // (String) Fabric Network overall state // Fabric Network overall state State *string `json:"state,omitempty" tf:"state,omitempty"` + // EVPLAN, EPLAN, IPWAN + // Supported Network types - EVPLAN, EPLAN, IPWAN + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // assigned network identifier // Equinix-assigned network identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } +type NetworkOperationInitParameters struct { +} + type NetworkOperationObservation struct { + + // (String) EquinixStatus *string `json:"equinixStatus,omitempty" tf:"equinix_status,omitempty"` } @@ -140,38 +296,56 @@ type NetworkOperationParameters struct { type NetworkParameters_2 struct { + // (Block Set, Max: 1) Fabric Network location (see below for nested schema) // Fabric Network location // +kubebuilder:validation:Optional Location []NetworkLocationParameters `json:"location,omitempty" tf:"location,omitempty"` + // numeric 24 characters string which can include only hyphens and underscores // Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Block List, Min: 1) Preferences for notifications on Fabric Network configuration or status changes (see below for nested schema) // Preferences for notifications on Fabric Network configuration or status changes - // +kubebuilder:validation:Required - Notifications []NetworkNotificationsParameters `json:"notifications" tf:"notifications,omitempty"` + // +kubebuilder:validation:Optional + Notifications []NetworkNotificationsParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + // (Block Set, Min: 1) Fabric Network project (see below for nested schema) // Fabric Network project - // +kubebuilder:validation:Required - Project []NetworkProjectParameters `json:"project" tf:"project,omitempty"` + // +kubebuilder:validation:Optional + Project []NetworkProjectParameters `json:"project,omitempty" tf:"project,omitempty"` + // (String) Fabric Network scope // Fabric Network scope - // +kubebuilder:validation:Required - Scope *string `json:"scope" tf:"scope,omitempty"` + // +kubebuilder:validation:Optional + Scope *string `json:"scope,omitempty" tf:"scope,omitempty"` + // EVPLAN, EPLAN, IPWAN // Supported Network types - EVPLAN, EPLAN, IPWAN - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + +type NetworkProjectInitParameters struct { + + // (String) Customer project identifier + // Customer project identifier + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type NetworkProjectObservation struct { + + // (String) Customer project identifier + // Customer project identifier + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type NetworkProjectParameters struct { + // (String) Customer project identifier // Customer project identifier - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ProjectID *string `json:"projectId" tf:"project_id,omitempty"` } @@ -179,6 +353,17 @@ type NetworkProjectParameters struct { type NetworkSpec struct { v1.ResourceSpec `json:",inline"` ForProvider NetworkParameters_2 `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider NetworkInitParameters_2 `json:"initProvider,omitempty"` } // NetworkStatus defines the observed state of Network. @@ -188,19 +373,25 @@ type NetworkStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion -// Network is the Schema for the Networks API. -// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// Network is the Schema for the Networks API. Fabric V4 API compatible resource allows creation and management of Equinix Fabric Network // +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Network struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec NetworkSpec `json:"spec"` - Status NetworkStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.notifications) || (has(self.initProvider) && has(self.initProvider.notifications))",message="spec.forProvider.notifications is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.project) || (has(self.initProvider) && has(self.initProvider.project))",message="spec.forProvider.project is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.scope) || (has(self.initProvider) && has(self.initProvider.scope))",message="spec.forProvider.scope is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" + Spec NetworkSpec `json:"spec"` + Status NetworkStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/fabric/v1alpha1/zz_routingprotocol_terraformed.go b/apis/fabric/v1alpha1/zz_routingprotocol_terraformed.go new file mode 100755 index 0000000..8a6adf8 --- /dev/null +++ b/apis/fabric/v1alpha1/zz_routingprotocol_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this RoutingProtocol +func (mg *RoutingProtocol) GetTerraformResourceType() string { + return "equinix_fabric_routing_protocol" +} + +// GetConnectionDetailsMapping for this RoutingProtocol +func (tr *RoutingProtocol) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this RoutingProtocol +func (tr *RoutingProtocol) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this RoutingProtocol +func (tr *RoutingProtocol) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this RoutingProtocol +func (tr *RoutingProtocol) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this RoutingProtocol +func (tr *RoutingProtocol) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this RoutingProtocol +func (tr *RoutingProtocol) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this RoutingProtocol +func (tr *RoutingProtocol) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this RoutingProtocol +func (tr *RoutingProtocol) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this RoutingProtocol using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *RoutingProtocol) LateInitialize(attrs []byte) (bool, error) { + params := &RoutingProtocolParameters{} + 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 *RoutingProtocol) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/fabric/v1alpha1/zz_routingprotocol_types.go b/apis/fabric/v1alpha1/zz_routingprotocol_types.go index db5d804..d4bf8fa 100755 --- a/apis/fabric/v1alpha1/zz_routingprotocol_types.go +++ b/apis/fabric/v1alpha1/zz_routingprotocol_types.go @@ -25,8 +25,23 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type BGPIPv4InitParameters struct { + + // Customer side peering ip + CustomerPeerIP *string `json:"customerPeerIp,omitempty" tf:"customer_peer_ip,omitempty"` + + // Admin status for the BGP session + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + type BGPIPv4Observation struct { + // Customer side peering ip + CustomerPeerIP *string `json:"customerPeerIp,omitempty" tf:"customer_peer_ip,omitempty"` + + // Admin status for the BGP session + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + // Equinix side peering ip EquinixPeerIP *string `json:"equinixPeerIp,omitempty" tf:"equinix_peer_ip,omitempty"` } @@ -34,7 +49,7 @@ type BGPIPv4Observation struct { type BGPIPv4Parameters struct { // Customer side peering ip - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional CustomerPeerIP *string `json:"customerPeerIp" tf:"customer_peer_ip,omitempty"` // Admin status for the BGP session @@ -42,8 +57,23 @@ type BGPIPv4Parameters struct { Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` } +type BGPIPv6InitParameters struct { + + // Customer side peering ip + CustomerPeerIP *string `json:"customerPeerIp,omitempty" tf:"customer_peer_ip,omitempty"` + + // Admin status for the BGP session + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` +} + type BGPIPv6Observation struct { + // Customer side peering ip + CustomerPeerIP *string `json:"customerPeerIp,omitempty" tf:"customer_peer_ip,omitempty"` + + // Admin status for the BGP session + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + // Equinix side peering ip EquinixPeerIP *string `json:"equinixPeerIp,omitempty" tf:"equinix_peer_ip,omitempty"` } @@ -51,7 +81,7 @@ type BGPIPv6Observation struct { type BGPIPv6Parameters struct { // Customer side peering ip - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional CustomerPeerIP *string `json:"customerPeerIp" tf:"customer_peer_ip,omitempty"` // Admin status for the BGP session @@ -59,13 +89,28 @@ type BGPIPv6Parameters struct { Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` } +type BfdInitParameters struct { + + // Bidirectional Forwarding Detection enablement + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + + // Interval range between the received BFD control packets + Interval *string `json:"interval,omitempty" tf:"interval,omitempty"` +} + type BfdObservation struct { + + // Bidirectional Forwarding Detection enablement + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + + // Interval range between the received BFD control packets + Interval *string `json:"interval,omitempty" tf:"interval,omitempty"` } type BfdParameters struct { // Bidirectional Forwarding Detection enablement - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Enabled *bool `json:"enabled" tf:"enabled,omitempty"` // Interval range between the received BFD control packets @@ -73,17 +118,35 @@ type BfdParameters struct { Interval *string `json:"interval,omitempty" tf:"interval,omitempty"` } +type DirectIPv4InitParameters struct { + + // Equinix side Interface IP address + EquinixIfaceIP *string `json:"equinixIfaceIp,omitempty" tf:"equinix_iface_ip,omitempty"` +} + type DirectIPv4Observation struct { + + // Equinix side Interface IP address + EquinixIfaceIP *string `json:"equinixIfaceIp,omitempty" tf:"equinix_iface_ip,omitempty"` } type DirectIPv4Parameters struct { // Equinix side Interface IP address - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional EquinixIfaceIP *string `json:"equinixIfaceIp" tf:"equinix_iface_ip,omitempty"` } +type DirectIPv6InitParameters struct { + + // Equinix side Interface IP address + EquinixIfaceIP *string `json:"equinixIfaceIp,omitempty" tf:"equinix_iface_ip,omitempty"` +} + type DirectIPv6Observation struct { + + // Equinix side Interface IP address + EquinixIfaceIP *string `json:"equinixIfaceIp,omitempty" tf:"equinix_iface_ip,omitempty"` } type DirectIPv6Parameters struct { @@ -93,6 +156,9 @@ type DirectIPv6Parameters struct { EquinixIfaceIP *string `json:"equinixIfaceIp,omitempty" tf:"equinix_iface_ip,omitempty"` } +type OperationErrorsAdditionalInfoInitParameters struct { +} + type OperationErrorsAdditionalInfoObservation struct { Property *string `json:"property,omitempty" tf:"property,omitempty"` @@ -102,6 +168,9 @@ type OperationErrorsAdditionalInfoObservation struct { type OperationErrorsAdditionalInfoParameters struct { } +type OperationErrorsInitParameters struct { +} + type OperationErrorsObservation struct { AdditionalInfo []OperationErrorsAdditionalInfoObservation `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` @@ -119,6 +188,12 @@ type OperationErrorsObservation struct { type OperationErrorsParameters struct { } +type RoutingProtocolChangeInitParameters struct { +} + +type RoutingProtocolChangeLogInitParameters struct { +} + type RoutingProtocolChangeLogObservation struct { CreatedBy *string `json:"createdBy,omitempty" tf:"created_by,omitempty"` @@ -159,22 +234,80 @@ type RoutingProtocolChangeObservation struct { type RoutingProtocolChangeParameters struct { } +type RoutingProtocolInitParameters struct { + + // BGP authorization key + BGPAuthKey *string `json:"bgpAuthKey,omitempty" tf:"bgp_auth_key,omitempty"` + + // Routing Protocol BGP IPv4 + BGPIPv4 []BGPIPv4InitParameters `json:"bgpIpv4,omitempty" tf:"bgp_ipv4,omitempty"` + + // Routing Protocol BGP IPv6 + BGPIPv6 []BGPIPv6InitParameters `json:"bgpIpv6,omitempty" tf:"bgp_ipv6,omitempty"` + + // Bidirectional Forwarding Detection + Bfd []BfdInitParameters `json:"bfd,omitempty" tf:"bfd,omitempty"` + + // Connection URI associated with Routing Protocol + ConnectionUUID *string `json:"connectionUuid,omitempty" tf:"connection_uuid,omitempty"` + + // Customer-provided ASN + CustomerAsn *float64 `json:"customerAsn,omitempty" tf:"customer_asn,omitempty"` + + // Customer-provided Fabric Routing Protocol description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Routing Protocol Direct IPv4 + DirectIPv4 []DirectIPv4InitParameters `json:"directIpv4,omitempty" tf:"direct_ipv4,omitempty"` + + // Routing Protocol Direct IPv6 + DirectIPv6 []DirectIPv6InitParameters `json:"directIpv6,omitempty" tf:"direct_ipv6,omitempty"` + + // Routing Protocol name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Defines the routing protocol type like BGP or DIRECT + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Equinix-assigned routing protocol identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + type RoutingProtocolObservation struct { + // BGP authorization key + BGPAuthKey *string `json:"bgpAuthKey,omitempty" tf:"bgp_auth_key,omitempty"` + // Routing Protocol BGP IPv4 - // +kubebuilder:validation:Optional BGPIPv4 []BGPIPv4Observation `json:"bgpIpv4,omitempty" tf:"bgp_ipv4,omitempty"` // Routing Protocol BGP IPv6 - // +kubebuilder:validation:Optional BGPIPv6 []BGPIPv6Observation `json:"bgpIpv6,omitempty" tf:"bgp_ipv6,omitempty"` + // Bidirectional Forwarding Detection + Bfd []BfdObservation `json:"bfd,omitempty" tf:"bfd,omitempty"` + // Routing Protocol configuration Changes Change []RoutingProtocolChangeObservation `json:"change,omitempty" tf:"change,omitempty"` // Captures Routing Protocol lifecycle change information ChangeLog []RoutingProtocolChangeLogObservation `json:"changeLog,omitempty" tf:"change_log,omitempty"` + // Connection URI associated with Routing Protocol + ConnectionUUID *string `json:"connectionUuid,omitempty" tf:"connection_uuid,omitempty"` + + // Customer-provided ASN + CustomerAsn *float64 `json:"customerAsn,omitempty" tf:"customer_asn,omitempty"` + + // Customer-provided Fabric Routing Protocol description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Routing Protocol Direct IPv4 + DirectIPv4 []DirectIPv4Observation `json:"directIpv4,omitempty" tf:"direct_ipv4,omitempty"` + + // Routing Protocol Direct IPv6 + DirectIPv6 []DirectIPv6Observation `json:"directIpv6,omitempty" tf:"direct_ipv6,omitempty"` + // Equinix ASN EquinixAsn *float64 `json:"equinixAsn,omitempty" tf:"equinix_asn,omitempty"` @@ -183,11 +316,23 @@ type RoutingProtocolObservation struct { ID *string `json:"id,omitempty" tf:"id,omitempty"` + // Routing Protocol name. An alpha-numeric 24 characters string which can include only hyphens and underscores + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // Routing Protocol type-specific operational data Operation []RoutingProtocolOperationObservation `json:"operation,omitempty" tf:"operation,omitempty"` // Routing Protocol overall state State *string `json:"state,omitempty" tf:"state,omitempty"` + + // Defines the routing protocol type like BGP or DIRECT + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Equinix-assigned routing protocol identifier + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + +type RoutingProtocolOperationInitParameters struct { } type RoutingProtocolOperationObservation struct { @@ -216,8 +361,8 @@ type RoutingProtocolParameters struct { Bfd []BfdParameters `json:"bfd,omitempty" tf:"bfd,omitempty"` // Connection URI associated with Routing Protocol - // +kubebuilder:validation:Required - ConnectionUUID *string `json:"connectionUuid" tf:"connection_uuid,omitempty"` + // +kubebuilder:validation:Optional + ConnectionUUID *string `json:"connectionUuid,omitempty" tf:"connection_uuid,omitempty"` // Customer-provided ASN // +kubebuilder:validation:Optional @@ -252,6 +397,17 @@ type RoutingProtocolParameters struct { type RoutingProtocolSpec struct { v1.ResourceSpec `json:",inline"` ForProvider RoutingProtocolParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider RoutingProtocolInitParameters `json:"initProvider,omitempty"` } // RoutingProtocolStatus defines the observed state of RoutingProtocol. @@ -261,19 +417,21 @@ type RoutingProtocolStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // RoutingProtocol is the Schema for the RoutingProtocols 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type RoutingProtocol struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec RoutingProtocolSpec `json:"spec"` - Status RoutingProtocolStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.connectionUuid) || (has(self.initProvider) && has(self.initProvider.connectionUuid))",message="spec.forProvider.connectionUuid is a required parameter" + Spec RoutingProtocolSpec `json:"spec"` + Status RoutingProtocolStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/fabric/v1alpha1/zz_serviceprofile_terraformed.go b/apis/fabric/v1alpha1/zz_serviceprofile_terraformed.go new file mode 100755 index 0000000..f1a0dfd --- /dev/null +++ b/apis/fabric/v1alpha1/zz_serviceprofile_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this ServiceProfile +func (mg *ServiceProfile) GetTerraformResourceType() string { + return "equinix_fabric_service_profile" +} + +// GetConnectionDetailsMapping for this ServiceProfile +func (tr *ServiceProfile) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this ServiceProfile +func (tr *ServiceProfile) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this ServiceProfile +func (tr *ServiceProfile) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this ServiceProfile +func (tr *ServiceProfile) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this ServiceProfile +func (tr *ServiceProfile) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this ServiceProfile +func (tr *ServiceProfile) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this ServiceProfile +func (tr *ServiceProfile) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this ServiceProfile +func (tr *ServiceProfile) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this ServiceProfile using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *ServiceProfile) LateInitialize(attrs []byte) (bool, error) { + params := &ServiceProfileParameters{} + 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 *ServiceProfile) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/fabric/v1alpha1/zz_serviceprofile_types.go b/apis/fabric/v1alpha1/zz_serviceprofile_types.go index 66d5325..afded5b 100755 --- a/apis/fabric/v1alpha1/zz_serviceprofile_types.go +++ b/apis/fabric/v1alpha1/zz_serviceprofile_types.go @@ -25,503 +25,1322 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type APIConfigInitParameters struct { + + // (Boolean) Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + // Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + APIAvailable *bool `json:"apiAvailable,omitempty" tf:"api_available,omitempty"` + + // (Boolean) Setting showing that oversubscription support is available (true) or not (false). The default is false + // Setting showing that oversubscription support is available (true) or not (false). The default is false + AllowOverSubscription *bool `json:"allowOverSubscription,omitempty" tf:"allow_over_subscription,omitempty"` + + // (Boolean) Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + // Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + BandwidthFromAPI *bool `json:"bandwidthFromApi,omitempty" tf:"bandwidth_from_api,omitempty"` + + // (Boolean) Setting indicating that the port is managed by Equinix (true) or not (false) + // Setting indicating that the port is managed by Equinix (true) or not (false) + EquinixManagedPort *bool `json:"equinixManagedPort,omitempty" tf:"equinix_managed_port,omitempty"` + + // (Boolean) Setting indicating that the VLAN is managed by Equinix (true) or not (false) + // Setting indicating that the VLAN is managed by Equinix (true) or not (false) + EquinixManagedVlan *bool `json:"equinixManagedVlan,omitempty" tf:"equinix_managed_vlan,omitempty"` + + // (String) A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + // A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + IntegrationID *string `json:"integrationId,omitempty" tf:"integration_id,omitempty"` + + // (Number) Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + // Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + OverSubscriptionLimit *float64 `json:"overSubscriptionLimit,omitempty" tf:"over_subscription_limit,omitempty"` +} + type APIConfigObservation struct { + + // (Boolean) Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + // Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + APIAvailable *bool `json:"apiAvailable,omitempty" tf:"api_available,omitempty"` + + // (Boolean) Setting showing that oversubscription support is available (true) or not (false). The default is false + // Setting showing that oversubscription support is available (true) or not (false). The default is false + AllowOverSubscription *bool `json:"allowOverSubscription,omitempty" tf:"allow_over_subscription,omitempty"` + + // (Boolean) Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + // Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + BandwidthFromAPI *bool `json:"bandwidthFromApi,omitempty" tf:"bandwidth_from_api,omitempty"` + + // (Boolean) Setting indicating that the port is managed by Equinix (true) or not (false) + // Setting indicating that the port is managed by Equinix (true) or not (false) + EquinixManagedPort *bool `json:"equinixManagedPort,omitempty" tf:"equinix_managed_port,omitempty"` + + // (Boolean) Setting indicating that the VLAN is managed by Equinix (true) or not (false) + // Setting indicating that the VLAN is managed by Equinix (true) or not (false) + EquinixManagedVlan *bool `json:"equinixManagedVlan,omitempty" tf:"equinix_managed_vlan,omitempty"` + + // (String) A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + // A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + IntegrationID *string `json:"integrationId,omitempty" tf:"integration_id,omitempty"` + + // (Number) Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + // Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + OverSubscriptionLimit *float64 `json:"overSubscriptionLimit,omitempty" tf:"over_subscription_limit,omitempty"` } type APIConfigParameters struct { + // (Boolean) Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. // Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. // +kubebuilder:validation:Optional APIAvailable *bool `json:"apiAvailable,omitempty" tf:"api_available,omitempty"` + // (Boolean) Setting showing that oversubscription support is available (true) or not (false). The default is false // Setting showing that oversubscription support is available (true) or not (false). The default is false // +kubebuilder:validation:Optional AllowOverSubscription *bool `json:"allowOverSubscription,omitempty" tf:"allow_over_subscription,omitempty"` + // (Boolean) Indicates if the connection bandwidth can be obtained directly from the cloud service provider. // Indicates if the connection bandwidth can be obtained directly from the cloud service provider. // +kubebuilder:validation:Optional BandwidthFromAPI *bool `json:"bandwidthFromApi,omitempty" tf:"bandwidth_from_api,omitempty"` + // (Boolean) Setting indicating that the port is managed by Equinix (true) or not (false) // Setting indicating that the port is managed by Equinix (true) or not (false) // +kubebuilder:validation:Optional EquinixManagedPort *bool `json:"equinixManagedPort,omitempty" tf:"equinix_managed_port,omitempty"` + // (Boolean) Setting indicating that the VLAN is managed by Equinix (true) or not (false) // Setting indicating that the VLAN is managed by Equinix (true) or not (false) // +kubebuilder:validation:Optional EquinixManagedVlan *bool `json:"equinixManagedVlan,omitempty" tf:"equinix_managed_vlan,omitempty"` + // (String) A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. // A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. // +kubebuilder:validation:Optional IntegrationID *string `json:"integrationId,omitempty" tf:"integration_id,omitempty"` + // (Number) Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. // Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. // +kubebuilder:validation:Optional OverSubscriptionLimit *float64 `json:"overSubscriptionLimit,omitempty" tf:"over_subscription_limit,omitempty"` } +type AuthenticationKeyInitParameters struct { + + // provided service description + // Description of authorization key + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Name of the parameter that must be provided to authorize the connection. + // Name of the parameter that must be provided to authorize the connection. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // (Boolean) Requirement to configure an authentication key. + // Requirement to configure an authentication key. + Required *bool `json:"required,omitempty" tf:"required,omitempty"` +} + type AuthenticationKeyObservation struct { + + // provided service description + // Description of authorization key + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Name of the parameter that must be provided to authorize the connection. + // Name of the parameter that must be provided to authorize the connection. + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // (Boolean) Requirement to configure an authentication key. + // Requirement to configure an authentication key. + Required *bool `json:"required,omitempty" tf:"required,omitempty"` } type AuthenticationKeyParameters struct { + // provided service description // Description of authorization key // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Name of the parameter that must be provided to authorize the connection. // Name of the parameter that must be provided to authorize the connection. // +kubebuilder:validation:Optional Label *string `json:"label,omitempty" tf:"label,omitempty"` + // (Boolean) Requirement to configure an authentication key. // Requirement to configure an authentication key. // +kubebuilder:validation:Optional Required *bool `json:"required,omitempty" tf:"required,omitempty"` } +type CustomFieldsInitParameters struct { + + // (Boolean) Required field + // Required field + CaptureInEmail *bool `json:"captureInEmail,omitempty" tf:"capture_in_email,omitempty"` + + // (String) Data type + // Data type + DataType *string `json:"dataType,omitempty" tf:"data_type,omitempty"` + + // provided service description + // Description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Name of the parameter that must be provided to authorize the connection. + // Label + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // (List of String) Options + // Options + Options []*string `json:"options,omitempty" tf:"options,omitempty"` + + // (Boolean) Requirement to configure an authentication key. + // Required field + Required *bool `json:"required,omitempty" tf:"required,omitempty"` +} + type CustomFieldsObservation struct { + + // (Boolean) Required field + // Required field + CaptureInEmail *bool `json:"captureInEmail,omitempty" tf:"capture_in_email,omitempty"` + + // (String) Data type + // Data type + DataType *string `json:"dataType,omitempty" tf:"data_type,omitempty"` + + // provided service description + // Description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Name of the parameter that must be provided to authorize the connection. + // Label + Label *string `json:"label,omitempty" tf:"label,omitempty"` + + // (List of String) Options + // Options + Options []*string `json:"options,omitempty" tf:"options,omitempty"` + + // (Boolean) Requirement to configure an authentication key. + // Required field + Required *bool `json:"required,omitempty" tf:"required,omitempty"` } type CustomFieldsParameters struct { + // (Boolean) Required field // Required field // +kubebuilder:validation:Optional CaptureInEmail *bool `json:"captureInEmail,omitempty" tf:"capture_in_email,omitempty"` + // (String) Data type // Data type - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional DataType *string `json:"dataType" tf:"data_type,omitempty"` + // provided service description // Description // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Name of the parameter that must be provided to authorize the connection. // Label - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Label *string `json:"label" tf:"label,omitempty"` + // (List of String) Options // Options // +kubebuilder:validation:Optional Options []*string `json:"options,omitempty" tf:"options,omitempty"` + // (Boolean) Requirement to configure an authentication key. // Required field - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Required *bool `json:"required" tf:"required,omitempty"` } +type LinkProtocolConfigInitParameters struct { + + // Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + // Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + Encapsulation *string `json:"encapsulation,omitempty" tf:"encapsulation,omitempty"` + + // (String) Additional tagging information required by the seller profile. + // Additional tagging information required by the seller profile. + EncapsulationStrategy *string `json:"encapsulationStrategy,omitempty" tf:"encapsulation_strategy,omitempty"` + + // tag assigned as the initial connection. + // Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. + ReuseVlanSTag *bool `json:"reuseVlanSTag,omitempty" tf:"reuse_vlan_s_tag,omitempty"` +} + type LinkProtocolConfigObservation struct { + + // Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + // Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + Encapsulation *string `json:"encapsulation,omitempty" tf:"encapsulation,omitempty"` + + // (String) Additional tagging information required by the seller profile. + // Additional tagging information required by the seller profile. + EncapsulationStrategy *string `json:"encapsulationStrategy,omitempty" tf:"encapsulation_strategy,omitempty"` + + // tag assigned as the initial connection. + // Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. + ReuseVlanSTag *bool `json:"reuseVlanSTag,omitempty" tf:"reuse_vlan_s_tag,omitempty"` } type LinkProtocolConfigParameters struct { + // Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. // Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. // +kubebuilder:validation:Optional Encapsulation *string `json:"encapsulation,omitempty" tf:"encapsulation,omitempty"` + // (String) Additional tagging information required by the seller profile. // Additional tagging information required by the seller profile. // +kubebuilder:validation:Optional EncapsulationStrategy *string `json:"encapsulationStrategy,omitempty" tf:"encapsulation_strategy,omitempty"` + // tag assigned as the initial connection. // Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. // +kubebuilder:validation:Optional ReuseVlanSTag *bool `json:"reuseVlanSTag,omitempty" tf:"reuse_vlan_s_tag,omitempty"` } +type MarketingInfoInitParameters struct { + + // (String) Logo + // Logo + Logo *string `json:"logo,omitempty" tf:"logo,omitempty"` + + // (Block List) Process Step (see below for nested schema) + // Process Step + ProcessStep []ProcessStepInitParameters `json:"processStep,omitempty" tf:"process_step,omitempty"` + + // (Boolean) Promotion + // Promotion + Promotion *bool `json:"promotion,omitempty" tf:"promotion,omitempty"` +} + type MarketingInfoObservation struct { + + // (String) Logo + // Logo + Logo *string `json:"logo,omitempty" tf:"logo,omitempty"` + + // (Block List) Process Step (see below for nested schema) + // Process Step + ProcessStep []ProcessStepObservation `json:"processStep,omitempty" tf:"process_step,omitempty"` + + // (Boolean) Promotion + // Promotion + Promotion *bool `json:"promotion,omitempty" tf:"promotion,omitempty"` } type MarketingInfoParameters struct { + // (String) Logo // Logo // +kubebuilder:validation:Optional Logo *string `json:"logo,omitempty" tf:"logo,omitempty"` + // (Block List) Process Step (see below for nested schema) // Process Step // +kubebuilder:validation:Optional ProcessStep []ProcessStepParameters `json:"processStep,omitempty" tf:"process_step,omitempty"` + // (Boolean) Promotion // Promotion // +kubebuilder:validation:Optional Promotion *bool `json:"promotion,omitempty" tf:"promotion,omitempty"` } +type MetrosInitParameters struct { + + // Example SV + // Metro Code - Example SV + Code *string `json:"code,omitempty" tf:"code,omitempty"` + + // (String) Display Name + // Display Name + DisplayName *string `json:"displayName,omitempty" tf:"display_name,omitempty"` + + // Equinix International Business Exchange list + // IBX- Equinix International Business Exchange list + Ibxs []*string `json:"ibxs,omitempty" tf:"ibxs,omitempty"` + + // (Boolean) In Trail + // In Trail + InTrail *bool `json:"inTrail,omitempty" tf:"in_trail,omitempty"` + + // assigned service profile name + // Metro Name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Map of String) Seller Regions + // Seller Regions + // +mapType=granular + SellerRegions map[string]*string `json:"sellerRegions,omitempty" tf:"seller_regions,omitempty"` +} + type MetrosObservation struct { + + // Example SV + // Metro Code - Example SV + Code *string `json:"code,omitempty" tf:"code,omitempty"` + + // (String) Display Name + // Display Name + DisplayName *string `json:"displayName,omitempty" tf:"display_name,omitempty"` + + // Equinix International Business Exchange list + // IBX- Equinix International Business Exchange list + Ibxs []*string `json:"ibxs,omitempty" tf:"ibxs,omitempty"` + + // (Boolean) In Trail + // In Trail + InTrail *bool `json:"inTrail,omitempty" tf:"in_trail,omitempty"` + + // assigned service profile name + // Metro Name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Map of String) Seller Regions + // Seller Regions + // +mapType=granular + SellerRegions map[string]*string `json:"sellerRegions,omitempty" tf:"seller_regions,omitempty"` } type MetrosParameters struct { + // Example SV // Metro Code - Example SV // +kubebuilder:validation:Optional Code *string `json:"code,omitempty" tf:"code,omitempty"` + // (String) Display Name // Display Name // +kubebuilder:validation:Optional DisplayName *string `json:"displayName,omitempty" tf:"display_name,omitempty"` + // Equinix International Business Exchange list // IBX- Equinix International Business Exchange list // +kubebuilder:validation:Optional Ibxs []*string `json:"ibxs,omitempty" tf:"ibxs,omitempty"` + // (Boolean) In Trail // In Trail // +kubebuilder:validation:Optional InTrail *bool `json:"inTrail,omitempty" tf:"in_trail,omitempty"` + // assigned service profile name // Metro Name // +kubebuilder:validation:Optional Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Map of String) Seller Regions // Seller Regions // +kubebuilder:validation:Optional + // +mapType=granular SellerRegions map[string]*string `json:"sellerRegions,omitempty" tf:"seller_regions,omitempty"` } +type PortsInitParameters struct { + + // (String) Cross Connect Id + // Cross Connect Id + CrossConnectID *string `json:"crossConnectId,omitempty" tf:"cross_connect_id,omitempty"` + + // (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + // Colo/Port Location + Location []PortsLocationInitParameters `json:"location,omitempty" tf:"location,omitempty"` + + // (String) Seller Region + // Seller Region + SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + + // (String) Seller Region details + // Seller Region details + SellerRegionDescription *string `json:"sellerRegionDescription,omitempty" tf:"seller_region_description,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Colo/Port Type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (String) Equinix assigned service profile identifier + // Colo/Port Uuid + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + +type PortsLocationInitParameters struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + type PortsLocationObservation struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` } type PortsLocationParameters struct { + // (String) IBX Code // IBX Code // +kubebuilder:validation:Optional Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + // (String) Access point metro code // Access point metro code // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + // (String) Access point metro name // Access point metro name // +kubebuilder:validation:Optional MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + // (String) Access point region // Access point region // +kubebuilder:validation:Optional Region *string `json:"region,omitempty" tf:"region,omitempty"` } type PortsObservation struct { + + // (String) Cross Connect Id + // Cross Connect Id + CrossConnectID *string `json:"crossConnectId,omitempty" tf:"cross_connect_id,omitempty"` + + // (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + // Colo/Port Location + Location []PortsLocationObservation `json:"location,omitempty" tf:"location,omitempty"` + + // (String) Seller Region + // Seller Region + SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + + // (String) Seller Region details + // Seller Region details + SellerRegionDescription *string `json:"sellerRegionDescription,omitempty" tf:"seller_region_description,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Colo/Port Type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (String) Equinix assigned service profile identifier + // Colo/Port Uuid + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type PortsParameters struct { + // (String) Cross Connect Id // Cross Connect Id // +kubebuilder:validation:Optional CrossConnectID *string `json:"crossConnectId,omitempty" tf:"cross_connect_id,omitempty"` + // (Block Set, Max: 1) Colo/Port Location (see below for nested schema) // Colo/Port Location // +kubebuilder:validation:Optional Location []PortsLocationParameters `json:"location,omitempty" tf:"location,omitempty"` + // (String) Seller Region // Seller Region // +kubebuilder:validation:Optional SellerRegion *string `json:"sellerRegion,omitempty" tf:"seller_region,omitempty"` + // (String) Seller Region details // Seller Region details // +kubebuilder:validation:Optional SellerRegionDescription *string `json:"sellerRegionDescription,omitempty" tf:"seller_region_description,omitempty"` + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE // Colo/Port Type - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` + // (String) Equinix assigned service profile identifier // Colo/Port Uuid - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional UUID *string `json:"uuid" tf:"uuid,omitempty"` } +type ProcessStepInitParameters struct { + + // provided service description + // Description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Sub Title + // Sub Title + SubTitle *string `json:"subTitle,omitempty" tf:"sub_title,omitempty"` + + // (String) Title + // Title + Title *string `json:"title,omitempty" tf:"title,omitempty"` +} + type ProcessStepObservation struct { + + // provided service description + // Description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Sub Title + // Sub Title + SubTitle *string `json:"subTitle,omitempty" tf:"sub_title,omitempty"` + + // (String) Title + // Title + Title *string `json:"title,omitempty" tf:"title,omitempty"` } type ProcessStepParameters struct { + // provided service description // Description // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (String) Sub Title // Sub Title // +kubebuilder:validation:Optional SubTitle *string `json:"subTitle,omitempty" tf:"sub_title,omitempty"` + // (String) Title // Title // +kubebuilder:validation:Optional Title *string `json:"title,omitempty" tf:"title,omitempty"` } +type ServiceProfileAccessPointTypeConfigsInitParameters struct { + + // (Block Set, Max: 1) Api configuration details (see below for nested schema) + // Api configuration details + APIConfig []APIConfigInitParameters `json:"apiConfig,omitempty" tf:"api_config,omitempty"` + + // (Boolean) Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + // Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + AllowBandwidthAutoApproval *bool `json:"allowBandwidthAutoApproval,omitempty" tf:"allow_bandwidth_auto_approval,omitempty"` + + // (Boolean) Availability of a bandwidth upgrade. The default is false + // Availability of a bandwidth upgrade. The default is false + AllowBandwidthUpgrade *bool `json:"allowBandwidthUpgrade,omitempty" tf:"allow_bandwidth_upgrade,omitempty"` + + // (Boolean) Setting to enable or disable the ability of the buyer to customize the bandwidth + // Setting to enable or disable the ability of the buyer to customize the bandwidth + AllowCustomBandwidth *bool `json:"allowCustomBandwidth,omitempty" tf:"allow_custom_bandwidth,omitempty"` + + // (Boolean) Setting to allow or prohibit remote connections to the service profile + // Setting to allow or prohibit remote connections to the service profile + AllowRemoteConnections *bool `json:"allowRemoteConnections,omitempty" tf:"allow_remote_connections,omitempty"` + + // (Block Set, Max: 1) Authentication key details (see below for nested schema) + // Authentication key details + AuthenticationKey []AuthenticationKeyInitParameters `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + + // (Number) Percentage of port bandwidth at which an allocation alert is generated + // Percentage of port bandwidth at which an allocation alert is generated + BandwidthAlertThreshold *float64 `json:"bandwidthAlertThreshold,omitempty" tf:"bandwidth_alert_threshold,omitempty"` + + // (String) Custom name for Connection + // Custom name for Connection + ConnectionLabel *string `json:"connectionLabel,omitempty" tf:"connection_label,omitempty"` + + // (Boolean) Mandate redundant connections + // Mandate redundant connections + ConnectionRedundancyRequired *bool `json:"connectionRedundancyRequired,omitempty" tf:"connection_redundancy_required,omitempty"` + + // (Boolean) Enable auto generate service key + // Enable auto generate service key + EnableAutoGenerateServiceKey *bool `json:"enableAutoGenerateServiceKey,omitempty" tf:"enable_auto_generate_service_key,omitempty"` + + // (Block Set, Max: 1) Link protocol configuration details (see below for nested schema) + // Link protocol configuration details + LinkProtocolConfig []LinkProtocolConfigInitParameters `json:"linkProtocolConfig,omitempty" tf:"link_protocol_config,omitempty"` + + // (List of Number) Supported bandwidths + // Supported bandwidths + SupportedBandwidths []*float64 `json:"supportedBandwidths,omitempty" tf:"supported_bandwidths,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Type of access point type config - VD, COLO + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type ServiceProfileAccessPointTypeConfigsObservation struct { + // (Block Set, Max: 1) Api configuration details (see below for nested schema) + // Api configuration details + APIConfig []APIConfigObservation `json:"apiConfig,omitempty" tf:"api_config,omitempty"` + + // (Boolean) Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + // Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + AllowBandwidthAutoApproval *bool `json:"allowBandwidthAutoApproval,omitempty" tf:"allow_bandwidth_auto_approval,omitempty"` + + // (Boolean) Availability of a bandwidth upgrade. The default is false + // Availability of a bandwidth upgrade. The default is false + AllowBandwidthUpgrade *bool `json:"allowBandwidthUpgrade,omitempty" tf:"allow_bandwidth_upgrade,omitempty"` + + // (Boolean) Setting to enable or disable the ability of the buyer to customize the bandwidth + // Setting to enable or disable the ability of the buyer to customize the bandwidth + AllowCustomBandwidth *bool `json:"allowCustomBandwidth,omitempty" tf:"allow_custom_bandwidth,omitempty"` + + // (Boolean) Setting to allow or prohibit remote connections to the service profile + // Setting to allow or prohibit remote connections to the service profile + AllowRemoteConnections *bool `json:"allowRemoteConnections,omitempty" tf:"allow_remote_connections,omitempty"` + + // (Block Set, Max: 1) Authentication key details (see below for nested schema) + // Authentication key details + AuthenticationKey []AuthenticationKeyObservation `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + + // (Number) Percentage of port bandwidth at which an allocation alert is generated + // Percentage of port bandwidth at which an allocation alert is generated + BandwidthAlertThreshold *float64 `json:"bandwidthAlertThreshold,omitempty" tf:"bandwidth_alert_threshold,omitempty"` + + // (String) Custom name for Connection + // Custom name for Connection + ConnectionLabel *string `json:"connectionLabel,omitempty" tf:"connection_label,omitempty"` + + // (Boolean) Mandate redundant connections + // Mandate redundant connections + ConnectionRedundancyRequired *bool `json:"connectionRedundancyRequired,omitempty" tf:"connection_redundancy_required,omitempty"` + + // (Boolean) Enable auto generate service key + // Enable auto generate service key + EnableAutoGenerateServiceKey *bool `json:"enableAutoGenerateServiceKey,omitempty" tf:"enable_auto_generate_service_key,omitempty"` + + // (Block Set, Max: 1) Link protocol configuration details (see below for nested schema) + // Link protocol configuration details + LinkProtocolConfig []LinkProtocolConfigObservation `json:"linkProtocolConfig,omitempty" tf:"link_protocol_config,omitempty"` + + // (List of Number) Supported bandwidths + // Supported bandwidths + SupportedBandwidths []*float64 `json:"supportedBandwidths,omitempty" tf:"supported_bandwidths,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Type of access point type config - VD, COLO + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (String) Equinix assigned service profile identifier // Colo/Port Uuid UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type ServiceProfileAccessPointTypeConfigsParameters struct { + // (Block Set, Max: 1) Api configuration details (see below for nested schema) // Api configuration details // +kubebuilder:validation:Optional APIConfig []APIConfigParameters `json:"apiConfig,omitempty" tf:"api_config,omitempty"` + // (Boolean) Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller // Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller // +kubebuilder:validation:Optional AllowBandwidthAutoApproval *bool `json:"allowBandwidthAutoApproval,omitempty" tf:"allow_bandwidth_auto_approval,omitempty"` + // (Boolean) Availability of a bandwidth upgrade. The default is false // Availability of a bandwidth upgrade. The default is false // +kubebuilder:validation:Optional AllowBandwidthUpgrade *bool `json:"allowBandwidthUpgrade,omitempty" tf:"allow_bandwidth_upgrade,omitempty"` + // (Boolean) Setting to enable or disable the ability of the buyer to customize the bandwidth // Setting to enable or disable the ability of the buyer to customize the bandwidth // +kubebuilder:validation:Optional AllowCustomBandwidth *bool `json:"allowCustomBandwidth,omitempty" tf:"allow_custom_bandwidth,omitempty"` + // (Boolean) Setting to allow or prohibit remote connections to the service profile // Setting to allow or prohibit remote connections to the service profile // +kubebuilder:validation:Optional AllowRemoteConnections *bool `json:"allowRemoteConnections,omitempty" tf:"allow_remote_connections,omitempty"` + // (Block Set, Max: 1) Authentication key details (see below for nested schema) // Authentication key details // +kubebuilder:validation:Optional AuthenticationKey []AuthenticationKeyParameters `json:"authenticationKey,omitempty" tf:"authentication_key,omitempty"` + // (Number) Percentage of port bandwidth at which an allocation alert is generated // Percentage of port bandwidth at which an allocation alert is generated // +kubebuilder:validation:Optional BandwidthAlertThreshold *float64 `json:"bandwidthAlertThreshold,omitempty" tf:"bandwidth_alert_threshold,omitempty"` + // (String) Custom name for Connection // Custom name for Connection // +kubebuilder:validation:Optional ConnectionLabel *string `json:"connectionLabel,omitempty" tf:"connection_label,omitempty"` + // (Boolean) Mandate redundant connections // Mandate redundant connections // +kubebuilder:validation:Optional ConnectionRedundancyRequired *bool `json:"connectionRedundancyRequired,omitempty" tf:"connection_redundancy_required,omitempty"` + // (Boolean) Enable auto generate service key // Enable auto generate service key // +kubebuilder:validation:Optional EnableAutoGenerateServiceKey *bool `json:"enableAutoGenerateServiceKey,omitempty" tf:"enable_auto_generate_service_key,omitempty"` + // (Block Set, Max: 1) Link protocol configuration details (see below for nested schema) // Link protocol configuration details // +kubebuilder:validation:Optional LinkProtocolConfig []LinkProtocolConfigParameters `json:"linkProtocolConfig,omitempty" tf:"link_protocol_config,omitempty"` + // (List of Number) Supported bandwidths // Supported bandwidths // +kubebuilder:validation:Optional SupportedBandwidths []*float64 `json:"supportedBandwidths,omitempty" tf:"supported_bandwidths,omitempty"` + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE // Type of access point type config - VD, COLO - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` } +type ServiceProfileAccountInitParameters struct { +} + type ServiceProfileAccountObservation struct { + + // (String) AccountName *string `json:"accountName,omitempty" tf:"account_name,omitempty"` + // (Number) AccountNumber *float64 `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + // (String) GlobalCustID *string `json:"globalCustId,omitempty" tf:"global_cust_id,omitempty"` + // (String) GlobalOrgID *string `json:"globalOrgId,omitempty" tf:"global_org_id,omitempty"` + // (String) GlobalOrganizationName *string `json:"globalOrganizationName,omitempty" tf:"global_organization_name,omitempty"` + // (Number) OrgID *float64 `json:"orgId,omitempty" tf:"org_id,omitempty"` + // (String) OrganizationName *string `json:"organizationName,omitempty" tf:"organization_name,omitempty"` + // (String) UcmID *string `json:"ucmId,omitempty" tf:"ucm_id,omitempty"` } type ServiceProfileAccountParameters struct { } +type ServiceProfileChangeLogInitParameters struct { +} + type ServiceProfileChangeLogObservation struct { + + // (String) CreatedBy *string `json:"createdBy,omitempty" tf:"created_by,omitempty"` + // (String) CreatedByEmail *string `json:"createdByEmail,omitempty" tf:"created_by_email,omitempty"` + // (String) CreatedByFullName *string `json:"createdByFullName,omitempty" tf:"created_by_full_name,omitempty"` + // (String) CreatedDateTime *string `json:"createdDateTime,omitempty" tf:"created_date_time,omitempty"` + // (String) DeletedBy *string `json:"deletedBy,omitempty" tf:"deleted_by,omitempty"` + // (String) DeletedByEmail *string `json:"deletedByEmail,omitempty" tf:"deleted_by_email,omitempty"` + // (String) DeletedByFullName *string `json:"deletedByFullName,omitempty" tf:"deleted_by_full_name,omitempty"` + // (String) DeletedDateTime *string `json:"deletedDateTime,omitempty" tf:"deleted_date_time,omitempty"` + // (String) UpdatedBy *string `json:"updatedBy,omitempty" tf:"updated_by,omitempty"` + // (String) UpdatedByEmail *string `json:"updatedByEmail,omitempty" tf:"updated_by_email,omitempty"` + // (String) UpdatedByFullName *string `json:"updatedByFullName,omitempty" tf:"updated_by_full_name,omitempty"` + // (String) UpdatedDateTime *string `json:"updatedDateTime,omitempty" tf:"updated_date_time,omitempty"` } type ServiceProfileChangeLogParameters struct { } +type ServiceProfileInitParameters struct { + + // (Block List) Access point config information (see below for nested schema) + // Access point config information + AccessPointTypeConfigs []ServiceProfileAccessPointTypeConfigsInitParameters `json:"accessPointTypeConfigs,omitempty" tf:"access_point_type_configs,omitempty"` + + // (List of String) Array of contact emails + // Array of contact emails + AllowedEmails []*string `json:"allowedEmails,omitempty" tf:"allowed_emails,omitempty"` + + // (Block List) Custom Fields (see below for nested schema) + // Custom Fields + CustomFields []CustomFieldsInitParameters `json:"customFields,omitempty" tf:"custom_fields,omitempty"` + + // provided service description + // User-provided service description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Block Set, Max: 1) Marketing Info (see below for nested schema) + // Marketing Info + MarketingInfo []MarketingInfoInitParameters `json:"marketingInfo,omitempty" tf:"marketing_info,omitempty"` + + // (Block List) Access point config information (see below for nested schema) + // Access point config information + Metros []MetrosInitParameters `json:"metros,omitempty" tf:"metros,omitempty"` + + // assigned service profile name + // Customer-assigned service profile name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List) Preferences for notifications on connection configuration or status changes (see below for nested schema) + // Preferences for notifications on connection configuration or status changes + Notifications []ServiceProfileNotificationsInitParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Block List) Ports (see below for nested schema) + // Ports + Ports []PortsInitParameters `json:"ports,omitempty" tf:"ports,omitempty"` + + // (Block Set, Max: 1) Project information (see below for nested schema) + // Project information + Project []ServiceProfileProjectInitParameters `json:"project,omitempty" tf:"project,omitempty"` + + // (Boolean) Self Profile indicating if the profile is created for customer's self use + // Self Profile indicating if the profile is created for customer's self use + SelfProfile *bool `json:"selfProfile,omitempty" tf:"self_profile,omitempty"` + + // ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + // Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + State *string `json:"state,omitempty" tf:"state,omitempty"` + + // (List of String) Tags attached to the connection + // Tags attached to the connection + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide + ViewPoint *string `json:"viewPoint,omitempty" tf:"view_point,omitempty"` + + // (Block List) Virtual Devices (see below for nested schema) + // Virtual Devices + VirtualDevices []VirtualDevicesInitParameters `json:"virtualDevices,omitempty" tf:"virtual_devices,omitempty"` + + // PUBLIC, PRIVATE + // Service profile visibility - PUBLIC, PRIVATE + Visibility *string `json:"visibility,omitempty" tf:"visibility,omitempty"` +} + +type ServiceProfileNotificationsInitParameters struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type ServiceProfileNotificationsObservation struct { + + // (List of String) Array of contact emails + // Array of contact emails + Emails []*string `json:"emails,omitempty" tf:"emails,omitempty"` + + // (String) Send interval + // Send interval + SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type ServiceProfileNotificationsParameters struct { + // (List of String) Array of contact emails // Array of contact emails - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Emails []*string `json:"emails" tf:"emails,omitempty"` + // (String) Send interval // Send interval // +kubebuilder:validation:Optional SendInterval *string `json:"sendInterval,omitempty" tf:"send_interval,omitempty"` + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE // Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` } type ServiceProfileObservation struct { + // (Block List) Access point config information (see below for nested schema) // Access point config information - // +kubebuilder:validation:Optional AccessPointTypeConfigs []ServiceProfileAccessPointTypeConfigsObservation `json:"accessPointTypeConfigs,omitempty" tf:"access_point_type_configs,omitempty"` + // (Set of Object) Service Profile Owner Account Information (see below for nested schema) // Service Profile Owner Account Information Account []ServiceProfileAccountObservation `json:"account,omitempty" tf:"account,omitempty"` + // (List of String) Array of contact emails + // Array of contact emails + AllowedEmails []*string `json:"allowedEmails,omitempty" tf:"allowed_emails,omitempty"` + + // (Set of Object) Captures connection lifecycle change information (see below for nested schema) // Captures connection lifecycle change information ChangeLog []ServiceProfileChangeLogObservation `json:"changeLog,omitempty" tf:"change_log,omitempty"` + // (Block List) Custom Fields (see below for nested schema) + // Custom Fields + CustomFields []CustomFieldsObservation `json:"customFields,omitempty" tf:"custom_fields,omitempty"` + + // provided service description + // User-provided service description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) Service Profile URI response attribute // Service Profile URI response attribute Href *string `json:"href,omitempty" tf:"href,omitempty"` + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // (Block Set, Max: 1) Marketing Info (see below for nested schema) + // Marketing Info + MarketingInfo []MarketingInfoObservation `json:"marketingInfo,omitempty" tf:"marketing_info,omitempty"` + + // (Block List) Access point config information (see below for nested schema) + // Access point config information + Metros []MetrosObservation `json:"metros,omitempty" tf:"metros,omitempty"` + + // assigned service profile name + // Customer-assigned service profile name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // (Block List) Preferences for notifications on connection configuration or status changes (see below for nested schema) + // Preferences for notifications on connection configuration or status changes + Notifications []ServiceProfileNotificationsObservation `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // (Block List) Ports (see below for nested schema) + // Ports + Ports []PortsObservation `json:"ports,omitempty" tf:"ports,omitempty"` + + // (Block Set, Max: 1) Project information (see below for nested schema) // Project information - // +kubebuilder:validation:Optional Project []ServiceProfileProjectObservation `json:"project,omitempty" tf:"project,omitempty"` + // (Boolean) Self Profile indicating if the profile is created for customer's self use + // Self Profile indicating if the profile is created for customer's self use + SelfProfile *bool `json:"selfProfile,omitempty" tf:"self_profile,omitempty"` + + // ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + // Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + State *string `json:"state,omitempty" tf:"state,omitempty"` + + // (List of String) Tags attached to the connection + // Tags attached to the connection + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (String) Equinix assigned service profile identifier // Equinix assigned service profile identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + + // Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide + ViewPoint *string `json:"viewPoint,omitempty" tf:"view_point,omitempty"` + + // (Block List) Virtual Devices (see below for nested schema) + // Virtual Devices + VirtualDevices []VirtualDevicesObservation `json:"virtualDevices,omitempty" tf:"virtual_devices,omitempty"` + + // PUBLIC, PRIVATE + // Service profile visibility - PUBLIC, PRIVATE + Visibility *string `json:"visibility,omitempty" tf:"visibility,omitempty"` } type ServiceProfileParameters struct { + // (Block List) Access point config information (see below for nested schema) // Access point config information // +kubebuilder:validation:Optional AccessPointTypeConfigs []ServiceProfileAccessPointTypeConfigsParameters `json:"accessPointTypeConfigs,omitempty" tf:"access_point_type_configs,omitempty"` + // (List of String) Array of contact emails // Array of contact emails // +kubebuilder:validation:Optional AllowedEmails []*string `json:"allowedEmails,omitempty" tf:"allowed_emails,omitempty"` + // (Block List) Custom Fields (see below for nested schema) // Custom Fields // +kubebuilder:validation:Optional CustomFields []CustomFieldsParameters `json:"customFields,omitempty" tf:"custom_fields,omitempty"` + // provided service description // User-provided service description - // +kubebuilder:validation:Required - Description *string `json:"description" tf:"description,omitempty"` + // +kubebuilder:validation:Optional + Description *string `json:"description,omitempty" tf:"description,omitempty"` + // (Block Set, Max: 1) Marketing Info (see below for nested schema) // Marketing Info // +kubebuilder:validation:Optional MarketingInfo []MarketingInfoParameters `json:"marketingInfo,omitempty" tf:"marketing_info,omitempty"` + // (Block List) Access point config information (see below for nested schema) // Access point config information // +kubebuilder:validation:Optional Metros []MetrosParameters `json:"metros,omitempty" tf:"metros,omitempty"` + // assigned service profile name // Customer-assigned service profile name - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // (Block List) Preferences for notifications on connection configuration or status changes (see below for nested schema) // Preferences for notifications on connection configuration or status changes // +kubebuilder:validation:Optional Notifications []ServiceProfileNotificationsParameters `json:"notifications,omitempty" tf:"notifications,omitempty"` + // (Block List) Ports (see below for nested schema) // Ports // +kubebuilder:validation:Optional Ports []PortsParameters `json:"ports,omitempty" tf:"ports,omitempty"` + // (Block Set, Max: 1) Project information (see below for nested schema) // Project information // +kubebuilder:validation:Optional Project []ServiceProfileProjectParameters `json:"project,omitempty" tf:"project,omitempty"` + // (Boolean) Self Profile indicating if the profile is created for customer's self use // Self Profile indicating if the profile is created for customer's self use // +kubebuilder:validation:Optional SelfProfile *bool `json:"selfProfile,omitempty" tf:"self_profile,omitempty"` + // ACTIVE, PENDING_APPROVAL, DELETED, REJECTED // Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED // +kubebuilder:validation:Optional State *string `json:"state,omitempty" tf:"state,omitempty"` + // (List of String) Tags attached to the connection // Tags attached to the connection // +kubebuilder:validation:Optional Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE // Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` // Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide // +kubebuilder:validation:Optional ViewPoint *string `json:"viewPoint,omitempty" tf:"view_point,omitempty"` + // (Block List) Virtual Devices (see below for nested schema) // Virtual Devices // +kubebuilder:validation:Optional VirtualDevices []VirtualDevicesParameters `json:"virtualDevices,omitempty" tf:"virtual_devices,omitempty"` + // PUBLIC, PRIVATE // Service profile visibility - PUBLIC, PRIVATE // +kubebuilder:validation:Optional Visibility *string `json:"visibility,omitempty" tf:"visibility,omitempty"` } +type ServiceProfileProjectInitParameters struct { + + // (String) Project Id + // Project Id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` +} + type ServiceProfileProjectObservation struct { + // (String) Service Profile URI response attribute // Unique Resource URL Href *string `json:"href,omitempty" tf:"href,omitempty"` + + // (String) Project Id + // Project Id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type ServiceProfileProjectParameters struct { + // (String) Project Id // Project Id // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } +type VirtualDevicesInitParameters struct { + + // (String) Device Interface Uuid + // Device Interface Uuid + InterfaceUUID *string `json:"interfaceUuid,omitempty" tf:"interface_uuid,omitempty"` + + // (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + // Device Location + Location []VirtualDevicesLocationInitParameters `json:"location,omitempty" tf:"location,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Virtual Device Type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (String) Equinix assigned service profile identifier + // Virtual Device Uuid + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` +} + +type VirtualDevicesLocationInitParameters struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` +} + type VirtualDevicesLocationObservation struct { + + // (String) IBX Code + // IBX Code + Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + + // (String) Access point metro code + // Access point metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // (String) Access point metro name + // Access point metro name + MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + + // (String) Access point region + // Access point region + Region *string `json:"region,omitempty" tf:"region,omitempty"` } type VirtualDevicesLocationParameters struct { + // (String) IBX Code // IBX Code // +kubebuilder:validation:Optional Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` + // (String) Access point metro code // Access point metro code // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + // (String) Access point metro name // Access point metro name // +kubebuilder:validation:Optional MetroName *string `json:"metroName,omitempty" tf:"metro_name,omitempty"` + // (String) Access point region // Access point region // +kubebuilder:validation:Optional Region *string `json:"region,omitempty" tf:"region,omitempty"` } type VirtualDevicesObservation struct { + + // (String) Device Interface Uuid + // Device Interface Uuid + InterfaceUUID *string `json:"interfaceUuid,omitempty" tf:"interface_uuid,omitempty"` + + // (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + // Device Location + Location []VirtualDevicesLocationObservation `json:"location,omitempty" tf:"location,omitempty"` + + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + // Virtual Device Type + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // (String) Equinix assigned service profile identifier + // Virtual Device Uuid + UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` } type VirtualDevicesParameters struct { + // (String) Device Interface Uuid // Device Interface Uuid // +kubebuilder:validation:Optional InterfaceUUID *string `json:"interfaceUuid,omitempty" tf:"interface_uuid,omitempty"` + // (Block Set, Max: 1) Colo/Port Location (see below for nested schema) // Device Location // +kubebuilder:validation:Optional Location []VirtualDevicesLocationParameters `json:"location,omitempty" tf:"location,omitempty"` + // L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE // Virtual Device Type - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` + // (String) Equinix assigned service profile identifier // Virtual Device Uuid - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional UUID *string `json:"uuid" tf:"uuid,omitempty"` } @@ -529,6 +1348,17 @@ type VirtualDevicesParameters struct { type ServiceProfileSpec struct { v1.ResourceSpec `json:",inline"` ForProvider ServiceProfileParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ServiceProfileInitParameters `json:"initProvider,omitempty"` } // ServiceProfileStatus defines the observed state of ServiceProfile. @@ -538,19 +1368,23 @@ type ServiceProfileStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion -// ServiceProfile is the Schema for the ServiceProfiles API. -// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// ServiceProfile is the Schema for the ServiceProfiles API. Fabric V4 API compatible resource allows creation and management of Equinix Fabric Service Profile // +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type ServiceProfile struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ServiceProfileSpec `json:"spec"` - Status ServiceProfileStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.description) || (has(self.initProvider) && has(self.initProvider.description))",message="spec.forProvider.description is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" + Spec ServiceProfileSpec `json:"spec"` + Status ServiceProfileStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_bgpsession_terraformed.go b/apis/metal/v1alpha1/zz_bgpsession_terraformed.go new file mode 100755 index 0000000..950ef32 --- /dev/null +++ b/apis/metal/v1alpha1/zz_bgpsession_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this BGPSession +func (mg *BGPSession) GetTerraformResourceType() string { + return "equinix_metal_bgp_session" +} + +// GetConnectionDetailsMapping for this BGPSession +func (tr *BGPSession) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this BGPSession +func (tr *BGPSession) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this BGPSession +func (tr *BGPSession) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this BGPSession +func (tr *BGPSession) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this BGPSession +func (tr *BGPSession) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this BGPSession +func (tr *BGPSession) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this BGPSession +func (tr *BGPSession) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this BGPSession +func (tr *BGPSession) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this BGPSession using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *BGPSession) LateInitialize(attrs []byte) (bool, error) { + params := &BGPSessionParameters{} + 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 *BGPSession) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_bgpsession_types.go b/apis/metal/v1alpha1/zz_bgpsession_types.go index d7bc3af..bb81982 100755 --- a/apis/metal/v1alpha1/zz_bgpsession_types.go +++ b/apis/metal/v1alpha1/zz_bgpsession_types.go @@ -25,7 +25,35 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type BGPSessionInitParameters struct { + + // ipv4 or ipv6. + // ipv4 or ipv6 + AddressFamily *string `json:"addressFamily,omitempty" tf:"address_family,omitempty"` + + // Boolean flag to set the default route policy. False by default. + // Boolean flag to set the default route policy. False by default + DefaultRoute *bool `json:"defaultRoute,omitempty" tf:"default_route,omitempty"` + + // ID of device. + // ID of device + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` +} + type BGPSessionObservation struct { + + // ipv4 or ipv6. + // ipv4 or ipv6 + AddressFamily *string `json:"addressFamily,omitempty" tf:"address_family,omitempty"` + + // Boolean flag to set the default route policy. False by default. + // Boolean flag to set the default route policy. False by default + DefaultRoute *bool `json:"defaultRoute,omitempty" tf:"default_route,omitempty"` + + // ID of device. + // ID of device + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` // up or down @@ -37,8 +65,8 @@ type BGPSessionParameters struct { // ipv4 or ipv6. // ipv4 or ipv6 - // +kubebuilder:validation:Required - AddressFamily *string `json:"addressFamily" tf:"address_family,omitempty"` + // +kubebuilder:validation:Optional + AddressFamily *string `json:"addressFamily,omitempty" tf:"address_family,omitempty"` // Boolean flag to set the default route policy. False by default. // Boolean flag to set the default route policy. False by default @@ -47,23 +75,25 @@ type BGPSessionParameters struct { // ID of device. // ID of device - // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` - - // Reference to a Device to populate deviceId. - // +kubebuilder:validation:Optional - DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` - - // Selector for a Device to populate deviceId. - // +kubebuilder:validation:Optional - DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } // BGPSessionSpec defines the desired state of BGPSession type BGPSessionSpec struct { v1.ResourceSpec `json:",inline"` ForProvider BGPSessionParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider BGPSessionInitParameters `json:"initProvider,omitempty"` } // BGPSessionStatus defines the observed state of BGPSession. @@ -73,19 +103,22 @@ type BGPSessionStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // BGPSession is the Schema for the BGPSessions 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type BGPSession struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BGPSessionSpec `json:"spec"` - Status BGPSessionStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.addressFamily) || (has(self.initProvider) && has(self.initProvider.addressFamily))",message="spec.forProvider.addressFamily is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" + Spec BGPSessionSpec `json:"spec"` + Status BGPSessionStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_connection_terraformed.go b/apis/metal/v1alpha1/zz_connection_terraformed.go new file mode 100755 index 0000000..08fb07b --- /dev/null +++ b/apis/metal/v1alpha1/zz_connection_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Connection +func (mg *Connection) GetTerraformResourceType() string { + return "equinix_metal_connection" +} + +// GetConnectionDetailsMapping for this Connection +func (tr *Connection) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Connection +func (tr *Connection) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Connection +func (tr *Connection) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Connection +func (tr *Connection) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Connection +func (tr *Connection) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Connection +func (tr *Connection) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Connection +func (tr *Connection) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Connection +func (tr *Connection) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Connection using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Connection) LateInitialize(attrs []byte) (bool, error) { + params := &ConnectionParameters{} + 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 *Connection) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_connection_types.go b/apis/metal/v1alpha1/zz_connection_types.go index 7fae918..773dc42 100755 --- a/apis/metal/v1alpha1/zz_connection_types.go +++ b/apis/metal/v1alpha1/zz_connection_types.go @@ -25,30 +25,147 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ConnectionInitParameters struct { + + // The preferred email used for communication and notifications about the Equinix Fabric interconnection. Required when using a Project API key. Optional and defaults to the primary user email address when using a User API key. + // The preferred email used for communication and notifications about the Equinix Fabric interconnection + ContactEmail *string `json:"contactEmail,omitempty" tf:"contact_email,omitempty"` + + // Description for the connection resource. + // Description of the connection resource + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide + // Facility where the connection will be created + Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` + + // Metro where the connection will be created. + // Metro where the connection will be created + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // Mode for connections in IBX facilities with the dedicated type - standard or tunnel. Default is standard. + // Mode for connections in IBX facilities with the dedicated type - standard or tunnel + Mode *string `json:"mode,omitempty" tf:"mode,omitempty"` + + // Name of the connection resource + // Name of the connection resource + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // ID of the organization where the connection is scoped to. + // ID of the organization responsible for the connection. Applicable with type "dedicated" + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // ID of the project where the connection is scoped to, must be set for. + // ID of the project where the connection is scoped to. Required with type "shared" + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Connection redundancy - redundant or primary. + // Connection redundancy - redundant or primary + Redundancy *string `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + + // Only used with shared connection. Type of service token to use for the connection, a_side or z_side. Type of service token to use for the connection, a_side or z_side + ServiceTokenType *string `json:"serviceTokenType,omitempty" tf:"service_token_type,omitempty"` + + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` + + // String list of tags. + // Tags attached to the connection + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // Connection type - dedicated or shared. + // Connection type - dedicated, shared or shared_port_vlan + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection. + // Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection + Vlans []*float64 `json:"vlans,omitempty" tf:"vlans,omitempty"` + + // Only used with shared connection. VRFs to attach. Pass one VRF for Primary/Single connection and two VRFs for Redundant connection + Vrfs []*string `json:"vrfs,omitempty" tf:"vrfs,omitempty"` +} + type ConnectionObservation struct { // Only used with Fabric Shared connection. Fabric uses this token to be able to give more detailed information about the Metal end of the network, when viewing resources from within Fabric. AuthorizationCode *string `json:"authorizationCode,omitempty" tf:"authorization_code,omitempty"` + // The preferred email used for communication and notifications about the Equinix Fabric interconnection. Required when using a Project API key. Optional and defaults to the primary user email address when using a User API key. + // The preferred email used for communication and notifications about the Equinix Fabric interconnection + ContactEmail *string `json:"contactEmail,omitempty" tf:"contact_email,omitempty"` + + // Description for the connection resource. + // Description of the connection resource + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide + // Facility where the connection will be created + Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` - // List of connection ports - primary (ports[0]) and secondary (ports[1]). Schema of - // port is described in documentation of the - // equinix_metal_connection datasource. + // Metro where the connection will be created. + // Metro where the connection will be created + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // Mode for connections in IBX facilities with the dedicated type - standard or tunnel. Default is standard. + // Mode for connections in IBX facilities with the dedicated type - standard or tunnel + Mode *string `json:"mode,omitempty" tf:"mode,omitempty"` + + // Name of the connection resource + // Name of the connection resource + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // ID of the organization where the connection is scoped to. + // ID of the organization responsible for the connection. Applicable with type "dedicated" + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // List of connection ports - primary (ports[0]) and secondary (ports[1]). Schema of port is described in documentation of the equinix_metal_connection datasource. // List of connection ports - primary (`ports[0]`) and secondary (`ports[1]`) Ports []PortsObservation `json:"ports,omitempty" tf:"ports,omitempty"` - // List of connection service tokens with attributes required to configure the connection in Equinix Fabric with the equinix_ecx_l2_connection resource or from the Equinix Fabric Portal. Scehma of service_token is described in documentation of the equinix_metal_connection datasource. - // Only used with shared connection. List of service tokens required to continue the setup process with [equinix_ecx_l2_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard) + // ID of the project where the connection is scoped to, must be set for. + // ID of the project where the connection is scoped to. Required with type "shared" + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Connection redundancy - redundant or primary. + // Connection redundancy - redundant or primary + Redundancy *string `json:"redundancy,omitempty" tf:"redundancy,omitempty"` + + // Only used with shared connection. Type of service token to use for the connection, a_side or z_side. Type of service token to use for the connection, a_side or z_side + ServiceTokenType *string `json:"serviceTokenType,omitempty" tf:"service_token_type,omitempty"` + + // List of connection service tokens with attributes required to configure the connection in Equinix Fabric with the equinix_fabric_connection resource or from the Equinix Fabric Portal. Scehma of service_token is described in documentation of the equinix_metal_connection datasource. + // Only used with shared connection. List of service tokens required to continue the setup process with [equinix_fabric_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard) ServiceTokens []ServiceTokensObservation `json:"serviceTokens,omitempty" tf:"service_tokens,omitempty"` + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` + // Status of the connection resource. // Status of the connection resource Status *string `json:"status,omitempty" tf:"status,omitempty"` - // (Deprecated) Fabric Token required to configure the connection in Equinix Fabric with the equinix_ecx_l2_connection resource or from the Equinix Fabric Portal. If your organization already has connection service tokens enabled, use service_tokens instead. - // Only used with shared connection. Fabric Token required to continue the setup process with [equinix_ecx_l2_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard) + // String list of tags. + // Tags attached to the connection + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // (Deprecated) Fabric Token required to configure the connection in Equinix Fabric with the equinix_fabric_connection resource or from the Equinix Fabric Portal. If your organization already has connection service tokens enabled, use service_tokens instead. + // Only used with shared connection. Fabric Token required to continue the setup process with [equinix_fabric_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard) Token *string `json:"token,omitempty" tf:"token,omitempty"` + + // Connection type - dedicated or shared. + // Connection type - dedicated, shared or shared_port_vlan + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection. + // Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection + Vlans []*float64 `json:"vlans,omitempty" tf:"vlans,omitempty"` + + // Only used with shared connection. VRFs to attach. Pass one VRF for Primary/Single connection and two VRFs for Redundant connection + Vrfs []*string `json:"vrfs,omitempty" tf:"vrfs,omitempty"` } type ConnectionParameters struct { @@ -63,7 +180,7 @@ type ConnectionParameters struct { // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` - // (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide + // (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide // Facility where the connection will be created // +kubebuilder:validation:Optional Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` @@ -80,47 +197,29 @@ type ConnectionParameters struct { // Name of the connection resource // Name of the connection resource - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` // ID of the organization where the connection is scoped to. // ID of the organization responsible for the connection. Applicable with type "dedicated" - // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` - // Reference to a Organization to populate organizationId. - // +kubebuilder:validation:Optional - OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` - - // Selector for a Organization to populate organizationId. - // +kubebuilder:validation:Optional - OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` - // ID of the project where the connection is scoped to, must be set for. // ID of the project where the connection is scoped to. Required with type "shared" - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` - // Connection redundancy - redundant or primary. // Connection redundancy - redundant or primary - // +kubebuilder:validation:Required - Redundancy *string `json:"redundancy" tf:"redundancy,omitempty"` + // +kubebuilder:validation:Optional + Redundancy *string `json:"redundancy,omitempty" tf:"redundancy,omitempty"` // Only used with shared connection. Type of service token to use for the connection, a_side or z_side. Type of service token to use for the connection, a_side or z_side // +kubebuilder:validation:Optional ServiceTokenType *string `json:"serviceTokenType,omitempty" tf:"service_token_type,omitempty"` - // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. // +kubebuilder:validation:Optional Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` @@ -132,8 +231,8 @@ type ConnectionParameters struct { // Connection type - dedicated or shared. // Connection type - dedicated, shared or shared_port_vlan - // +kubebuilder:validation:Required - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` // Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection. // Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection @@ -145,6 +244,9 @@ type ConnectionParameters struct { Vrfs []*string `json:"vrfs,omitempty" tf:"vrfs,omitempty"` } +type PortsInitParameters struct { +} + type PortsObservation struct { ID *string `json:"id,omitempty" tf:"id,omitempty"` @@ -156,7 +258,7 @@ type PortsObservation struct { Role *string `json:"role,omitempty" tf:"role,omitempty"` - // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. Speed *float64 `json:"speed,omitempty" tf:"speed,omitempty"` // Status of the connection resource. @@ -168,12 +270,15 @@ type PortsObservation struct { type PortsParameters struct { } +type ServiceTokensInitParameters struct { +} + type ServiceTokensObservation struct { ExpiresAt *string `json:"expiresAt,omitempty" tf:"expires_at,omitempty"` ID *string `json:"id,omitempty" tf:"id,omitempty"` - // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + // Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. MaxAllowedSpeed *string `json:"maxAllowedSpeed,omitempty" tf:"max_allowed_speed,omitempty"` Role *string `json:"role,omitempty" tf:"role,omitempty"` @@ -191,6 +296,17 @@ type ServiceTokensParameters struct { type ConnectionSpec struct { v1.ResourceSpec `json:",inline"` ForProvider ConnectionParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ConnectionInitParameters `json:"initProvider,omitempty"` } // ConnectionStatus defines the observed state of Connection. @@ -200,19 +316,23 @@ type ConnectionStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Connection is the Schema for the Connections 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Connection struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ConnectionSpec `json:"spec"` - Status ConnectionStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.redundancy) || (has(self.initProvider) && has(self.initProvider.redundancy))",message="spec.forProvider.redundancy is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" + Spec ConnectionSpec `json:"spec"` + Status ConnectionStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_device_terraformed.go b/apis/metal/v1alpha1/zz_device_terraformed.go new file mode 100755 index 0000000..edb5322 --- /dev/null +++ b/apis/metal/v1alpha1/zz_device_terraformed.go @@ -0,0 +1,143 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Device +func (mg *Device) GetTerraformResourceType() string { + return "equinix_metal_device" +} + +// GetConnectionDetailsMapping for this Device +func (tr *Device) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"custom_data": "customDataSecretRef", "root_password": "status.atProvider.rootPassword", "user_data": "userDataSecretRef"} +} + +// GetObservation of this Device +func (tr *Device) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Device +func (tr *Device) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Device +func (tr *Device) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Device +func (tr *Device) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Device +func (tr *Device) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Device +func (tr *Device) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Device +func (tr *Device) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Device using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Device) LateInitialize(attrs []byte) (bool, error) { + params := &DeviceParameters{} + 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)} + opts = append(opts, resource.WithNameFilter("Facilities")) + opts = append(opts, resource.WithNameFilter("Metro")) + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *Device) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_device_types.go b/apis/metal/v1alpha1/zz_device_types.go index c184867..aa2437c 100755 --- a/apis/metal/v1alpha1/zz_device_types.go +++ b/apis/metal/v1alpha1/zz_device_types.go @@ -25,330 +25,529 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type BehaviorInitParameters struct { + + // (List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data + // List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data` + AllowChanges []*string `json:"allowChanges,omitempty" tf:"allow_changes,omitempty"` +} + type BehaviorObservation struct { + + // (List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data + // List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data` + AllowChanges []*string `json:"allowChanges,omitempty" tf:"allow_changes,omitempty"` } type BehaviorParameters struct { - // List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data" + // (List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data // List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data` // +kubebuilder:validation:Optional AllowChanges []*string `json:"allowChanges,omitempty" tf:"allow_changes,omitempty"` } +type DeviceInitParameters struct { + + // (Boolean) If true, a device with OS custom_ipxe will + // If true, a device with OS custom_ipxe will + AlwaysPxe *bool `json:"alwaysPxe,omitempty" tf:"always_pxe,omitempty"` + + // (Block List, Max: 1) (see below for nested schema) + Behavior []BehaviorInitParameters `json:"behavior,omitempty" tf:"behavior,omitempty"` + + // (String) monthly or hourly + // monthly or hourly + BillingCycle *string `json:"billingCycle,omitempty" tf:"billing_cycle,omitempty"` + + // place instead of recreated. + // A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"custom_data"`, the device will be updated in-place instead of recreated. + CustomDataSecretRef *v1.SecretKeySelector `json:"customDataSecretRef,omitempty" tf:"-"` + + // (String) Description string for the device + // Description string for the device + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro + // 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 + Facilities []*string `json:"facilities,omitempty" tf:"facilities,omitempty"` + + // (Boolean) Delete device even if it has volumes attached. Only applies for destroy action + // Delete device even if it has volumes attached. Only applies for destroy action + ForceDetachVolumes *bool `json:"forceDetachVolumes,omitempty" tf:"force_detach_volumes,omitempty"` + + // available if you want to pick your next available reservation automatically + // 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 + HardwareReservationID *string `json:"hardwareReservationId,omitempty" tf:"hardware_reservation_id,omitempty"` + + // (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + // The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) + // A list of IP address types for the device (structure is documented below) + IPAddress []IPAddressInitParameters `json:"ipAddress,omitempty" tf:"ip_address,omitempty"` + + // (String) URL pointing to a hosted iPXE script. More + // URL pointing to a hosted iPXE script. More + IpxeScriptURL *string `json:"ipxeScriptUrl,omitempty" tf:"ipxe_script_url,omitempty"` + + // (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + // Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + Locked *bool `json:"locked,omitempty" tf:"locked,omitempty"` + + // (String) Metro area for the new device. Conflicts with facilities + // Metro area for the new device. Conflicts with facilities + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // place instead of recreated. + // 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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated. + OperatingSystem *string `json:"operatingSystem,omitempty" tf:"operating_system,omitempty"` + + // metal server and plan documentation + // The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/) + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + // (String) The ID of the project in which to create the device + // The ID of the project in which to create the device + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource + // Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource + ProjectSSHKeyIds []*string `json:"projectSshKeyIds,omitempty" tf:"project_ssh_key_ids,omitempty"` + + // (Block List, Max: 1) (see below for nested schema) + Reinstall []ReinstallInitParameters `json:"reinstall,omitempty" tf:"reinstall,omitempty"` + + // (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc + // 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 + Storage *string `json:"storage,omitempty" tf:"storage,omitempty"` + + // (List of String) Tags attached to the device + // Tags attached to the device + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // 09-03T16:32:00+03:00". If you don't supply timezone info, timestamp is assumed to be in UTC. + // 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. + TerminationTime *string `json:"terminationTime,omitempty" tf:"termination_time,omitempty"` + + // place instead of recreated. + // A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"user_data"`, the device will be updated in-place instead of recreated. + UserDataSecretRef *v1.SecretKeySelector `json:"userDataSecretRef,omitempty" tf:"-"` + + // (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource + // Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource + UserSSHKeyIds []*string `json:"userSshKeyIds,omitempty" tf:"user_ssh_key_ids,omitempty"` + + // (Boolean) 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) + // 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) + WaitForReservationDeprovision *bool `json:"waitForReservationDeprovision,omitempty" tf:"wait_for_reservation_deprovision,omitempty"` +} + type DeviceObservation struct { - // The ipv4 private IP assigned to the device. + // (String) The ipv4 private IP assigned to the device // The ipv4 private IP assigned to the device AccessPrivateIPv4 *string `json:"accessPrivateIpv4,omitempty" tf:"access_private_ipv4,omitempty"` - // The ipv4 maintenance IP assigned to the device. + // (String) The ipv4 maintenance IP assigned to the device // The ipv4 maintenance IP assigned to the device AccessPublicIPv4 *string `json:"accessPublicIpv4,omitempty" tf:"access_public_ipv4,omitempty"` - // The ipv6 maintenance IP assigned to the device. + // (String) The ipv6 maintenance IP assigned to the device // The ipv6 maintenance IP assigned to the device AccessPublicIPv6 *string `json:"accessPublicIpv6,omitempty" tf:"access_public_ipv6,omitempty"` - // The timestamp for when the device was created. + // (Boolean) If true, a device with OS custom_ipxe will + // If true, a device with OS custom_ipxe will + AlwaysPxe *bool `json:"alwaysPxe,omitempty" tf:"always_pxe,omitempty"` + + // (Block List, Max: 1) (see below for nested schema) + Behavior []BehaviorObservation `json:"behavior,omitempty" tf:"behavior,omitempty"` + + // (String) monthly or hourly + // monthly or hourly + BillingCycle *string `json:"billingCycle,omitempty" tf:"billing_cycle,omitempty"` + + // (String) The timestamp for when the device was created // The timestamp for when the device was created Created *string `json:"created,omitempty" tf:"created,omitempty"` - // (Deprecated) The facility where the device is deployed. Use metro instead; read the facility to metro migration guide + // (String, Deprecated) The facility where the device is deployed // The facility where the device is deployed DeployedFacility *string `json:"deployedFacility,omitempty" tf:"deployed_facility,omitempty"` - // ID of hardware reservation where this device was deployed. - // It is useful when using the next-available hardware reservation. + // available hardware reservation // ID of hardware reservation where this device was deployed. It is useful when using the next-available hardware reservation DeployedHardwareReservationID *string `json:"deployedHardwareReservationId,omitempty" tf:"deployed_hardware_reservation_id,omitempty"` - // The ID of the device. + // (String) Description string for the device + // Description string for the device + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro + // 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 + Facilities []*string `json:"facilities,omitempty" tf:"facilities,omitempty"` + + // (Boolean) Delete device even if it has volumes attached. Only applies for destroy action + // Delete device even if it has volumes attached. Only applies for destroy action + ForceDetachVolumes *bool `json:"forceDetachVolumes,omitempty" tf:"force_detach_volumes,omitempty"` + + // available if you want to pick your next available reservation automatically + // 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 + HardwareReservationID *string `json:"hardwareReservationId,omitempty" tf:"hardware_reservation_id,omitempty"` + + // (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + // The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` - // The device's private and public IP (v4 and v6) network details. See - // Network Attribute below for more details. + // (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) + // A list of IP address types for the device (structure is documented below) + IPAddress []IPAddressObservation `json:"ipAddress,omitempty" tf:"ip_address,omitempty"` + + // (String) URL pointing to a hosted iPXE script. More + // URL pointing to a hosted iPXE script. More + IpxeScriptURL *string `json:"ipxeScriptUrl,omitempty" tf:"ipxe_script_url,omitempty"` + + // (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + // Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + Locked *bool `json:"locked,omitempty" tf:"locked,omitempty"` + + // (String) Metro area for the new device. Conflicts with facilities + // Metro area for the new device. Conflicts with facilities + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // (List of Object) 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 (see below for nested schema) // 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 Network []NetworkObservation `json:"network,omitempty" tf:"network,omitempty"` - // (Deprecated) Network type of a device, used in - // Layer 2 networking. Since this - // attribute is deprecated you should handle Network Type with one of - // equinix_metal_port, - // equinix_metal_device_network_type resources or - // equinix_metal_port datasource. - // See network_types guide for more info. + // bonded, layer2-individual, layer2-bonded // 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 NetworkType *string `json:"networkType,omitempty" tf:"network_type,omitempty"` - // List of ports assigned to the device. See Ports Attribute below for - // more details. + // place instead of recreated. + // 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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated. + OperatingSystem *string `json:"operatingSystem,omitempty" tf:"operating_system,omitempty"` + + // metal server and plan documentation + // The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/) + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + // (List of Object) Ports assigned to the device (see below for nested schema) // Ports assigned to the device Ports []DevicePortsObservation `json:"ports,omitempty" tf:"ports,omitempty"` - // List of IDs of SSH keys deployed in the device, can be both user and project SSH keys. + // (String) The ID of the project in which to create the device + // The ID of the project in which to create the device + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource + // Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource + ProjectSSHKeyIds []*string `json:"projectSshKeyIds,omitempty" tf:"project_ssh_key_ids,omitempty"` + + // (Block List, Max: 1) (see below for nested schema) + Reinstall []ReinstallObservation `json:"reinstall,omitempty" tf:"reinstall,omitempty"` + + // (List of String) List of IDs of SSH keys deployed in the device, can be both user and project SSH keys // List of IDs of SSH keys deployed in the device, can be both user and project SSH keys SSHKeyIds []*string `json:"sshKeyIds,omitempty" tf:"ssh_key_ids,omitempty"` - // The hostname to use for Serial over SSH access to the device + // (String) The hostname to use for Serial over SSH access to the device // The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) access to the device SosHostname *string `json:"sosHostname,omitempty" tf:"sos_hostname,omitempty"` - // The status of the device. + // (String) The status of the device // The status of the device State *string `json:"state,omitempty" tf:"state,omitempty"` - // The timestamp for the last time the device was updated. + // (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc + // 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 + Storage *string `json:"storage,omitempty" tf:"storage,omitempty"` + + // (List of String) Tags attached to the device + // Tags attached to the device + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // 09-03T16:32:00+03:00". If you don't supply timezone info, timestamp is assumed to be in UTC. + // 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. + TerminationTime *string `json:"terminationTime,omitempty" tf:"termination_time,omitempty"` + + // (String) The timestamp for the last time the device was updated // The timestamp for the last time the device was updated Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + + // (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource + // Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource + UserSSHKeyIds []*string `json:"userSshKeyIds,omitempty" tf:"user_ssh_key_ids,omitempty"` + + // (Boolean) 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) + // 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) + WaitForReservationDeprovision *bool `json:"waitForReservationDeprovision,omitempty" tf:"wait_for_reservation_deprovision,omitempty"` } type DeviceParameters struct { - // If true, a device with OS custom_ipxe will continue to boot via iPXE - // on reboots. + // (Boolean) If true, a device with OS custom_ipxe will // If true, a device with OS custom_ipxe will // +kubebuilder:validation:Optional AlwaysPxe *bool `json:"alwaysPxe,omitempty" tf:"always_pxe,omitempty"` - // Behavioral overrides that change how the resource handles certain attribute updates. See Behavior below for more details. + // (Block List, Max: 1) (see below for nested schema) // +kubebuilder:validation:Optional Behavior []BehaviorParameters `json:"behavior,omitempty" tf:"behavior,omitempty"` - // monthly or hourly + // (String) monthly or hourly // monthly or hourly // +kubebuilder:validation:Optional BillingCycle *string `json:"billingCycle,omitempty" tf:"billing_cycle,omitempty"` - // A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If reinstall is specified or behavior.allow_changes includes "custom_data", the device will be updated in-place instead of recreated. + // place instead of recreated. // A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"custom_data"`, the device will be updated in-place instead of recreated. // +kubebuilder:validation:Optional CustomDataSecretRef *v1.SecretKeySelector `json:"customDataSecretRef,omitempty" tf:"-"` - // The device description. + // (String) Description string for the device // Description string for the device // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` - // (Deprecated) 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, set your API auth - // token in the top of the page and see JSON from the API response. Conflicts with metro. Use metro instead; read the facility to metro migration guide + // (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro // 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 // +kubebuilder:validation:Optional Facilities []*string `json:"facilities,omitempty" tf:"facilities,omitempty"` - // Delete device even if it has volumes attached. Only applies - // for destroy action. + // (Boolean) Delete device even if it has volumes attached. Only applies for destroy action // Delete device even if it has volumes attached. Only applies for destroy action // +kubebuilder:validation:Optional ForceDetachVolumes *bool `json:"forceDetachVolumes,omitempty" tf:"force_detach_volumes,omitempty"` - // 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. Changing this from a reservation UUID to next-available will re-create the device - // in another reservation. Please be careful when using hardware reservation UUID and next-available - // together for the same pool of reservations. It might happen that the reservation which Equinix - // Metal API will pick as next-available is the reservation which you refer with UUID in another - // equinix_metal_device resource. If that happens, and the equinix_metal_device with the UUID is - // created later, resource creation will fail because the reservation is already in use (by the - // resource created with next-available). To workaround this, have the next-available resource - // explicitly depend_on - // the resource with hardware reservation UUID, so that the latter is created first. For more details, - // see issue #176. + // available if you want to pick your next available reservation automatically // 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 // +kubebuilder:validation:Optional HardwareReservationID *string `json:"hardwareReservationId,omitempty" tf:"hardware_reservation_id,omitempty"` - // The device hostname used in deployments taking advantage of Layer3 DHCP - // or metadata service configuration. + // (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. // The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. // +kubebuilder:validation:Optional Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` - // A list of IP address types for the device. See - // IP address below for more details. + // (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) // A list of IP address types for the device (structure is documented below) // +kubebuilder:validation:Optional IPAddress []IPAddressParameters `json:"ipAddress,omitempty" tf:"ip_address,omitempty"` - // URL pointing to a hosted iPXE script. More information is in the - // Custom iPXE doc. + // (String) URL pointing to a hosted iPXE script. More // URL pointing to a hosted iPXE script. More // +kubebuilder:validation:Optional IpxeScriptURL *string `json:"ipxeScriptUrl,omitempty" tf:"ipxe_script_url,omitempty"` - // Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + // (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached // Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached // +kubebuilder:validation:Optional Locked *bool `json:"locked,omitempty" tf:"locked,omitempty"` - // Metro area for the new device. Conflicts with facilities. + // (String) Metro area for the new device. Conflicts with facilities // Metro area for the new device. Conflicts with facilities // +kubebuilder:validation:Optional Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` - // The operating system slug. To find the slug, or visit - // Operating Systems API docs, set your - // API auth token in the top of the page and see JSON from the API response. + // place instead of recreated. // 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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated. - // +kubebuilder:validation:Required - OperatingSystem *string `json:"operatingSystem" tf:"operating_system,omitempty"` - - // The device plan slug. To find the plan slug, visit - // Device plans API docs, set your auth token in the - // top of the page and see JSON from the API response. - // 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 - // +kubebuilder:validation:Required - Plan *string `json:"plan" tf:"plan,omitempty"` - - // The ID of the project in which to create the device - // The ID of the project in which to create the device - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional - ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + OperatingSystem *string `json:"operatingSystem,omitempty" tf:"operating_system,omitempty"` - // Reference to a Project to populate projectId. + // metal server and plan documentation + // The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/) // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` - // Selector for a Project to populate projectId. + // (String) The ID of the project in which to create the device + // The ID of the project in which to create the device // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource. + // (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource // Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource // +kubebuilder:validation:Optional ProjectSSHKeyIds []*string `json:"projectSshKeyIds,omitempty" tf:"project_ssh_key_ids,omitempty"` - // Whether the device should be reinstalled instead of destroyed when - // modifying user_data, custom_data, or operating system. See Reinstall below for more - // details. + // (Block List, Max: 1) (see below for nested schema) // +kubebuilder:validation:Optional Reinstall []ReinstallParameters `json:"reinstall,omitempty" tf:"reinstall,omitempty"` - // JSON for custom partitioning. Only usable on reserved hardware. More - // information in in the - // Custom Partitioning and RAID - // doc. Please note that the disks.partitions.size attribute must be a string, not an integer. It can - // be a number string, or size notation string, e.g. "4G" or "8M" (for gigabytes and megabytes). + // (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc // 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 // +kubebuilder:validation:Optional Storage *string `json:"storage,omitempty" tf:"storage,omitempty"` - // Tags attached to the device. + // (List of String) Tags attached to the device // Tags attached to the device // +kubebuilder:validation:Optional Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` - // 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. + // 09-03T16:32:00+03:00". If you don't supply timezone info, timestamp is assumed to be in UTC. // 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. // +kubebuilder:validation:Optional TerminationTime *string `json:"terminationTime,omitempty" tf:"termination_time,omitempty"` - // A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If reinstall is specified or behavior.allow_changes includes "user_data", the device will be updated in-place instead of recreated. + // place instead of recreated. // A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"user_data"`, the device will be updated in-place instead of recreated. // +kubebuilder:validation:Optional UserDataSecretRef *v1.SecretKeySelector `json:"userDataSecretRef,omitempty" tf:"-"` - // Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource. + // (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource // Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource // +kubebuilder:validation:Optional UserSSHKeyIds []*string `json:"userSshKeyIds,omitempty" tf:"user_ssh_key_ids,omitempty"` - // 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). + // (Boolean) 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) // 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) // +kubebuilder:validation:Optional WaitForReservationDeprovision *bool `json:"waitForReservationDeprovision,omitempty" tf:"wait_for_reservation_deprovision,omitempty"` } +type DevicePortsInitParameters struct { +} + type DevicePortsObservation struct { - // Whether this port is part of a bond in bonded network setup. + // (Boolean) Bonded *bool `json:"bonded,omitempty" tf:"bonded,omitempty"` - // The ID of the device. + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` - // MAC address assigned to the port. + // (String) Mac *string `json:"mac,omitempty" tf:"mac,omitempty"` - // Name of the port (e.g. eth0, or bond0). + // (String) Name *string `json:"name,omitempty" tf:"name,omitempty"` - // Type of the port (e.g. NetworkPort or NetworkBondPort). + // (String) one of public_ipv4,private_ipv4,public_ipv6 Type *string `json:"type,omitempty" tf:"type,omitempty"` } type DevicePortsParameters struct { } +type IPAddressInitParameters struct { + + // (Number) CIDR suffix for IP block assigned to this device + // CIDR suffix for IP block assigned to this device + Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` + + // (List of String) IDs of reservations to pick the blocks from + // IDs of reservations to pick the blocks from + ReservationIds []*string `json:"reservationIds,omitempty" tf:"reservation_ids,omitempty"` + + // (String) one of public_ipv4,private_ipv4,public_ipv6 + // one of public_ipv4,private_ipv4,public_ipv6 + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type IPAddressObservation struct { + + // (Number) CIDR suffix for IP block assigned to this device + // CIDR suffix for IP block assigned to this device + Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` + + // (List of String) IDs of reservations to pick the blocks from + // IDs of reservations to pick the blocks from + ReservationIds []*string `json:"reservationIds,omitempty" tf:"reservation_ids,omitempty"` + + // (String) one of public_ipv4,private_ipv4,public_ipv6 + // one of public_ipv4,private_ipv4,public_ipv6 + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type IPAddressParameters struct { - // CIDR suffix for IP address block to be assigned, i.e. amount of addresses. + // (Number) CIDR suffix for IP block assigned to this device // CIDR suffix for IP block assigned to this device // +kubebuilder:validation:Optional Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` - // List of UUIDs of IP block reservations - // from which the public IPv4 address should be taken. + // (List of String) IDs of reservations to pick the blocks from // IDs of reservations to pick the blocks from // +kubebuilder:validation:Optional ReservationIds []*string `json:"reservationIds,omitempty" tf:"reservation_ids,omitempty"` - // One of private_ipv4, public_ipv4, public_ipv6. + // (String) one of public_ipv4,private_ipv4,public_ipv6 // one of public_ipv4,private_ipv4,public_ipv6 - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Type *string `json:"type" tf:"type,omitempty"` } +type NetworkInitParameters struct { +} + type NetworkObservation struct { - // IPv4 or IPv6 address string. + // (String) Address *string `json:"address,omitempty" tf:"address,omitempty"` - // CIDR suffix for IP address block to be assigned, i.e. amount of addresses. + // (Number) CIDR suffix for IP block assigned to this device Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` - // IP version. One of 4, 6. + // (Number) Family *float64 `json:"family,omitempty" tf:"family,omitempty"` - // Address of router. + // (String) Gateway *string `json:"gateway,omitempty" tf:"gateway,omitempty"` - // Whether the address is routable from the Internet. + // (Boolean) Public *bool `json:"public,omitempty" tf:"public,omitempty"` } type NetworkParameters struct { } +type ReinstallInitParameters struct { + + // (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall + // Whether the OS disk should be filled with `00h` bytes before reinstall + DeprovisionFast *bool `json:"deprovisionFast,omitempty" tf:"deprovision_fast,omitempty"` + + // (Boolean) Whether the device should be reinstalled instead of destroyed + // Whether the device should be reinstalled instead of destroyed + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + + // OS disks should be kept or wiped during reinstall + // Whether the non-OS disks should be kept or wiped during reinstall + PreserveData *bool `json:"preserveData,omitempty" tf:"preserve_data,omitempty"` +} + type ReinstallObservation struct { + + // (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall + // Whether the OS disk should be filled with `00h` bytes before reinstall + DeprovisionFast *bool `json:"deprovisionFast,omitempty" tf:"deprovision_fast,omitempty"` + + // (Boolean) Whether the device should be reinstalled instead of destroyed + // Whether the device should be reinstalled instead of destroyed + Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` + + // OS disks should be kept or wiped during reinstall + // Whether the non-OS disks should be kept or wiped during reinstall + PreserveData *bool `json:"preserveData,omitempty" tf:"preserve_data,omitempty"` } type ReinstallParameters struct { - // Whether the OS disk should be filled with 00h bytes before reinstall. - // Defaults to false. + // (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall // Whether the OS disk should be filled with `00h` bytes before reinstall // +kubebuilder:validation:Optional DeprovisionFast *bool `json:"deprovisionFast,omitempty" tf:"deprovision_fast,omitempty"` - // Whether the provider should favour reinstall over destroy and create. Defaults to - // false. + // (Boolean) Whether the device should be reinstalled instead of destroyed // Whether the device should be reinstalled instead of destroyed // +kubebuilder:validation:Optional Enabled *bool `json:"enabled,omitempty" tf:"enabled,omitempty"` - // Whether the non-OS disks should be kept or wiped during reinstall. - // Defaults to false. + // OS disks should be kept or wiped during reinstall // Whether the non-OS disks should be kept or wiped during reinstall // +kubebuilder:validation:Optional PreserveData *bool `json:"preserveData,omitempty" tf:"preserve_data,omitempty"` @@ -358,6 +557,17 @@ type ReinstallParameters struct { type DeviceSpec struct { v1.ResourceSpec `json:",inline"` ForProvider DeviceParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider DeviceInitParameters `json:"initProvider,omitempty"` } // DeviceStatus defines the observed state of Device. @@ -367,19 +577,23 @@ type DeviceStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Device is the Schema for the Devices 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Device struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec DeviceSpec `json:"spec"` - Status DeviceStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.operatingSystem) || (has(self.initProvider) && has(self.initProvider.operatingSystem))",message="spec.forProvider.operatingSystem is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.plan) || (has(self.initProvider) && has(self.initProvider.plan))",message="spec.forProvider.plan is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + Spec DeviceSpec `json:"spec"` + Status DeviceStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_devicenetworktype_terraformed.go b/apis/metal/v1alpha1/zz_devicenetworktype_terraformed.go new file mode 100755 index 0000000..a242b07 --- /dev/null +++ b/apis/metal/v1alpha1/zz_devicenetworktype_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this DeviceNetworkType +func (mg *DeviceNetworkType) GetTerraformResourceType() string { + return "equinix_metal_device_network_type" +} + +// GetConnectionDetailsMapping for this DeviceNetworkType +func (tr *DeviceNetworkType) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this DeviceNetworkType +func (tr *DeviceNetworkType) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this DeviceNetworkType +func (tr *DeviceNetworkType) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this DeviceNetworkType +func (tr *DeviceNetworkType) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this DeviceNetworkType +func (tr *DeviceNetworkType) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this DeviceNetworkType +func (tr *DeviceNetworkType) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this DeviceNetworkType +func (tr *DeviceNetworkType) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this DeviceNetworkType +func (tr *DeviceNetworkType) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this DeviceNetworkType using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *DeviceNetworkType) LateInitialize(attrs []byte) (bool, error) { + params := &DeviceNetworkTypeParameters{} + 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 *DeviceNetworkType) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_devicenetworktype_types.go b/apis/metal/v1alpha1/zz_devicenetworktype_types.go index 5e8b304..c9ed080 100755 --- a/apis/metal/v1alpha1/zz_devicenetworktype_types.go +++ b/apis/metal/v1alpha1/zz_devicenetworktype_types.go @@ -25,34 +25,52 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type DeviceNetworkTypeInitParameters struct { + + // The ID of the device on which the network type should be set + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type DeviceNetworkTypeObservation struct { + + // The ID of the device on which the network type should be set + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded + Type *string `json:"type,omitempty" tf:"type,omitempty"` } type DeviceNetworkTypeParameters struct { // The ID of the device on which the network type should be set - // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` - // Reference to a Device to populate deviceId. - // +kubebuilder:validation:Optional - DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` - - // Selector for a Device to populate deviceId. - // +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 - Type *string `json:"type" tf:"type,omitempty"` + // +kubebuilder:validation:Optional + Type *string `json:"type,omitempty" tf:"type,omitempty"` } // DeviceNetworkTypeSpec defines the desired state of DeviceNetworkType type DeviceNetworkTypeSpec struct { v1.ResourceSpec `json:",inline"` ForProvider DeviceNetworkTypeParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider DeviceNetworkTypeInitParameters `json:"initProvider,omitempty"` } // DeviceNetworkTypeStatus defines the observed state of DeviceNetworkType. @@ -62,19 +80,22 @@ type DeviceNetworkTypeStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // DeviceNetworkType is the Schema for the DeviceNetworkTypes 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type DeviceNetworkType struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec DeviceNetworkTypeSpec `json:"spec"` - Status DeviceNetworkTypeStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" + Spec DeviceNetworkTypeSpec `json:"spec"` + Status DeviceNetworkTypeStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_gateway_terraformed.go b/apis/metal/v1alpha1/zz_gateway_terraformed.go new file mode 100755 index 0000000..45f8317 --- /dev/null +++ b/apis/metal/v1alpha1/zz_gateway_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Gateway +func (mg *Gateway) GetTerraformResourceType() string { + return "equinix_metal_gateway" +} + +// GetConnectionDetailsMapping for this Gateway +func (tr *Gateway) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Gateway +func (tr *Gateway) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Gateway +func (tr *Gateway) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Gateway +func (tr *Gateway) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Gateway +func (tr *Gateway) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Gateway +func (tr *Gateway) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Gateway +func (tr *Gateway) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Gateway +func (tr *Gateway) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Gateway using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Gateway) LateInitialize(attrs []byte) (bool, error) { + params := &GatewayParameters{} + 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 *Gateway) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_gateway_types.go b/apis/metal/v1alpha1/zz_gateway_types.go index 1db3f05..4c8131b 100755 --- a/apis/metal/v1alpha1/zz_gateway_types.go +++ b/apis/metal/v1alpha1/zz_gateway_types.go @@ -25,13 +25,48 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type GatewayInitParameters struct { + + // UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. + // UUID of the Public or VRF IP Reservation to associate + IPReservationID *string `json:"ipReservationId,omitempty" tf:"ip_reservation_id,omitempty"` + + // Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + // Size of the private IPv4 subnet to create for this gateway + PrivateIPv4SubnetSize *float64 `json:"privateIpv4SubnetSize,omitempty" tf:"private_ipv4_subnet_size,omitempty"` + + // UUID of the project where the gateway is scoped to. + // UUID of the Project where the Gateway is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // UUID of the VLAN where the gateway is scoped to. + // UUID of the VLAN to associate + VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` +} + type GatewayObservation struct { ID *string `json:"id,omitempty" tf:"id,omitempty"` + // UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. + // UUID of the Public or VRF IP Reservation to associate + IPReservationID *string `json:"ipReservationId,omitempty" tf:"ip_reservation_id,omitempty"` + + // Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + // Size of the private IPv4 subnet to create for this gateway + PrivateIPv4SubnetSize *float64 `json:"privateIpv4SubnetSize,omitempty" tf:"private_ipv4_subnet_size,omitempty"` + + // UUID of the project where the gateway is scoped to. + // UUID of the Project where the Gateway is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Status of the gateway resource. // Status of the gateway resource State *string `json:"state,omitempty" tf:"state,omitempty"` + // UUID of the VLAN where the gateway is scoped to. + // UUID of the VLAN to associate + VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + // UUID of the VRF associated with the IP Reservation // UUID of the VRF associated with the IP Reservation VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` @@ -39,60 +74,42 @@ type GatewayObservation struct { type GatewayParameters struct { - // UUID of Public or VRF IP Reservation to associate with the gateway, the - // reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. + // UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. // UUID of the Public or VRF IP Reservation to associate - // +crossplane:generate:reference:type=ReservedIPBlock // +kubebuilder:validation:Optional IPReservationID *string `json:"ipReservationId,omitempty" tf:"ip_reservation_id,omitempty"` - // Reference to a ReservedIPBlock to populate ipReservationId. - // +kubebuilder:validation:Optional - IPReservationIDRef *v1.Reference `json:"ipReservationIdRef,omitempty" tf:"-"` - - // Selector for a ReservedIPBlock to populate ipReservationId. - // +kubebuilder:validation:Optional - IPReservationIDSelector *v1.Selector `json:"ipReservationIdSelector,omitempty" tf:"-"` - - // Size of the private IPv4 subnet to create for this metal - // gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + // Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. // Size of the private IPv4 subnet to create for this gateway // +kubebuilder:validation:Optional PrivateIPv4SubnetSize *float64 `json:"privateIpv4SubnetSize,omitempty" tf:"private_ipv4_subnet_size,omitempty"` // UUID of the project where the gateway is scoped to. // UUID of the Project where the Gateway is scoped to - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` - // UUID of the VLAN where the gateway is scoped to. // UUID of the VLAN to associate - // +crossplane:generate:reference:type=Vlan // +kubebuilder:validation:Optional VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` - - // Reference to a Vlan to populate vlanId. - // +kubebuilder:validation:Optional - VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` - - // Selector for a Vlan to populate vlanId. - // +kubebuilder:validation:Optional - VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` } // GatewaySpec defines the desired state of Gateway type GatewaySpec struct { v1.ResourceSpec `json:",inline"` ForProvider GatewayParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider GatewayInitParameters `json:"initProvider,omitempty"` } // GatewayStatus defines the observed state of Gateway. @@ -102,19 +119,22 @@ type GatewayStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Gateway is the Schema for the Gateways 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Gateway struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec GatewaySpec `json:"spec"` - Status GatewayStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.vlanId) || (has(self.initProvider) && has(self.initProvider.vlanId))",message="spec.forProvider.vlanId is a required parameter" + Spec GatewaySpec `json:"spec"` + Status GatewayStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_generated.conversion_hubs.go b/apis/metal/v1alpha1/zz_generated.conversion_hubs.go new file mode 100755 index 0000000..65d4889 --- /dev/null +++ b/apis/metal/v1alpha1/zz_generated.conversion_hubs.go @@ -0,0 +1,79 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +// Hub marks this type as a conversion hub. +func (tr *BGPSession) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Connection) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Device) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *DeviceNetworkType) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Gateway) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *IPAttachment) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Organization) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *OrganizationMember) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Port) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *PortVlanAttachment) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Project) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *ProjectAPIKey) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *ProjectSSHKey) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *ReservedIPBlock) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *SpotMarketRequest) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *SSHKey) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *UserAPIKey) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *VirtualCircuit) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Vlan) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Vrf) Hub() {} diff --git a/apis/metal/v1alpha1/zz_generated.deepcopy.go b/apis/metal/v1alpha1/zz_generated.deepcopy.go index 01f87ad..291833e 100644 --- a/apis/metal/v1alpha1/zz_generated.deepcopy.go +++ b/apis/metal/v1alpha1/zz_generated.deepcopy.go @@ -1,5 +1,4 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated /* Copyright 2021 The Crossplane Authors. @@ -26,9 +25,74 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AddressInitParameters) DeepCopyInto(out *AddressInitParameters) { + *out = *in + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = new(string) + **out = **in + } + if in.City != nil { + in, out := &in.City, &out.City + *out = new(string) + **out = **in + } + if in.Country != nil { + in, out := &in.Country, &out.Country + *out = new(string) + **out = **in + } + if in.State != nil { + in, out := &in.State, &out.State + *out = new(string) + **out = **in + } + if in.ZipCode != nil { + in, out := &in.ZipCode, &out.ZipCode + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddressInitParameters. +func (in *AddressInitParameters) DeepCopy() *AddressInitParameters { + if in == nil { + return nil + } + out := new(AddressInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AddressObservation) DeepCopyInto(out *AddressObservation) { *out = *in + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = new(string) + **out = **in + } + if in.City != nil { + in, out := &in.City, &out.City + *out = new(string) + **out = **in + } + if in.Country != nil { + in, out := &in.Country, &out.Country + *out = new(string) + **out = **in + } + if in.State != nil { + in, out := &in.State, &out.State + *out = new(string) + **out = **in + } + if in.ZipCode != nil { + in, out := &in.ZipCode, &out.ZipCode + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AddressObservation. @@ -81,9 +145,49 @@ func (in *AddressParameters) DeepCopy() *AddressParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BGPConfigInitParameters) DeepCopyInto(out *BGPConfigInitParameters) { + *out = *in + if in.Asn != nil { + in, out := &in.Asn, &out.Asn + *out = new(float64) + **out = **in + } + if in.DeploymentType != nil { + in, out := &in.DeploymentType, &out.DeploymentType + *out = new(string) + **out = **in + } + if in.Md5SecretRef != nil { + in, out := &in.Md5SecretRef, &out.Md5SecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPConfigInitParameters. +func (in *BGPConfigInitParameters) DeepCopy() *BGPConfigInitParameters { + if in == nil { + return nil + } + out := new(BGPConfigInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BGPConfigObservation) DeepCopyInto(out *BGPConfigObservation) { *out = *in + if in.Asn != nil { + in, out := &in.Asn, &out.Asn + *out = new(float64) + **out = **in + } + if in.DeploymentType != nil { + in, out := &in.DeploymentType, &out.DeploymentType + *out = new(string) + **out = **in + } if in.MaxPrefix != nil { in, out := &in.MaxPrefix, &out.MaxPrefix *out = new(float64) @@ -163,6 +267,36 @@ func (in *BGPSession) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BGPSessionInitParameters) DeepCopyInto(out *BGPSessionInitParameters) { + *out = *in + if in.AddressFamily != nil { + in, out := &in.AddressFamily, &out.AddressFamily + *out = new(string) + **out = **in + } + if in.DefaultRoute != nil { + in, out := &in.DefaultRoute, &out.DefaultRoute + *out = new(bool) + **out = **in + } + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPSessionInitParameters. +func (in *BGPSessionInitParameters) DeepCopy() *BGPSessionInitParameters { + if in == nil { + return nil + } + out := new(BGPSessionInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BGPSessionList) DeepCopyInto(out *BGPSessionList) { *out = *in @@ -198,6 +332,21 @@ func (in *BGPSessionList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BGPSessionObservation) DeepCopyInto(out *BGPSessionObservation) { *out = *in + if in.AddressFamily != nil { + in, out := &in.AddressFamily, &out.AddressFamily + *out = new(string) + **out = **in + } + if in.DefaultRoute != nil { + in, out := &in.DefaultRoute, &out.DefaultRoute + *out = new(bool) + **out = **in + } + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -238,16 +387,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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. @@ -265,6 +404,7 @@ func (in *BGPSessionSpec) DeepCopyInto(out *BGPSessionSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPSessionSpec. @@ -294,9 +434,46 @@ func (in *BGPSessionStatus) DeepCopy() *BGPSessionStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BehaviorInitParameters) DeepCopyInto(out *BehaviorInitParameters) { + *out = *in + if in.AllowChanges != nil { + in, out := &in.AllowChanges, &out.AllowChanges + *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 BehaviorInitParameters. +func (in *BehaviorInitParameters) DeepCopy() *BehaviorInitParameters { + if in == nil { + return nil + } + out := new(BehaviorInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BehaviorObservation) DeepCopyInto(out *BehaviorObservation) { *out = *in + if in.AllowChanges != nil { + in, out := &in.AllowChanges, &out.AllowChanges + *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 BehaviorObservation. @@ -363,88 +540,7 @@ func (in *Connection) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConnectionList) DeepCopyInto(out *ConnectionList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Connection, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionList. -func (in *ConnectionList) DeepCopy() *ConnectionList { - if in == nil { - return nil - } - out := new(ConnectionList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ConnectionList) 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 *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { - *out = *in - if in.AuthorizationCode != nil { - in, out := &in.AuthorizationCode, &out.AuthorizationCode - *out = new(string) - **out = **in - } - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) - **out = **in - } - if in.Ports != nil { - in, out := &in.Ports, &out.Ports - *out = make([]PortsObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ServiceTokens != nil { - in, out := &in.ServiceTokens, &out.ServiceTokens - *out = make([]ServiceTokensObservation, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Status != nil { - in, out := &in.Status, &out.Status - *out = new(string) - **out = **in - } - if in.Token != nil { - in, out := &in.Token, &out.Token - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionObservation. -func (in *ConnectionObservation) DeepCopy() *ConnectionObservation { - if in == nil { - return nil - } - out := new(ConnectionObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { +func (in *ConnectionInitParameters) DeepCopyInto(out *ConnectionInitParameters) { *out = *in if in.ContactEmail != nil { in, out := &in.ContactEmail, &out.ContactEmail @@ -481,30 +577,292 @@ func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { *out = new(string) **out = **in } - if in.OrganizationIDRef != nil { - in, out := &in.OrganizationIDRef, &out.OrganizationIDRef - *out = new(v1.Reference) - (*in).DeepCopyInto(*out) - } - if in.OrganizationIDSelector != nil { - in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector - *out = new(v1.Selector) - (*in).DeepCopyInto(*out) + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.Redundancy != nil { + in, out := &in.Redundancy, &out.Redundancy + *out = new(string) + **out = **in + } + if in.ServiceTokenType != nil { + in, out := &in.ServiceTokenType, &out.ServiceTokenType + *out = new(string) + **out = **in + } + if in.Speed != nil { + in, out := &in.Speed, &out.Speed + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.Vlans != nil { + in, out := &in.Vlans, &out.Vlans + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } + if in.Vrfs != nil { + in, out := &in.Vrfs, &out.Vrfs + *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 ConnectionInitParameters. +func (in *ConnectionInitParameters) DeepCopy() *ConnectionInitParameters { + if in == nil { + return nil + } + out := new(ConnectionInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionList) DeepCopyInto(out *ConnectionList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Connection, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionList. +func (in *ConnectionList) DeepCopy() *ConnectionList { + if in == nil { + return nil + } + out := new(ConnectionList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ConnectionList) 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 *ConnectionObservation) DeepCopyInto(out *ConnectionObservation) { + *out = *in + if in.AuthorizationCode != nil { + in, out := &in.AuthorizationCode, &out.AuthorizationCode + *out = new(string) + **out = **in + } + if in.ContactEmail != nil { + in, out := &in.ContactEmail, &out.ContactEmail + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facility != nil { + in, out := &in.Facility, &out.Facility + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.OrganizationID != nil { + in, out := &in.OrganizationID, &out.OrganizationID + *out = new(string) + **out = **in + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]PortsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } if in.ProjectID != nil { in, out := &in.ProjectID, &out.ProjectID *out = new(string) **out = **in } - if in.ProjectIDRef != nil { - in, out := &in.ProjectIDRef, &out.ProjectIDRef - *out = new(v1.Reference) - (*in).DeepCopyInto(*out) + if in.Redundancy != nil { + in, out := &in.Redundancy, &out.Redundancy + *out = new(string) + **out = **in + } + if in.ServiceTokenType != nil { + in, out := &in.ServiceTokenType, &out.ServiceTokenType + *out = new(string) + **out = **in + } + if in.ServiceTokens != nil { + in, out := &in.ServiceTokens, &out.ServiceTokens + *out = make([]ServiceTokensObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Speed != nil { + in, out := &in.Speed, &out.Speed + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Token != nil { + in, out := &in.Token, &out.Token + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.Vlans != nil { + in, out := &in.Vlans, &out.Vlans + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } + if in.Vrfs != nil { + in, out := &in.Vrfs, &out.Vrfs + *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 ConnectionObservation. +func (in *ConnectionObservation) DeepCopy() *ConnectionObservation { + if in == nil { + return nil + } + out := new(ConnectionObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { + *out = *in + if in.ContactEmail != nil { + in, out := &in.ContactEmail, &out.ContactEmail + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in } - if in.ProjectIDSelector != nil { - in, out := &in.ProjectIDSelector, &out.ProjectIDSelector - *out = new(v1.Selector) - (*in).DeepCopyInto(*out) + if in.Facility != nil { + in, out := &in.Facility, &out.Facility + *out = new(string) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.OrganizationID != nil { + in, out := &in.OrganizationID, &out.OrganizationID + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in } if in.Redundancy != nil { in, out := &in.Redundancy, &out.Redundancy @@ -576,6 +934,7 @@ func (in *ConnectionSpec) DeepCopyInto(out *ConnectionSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConnectionSpec. @@ -632,6 +991,171 @@ func (in *Device) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceInitParameters) DeepCopyInto(out *DeviceInitParameters) { + *out = *in + if in.AlwaysPxe != nil { + in, out := &in.AlwaysPxe, &out.AlwaysPxe + *out = new(bool) + **out = **in + } + if in.Behavior != nil { + in, out := &in.Behavior, &out.Behavior + *out = make([]BehaviorInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BillingCycle != nil { + in, out := &in.BillingCycle, &out.BillingCycle + *out = new(string) + **out = **in + } + if in.CustomDataSecretRef != nil { + in, out := &in.CustomDataSecretRef, &out.CustomDataSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facilities != nil { + in, out := &in.Facilities, &out.Facilities + *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.ForceDetachVolumes != nil { + in, out := &in.ForceDetachVolumes, &out.ForceDetachVolumes + *out = new(bool) + **out = **in + } + if in.HardwareReservationID != nil { + in, out := &in.HardwareReservationID, &out.HardwareReservationID + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.IPAddress != nil { + in, out := &in.IPAddress, &out.IPAddress + *out = make([]IPAddressInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.IpxeScriptURL != nil { + in, out := &in.IpxeScriptURL, &out.IpxeScriptURL + *out = new(string) + **out = **in + } + if in.Locked != nil { + in, out := &in.Locked, &out.Locked + *out = new(bool) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.ProjectSSHKeyIds != nil { + in, out := &in.ProjectSSHKeyIds, &out.ProjectSSHKeyIds + *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.Reinstall != nil { + in, out := &in.Reinstall, &out.Reinstall + *out = make([]ReinstallInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Storage != nil { + in, out := &in.Storage, &out.Storage + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.TerminationTime != nil { + in, out := &in.TerminationTime, &out.TerminationTime + *out = new(string) + **out = **in + } + if in.UserDataSecretRef != nil { + in, out := &in.UserDataSecretRef, &out.UserDataSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.UserSSHKeyIds != nil { + in, out := &in.UserSSHKeyIds, &out.UserSSHKeyIds + *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.WaitForReservationDeprovision != nil { + in, out := &in.WaitForReservationDeprovision, &out.WaitForReservationDeprovision + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceInitParameters. +func (in *DeviceInitParameters) DeepCopy() *DeviceInitParameters { + if in == nil { + return nil + } + out := new(DeviceInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceList) DeepCopyInto(out *DeviceList) { *out = *in @@ -688,7 +1212,32 @@ func (in *DeviceNetworkType) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } - return nil + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceNetworkTypeInitParameters) DeepCopyInto(out *DeviceNetworkTypeInitParameters) { + *out = *in + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceNetworkTypeInitParameters. +func (in *DeviceNetworkTypeInitParameters) DeepCopy() *DeviceNetworkTypeInitParameters { + if in == nil { + return nil + } + out := new(DeviceNetworkTypeInitParameters) + in.DeepCopyInto(out) + return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. @@ -726,11 +1275,21 @@ func (in *DeviceNetworkTypeList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceNetworkTypeObservation) DeepCopyInto(out *DeviceNetworkTypeObservation) { *out = *in + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceNetworkTypeObservation. @@ -751,16 +1310,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -783,6 +1332,7 @@ func (in *DeviceNetworkTypeSpec) DeepCopyInto(out *DeviceNetworkTypeSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceNetworkTypeSpec. @@ -830,6 +1380,23 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = new(string) **out = **in } + if in.AlwaysPxe != nil { + in, out := &in.AlwaysPxe, &out.AlwaysPxe + *out = new(bool) + **out = **in + } + if in.Behavior != nil { + in, out := &in.Behavior, &out.Behavior + *out = make([]BehaviorObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BillingCycle != nil { + in, out := &in.BillingCycle, &out.BillingCycle + *out = new(string) + **out = **in + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) @@ -845,11 +1412,64 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = new(string) **out = **in } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facilities != nil { + in, out := &in.Facilities, &out.Facilities + *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.ForceDetachVolumes != nil { + in, out := &in.ForceDetachVolumes, &out.ForceDetachVolumes + *out = new(bool) + **out = **in + } + if in.HardwareReservationID != nil { + in, out := &in.HardwareReservationID, &out.HardwareReservationID + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.IPAddress != nil { + in, out := &in.IPAddress, &out.IPAddress + *out = make([]IPAddressObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.IpxeScriptURL != nil { + in, out := &in.IpxeScriptURL, &out.IpxeScriptURL + *out = new(string) + **out = **in + } + if in.Locked != nil { + in, out := &in.Locked, &out.Locked + *out = new(bool) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } if in.Network != nil { in, out := &in.Network, &out.Network *out = make([]NetworkObservation, len(*in)) @@ -862,6 +1482,16 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = new(string) **out = **in } + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } if in.Ports != nil { in, out := &in.Ports, &out.Ports *out = make([]DevicePortsObservation, len(*in)) @@ -869,6 +1499,29 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.ProjectSSHKeyIds != nil { + in, out := &in.ProjectSSHKeyIds, &out.ProjectSSHKeyIds + *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.Reinstall != nil { + in, out := &in.Reinstall, &out.Reinstall + *out = make([]ReinstallObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.SSHKeyIds != nil { in, out := &in.SSHKeyIds, &out.SSHKeyIds *out = make([]*string, len(*in)) @@ -890,11 +1543,48 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = new(string) **out = **in } + if in.Storage != nil { + in, out := &in.Storage, &out.Storage + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.TerminationTime != nil { + in, out := &in.TerminationTime, &out.TerminationTime + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) **out = **in } + if in.UserSSHKeyIds != nil { + in, out := &in.UserSSHKeyIds, &out.UserSSHKeyIds + *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.WaitForReservationDeprovision != nil { + in, out := &in.WaitForReservationDeprovision, &out.WaitForReservationDeprovision + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceObservation. @@ -1000,16 +1690,6 @@ func (in *DeviceParameters) DeepCopyInto(out *DeviceParameters) { *out = new(string) **out = **in } - if in.ProjectIDRef != nil { - in, out := &in.ProjectIDRef, &out.ProjectIDRef - *out = new(v1.Reference) - (*in).DeepCopyInto(*out) - } - if in.ProjectIDSelector != nil { - in, out := &in.ProjectIDSelector, &out.ProjectIDSelector - *out = new(v1.Selector) - (*in).DeepCopyInto(*out) - } if in.ProjectSSHKeyIds != nil { in, out := &in.ProjectSSHKeyIds, &out.ProjectSSHKeyIds *out = make([]*string, len(*in)) @@ -1082,6 +1762,21 @@ func (in *DeviceParameters) DeepCopy() *DeviceParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DevicePortsInitParameters) DeepCopyInto(out *DevicePortsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DevicePortsInitParameters. +func (in *DevicePortsInitParameters) DeepCopy() *DevicePortsInitParameters { + if in == nil { + return nil + } + out := new(DevicePortsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DevicePortsObservation) DeepCopyInto(out *DevicePortsObservation) { *out = *in @@ -1142,6 +1837,7 @@ func (in *DeviceSpec) DeepCopyInto(out *DeviceSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSpec. @@ -1198,6 +1894,41 @@ func (in *Gateway) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GatewayInitParameters) DeepCopyInto(out *GatewayInitParameters) { + *out = *in + if in.IPReservationID != nil { + in, out := &in.IPReservationID, &out.IPReservationID + *out = new(string) + **out = **in + } + if in.PrivateIPv4SubnetSize != nil { + in, out := &in.PrivateIPv4SubnetSize, &out.PrivateIPv4SubnetSize + *out = new(float64) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.VlanID != nil { + in, out := &in.VlanID, &out.VlanID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayInitParameters. +func (in *GatewayInitParameters) DeepCopy() *GatewayInitParameters { + if in == nil { + return nil + } + out := new(GatewayInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GatewayList) DeepCopyInto(out *GatewayList) { *out = *in @@ -1238,11 +1969,31 @@ func (in *GatewayObservation) DeepCopyInto(out *GatewayObservation) { *out = new(string) **out = **in } + if in.IPReservationID != nil { + in, out := &in.IPReservationID, &out.IPReservationID + *out = new(string) + **out = **in + } + if in.PrivateIPv4SubnetSize != nil { + in, out := &in.PrivateIPv4SubnetSize, &out.PrivateIPv4SubnetSize + *out = new(float64) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } if in.State != nil { in, out := &in.State, &out.State *out = new(string) **out = **in } + if in.VlanID != nil { + in, out := &in.VlanID, &out.VlanID + *out = new(string) + **out = **in + } if in.VrfID != nil { in, out := &in.VrfID, &out.VrfID *out = new(string) @@ -1268,16 +2019,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -1288,31 +2029,11 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) - (*in).DeepCopyInto(*out) - } - 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. @@ -1330,6 +2051,7 @@ func (in *GatewaySpec) DeepCopyInto(out *GatewaySpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewaySpec. @@ -1349,12 +2071,48 @@ func (in *GatewayStatus) DeepCopyInto(out *GatewayStatus) { in.AtProvider.DeepCopyInto(&out.AtProvider) } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayStatus. -func (in *GatewayStatus) DeepCopy() *GatewayStatus { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayStatus. +func (in *GatewayStatus) DeepCopy() *GatewayStatus { + if in == nil { + return nil + } + out := new(GatewayStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPAddressInitParameters) DeepCopyInto(out *IPAddressInitParameters) { + *out = *in + if in.Cidr != nil { + in, out := &in.Cidr, &out.Cidr + *out = new(float64) + **out = **in + } + if in.ReservationIds != nil { + in, out := &in.ReservationIds, &out.ReservationIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAddressInitParameters. +func (in *IPAddressInitParameters) DeepCopy() *IPAddressInitParameters { if in == nil { return nil } - out := new(GatewayStatus) + out := new(IPAddressInitParameters) in.DeepCopyInto(out) return out } @@ -1362,6 +2120,27 @@ func (in *GatewayStatus) DeepCopy() *GatewayStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IPAddressObservation) DeepCopyInto(out *IPAddressObservation) { *out = *in + if in.Cidr != nil { + in, out := &in.Cidr, &out.Cidr + *out = new(float64) + **out = **in + } + if in.ReservationIds != nil { + in, out := &in.ReservationIds, &out.ReservationIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAddressObservation. @@ -1437,6 +2216,31 @@ func (in *IPAttachment) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IPAttachmentInitParameters) DeepCopyInto(out *IPAttachmentInitParameters) { + *out = *in + if in.CidrNotation != nil { + in, out := &in.CidrNotation, &out.CidrNotation + *out = new(string) + **out = **in + } + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAttachmentInitParameters. +func (in *IPAttachmentInitParameters) DeepCopy() *IPAttachmentInitParameters { + if in == nil { + return nil + } + out := new(IPAttachmentInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *IPAttachmentList) DeepCopyInto(out *IPAttachmentList) { *out = *in @@ -1487,6 +2291,16 @@ func (in *IPAttachmentObservation) DeepCopyInto(out *IPAttachmentObservation) { *out = new(float64) **out = **in } + if in.CidrNotation != nil { + in, out := &in.CidrNotation, &out.CidrNotation + *out = new(string) + **out = **in + } + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } if in.Gateway != nil { in, out := &in.Gateway, &out.Gateway *out = new(string) @@ -1557,16 +2371,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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. @@ -1584,6 +2388,7 @@ func (in *IPAttachmentSpec) DeepCopyInto(out *IPAttachmentSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IPAttachmentSpec. @@ -1613,16 +2418,219 @@ func (in *IPAttachmentStatus) DeepCopy() *IPAttachmentStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceParametersInitParameters) DeepCopyInto(out *InstanceParametersInitParameters) { + *out = *in + if in.AlwaysPxe != nil { + in, out := &in.AlwaysPxe, &out.AlwaysPxe + *out = new(bool) + **out = **in + } + if in.BillingCycle != nil { + in, out := &in.BillingCycle, &out.BillingCycle + *out = new(string) + **out = **in + } + if in.Customdata != nil { + in, out := &in.Customdata, &out.Customdata + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Features != nil { + in, out := &in.Features, &out.Features + *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.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.IpxeScriptURL != nil { + in, out := &in.IpxeScriptURL, &out.IpxeScriptURL + *out = new(string) + **out = **in + } + if in.Locked != nil { + in, out := &in.Locked, &out.Locked + *out = new(bool) + **out = **in + } + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } + if in.ProjectSSHKeys != nil { + in, out := &in.ProjectSSHKeys, &out.ProjectSSHKeys + *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.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.UserSSHKeys != nil { + in, out := &in.UserSSHKeys, &out.UserSSHKeys + *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.Userdata != nil { + in, out := &in.Userdata, &out.Userdata + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceParametersInitParameters. +func (in *InstanceParametersInitParameters) DeepCopy() *InstanceParametersInitParameters { + if in == nil { + return nil + } + out := new(InstanceParametersInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InstanceParametersObservation) DeepCopyInto(out *InstanceParametersObservation) { *out = *in + if in.AlwaysPxe != nil { + in, out := &in.AlwaysPxe, &out.AlwaysPxe + *out = new(bool) + **out = **in + } + if in.BillingCycle != nil { + in, out := &in.BillingCycle, &out.BillingCycle + *out = new(string) + **out = **in + } + if in.Customdata != nil { + in, out := &in.Customdata, &out.Customdata + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Features != nil { + in, out := &in.Features, &out.Features + *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.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.IpxeScriptURL != nil { + in, out := &in.IpxeScriptURL, &out.IpxeScriptURL + *out = new(string) + **out = **in + } + if in.Locked != nil { + in, out := &in.Locked, &out.Locked + *out = new(bool) + **out = **in + } + if in.OperatingSystem != nil { + in, out := &in.OperatingSystem, &out.OperatingSystem + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(string) + **out = **in + } + if in.ProjectSSHKeys != nil { + in, out := &in.ProjectSSHKeys, &out.ProjectSSHKeys + *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.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.TerminationTime != nil { in, out := &in.TerminationTime, &out.TerminationTime *out = new(string) **out = **in } - if in.TermintationTime != nil { - in, out := &in.TermintationTime, &out.TermintationTime + if in.TermintationTime != nil { + in, out := &in.TermintationTime, &out.TermintationTime + *out = new(string) + **out = **in + } + if in.UserSSHKeys != nil { + in, out := &in.UserSSHKeys, &out.UserSSHKeys + *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.Userdata != nil { + in, out := &in.Userdata, &out.Userdata *out = new(string) **out = **in } @@ -1747,6 +2755,21 @@ func (in *InstanceParametersParameters) DeepCopy() *InstanceParametersParameters return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkInitParameters) DeepCopyInto(out *NetworkInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkInitParameters. +func (in *NetworkInitParameters) DeepCopy() *NetworkInitParameters { + if in == nil { + return nil + } + out := new(NetworkInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NetworkObservation) DeepCopyInto(out *NetworkObservation) { *out = *in @@ -1829,6 +2852,53 @@ func (in *Organization) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrganizationInitParameters) DeepCopyInto(out *OrganizationInitParameters) { + *out = *in + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = make([]AddressInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Logo != nil { + in, out := &in.Logo, &out.Logo + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Twitter != nil { + in, out := &in.Twitter, &out.Twitter + *out = new(string) + **out = **in + } + if in.Website != nil { + in, out := &in.Website, &out.Website + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationInitParameters. +func (in *OrganizationInitParameters) DeepCopy() *OrganizationInitParameters { + if in == nil { + return nil + } + out := new(OrganizationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OrganizationList) DeepCopyInto(out *OrganizationList) { *out = *in @@ -1888,6 +2958,58 @@ func (in *OrganizationMember) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OrganizationMemberInitParameters) DeepCopyInto(out *OrganizationMemberInitParameters) { + *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 OrganizationMemberInitParameters. +func (in *OrganizationMemberInitParameters) DeepCopy() *OrganizationMemberInitParameters { + if in == nil { + return nil + } + out := new(OrganizationMemberInitParameters) + in.DeepCopyInto(out) + return out +} + // 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 @@ -1938,11 +3060,48 @@ func (in *OrganizationMemberObservation) DeepCopyInto(out *OrganizationMemberObs *out = new(string) **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.Nonce != nil { in, out := &in.Nonce, &out.Nonce *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 + } + } + } if in.State != nil { in, out := &in.State, &out.State *out = new(string) @@ -1983,16 +3142,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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)) @@ -2032,6 +3181,7 @@ func (in *OrganizationMemberSpec) DeepCopyInto(out *OrganizationMemberSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationMemberSpec. @@ -2064,21 +3214,53 @@ func (in *OrganizationMemberStatus) DeepCopy() *OrganizationMemberStatus { // 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 + if in.Address != nil { + in, out := &in.Address, &out.Address + *out = make([]AddressObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) **out = **in } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Logo != nil { + in, out := &in.Logo, &out.Logo + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Twitter != nil { + in, out := &in.Twitter, &out.Twitter + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) **out = **in } + if in.Website != nil { + in, out := &in.Website, &out.Website + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationObservation. @@ -2143,6 +3325,7 @@ func (in *OrganizationSpec) DeepCopyInto(out *OrganizationSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OrganizationSpec. @@ -2199,6 +3382,68 @@ func (in *Port) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortInitParameters) DeepCopyInto(out *PortInitParameters) { + *out = *in + if in.Bonded != nil { + in, out := &in.Bonded, &out.Bonded + *out = new(bool) + **out = **in + } + if in.Layer2 != nil { + in, out := &in.Layer2, &out.Layer2 + *out = new(bool) + **out = **in + } + if in.NativeVlanID != nil { + in, out := &in.NativeVlanID, &out.NativeVlanID + *out = new(string) + **out = **in + } + if in.PortID != nil { + in, out := &in.PortID, &out.PortID + *out = new(string) + **out = **in + } + if in.ResetOnDelete != nil { + in, out := &in.ResetOnDelete, &out.ResetOnDelete + *out = new(bool) + **out = **in + } + if in.VlanIds != nil { + in, out := &in.VlanIds, &out.VlanIds + *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.VxlanIds != nil { + in, out := &in.VxlanIds, &out.VxlanIds + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortInitParameters. +func (in *PortInitParameters) DeepCopy() *PortInitParameters { + if in == nil { + return nil + } + out := new(PortInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortList) DeepCopyInto(out *PortList) { *out = *in @@ -2244,6 +3489,11 @@ func (in *PortObservation) DeepCopyInto(out *PortObservation) { *out = new(string) **out = **in } + if in.Bonded != nil { + in, out := &in.Bonded, &out.Bonded + *out = new(bool) + **out = **in + } if in.DisbondSupported != nil { in, out := &in.DisbondSupported, &out.DisbondSupported *out = new(bool) @@ -2254,6 +3504,11 @@ func (in *PortObservation) DeepCopyInto(out *PortObservation) { *out = new(string) **out = **in } + if in.Layer2 != nil { + in, out := &in.Layer2, &out.Layer2 + *out = new(bool) + **out = **in + } if in.Mac != nil { in, out := &in.Mac, &out.Mac *out = new(string) @@ -2264,16 +3519,53 @@ func (in *PortObservation) DeepCopyInto(out *PortObservation) { *out = new(string) **out = **in } - if in.NetworkType != nil { - in, out := &in.NetworkType, &out.NetworkType + if in.NativeVlanID != nil { + in, out := &in.NativeVlanID, &out.NativeVlanID + *out = new(string) + **out = **in + } + if in.NetworkType != nil { + in, out := &in.NetworkType, &out.NetworkType + *out = new(string) + **out = **in + } + if in.PortID != nil { + in, out := &in.PortID, &out.PortID *out = new(string) **out = **in } + if in.ResetOnDelete != nil { + in, out := &in.ResetOnDelete, &out.ResetOnDelete + *out = new(bool) + **out = **in + } if in.Type != nil { in, out := &in.Type, &out.Type *out = new(string) **out = **in } + if in.VlanIds != nil { + in, out := &in.VlanIds, &out.VlanIds + *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.VxlanIds != nil { + in, out := &in.VxlanIds, &out.VxlanIds + *out = make([]*float64, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(float64) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortObservation. @@ -2304,16 +3596,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -2363,6 +3645,7 @@ func (in *PortSpec) DeepCopyInto(out *PortSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortSpec. @@ -2419,6 +3702,46 @@ func (in *PortVlanAttachment) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortVlanAttachmentInitParameters) DeepCopyInto(out *PortVlanAttachmentInitParameters) { + *out = *in + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } + if in.ForceBond != nil { + in, out := &in.ForceBond, &out.ForceBond + *out = new(bool) + **out = **in + } + if in.Native != nil { + in, out := &in.Native, &out.Native + *out = new(bool) + **out = **in + } + if in.PortName != nil { + in, out := &in.PortName, &out.PortName + *out = new(string) + **out = **in + } + if in.VlanVnid != nil { + in, out := &in.VlanVnid, &out.VlanVnid + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortVlanAttachmentInitParameters. +func (in *PortVlanAttachmentInitParameters) DeepCopy() *PortVlanAttachmentInitParameters { + if in == nil { + return nil + } + out := new(PortVlanAttachmentInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortVlanAttachmentList) DeepCopyInto(out *PortVlanAttachmentList) { *out = *in @@ -2454,21 +3777,46 @@ func (in *PortVlanAttachmentList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortVlanAttachmentObservation) DeepCopyInto(out *PortVlanAttachmentObservation) { *out = *in + if in.DeviceID != nil { + in, out := &in.DeviceID, &out.DeviceID + *out = new(string) + **out = **in + } + if in.ForceBond != nil { + in, out := &in.ForceBond, &out.ForceBond + *out = new(bool) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Native != nil { + in, out := &in.Native, &out.Native + *out = new(bool) + **out = **in + } if in.PortID != nil { in, out := &in.PortID, &out.PortID *out = new(string) **out = **in } + if in.PortName != nil { + in, out := &in.PortName, &out.PortName + *out = new(string) + **out = **in + } if in.VlanID != nil { in, out := &in.VlanID, &out.VlanID *out = new(string) **out = **in } + if in.VlanVnid != nil { + in, out := &in.VlanVnid, &out.VlanVnid + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortVlanAttachmentObservation. @@ -2489,16 +3837,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -2536,6 +3874,7 @@ func (in *PortVlanAttachmentSpec) DeepCopyInto(out *PortVlanAttachmentSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortVlanAttachmentSpec. @@ -2565,6 +3904,21 @@ func (in *PortVlanAttachmentStatus) DeepCopy() *PortVlanAttachmentStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PortsInitParameters) DeepCopyInto(out *PortsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortsInitParameters. +func (in *PortsInitParameters) DeepCopy() *PortsInitParameters { + if in == nil { + return nil + } + out := new(PortsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PortsObservation) DeepCopyInto(out *PortsObservation) { *out = *in @@ -2690,6 +4044,36 @@ func (in *ProjectAPIKey) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectAPIKeyInitParameters) DeepCopyInto(out *ProjectAPIKeyInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectAPIKeyInitParameters. +func (in *ProjectAPIKeyInitParameters) DeepCopy() *ProjectAPIKeyInitParameters { + if in == nil { + return nil + } + out := new(ProjectAPIKeyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProjectAPIKeyList) DeepCopyInto(out *ProjectAPIKeyList) { *out = *in @@ -2725,11 +4109,26 @@ func (in *ProjectAPIKeyList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProjectAPIKeyObservation) DeepCopyInto(out *ProjectAPIKeyObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectAPIKeyObservation. @@ -2755,16 +4154,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -2787,6 +4176,7 @@ func (in *ProjectAPIKeySpec) DeepCopyInto(out *ProjectAPIKeySpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectAPIKeySpec. @@ -2816,6 +4206,48 @@ func (in *ProjectAPIKeyStatus) DeepCopy() *ProjectAPIKeyStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectInitParameters) DeepCopyInto(out *ProjectInitParameters) { + *out = *in + if in.BGPConfig != nil { + in, out := &in.BGPConfig, &out.BGPConfig + *out = make([]BGPConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.BackendTransfer != nil { + in, out := &in.BackendTransfer, &out.BackendTransfer + *out = new(bool) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.OrganizationID != nil { + in, out := &in.OrganizationID, &out.OrganizationID + *out = new(string) + **out = **in + } + if in.PaymentMethodID != nil { + in, out := &in.PaymentMethodID, &out.PaymentMethodID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectInitParameters. +func (in *ProjectInitParameters) DeepCopy() *ProjectInitParameters { + if in == nil { + return nil + } + out := new(ProjectInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProjectList) DeepCopyInto(out *ProjectList) { *out = *in @@ -2858,6 +4290,11 @@ func (in *ProjectObservation) DeepCopyInto(out *ProjectObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.BackendTransfer != nil { + in, out := &in.BackendTransfer, &out.BackendTransfer + *out = new(bool) + **out = **in + } if in.Created != nil { in, out := &in.Created, &out.Created *out = new(string) @@ -2868,6 +4305,21 @@ func (in *ProjectObservation) DeepCopyInto(out *ProjectObservation) { *out = new(string) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.OrganizationID != nil { + in, out := &in.OrganizationID, &out.OrganizationID + *out = new(string) + **out = **in + } + if in.PaymentMethodID != nil { + in, out := &in.PaymentMethodID, &out.PaymentMethodID + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) @@ -2910,16 +4362,6 @@ func (in *ProjectParameters) DeepCopyInto(out *ProjectParameters) { *out = new(string) **out = **in } - if in.OrganizationIDRef != nil { - in, out := &in.OrganizationIDRef, &out.OrganizationIDRef - *out = new(v1.Reference) - (*in).DeepCopyInto(*out) - } - if in.OrganizationIDSelector != nil { - in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector - *out = new(v1.Selector) - (*in).DeepCopyInto(*out) - } if in.PaymentMethodID != nil { in, out := &in.PaymentMethodID, &out.PaymentMethodID *out = new(string) @@ -2932,38 +4374,68 @@ func (in *ProjectParameters) DeepCopy() *ProjectParameters { if in == nil { return nil } - out := new(ProjectParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ProjectSSHKey) DeepCopyInto(out *ProjectSSHKey) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) + out := new(ProjectParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectSSHKey) DeepCopyInto(out *ProjectSSHKey) { + *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 ProjectSSHKey. +func (in *ProjectSSHKey) DeepCopy() *ProjectSSHKey { + if in == nil { + return nil + } + out := new(ProjectSSHKey) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProjectSSHKey) 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 *ProjectSSHKeyInitParameters) DeepCopyInto(out *ProjectSSHKeyInitParameters) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.PublicKey != nil { + in, out := &in.PublicKey, &out.PublicKey + *out = new(string) + **out = **in + } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectSSHKey. -func (in *ProjectSSHKey) DeepCopy() *ProjectSSHKey { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectSSHKeyInitParameters. +func (in *ProjectSSHKeyInitParameters) DeepCopy() *ProjectSSHKeyInitParameters { if in == nil { return nil } - out := new(ProjectSSHKey) + out := new(ProjectSSHKeyInitParameters) in.DeepCopyInto(out) return out } -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ProjectSSHKey) 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 *ProjectSSHKeyList) DeepCopyInto(out *ProjectSSHKeyList) { *out = *in @@ -3014,11 +4486,26 @@ func (in *ProjectSSHKeyObservation) DeepCopyInto(out *ProjectSSHKeyObservation) *out = new(string) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } if in.OwnerID != nil { in, out := &in.OwnerID, &out.OwnerID *out = new(string) **out = **in } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.PublicKey != nil { + in, out := &in.PublicKey, &out.PublicKey + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) @@ -3049,16 +4536,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -3081,6 +4558,7 @@ func (in *ProjectSSHKeySpec) DeepCopyInto(out *ProjectSSHKeySpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectSSHKeySpec. @@ -3115,6 +4593,7 @@ func (in *ProjectSpec) DeepCopyInto(out *ProjectSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectSpec. @@ -3144,9 +4623,54 @@ func (in *ProjectStatus) DeepCopy() *ProjectStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReinstallInitParameters) DeepCopyInto(out *ReinstallInitParameters) { + *out = *in + if in.DeprovisionFast != nil { + in, out := &in.DeprovisionFast, &out.DeprovisionFast + *out = new(bool) + **out = **in + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + if in.PreserveData != nil { + in, out := &in.PreserveData, &out.PreserveData + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReinstallInitParameters. +func (in *ReinstallInitParameters) DeepCopy() *ReinstallInitParameters { + if in == nil { + return nil + } + out := new(ReinstallInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ReinstallObservation) DeepCopyInto(out *ReinstallObservation) { *out = *in + if in.DeprovisionFast != nil { + in, out := &in.DeprovisionFast, &out.DeprovisionFast + *out = new(bool) + **out = **in + } + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + if in.PreserveData != nil { + in, out := &in.PreserveData, &out.PreserveData + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReinstallObservation. @@ -3216,6 +4740,87 @@ func (in *ReservedIPBlock) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReservedIPBlockInitParameters) DeepCopyInto(out *ReservedIPBlockInitParameters) { + *out = *in + if in.Cidr != nil { + in, out := &in.Cidr, &out.Cidr + *out = new(float64) + **out = **in + } + if in.CustomData != nil { + in, out := &in.CustomData, &out.CustomData + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facility != nil { + in, out := &in.Facility, &out.Facility + *out = new(string) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.Quantity != nil { + in, out := &in.Quantity, &out.Quantity + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VrfID != nil { + in, out := &in.VrfID, &out.VrfID + *out = new(string) + **out = **in + } + if in.WaitForState != nil { + in, out := &in.WaitForState, &out.WaitForState + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReservedIPBlockInitParameters. +func (in *ReservedIPBlockInitParameters) DeepCopy() *ReservedIPBlockInitParameters { + if in == nil { + return nil + } + out := new(ReservedIPBlockInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ReservedIPBlockList) DeepCopyInto(out *ReservedIPBlockList) { *out = *in @@ -3261,11 +4866,31 @@ func (in *ReservedIPBlockObservation) DeepCopyInto(out *ReservedIPBlockObservati *out = new(float64) **out = **in } + if in.Cidr != nil { + in, out := &in.Cidr, &out.Cidr + *out = new(float64) + **out = **in + } if in.CidrNotation != nil { in, out := &in.CidrNotation, &out.CidrNotation *out = new(string) **out = **in } + if in.CustomData != nil { + in, out := &in.CustomData, &out.CustomData + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facility != nil { + in, out := &in.Facility, &out.Facility + *out = new(string) + **out = **in + } if in.Gateway != nil { in, out := &in.Gateway, &out.Gateway *out = new(string) @@ -3291,16 +4916,62 @@ func (in *ReservedIPBlockObservation) DeepCopyInto(out *ReservedIPBlockObservati *out = new(bool) **out = **in } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } if in.Netmask != nil { in, out := &in.Netmask, &out.Netmask *out = new(string) **out = **in } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } if in.Public != nil { in, out := &in.Public, &out.Public *out = new(bool) **out = **in } + if in.Quantity != nil { + in, out := &in.Quantity, &out.Quantity + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VrfID != nil { + in, out := &in.VrfID, &out.VrfID + *out = new(string) + **out = **in + } + if in.WaitForState != nil { + in, out := &in.WaitForState, &out.WaitForState + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReservedIPBlockObservation. @@ -3351,16 +5022,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -3387,16 +5048,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -3419,6 +5070,7 @@ func (in *ReservedIPBlockSpec) DeepCopyInto(out *ReservedIPBlockSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReservedIPBlockSpec. @@ -3475,6 +5127,31 @@ func (in *SSHKey) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SSHKeyInitParameters) DeepCopyInto(out *SSHKeyInitParameters) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.PublicKey != nil { + in, out := &in.PublicKey, &out.PublicKey + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeyInitParameters. +func (in *SSHKeyInitParameters) DeepCopy() *SSHKeyInitParameters { + if in == nil { + return nil + } + out := new(SSHKeyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SSHKeyList) DeepCopyInto(out *SSHKeyList) { *out = *in @@ -3520,8 +5197,13 @@ func (in *SSHKeyObservation) DeepCopyInto(out *SSHKeyObservation) { *out = new(string) **out = **in } - if in.ID != nil { - in, out := &in.ID, &out.ID + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name *out = new(string) **out = **in } @@ -3530,6 +5212,11 @@ func (in *SSHKeyObservation) DeepCopyInto(out *SSHKeyObservation) { *out = new(string) **out = **in } + if in.PublicKey != nil { + in, out := &in.PublicKey, &out.PublicKey + *out = new(string) + **out = **in + } if in.Updated != nil { in, out := &in.Updated, &out.Updated *out = new(string) @@ -3577,6 +5264,7 @@ func (in *SSHKeySpec) DeepCopyInto(out *SSHKeySpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeySpec. @@ -3606,6 +5294,21 @@ func (in *SSHKeyStatus) DeepCopy() *SSHKeyStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceTokensInitParameters) DeepCopyInto(out *ServiceTokensInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceTokensInitParameters. +func (in *ServiceTokensInitParameters) DeepCopy() *ServiceTokensInitParameters { + if in == nil { + return nil + } + out := new(ServiceTokensInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceTokensObservation) DeepCopyInto(out *ServiceTokensObservation) { *out = *in @@ -3693,6 +5396,69 @@ func (in *SpotMarketRequest) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpotMarketRequestInitParameters) DeepCopyInto(out *SpotMarketRequestInitParameters) { + *out = *in + if in.DevicesMax != nil { + in, out := &in.DevicesMax, &out.DevicesMax + *out = new(float64) + **out = **in + } + if in.DevicesMin != nil { + in, out := &in.DevicesMin, &out.DevicesMin + *out = new(float64) + **out = **in + } + if in.Facilities != nil { + in, out := &in.Facilities, &out.Facilities + *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.InstanceParameters != nil { + in, out := &in.InstanceParameters, &out.InstanceParameters + *out = make([]InstanceParametersInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MaxBidPrice != nil { + in, out := &in.MaxBidPrice, &out.MaxBidPrice + *out = new(float64) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.WaitForDevices != nil { + in, out := &in.WaitForDevices, &out.WaitForDevices + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpotMarketRequestInitParameters. +func (in *SpotMarketRequestInitParameters) DeepCopy() *SpotMarketRequestInitParameters { + if in == nil { + return nil + } + out := new(SpotMarketRequestInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SpotMarketRequestList) DeepCopyInto(out *SpotMarketRequestList) { *out = *in @@ -3728,6 +5494,27 @@ func (in *SpotMarketRequestList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SpotMarketRequestObservation) DeepCopyInto(out *SpotMarketRequestObservation) { *out = *in + if in.DevicesMax != nil { + in, out := &in.DevicesMax, &out.DevicesMax + *out = new(float64) + **out = **in + } + if in.DevicesMin != nil { + in, out := &in.DevicesMin, &out.DevicesMin + *out = new(float64) + **out = **in + } + if in.Facilities != nil { + in, out := &in.Facilities, &out.Facilities + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -3740,6 +5527,26 @@ func (in *SpotMarketRequestObservation) DeepCopyInto(out *SpotMarketRequestObser (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.MaxBidPrice != nil { + in, out := &in.MaxBidPrice, &out.MaxBidPrice + *out = new(float64) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.WaitForDevices != nil { + in, out := &in.WaitForDevices, &out.WaitForDevices + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpotMarketRequestObservation. @@ -3798,16 +5605,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -3830,6 +5627,7 @@ func (in *SpotMarketRequestSpec) DeepCopyInto(out *SpotMarketRequestSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpotMarketRequestSpec. @@ -3886,6 +5684,31 @@ func (in *UserAPIKey) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserAPIKeyInitParameters) DeepCopyInto(out *UserAPIKeyInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserAPIKeyInitParameters. +func (in *UserAPIKeyInitParameters) DeepCopy() *UserAPIKeyInitParameters { + if in == nil { + return nil + } + out := new(UserAPIKeyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *UserAPIKeyList) DeepCopyInto(out *UserAPIKeyList) { *out = *in @@ -3921,11 +5744,21 @@ func (in *UserAPIKeyList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *UserAPIKeyObservation) DeepCopyInto(out *UserAPIKeyObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } if in.UserID != nil { in, out := &in.UserID, &out.UserID *out = new(string) @@ -3973,6 +5806,7 @@ func (in *UserAPIKeySpec) DeepCopyInto(out *UserAPIKeySpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserAPIKeySpec. @@ -4029,6 +5863,122 @@ func (in *VirtualCircuit) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualCircuitInitParameters) DeepCopyInto(out *VirtualCircuitInitParameters) { + *out = *in + if in.ConnectionID != nil { + in, out := &in.ConnectionID, &out.ConnectionID + *out = new(string) + **out = **in + } + if in.CustomerIP != nil { + in, out := &in.CustomerIP, &out.CustomerIP + *out = new(string) + **out = **in + } + if in.CustomerIPv6 != nil { + in, out := &in.CustomerIPv6, &out.CustomerIPv6 + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Md5SecretRef != nil { + in, out := &in.Md5SecretRef, &out.Md5SecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.MetalIP != nil { + in, out := &in.MetalIP, &out.MetalIP + *out = new(string) + **out = **in + } + if in.MetalIPv6 != nil { + in, out := &in.MetalIPv6, &out.MetalIPv6 + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.NniVlan != nil { + in, out := &in.NniVlan, &out.NniVlan + *out = new(float64) + **out = **in + } + if in.PeerAsn != nil { + in, out := &in.PeerAsn, &out.PeerAsn + *out = new(float64) + **out = **in + } + if in.PortID != nil { + in, out := &in.PortID, &out.PortID + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.Speed != nil { + in, out := &in.Speed, &out.Speed + *out = new(string) + **out = **in + } + if in.Subnet != nil { + in, out := &in.Subnet, &out.Subnet + *out = new(string) + **out = **in + } + if in.SubnetIPv6 != nil { + in, out := &in.SubnetIPv6, &out.SubnetIPv6 + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.VirtualCircuitID != nil { + in, out := &in.VirtualCircuitID, &out.VirtualCircuitID + *out = new(string) + **out = **in + } + if in.VlanID != nil { + in, out := &in.VlanID, &out.VlanID + *out = new(string) + **out = **in + } + if in.VrfID != nil { + in, out := &in.VrfID, &out.VrfID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualCircuitInitParameters. +func (in *VirtualCircuitInitParameters) DeepCopy() *VirtualCircuitInitParameters { + if in == nil { + return nil + } + out := new(VirtualCircuitInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VirtualCircuitList) DeepCopyInto(out *VirtualCircuitList) { *out = *in @@ -4064,26 +6014,122 @@ func (in *VirtualCircuitList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VirtualCircuitObservation) DeepCopyInto(out *VirtualCircuitObservation) { *out = *in + if in.ConnectionID != nil { + in, out := &in.ConnectionID, &out.ConnectionID + *out = new(string) + **out = **in + } + if in.CustomerIP != nil { + in, out := &in.CustomerIP, &out.CustomerIP + *out = new(string) + **out = **in + } + if in.CustomerIPv6 != nil { + in, out := &in.CustomerIPv6, &out.CustomerIPv6 + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.MetalIP != nil { + in, out := &in.MetalIP, &out.MetalIP + *out = new(string) + **out = **in + } + if in.MetalIPv6 != nil { + in, out := &in.MetalIPv6, &out.MetalIPv6 + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.NniVlan != nil { + in, out := &in.NniVlan, &out.NniVlan + *out = new(float64) + **out = **in + } if in.NniVnid != nil { in, out := &in.NniVnid, &out.NniVnid *out = new(float64) **out = **in } + if in.PeerAsn != nil { + in, out := &in.PeerAsn, &out.PeerAsn + *out = new(float64) + **out = **in + } + if in.PortID != nil { + in, out := &in.PortID, &out.PortID + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.Speed != nil { + in, out := &in.Speed, &out.Speed + *out = new(string) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Subnet != nil { + in, out := &in.Subnet, &out.Subnet + *out = new(string) + **out = **in + } + if in.SubnetIPv6 != nil { + in, out := &in.SubnetIPv6, &out.SubnetIPv6 + *out = new(string) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.VirtualCircuitID != nil { + in, out := &in.VirtualCircuitID, &out.VirtualCircuitID + *out = new(string) + **out = **in + } + if in.VlanID != nil { + in, out := &in.VlanID, &out.VlanID + *out = new(string) + **out = **in + } if in.Vnid != nil { in, out := &in.Vnid, &out.Vnid *out = new(float64) **out = **in } + if in.VrfID != nil { + in, out := &in.VrfID, &out.VrfID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualCircuitObservation. @@ -4104,21 +6150,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) - (*in).DeepCopyInto(*out) - } - 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) **out = **in } + if in.CustomerIPv6 != nil { + in, out := &in.CustomerIPv6, &out.CustomerIPv6 + *out = new(string) + **out = **in + } if in.Description != nil { in, out := &in.Description, &out.Description *out = new(string) @@ -4134,6 +6175,11 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) *out = new(string) **out = **in } + if in.MetalIPv6 != nil { + in, out := &in.MetalIPv6, &out.MetalIPv6 + *out = new(string) + **out = **in + } if in.Name != nil { in, out := &in.Name, &out.Name *out = new(string) @@ -4159,16 +6205,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -4179,6 +6215,11 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) *out = new(string) **out = **in } + if in.SubnetIPv6 != nil { + in, out := &in.SubnetIPv6, &out.SubnetIPv6 + *out = new(string) + **out = **in + } if in.Tags != nil { in, out := &in.Tags, &out.Tags *out = make([]*string, len(*in)) @@ -4190,36 +6231,21 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) } } } + if in.VirtualCircuitID != nil { + in, out := &in.VirtualCircuitID, &out.VirtualCircuitID + *out = new(string) + **out = **in + } 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) - (*in).DeepCopyInto(*out) - } - 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) - (*in).DeepCopyInto(*out) - } - 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. @@ -4237,6 +6263,7 @@ func (in *VirtualCircuitSpec) DeepCopyInto(out *VirtualCircuitSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualCircuitSpec. @@ -4293,6 +6320,46 @@ func (in *Vlan) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VlanInitParameters) DeepCopyInto(out *VlanInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facility != nil { + in, out := &in.Facility, &out.Facility + *out = new(string) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.Vxlan != nil { + in, out := &in.Vxlan, &out.Vxlan + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VlanInitParameters. +func (in *VlanInitParameters) DeepCopy() *VlanInitParameters { + if in == nil { + return nil + } + out := new(VlanInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VlanList) DeepCopyInto(out *VlanList) { *out = *in @@ -4328,11 +6395,36 @@ func (in *VlanList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VlanObservation) DeepCopyInto(out *VlanObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Facility != nil { + in, out := &in.Facility, &out.Facility + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.Vxlan != nil { + in, out := &in.Vxlan, &out.Vxlan + *out = new(float64) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VlanObservation. @@ -4368,16 +6460,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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) @@ -4400,6 +6482,7 @@ func (in *VlanSpec) DeepCopyInto(out *VlanSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VlanSpec. @@ -4456,6 +6539,57 @@ func (in *Vrf) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VrfInitParameters) DeepCopyInto(out *VrfInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.LocalAsn != nil { + in, out := &in.LocalAsn, &out.LocalAsn + *out = new(float64) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VrfInitParameters. +func (in *VrfInitParameters) DeepCopy() *VrfInitParameters { + if in == nil { + return nil + } + out := new(VrfInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VrfList) DeepCopyInto(out *VrfList) { *out = *in @@ -4491,11 +6625,47 @@ func (in *VrfList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VrfObservation) DeepCopyInto(out *VrfObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.IPRanges != nil { + in, out := &in.IPRanges, &out.IPRanges + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.LocalAsn != nil { + in, out := &in.LocalAsn, &out.LocalAsn + *out = new(float64) + **out = **in + } + if in.Metro != nil { + in, out := &in.Metro, &out.Metro + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VrfObservation. @@ -4547,16 +6717,6 @@ 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) - (*in).DeepCopyInto(*out) - } - 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. @@ -4574,6 +6734,7 @@ func (in *VrfSpec) DeepCopyInto(out *VrfSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VrfSpec. diff --git a/apis/metal/v1alpha1/zz_generated.managed.go b/apis/metal/v1alpha1/zz_generated.managed.go index 3935e70..73d3888 100644 --- a/apis/metal/v1alpha1/zz_generated.managed.go +++ b/apis/metal/v1alpha1/zz_generated.managed.go @@ -29,19 +29,16 @@ func (mg *BGPSession) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this BGPSession. +func (mg *BGPSession) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this BGPSession. func (mg *BGPSession) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this BGPSession. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *BGPSession) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this BGPSession. func (mg *BGPSession) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -62,19 +59,16 @@ func (mg *BGPSession) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this BGPSession. +func (mg *BGPSession) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this BGPSession. func (mg *BGPSession) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this BGPSession. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *BGPSession) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this BGPSession. func (mg *BGPSession) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -95,19 +89,16 @@ func (mg *Connection) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Connection. +func (mg *Connection) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Connection. func (mg *Connection) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Connection. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Connection) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Connection. func (mg *Connection) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -128,19 +119,16 @@ func (mg *Connection) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Connection. +func (mg *Connection) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Connection. func (mg *Connection) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Connection. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Connection) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Connection. func (mg *Connection) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -161,19 +149,16 @@ func (mg *Device) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Device. +func (mg *Device) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Device. func (mg *Device) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Device. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Device) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Device. func (mg *Device) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -194,19 +179,16 @@ func (mg *Device) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Device. +func (mg *Device) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Device. func (mg *Device) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Device. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Device) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Device. func (mg *Device) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -227,19 +209,16 @@ func (mg *DeviceNetworkType) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this DeviceNetworkType. +func (mg *DeviceNetworkType) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this DeviceNetworkType. func (mg *DeviceNetworkType) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this DeviceNetworkType. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *DeviceNetworkType) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this DeviceNetworkType. func (mg *DeviceNetworkType) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -260,19 +239,16 @@ func (mg *DeviceNetworkType) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this DeviceNetworkType. +func (mg *DeviceNetworkType) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this DeviceNetworkType. func (mg *DeviceNetworkType) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this DeviceNetworkType. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *DeviceNetworkType) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this DeviceNetworkType. func (mg *DeviceNetworkType) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -293,19 +269,16 @@ func (mg *Gateway) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Gateway. +func (mg *Gateway) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Gateway. func (mg *Gateway) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Gateway. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Gateway) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Gateway. func (mg *Gateway) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -326,19 +299,16 @@ func (mg *Gateway) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Gateway. +func (mg *Gateway) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Gateway. func (mg *Gateway) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Gateway. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Gateway) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Gateway. func (mg *Gateway) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -359,19 +329,16 @@ func (mg *IPAttachment) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this IPAttachment. +func (mg *IPAttachment) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this IPAttachment. func (mg *IPAttachment) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this IPAttachment. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *IPAttachment) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this IPAttachment. func (mg *IPAttachment) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -392,19 +359,16 @@ func (mg *IPAttachment) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this IPAttachment. +func (mg *IPAttachment) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this IPAttachment. func (mg *IPAttachment) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this IPAttachment. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *IPAttachment) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this IPAttachment. func (mg *IPAttachment) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -425,19 +389,16 @@ func (mg *Organization) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Organization. +func (mg *Organization) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Organization. func (mg *Organization) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Organization. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Organization) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Organization. func (mg *Organization) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -458,19 +419,16 @@ func (mg *Organization) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Organization. +func (mg *Organization) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Organization. func (mg *Organization) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Organization. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Organization) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Organization. func (mg *Organization) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -491,19 +449,16 @@ func (mg *OrganizationMember) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this OrganizationMember. +func (mg *OrganizationMember) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // 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 @@ -524,19 +479,16 @@ func (mg *OrganizationMember) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this OrganizationMember. +func (mg *OrganizationMember) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = 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 @@ -557,19 +509,16 @@ func (mg *Port) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Port. +func (mg *Port) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Port. func (mg *Port) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Port. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Port) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Port. func (mg *Port) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -590,19 +539,16 @@ func (mg *Port) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Port. +func (mg *Port) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Port. func (mg *Port) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Port. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Port) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Port. func (mg *Port) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -623,19 +569,16 @@ func (mg *PortVlanAttachment) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this PortVlanAttachment. +func (mg *PortVlanAttachment) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this PortVlanAttachment. func (mg *PortVlanAttachment) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this PortVlanAttachment. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *PortVlanAttachment) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this PortVlanAttachment. func (mg *PortVlanAttachment) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -656,19 +599,16 @@ func (mg *PortVlanAttachment) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this PortVlanAttachment. +func (mg *PortVlanAttachment) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this PortVlanAttachment. func (mg *PortVlanAttachment) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this PortVlanAttachment. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *PortVlanAttachment) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this PortVlanAttachment. func (mg *PortVlanAttachment) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -689,19 +629,16 @@ func (mg *Project) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Project. +func (mg *Project) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Project. func (mg *Project) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Project. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Project) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Project. func (mg *Project) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -722,19 +659,16 @@ func (mg *Project) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Project. +func (mg *Project) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Project. func (mg *Project) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Project. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Project) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Project. func (mg *Project) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -755,19 +689,16 @@ func (mg *ProjectAPIKey) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this ProjectAPIKey. +func (mg *ProjectAPIKey) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this ProjectAPIKey. func (mg *ProjectAPIKey) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this ProjectAPIKey. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *ProjectAPIKey) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this ProjectAPIKey. func (mg *ProjectAPIKey) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -788,19 +719,16 @@ func (mg *ProjectAPIKey) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this ProjectAPIKey. +func (mg *ProjectAPIKey) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this ProjectAPIKey. func (mg *ProjectAPIKey) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this ProjectAPIKey. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *ProjectAPIKey) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this ProjectAPIKey. func (mg *ProjectAPIKey) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -821,19 +749,16 @@ func (mg *ProjectSSHKey) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this ProjectSSHKey. +func (mg *ProjectSSHKey) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this ProjectSSHKey. func (mg *ProjectSSHKey) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this ProjectSSHKey. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *ProjectSSHKey) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this ProjectSSHKey. func (mg *ProjectSSHKey) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -854,19 +779,16 @@ func (mg *ProjectSSHKey) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this ProjectSSHKey. +func (mg *ProjectSSHKey) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this ProjectSSHKey. func (mg *ProjectSSHKey) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this ProjectSSHKey. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *ProjectSSHKey) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this ProjectSSHKey. func (mg *ProjectSSHKey) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -887,19 +809,16 @@ func (mg *ReservedIPBlock) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this ReservedIPBlock. +func (mg *ReservedIPBlock) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this ReservedIPBlock. func (mg *ReservedIPBlock) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this ReservedIPBlock. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *ReservedIPBlock) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this ReservedIPBlock. func (mg *ReservedIPBlock) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -920,19 +839,16 @@ func (mg *ReservedIPBlock) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this ReservedIPBlock. +func (mg *ReservedIPBlock) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this ReservedIPBlock. func (mg *ReservedIPBlock) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this ReservedIPBlock. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *ReservedIPBlock) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this ReservedIPBlock. func (mg *ReservedIPBlock) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -953,19 +869,16 @@ func (mg *SSHKey) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this SSHKey. +func (mg *SSHKey) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this SSHKey. func (mg *SSHKey) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this SSHKey. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *SSHKey) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this SSHKey. func (mg *SSHKey) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -986,19 +899,16 @@ func (mg *SSHKey) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this SSHKey. +func (mg *SSHKey) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this SSHKey. func (mg *SSHKey) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this SSHKey. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *SSHKey) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this SSHKey. func (mg *SSHKey) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -1019,19 +929,16 @@ func (mg *SpotMarketRequest) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this SpotMarketRequest. +func (mg *SpotMarketRequest) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this SpotMarketRequest. func (mg *SpotMarketRequest) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this SpotMarketRequest. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *SpotMarketRequest) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this SpotMarketRequest. func (mg *SpotMarketRequest) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -1052,19 +959,16 @@ func (mg *SpotMarketRequest) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this SpotMarketRequest. +func (mg *SpotMarketRequest) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this SpotMarketRequest. func (mg *SpotMarketRequest) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this SpotMarketRequest. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *SpotMarketRequest) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this SpotMarketRequest. func (mg *SpotMarketRequest) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -1085,19 +989,16 @@ func (mg *UserAPIKey) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this UserAPIKey. +func (mg *UserAPIKey) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this UserAPIKey. func (mg *UserAPIKey) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this UserAPIKey. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *UserAPIKey) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this UserAPIKey. func (mg *UserAPIKey) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -1118,19 +1019,16 @@ func (mg *UserAPIKey) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this UserAPIKey. +func (mg *UserAPIKey) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this UserAPIKey. func (mg *UserAPIKey) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this UserAPIKey. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *UserAPIKey) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this UserAPIKey. func (mg *UserAPIKey) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -1151,19 +1049,16 @@ func (mg *VirtualCircuit) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this VirtualCircuit. +func (mg *VirtualCircuit) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this VirtualCircuit. func (mg *VirtualCircuit) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this VirtualCircuit. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *VirtualCircuit) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this VirtualCircuit. func (mg *VirtualCircuit) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -1184,19 +1079,16 @@ func (mg *VirtualCircuit) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this VirtualCircuit. +func (mg *VirtualCircuit) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this VirtualCircuit. func (mg *VirtualCircuit) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this VirtualCircuit. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *VirtualCircuit) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this VirtualCircuit. func (mg *VirtualCircuit) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -1217,19 +1109,16 @@ func (mg *Vlan) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Vlan. +func (mg *Vlan) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Vlan. func (mg *Vlan) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Vlan. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Vlan) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Vlan. func (mg *Vlan) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -1250,19 +1139,16 @@ func (mg *Vlan) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Vlan. +func (mg *Vlan) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Vlan. func (mg *Vlan) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Vlan. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Vlan) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Vlan. func (mg *Vlan) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -1283,19 +1169,16 @@ func (mg *Vrf) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Vrf. +func (mg *Vrf) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Vrf. func (mg *Vrf) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Vrf. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Vrf) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Vrf. func (mg *Vrf) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -1316,19 +1199,16 @@ func (mg *Vrf) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Vrf. +func (mg *Vrf) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Vrf. func (mg *Vrf) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Vrf. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Vrf) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Vrf. func (mg *Vrf) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r diff --git a/apis/metal/v1alpha1/zz_generated.resolvers.go b/apis/metal/v1alpha1/zz_generated.resolvers.go deleted file mode 100644 index a7eb5b5..0000000 --- a/apis/metal/v1alpha1/zz_generated.resolvers.go +++ /dev/null @@ -1,579 +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. -*/ -// Code generated by angryjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "context" - reference "github.com/crossplane/crossplane-runtime/pkg/reference" - errors "github.com/pkg/errors" - client "sigs.k8s.io/controller-runtime/pkg/client" -) - -// ResolveReferences of this 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) - - 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 - - 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 Device. -func (mg *Device) 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 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) - - 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 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_generated_terraformed.go b/apis/metal/v1alpha1/zz_generated_terraformed.go deleted file mode 100755 index 7db914d..0000000 --- a/apis/metal/v1alpha1/zz_generated_terraformed.go +++ /dev/null @@ -1,1508 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "github.com/pkg/errors" - - "github.com/upbound/upjet/pkg/resource" - "github.com/upbound/upjet/pkg/resource/json" -) - -// GetTerraformResourceType returns Terraform resource type for this BGPSession -func (mg *BGPSession) GetTerraformResourceType() string { - return "equinix_metal_bgp_session" -} - -// GetConnectionDetailsMapping for this BGPSession -func (tr *BGPSession) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this BGPSession -func (tr *BGPSession) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this BGPSession -func (tr *BGPSession) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this BGPSession -func (tr *BGPSession) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this BGPSession -func (tr *BGPSession) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this BGPSession -func (tr *BGPSession) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this BGPSession using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *BGPSession) LateInitialize(attrs []byte) (bool, error) { - params := &BGPSessionParameters{} - 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 *BGPSession) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Connection -func (mg *Connection) GetTerraformResourceType() string { - return "equinix_metal_connection" -} - -// GetConnectionDetailsMapping for this Connection -func (tr *Connection) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Connection -func (tr *Connection) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Connection -func (tr *Connection) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Connection -func (tr *Connection) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Connection -func (tr *Connection) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Connection -func (tr *Connection) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Connection using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Connection) LateInitialize(attrs []byte) (bool, error) { - params := &ConnectionParameters{} - 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 *Connection) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Device -func (mg *Device) GetTerraformResourceType() string { - return "equinix_metal_device" -} - -// GetConnectionDetailsMapping for this Device -func (tr *Device) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"custom_data": "spec.forProvider.customDataSecretRef", "root_password": "status.atProvider.rootPassword", "user_data": "spec.forProvider.userDataSecretRef"} -} - -// GetObservation of this Device -func (tr *Device) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Device -func (tr *Device) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Device -func (tr *Device) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Device -func (tr *Device) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Device -func (tr *Device) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Device using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Device) LateInitialize(attrs []byte) (bool, error) { - params := &DeviceParameters{} - 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)} - opts = append(opts, resource.WithNameFilter("Facilities")) - opts = append(opts, resource.WithNameFilter("Metro")) - - li := resource.NewGenericLateInitializer(opts...) - return li.LateInitialize(&tr.Spec.ForProvider, params) -} - -// GetTerraformSchemaVersion returns the associated Terraform schema version -func (tr *Device) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this DeviceNetworkType -func (mg *DeviceNetworkType) GetTerraformResourceType() string { - return "equinix_metal_device_network_type" -} - -// GetConnectionDetailsMapping for this DeviceNetworkType -func (tr *DeviceNetworkType) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this DeviceNetworkType -func (tr *DeviceNetworkType) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this DeviceNetworkType -func (tr *DeviceNetworkType) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this DeviceNetworkType -func (tr *DeviceNetworkType) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this DeviceNetworkType -func (tr *DeviceNetworkType) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this DeviceNetworkType -func (tr *DeviceNetworkType) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this DeviceNetworkType using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *DeviceNetworkType) LateInitialize(attrs []byte) (bool, error) { - params := &DeviceNetworkTypeParameters{} - 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 *DeviceNetworkType) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Gateway -func (mg *Gateway) GetTerraformResourceType() string { - return "equinix_metal_gateway" -} - -// GetConnectionDetailsMapping for this Gateway -func (tr *Gateway) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Gateway -func (tr *Gateway) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Gateway -func (tr *Gateway) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Gateway -func (tr *Gateway) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Gateway -func (tr *Gateway) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Gateway -func (tr *Gateway) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Gateway using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Gateway) LateInitialize(attrs []byte) (bool, error) { - params := &GatewayParameters{} - 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 *Gateway) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this IPAttachment -func (mg *IPAttachment) GetTerraformResourceType() string { - return "equinix_metal_ip_attachment" -} - -// GetConnectionDetailsMapping for this IPAttachment -func (tr *IPAttachment) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this IPAttachment -func (tr *IPAttachment) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this IPAttachment -func (tr *IPAttachment) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this IPAttachment -func (tr *IPAttachment) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this IPAttachment -func (tr *IPAttachment) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this IPAttachment -func (tr *IPAttachment) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this IPAttachment using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *IPAttachment) LateInitialize(attrs []byte) (bool, error) { - params := &IPAttachmentParameters{} - 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 *IPAttachment) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Organization -func (mg *Organization) GetTerraformResourceType() string { - return "equinix_metal_organization" -} - -// GetConnectionDetailsMapping for this Organization -func (tr *Organization) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Organization -func (tr *Organization) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Organization -func (tr *Organization) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Organization -func (tr *Organization) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Organization -func (tr *Organization) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Organization -func (tr *Organization) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Organization using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Organization) LateInitialize(attrs []byte) (bool, error) { - params := &OrganizationParameters{} - 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 *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]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this OrganizationMember -func (tr *OrganizationMember) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this 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]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this OrganizationMember -func (tr *OrganizationMember) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// 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" -} - -// GetConnectionDetailsMapping for this Port -func (tr *Port) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Port -func (tr *Port) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Port -func (tr *Port) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Port -func (tr *Port) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Port -func (tr *Port) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Port -func (tr *Port) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Port using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Port) LateInitialize(attrs []byte) (bool, error) { - params := &PortParameters{} - 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 *Port) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this PortVlanAttachment -func (mg *PortVlanAttachment) GetTerraformResourceType() string { - return "equinix_metal_port_vlan_attachment" -} - -// GetConnectionDetailsMapping for this PortVlanAttachment -func (tr *PortVlanAttachment) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this PortVlanAttachment -func (tr *PortVlanAttachment) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this PortVlanAttachment -func (tr *PortVlanAttachment) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this PortVlanAttachment -func (tr *PortVlanAttachment) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this PortVlanAttachment -func (tr *PortVlanAttachment) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this PortVlanAttachment -func (tr *PortVlanAttachment) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this PortVlanAttachment using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *PortVlanAttachment) LateInitialize(attrs []byte) (bool, error) { - params := &PortVlanAttachmentParameters{} - 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 *PortVlanAttachment) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Project -func (mg *Project) GetTerraformResourceType() string { - return "equinix_metal_project" -} - -// GetConnectionDetailsMapping for this Project -func (tr *Project) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"bgp_config[*].md5": "spec.forProvider.bgpConfig[*].md5SecretRef"} -} - -// GetObservation of this Project -func (tr *Project) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Project -func (tr *Project) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Project -func (tr *Project) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Project -func (tr *Project) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Project -func (tr *Project) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Project using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Project) LateInitialize(attrs []byte) (bool, error) { - params := &ProjectParameters{} - 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 *Project) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this ProjectAPIKey -func (mg *ProjectAPIKey) GetTerraformResourceType() string { - return "equinix_metal_project_api_key" -} - -// GetConnectionDetailsMapping for this ProjectAPIKey -func (tr *ProjectAPIKey) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"token": "status.atProvider.token"} -} - -// GetObservation of this ProjectAPIKey -func (tr *ProjectAPIKey) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this ProjectAPIKey -func (tr *ProjectAPIKey) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this ProjectAPIKey -func (tr *ProjectAPIKey) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this ProjectAPIKey -func (tr *ProjectAPIKey) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this ProjectAPIKey -func (tr *ProjectAPIKey) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this ProjectAPIKey using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *ProjectAPIKey) LateInitialize(attrs []byte) (bool, error) { - params := &ProjectAPIKeyParameters{} - 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 *ProjectAPIKey) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this ProjectSSHKey -func (mg *ProjectSSHKey) GetTerraformResourceType() string { - return "equinix_metal_project_ssh_key" -} - -// GetConnectionDetailsMapping for this ProjectSSHKey -func (tr *ProjectSSHKey) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this ProjectSSHKey -func (tr *ProjectSSHKey) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this ProjectSSHKey -func (tr *ProjectSSHKey) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this ProjectSSHKey -func (tr *ProjectSSHKey) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this ProjectSSHKey -func (tr *ProjectSSHKey) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this ProjectSSHKey -func (tr *ProjectSSHKey) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this ProjectSSHKey using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *ProjectSSHKey) LateInitialize(attrs []byte) (bool, error) { - params := &ProjectSSHKeyParameters{} - 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 *ProjectSSHKey) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this ReservedIPBlock -func (mg *ReservedIPBlock) GetTerraformResourceType() string { - return "equinix_metal_reserved_ip_block" -} - -// GetConnectionDetailsMapping for this ReservedIPBlock -func (tr *ReservedIPBlock) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this ReservedIPBlock -func (tr *ReservedIPBlock) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this ReservedIPBlock -func (tr *ReservedIPBlock) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this ReservedIPBlock -func (tr *ReservedIPBlock) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this ReservedIPBlock -func (tr *ReservedIPBlock) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this ReservedIPBlock -func (tr *ReservedIPBlock) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this ReservedIPBlock using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *ReservedIPBlock) LateInitialize(attrs []byte) (bool, error) { - params := &ReservedIPBlockParameters{} - 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 *ReservedIPBlock) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this SpotMarketRequest -func (mg *SpotMarketRequest) GetTerraformResourceType() string { - return "equinix_metal_spot_market_request" -} - -// GetConnectionDetailsMapping for this SpotMarketRequest -func (tr *SpotMarketRequest) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this SpotMarketRequest -func (tr *SpotMarketRequest) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this SpotMarketRequest -func (tr *SpotMarketRequest) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this SpotMarketRequest -func (tr *SpotMarketRequest) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this SpotMarketRequest -func (tr *SpotMarketRequest) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this SpotMarketRequest -func (tr *SpotMarketRequest) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this SpotMarketRequest using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *SpotMarketRequest) LateInitialize(attrs []byte) (bool, error) { - params := &SpotMarketRequestParameters{} - 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 *SpotMarketRequest) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this SSHKey -func (mg *SSHKey) GetTerraformResourceType() string { - return "equinix_metal_ssh_key" -} - -// GetConnectionDetailsMapping for this SSHKey -func (tr *SSHKey) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this SSHKey -func (tr *SSHKey) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this SSHKey -func (tr *SSHKey) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this SSHKey -func (tr *SSHKey) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this SSHKey -func (tr *SSHKey) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this SSHKey -func (tr *SSHKey) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this SSHKey using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *SSHKey) LateInitialize(attrs []byte) (bool, error) { - params := &SSHKeyParameters{} - 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 *SSHKey) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this UserAPIKey -func (mg *UserAPIKey) GetTerraformResourceType() string { - return "equinix_metal_user_api_key" -} - -// GetConnectionDetailsMapping for this UserAPIKey -func (tr *UserAPIKey) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"token": "status.atProvider.token"} -} - -// GetObservation of this UserAPIKey -func (tr *UserAPIKey) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this UserAPIKey -func (tr *UserAPIKey) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this UserAPIKey -func (tr *UserAPIKey) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this UserAPIKey -func (tr *UserAPIKey) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this UserAPIKey -func (tr *UserAPIKey) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this UserAPIKey using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *UserAPIKey) LateInitialize(attrs []byte) (bool, error) { - params := &UserAPIKeyParameters{} - 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 *UserAPIKey) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this VirtualCircuit -func (mg *VirtualCircuit) GetTerraformResourceType() string { - return "equinix_metal_virtual_circuit" -} - -// GetConnectionDetailsMapping for this VirtualCircuit -func (tr *VirtualCircuit) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"md5": "spec.forProvider.md5SecretRef"} -} - -// GetObservation of this VirtualCircuit -func (tr *VirtualCircuit) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this VirtualCircuit -func (tr *VirtualCircuit) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this VirtualCircuit -func (tr *VirtualCircuit) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this VirtualCircuit -func (tr *VirtualCircuit) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this VirtualCircuit -func (tr *VirtualCircuit) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this VirtualCircuit using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *VirtualCircuit) LateInitialize(attrs []byte) (bool, error) { - params := &VirtualCircuitParameters{} - 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 *VirtualCircuit) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Vlan -func (mg *Vlan) GetTerraformResourceType() string { - return "equinix_metal_vlan" -} - -// GetConnectionDetailsMapping for this Vlan -func (tr *Vlan) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Vlan -func (tr *Vlan) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Vlan -func (tr *Vlan) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Vlan -func (tr *Vlan) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Vlan -func (tr *Vlan) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Vlan -func (tr *Vlan) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Vlan using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Vlan) LateInitialize(attrs []byte) (bool, error) { - params := &VlanParameters{} - 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 *Vlan) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Vrf -func (mg *Vrf) GetTerraformResourceType() string { - return "equinix_metal_vrf" -} - -// GetConnectionDetailsMapping for this Vrf -func (tr *Vrf) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this Vrf -func (tr *Vrf) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Vrf -func (tr *Vrf) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Vrf -func (tr *Vrf) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Vrf -func (tr *Vrf) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Vrf -func (tr *Vrf) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Vrf using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Vrf) LateInitialize(attrs []byte) (bool, error) { - params := &VrfParameters{} - 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 *Vrf) GetTerraformSchemaVersion() int { - return 0 -} diff --git a/apis/metal/v1alpha1/zz_ipattachment_terraformed.go b/apis/metal/v1alpha1/zz_ipattachment_terraformed.go new file mode 100755 index 0000000..70b6368 --- /dev/null +++ b/apis/metal/v1alpha1/zz_ipattachment_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this IPAttachment +func (mg *IPAttachment) GetTerraformResourceType() string { + return "equinix_metal_ip_attachment" +} + +// GetConnectionDetailsMapping for this IPAttachment +func (tr *IPAttachment) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this IPAttachment +func (tr *IPAttachment) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this IPAttachment +func (tr *IPAttachment) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this IPAttachment +func (tr *IPAttachment) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this IPAttachment +func (tr *IPAttachment) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this IPAttachment +func (tr *IPAttachment) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this IPAttachment +func (tr *IPAttachment) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this IPAttachment +func (tr *IPAttachment) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this IPAttachment using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *IPAttachment) LateInitialize(attrs []byte) (bool, error) { + params := &IPAttachmentParameters{} + 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 *IPAttachment) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_ipattachment_types.go b/apis/metal/v1alpha1/zz_ipattachment_types.go index 83b6c8d..2897be1 100755 --- a/apis/metal/v1alpha1/zz_ipattachment_types.go +++ b/apis/metal/v1alpha1/zz_ipattachment_types.go @@ -25,6 +25,15 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type IPAttachmentInitParameters struct { + + // CIDR notation of subnet from block reserved in the same project and metro as the device. + CidrNotation *string `json:"cidrNotation,omitempty" tf:"cidr_notation,omitempty"` + + // ID of device to which to assign the subnet. + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` +} + type IPAttachmentObservation struct { Address *string `json:"address,omitempty" tf:"address,omitempty"` @@ -36,6 +45,12 @@ type IPAttachmentObservation struct { // Length of CIDR prefix of the block as integer Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` + // CIDR notation of subnet from block reserved in the same project and metro as the device. + CidrNotation *string `json:"cidrNotation,omitempty" tf:"cidr_notation,omitempty"` + + // ID of device to which to assign the subnet. + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + // IP address of gateway for the subnet. Gateway *string `json:"gateway,omitempty" tf:"gateway,omitempty"` @@ -67,29 +82,30 @@ type IPAttachmentObservation struct { type IPAttachmentParameters struct { - // CIDR notation of subnet from block reserved in the same project - // and metro as the device. - // +kubebuilder:validation:Required - CidrNotation *string `json:"cidrNotation" tf:"cidr_notation,omitempty"` + // CIDR notation of subnet from block reserved in the same project and metro as the device. + // +kubebuilder:validation:Optional + CidrNotation *string `json:"cidrNotation,omitempty" tf:"cidr_notation,omitempty"` // ID of device to which to assign the subnet. - // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` - - // Reference to a Device to populate deviceId. - // +kubebuilder:validation:Optional - DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` - - // Selector for a Device to populate deviceId. - // +kubebuilder:validation:Optional - DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } // IPAttachmentSpec defines the desired state of IPAttachment type IPAttachmentSpec struct { v1.ResourceSpec `json:",inline"` ForProvider IPAttachmentParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider IPAttachmentInitParameters `json:"initProvider,omitempty"` } // IPAttachmentStatus defines the observed state of IPAttachment. @@ -99,19 +115,22 @@ type IPAttachmentStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // IPAttachment is the Schema for the IPAttachments 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type IPAttachment struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec IPAttachmentSpec `json:"spec"` - Status IPAttachmentStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.cidrNotation) || (has(self.initProvider) && has(self.initProvider.cidrNotation))",message="spec.forProvider.cidrNotation is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" + Spec IPAttachmentSpec `json:"spec"` + Status IPAttachmentStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_organization_terraformed.go b/apis/metal/v1alpha1/zz_organization_terraformed.go new file mode 100755 index 0000000..dad038f --- /dev/null +++ b/apis/metal/v1alpha1/zz_organization_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Organization +func (mg *Organization) GetTerraformResourceType() string { + return "equinix_metal_organization" +} + +// GetConnectionDetailsMapping for this Organization +func (tr *Organization) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Organization +func (tr *Organization) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Organization +func (tr *Organization) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Organization +func (tr *Organization) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Organization +func (tr *Organization) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Organization +func (tr *Organization) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Organization +func (tr *Organization) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Organization +func (tr *Organization) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Organization using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Organization) LateInitialize(attrs []byte) (bool, error) { + params := &OrganizationParameters{} + 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 *Organization) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_organization_types.go b/apis/metal/v1alpha1/zz_organization_types.go index 9ccf66a..3f0602c 100755 --- a/apis/metal/v1alpha1/zz_organization_types.go +++ b/apis/metal/v1alpha1/zz_organization_types.go @@ -25,24 +25,67 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type AddressInitParameters struct { + + // Postal address. + // Postal address + Address *string `json:"address,omitempty" tf:"address,omitempty"` + + // City name. + // City name + City *string `json:"city,omitempty" tf:"city,omitempty"` + + // Two letter country code (ISO 3166-1 alpha-2), e.g. US. + // Two letter country code (ISO 3166-1 alpha-2), e.g. US + Country *string `json:"country,omitempty" tf:"country,omitempty"` + + // State name. + // State name + State *string `json:"state,omitempty" tf:"state,omitempty"` + + // Zip Code. + // Zip Code + ZipCode *string `json:"zipCode,omitempty" tf:"zip_code,omitempty"` +} + type AddressObservation struct { + + // Postal address. + // Postal address + Address *string `json:"address,omitempty" tf:"address,omitempty"` + + // City name. + // City name + City *string `json:"city,omitempty" tf:"city,omitempty"` + + // Two letter country code (ISO 3166-1 alpha-2), e.g. US. + // Two letter country code (ISO 3166-1 alpha-2), e.g. US + Country *string `json:"country,omitempty" tf:"country,omitempty"` + + // State name. + // State name + State *string `json:"state,omitempty" tf:"state,omitempty"` + + // Zip Code. + // Zip Code + ZipCode *string `json:"zipCode,omitempty" tf:"zip_code,omitempty"` } type AddressParameters struct { // Postal address. // Postal address - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Address *string `json:"address" tf:"address,omitempty"` // City name. // City name - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional City *string `json:"city" tf:"city,omitempty"` // Two letter country code (ISO 3166-1 alpha-2), e.g. US. // Two letter country code (ISO 3166-1 alpha-2), e.g. US - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Country *string `json:"country" tf:"country,omitempty"` // State name. @@ -52,26 +95,76 @@ type AddressParameters struct { // Zip Code. // Zip Code - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ZipCode *string `json:"zipCode" tf:"zip_code,omitempty"` } +type OrganizationInitParameters struct { + + // An object that has the address information. See Address below for more details. + // Address information block + Address []AddressInitParameters `json:"address,omitempty" tf:"address,omitempty"` + + // Description string. + // Description string + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Logo URL. + // Logo URL + Logo *string `json:"logo,omitempty" tf:"logo,omitempty"` + + // The name of the Organization. + // The name of the Organization + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Twitter handle. + // Twitter handle + Twitter *string `json:"twitter,omitempty" tf:"twitter,omitempty"` + + // Website link. + // Website link + Website *string `json:"website,omitempty" tf:"website,omitempty"` +} + type OrganizationObservation struct { + // An object that has the address information. See Address below for more details. + // Address information block + Address []AddressObservation `json:"address,omitempty" tf:"address,omitempty"` + // The timestamp for when the organization was created. Created *string `json:"created,omitempty" tf:"created,omitempty"` + // Description string. + // Description string + Description *string `json:"description,omitempty" tf:"description,omitempty"` + // The unique ID of the organization. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // Logo URL. + // Logo URL + Logo *string `json:"logo,omitempty" tf:"logo,omitempty"` + + // The name of the Organization. + // The name of the Organization + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Twitter handle. + // Twitter handle + Twitter *string `json:"twitter,omitempty" tf:"twitter,omitempty"` + // The timestamp for the last time the organization was updated. Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` + + // Website link. + // Website link + Website *string `json:"website,omitempty" tf:"website,omitempty"` } type OrganizationParameters struct { - // An object that has the address information. See Address - // below for more details. + // An object that has the address information. See Address below for more details. // Address information block // +kubebuilder:validation:Optional Address []AddressParameters `json:"address,omitempty" tf:"address,omitempty"` @@ -88,8 +181,8 @@ type OrganizationParameters struct { // The name of the Organization. // The name of the Organization - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` // Twitter handle. // Twitter handle @@ -106,6 +199,17 @@ type OrganizationParameters struct { type OrganizationSpec struct { v1.ResourceSpec `json:",inline"` ForProvider OrganizationParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider OrganizationInitParameters `json:"initProvider,omitempty"` } // OrganizationStatus defines the observed state of Organization. @@ -115,19 +219,21 @@ type OrganizationStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Organization is the Schema for the Organizations 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Organization struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec OrganizationSpec `json:"spec"` - Status OrganizationStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + Spec OrganizationSpec `json:"spec"` + Status OrganizationStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_organizationmember_terraformed.go b/apis/metal/v1alpha1/zz_organizationmember_terraformed.go new file mode 100755 index 0000000..685885f --- /dev/null +++ b/apis/metal/v1alpha1/zz_organizationmember_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this 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]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this OrganizationMember +func (tr *OrganizationMember) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this 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]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this OrganizationMember +func (tr *OrganizationMember) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this OrganizationMember +func (tr *OrganizationMember) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this OrganizationMember +func (tr *OrganizationMember) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this 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 +} diff --git a/apis/metal/v1alpha1/zz_organizationmember_types.go b/apis/metal/v1alpha1/zz_organizationmember_types.go index e7d60f3..1e173ac 100755 --- a/apis/metal/v1alpha1/zz_organizationmember_types.go +++ b/apis/metal/v1alpha1/zz_organizationmember_types.go @@ -25,6 +25,31 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type OrganizationMemberInitParameters struct { + + // The email address of the user to invite + // The email address of the user to invite + Invitee *string `json:"invitee,omitempty" tf:"invitee,omitempty"` + + // A message to include in the emailed invitation. + // A message to the invitee (only used during the invitation stage) + Message *string `json:"message,omitempty" tf:"message,omitempty"` + + // The organization to invite the user to + // The organization to invite the user to + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // Project IDs the member has access to within the organization. If the member is an 'admin', the projects list should be empty. + // Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. + // +listType=set + ProjectsIds []*string `json:"projectsIds,omitempty" tf:"projects_ids,omitempty"` + + // Organization roles (admin, collaborator, limited_collaborator, billing) + // Organization roles (owner, collaborator, limited_collaborator, billing) + // +listType=set + Roles []*string `json:"roles,omitempty" tf:"roles,omitempty"` +} + type OrganizationMemberObservation struct { // When the invitation was created (only known in the invitation stage) @@ -38,10 +63,32 @@ type OrganizationMemberObservation struct { // The user id of the user that sent the invitation (only known in the invitation stage) InvitedBy *string `json:"invitedBy,omitempty" tf:"invited_by,omitempty"` + // The email address of the user to invite + // The email address of the user to invite + Invitee *string `json:"invitee,omitempty" tf:"invitee,omitempty"` + + // A message to include in the emailed invitation. + // A message to the invitee (only used during the invitation stage) + Message *string `json:"message,omitempty" tf:"message,omitempty"` + // The nonce for the invitation (only known in the invitation stage) // The nonce for the invitation (only known in the invitation stage) Nonce *string `json:"nonce,omitempty" tf:"nonce,omitempty"` + // The organization to invite the user to + // The organization to invite the user to + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // Project IDs the member has access to within the organization. If the member is an 'admin', the projects list should be empty. + // Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. + // +listType=set + ProjectsIds []*string `json:"projectsIds,omitempty" tf:"projects_ids,omitempty"` + + // Organization roles (admin, collaborator, limited_collaborator, billing) + // Organization roles (owner, collaborator, limited_collaborator, billing) + // +listType=set + Roles []*string `json:"roles,omitempty" tf:"roles,omitempty"` + // The state of the membership ('invited' when an invitation is open, 'active' when the user is an organization member) // The state of the membership ('invited' when an invitation is open, 'active' when the user is an organization member) State *string `json:"state,omitempty" tf:"state,omitempty"` @@ -55,8 +102,8 @@ type OrganizationMemberParameters struct { // The email address of the user to invite // The email address of the user to invite - // +kubebuilder:validation:Required - Invitee *string `json:"invitee" tf:"invitee,omitempty"` + // +kubebuilder:validation:Optional + Invitee *string `json:"invitee,omitempty" tf:"invitee,omitempty"` // A message to include in the emailed invitation. // A message to the invitee (only used during the invitation stage) @@ -65,33 +112,37 @@ type OrganizationMemberParameters struct { // The organization to invite the user to // The organization to invite the user to - // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` - // Reference to a Organization to populate organizationId. - // +kubebuilder:validation:Optional - OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` - - // Selector for a Organization to populate organizationId. - // +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 'admin', the projects list should be empty. // 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"` + // +kubebuilder:validation:Optional + // +listType=set + ProjectsIds []*string `json:"projectsIds,omitempty" tf:"projects_ids,omitempty"` // Organization roles (admin, collaborator, limited_collaborator, billing) // Organization roles (owner, collaborator, limited_collaborator, billing) - // +kubebuilder:validation:Required - Roles []*string `json:"roles" tf:"roles,omitempty"` + // +kubebuilder:validation:Optional + // +listType=set + Roles []*string `json:"roles,omitempty" tf:"roles,omitempty"` } // OrganizationMemberSpec defines the desired state of OrganizationMember type OrganizationMemberSpec struct { v1.ResourceSpec `json:",inline"` ForProvider OrganizationMemberParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider OrganizationMemberInitParameters `json:"initProvider,omitempty"` } // OrganizationMemberStatus defines the observed state of OrganizationMember. @@ -101,19 +152,24 @@ type OrganizationMemberStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type OrganizationMember struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec OrganizationMemberSpec `json:"spec"` - Status OrganizationMemberStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.invitee) || (has(self.initProvider) && has(self.initProvider.invitee))",message="spec.forProvider.invitee is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.organizationId) || (has(self.initProvider) && has(self.initProvider.organizationId))",message="spec.forProvider.organizationId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectsIds) || (has(self.initProvider) && has(self.initProvider.projectsIds))",message="spec.forProvider.projectsIds is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.roles) || (has(self.initProvider) && has(self.initProvider.roles))",message="spec.forProvider.roles is a required parameter" + Spec OrganizationMemberSpec `json:"spec"` + Status OrganizationMemberStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_port_terraformed.go b/apis/metal/v1alpha1/zz_port_terraformed.go new file mode 100755 index 0000000..ffc4a54 --- /dev/null +++ b/apis/metal/v1alpha1/zz_port_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Port +func (mg *Port) GetTerraformResourceType() string { + return "equinix_metal_port" +} + +// GetConnectionDetailsMapping for this Port +func (tr *Port) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Port +func (tr *Port) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Port +func (tr *Port) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Port +func (tr *Port) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Port +func (tr *Port) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Port +func (tr *Port) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Port +func (tr *Port) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Port +func (tr *Port) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Port using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Port) LateInitialize(attrs []byte) (bool, error) { + params := &PortParameters{} + 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 *Port) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_port_types.go b/apis/metal/v1alpha1/zz_port_types.go index 93d73ac..5d3e9e1 100755 --- a/apis/metal/v1alpha1/zz_port_types.go +++ b/apis/metal/v1alpha1/zz_port_types.go @@ -25,6 +25,32 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type PortInitParameters struct { + + // Flag indicating whether the port should be bonded + Bonded *bool `json:"bonded,omitempty" tf:"bonded,omitempty"` + + // Flag indicating whether the port is in layer2 (or layer3) mode. The `layer2` flag can be set only for bond ports. + Layer2 *bool `json:"layer2,omitempty" tf:"layer2,omitempty"` + + // UUID of native VLAN of the port + NativeVlanID *string `json:"nativeVlanId,omitempty" tf:"native_vlan_id,omitempty"` + + // UUID of the port to lookup + PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` + + // Behavioral setting to reset the port to default settings (layer3 bonded mode without any vlan attached) before delete/destroy + ResetOnDelete *bool `json:"resetOnDelete,omitempty" tf:"reset_on_delete,omitempty"` + + // UUIDs VLANs to attach. To avoid jitter, use the UUID and not the VXLAN + // +listType=set + VlanIds []*string `json:"vlanIds,omitempty" tf:"vlan_ids,omitempty"` + + // VLAN VXLAN ids to attach (example: [1000]) + // +listType=set + VxlanIds []*float64 `json:"vxlanIds,omitempty" tf:"vxlan_ids,omitempty"` +} + type PortObservation struct { // UUID of the bond port @@ -33,50 +59,64 @@ type PortObservation struct { // Name of the bond port BondName *string `json:"bondName,omitempty" tf:"bond_name,omitempty"` + // Flag indicating whether the port should be bonded + Bonded *bool `json:"bonded,omitempty" tf:"bonded,omitempty"` + // Flag indicating whether the port can be removed from a bond DisbondSupported *bool `json:"disbondSupported,omitempty" tf:"disbond_supported,omitempty"` ID *string `json:"id,omitempty" tf:"id,omitempty"` + // Flag indicating whether the port is in layer2 (or layer3) mode. The `layer2` flag can be set only for bond ports. + Layer2 *bool `json:"layer2,omitempty" tf:"layer2,omitempty"` + // MAC address of the port Mac *string `json:"mac,omitempty" tf:"mac,omitempty"` // Name of the port to look up, e.g. bond0, eth1 Name *string `json:"name,omitempty" tf:"name,omitempty"` + // UUID of native VLAN of the port + NativeVlanID *string `json:"nativeVlanId,omitempty" tf:"native_vlan_id,omitempty"` + // One of layer2-bonded, layer2-individual, layer3, hybrid and hybrid-bonded. This attribute is only set on bond ports. NetworkType *string `json:"networkType,omitempty" tf:"network_type,omitempty"` + // UUID of the port to lookup + PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` + + // Behavioral setting to reset the port to default settings (layer3 bonded mode without any vlan attached) before delete/destroy + ResetOnDelete *bool `json:"resetOnDelete,omitempty" tf:"reset_on_delete,omitempty"` + // Port type Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // UUIDs VLANs to attach. To avoid jitter, use the UUID and not the VXLAN + // +listType=set + VlanIds []*string `json:"vlanIds,omitempty" tf:"vlan_ids,omitempty"` + + // VLAN VXLAN ids to attach (example: [1000]) + // +listType=set + VxlanIds []*float64 `json:"vxlanIds,omitempty" tf:"vxlan_ids,omitempty"` } type PortParameters struct { // Flag indicating whether the port should be bonded - // +kubebuilder:validation:Required - Bonded *bool `json:"bonded" tf:"bonded,omitempty"` + // +kubebuilder:validation:Optional + Bonded *bool `json:"bonded,omitempty" tf:"bonded,omitempty"` // Flag indicating whether the port is in layer2 (or layer3) mode. The `layer2` flag can be set only for bond ports. // +kubebuilder:validation:Optional 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"` - // Reference to a Vlan to populate nativeVlanId. - // +kubebuilder:validation:Optional - NativeVlanIDRef *v1.Reference `json:"nativeVlanIdRef,omitempty" tf:"-"` - - // Selector for a Vlan to populate nativeVlanId. - // +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"` + // +kubebuilder:validation:Optional + PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` // Behavioral setting to reset the port to default settings (layer3 bonded mode without any vlan attached) before delete/destroy // +kubebuilder:validation:Optional @@ -84,10 +124,12 @@ type PortParameters struct { // UUIDs VLANs to attach. To avoid jitter, use the UUID and not the VXLAN // +kubebuilder:validation:Optional + // +listType=set VlanIds []*string `json:"vlanIds,omitempty" tf:"vlan_ids,omitempty"` // VLAN VXLAN ids to attach (example: [1000]) // +kubebuilder:validation:Optional + // +listType=set VxlanIds []*float64 `json:"vxlanIds,omitempty" tf:"vxlan_ids,omitempty"` } @@ -95,6 +137,17 @@ type PortParameters struct { type PortSpec struct { v1.ResourceSpec `json:",inline"` ForProvider PortParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider PortInitParameters `json:"initProvider,omitempty"` } // PortStatus defines the observed state of Port. @@ -104,19 +157,22 @@ type PortStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Port is the Schema for the Ports 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Port struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec PortSpec `json:"spec"` - Status PortStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.bonded) || (has(self.initProvider) && has(self.initProvider.bonded))",message="spec.forProvider.bonded is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.portId) || (has(self.initProvider) && has(self.initProvider.portId))",message="spec.forProvider.portId is a required parameter" + Spec PortSpec `json:"spec"` + Status PortStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_portvlanattachment_terraformed.go b/apis/metal/v1alpha1/zz_portvlanattachment_terraformed.go new file mode 100755 index 0000000..20d1e21 --- /dev/null +++ b/apis/metal/v1alpha1/zz_portvlanattachment_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this PortVlanAttachment +func (mg *PortVlanAttachment) GetTerraformResourceType() string { + return "equinix_metal_port_vlan_attachment" +} + +// GetConnectionDetailsMapping for this PortVlanAttachment +func (tr *PortVlanAttachment) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this PortVlanAttachment +func (tr *PortVlanAttachment) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this PortVlanAttachment +func (tr *PortVlanAttachment) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this PortVlanAttachment +func (tr *PortVlanAttachment) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this PortVlanAttachment +func (tr *PortVlanAttachment) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this PortVlanAttachment +func (tr *PortVlanAttachment) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this PortVlanAttachment +func (tr *PortVlanAttachment) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this PortVlanAttachment +func (tr *PortVlanAttachment) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this PortVlanAttachment using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *PortVlanAttachment) LateInitialize(attrs []byte) (bool, error) { + params := &PortVlanAttachmentParameters{} + 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 *PortVlanAttachment) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_portvlanattachment_types.go b/apis/metal/v1alpha1/zz_portvlanattachment_types.go index b3f633d..47bf642 100755 --- a/apis/metal/v1alpha1/zz_portvlanattachment_types.go +++ b/apis/metal/v1alpha1/zz_portvlanattachment_types.go @@ -25,31 +25,56 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type PortVlanAttachmentInitParameters struct { + + // ID of device to be assigned to the VLAN + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Add port back to the bond when this resource is removed. Default is false + ForceBond *bool `json:"forceBond,omitempty" tf:"force_bond,omitempty"` + + // 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 + Native *bool `json:"native,omitempty" tf:"native,omitempty"` + + // Name of network port to be assigned to the VLAN + PortName *string `json:"portName,omitempty" tf:"port_name,omitempty"` + + // VXLAN Network Identifier, integer + VlanVnid *float64 `json:"vlanVnid,omitempty" tf:"vlan_vnid,omitempty"` +} + type PortVlanAttachmentObservation struct { + + // ID of device to be assigned to the VLAN + DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Add port back to the bond when this resource is removed. Default is false + ForceBond *bool `json:"forceBond,omitempty" tf:"force_bond,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // 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 + Native *bool `json:"native,omitempty" tf:"native,omitempty"` + // UUID of device port PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` + // Name of network port to be assigned to the VLAN + PortName *string `json:"portName,omitempty" tf:"port_name,omitempty"` + // UUID of VLAN API resource VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + + // VXLAN Network Identifier, integer + VlanVnid *float64 `json:"vlanVnid,omitempty" tf:"vlan_vnid,omitempty"` } type PortVlanAttachmentParameters struct { // ID of device to be assigned to the VLAN - // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` - // Reference to a Device to populate deviceId. - // +kubebuilder:validation:Optional - DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` - - // Selector for a Device to populate deviceId. - // +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 ForceBond *bool `json:"forceBond,omitempty" tf:"force_bond,omitempty"` @@ -59,18 +84,29 @@ type PortVlanAttachmentParameters struct { Native *bool `json:"native,omitempty" tf:"native,omitempty"` // Name of network port to be assigned to the VLAN - // +kubebuilder:validation:Required - PortName *string `json:"portName" tf:"port_name,omitempty"` + // +kubebuilder:validation:Optional + PortName *string `json:"portName,omitempty" tf:"port_name,omitempty"` // VXLAN Network Identifier, integer - // +kubebuilder:validation:Required - VlanVnid *float64 `json:"vlanVnid" tf:"vlan_vnid,omitempty"` + // +kubebuilder:validation:Optional + VlanVnid *float64 `json:"vlanVnid,omitempty" tf:"vlan_vnid,omitempty"` } // PortVlanAttachmentSpec defines the desired state of PortVlanAttachment type PortVlanAttachmentSpec struct { v1.ResourceSpec `json:",inline"` ForProvider PortVlanAttachmentParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider PortVlanAttachmentInitParameters `json:"initProvider,omitempty"` } // PortVlanAttachmentStatus defines the observed state of PortVlanAttachment. @@ -80,19 +116,23 @@ type PortVlanAttachmentStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // PortVlanAttachment is the Schema for the PortVlanAttachments 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type PortVlanAttachment struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec PortVlanAttachmentSpec `json:"spec"` - Status PortVlanAttachmentStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.portName) || (has(self.initProvider) && has(self.initProvider.portName))",message="spec.forProvider.portName is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.vlanVnid) || (has(self.initProvider) && has(self.initProvider.vlanVnid))",message="spec.forProvider.vlanVnid is a required parameter" + Spec PortVlanAttachmentSpec `json:"spec"` + Status PortVlanAttachmentStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_project_terraformed.go b/apis/metal/v1alpha1/zz_project_terraformed.go new file mode 100755 index 0000000..0cf63c9 --- /dev/null +++ b/apis/metal/v1alpha1/zz_project_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Project +func (mg *Project) GetTerraformResourceType() string { + return "equinix_metal_project" +} + +// GetConnectionDetailsMapping for this Project +func (tr *Project) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"bgp_config[*].md5": "bgpConfig[*].md5SecretRef"} +} + +// GetObservation of this Project +func (tr *Project) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Project +func (tr *Project) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Project +func (tr *Project) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Project +func (tr *Project) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Project +func (tr *Project) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Project +func (tr *Project) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Project +func (tr *Project) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Project using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Project) LateInitialize(attrs []byte) (bool, error) { + params := &ProjectParameters{} + 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 *Project) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_project_types.go b/apis/metal/v1alpha1/zz_project_types.go index e60f483..a0e88cb 100755 --- a/apis/metal/v1alpha1/zz_project_types.go +++ b/apis/metal/v1alpha1/zz_project_types.go @@ -25,8 +25,31 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type BGPConfigInitParameters struct { + + // Autonomous System Number for local BGP deployment. + // Autonomous System Number for local BGP deployment + Asn *float64 `json:"asn,omitempty" tf:"asn,omitempty"` + + // local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers. + // The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers + DeploymentType *string `json:"deploymentType,omitempty" tf:"deployment_type,omitempty"` + + // Password for BGP session in plaintext (not a checksum). + // Password for BGP session in plaintext (not a checksum) + Md5SecretRef *v1.SecretKeySelector `json:"md5SecretRef,omitempty" tf:"-"` +} + type BGPConfigObservation struct { + // Autonomous System Number for local BGP deployment. + // Autonomous System Number for local BGP deployment + Asn *float64 `json:"asn,omitempty" tf:"asn,omitempty"` + + // local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers. + // The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers + DeploymentType *string `json:"deploymentType,omitempty" tf:"deployment_type,omitempty"` + // The maximum number of route filters allowed per server. // The maximum number of route filters allowed per server MaxPrefix *float64 `json:"maxPrefix,omitempty" tf:"max_prefix,omitempty"` @@ -40,13 +63,12 @@ type BGPConfigParameters struct { // Autonomous System Number for local BGP deployment. // Autonomous System Number for local BGP deployment - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Asn *float64 `json:"asn" tf:"asn,omitempty"` - // local or global, the local is likely to be usable immediately, the - // global will need to be reviewed by Equinix Metal engineers. + // local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers. // The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional DeploymentType *string `json:"deploymentType" tf:"deployment_type,omitempty"` // Password for BGP session in plaintext (not a checksum). @@ -55,13 +77,39 @@ type BGPConfigParameters struct { Md5SecretRef *v1.SecretKeySelector `json:"md5SecretRef,omitempty" tf:"-"` } +type ProjectInitParameters struct { + + // Optional BGP settings. Refer to Equinix Metal guide for BGP. + // Address information block + BGPConfig []BGPConfigInitParameters `json:"bgpConfig,omitempty" tf:"bgp_config,omitempty"` + + // Enable or disable Backend Transfer, default is false. + // Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false + BackendTransfer *bool `json:"backendTransfer,omitempty" tf:"backend_transfer,omitempty"` + + // The name of the project. The maximum length is 80 characters + // The name of the project. The maximum length is 80 characters + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. + // The UUID of organization under which the project is created + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // 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). + // 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) + PaymentMethodID *string `json:"paymentMethodId,omitempty" tf:"payment_method_id,omitempty"` +} + type ProjectObservation struct { // Optional BGP settings. Refer to Equinix Metal guide for BGP. // Address information block - // +kubebuilder:validation:Optional BGPConfig []BGPConfigObservation `json:"bgpConfig,omitempty" tf:"bgp_config,omitempty"` + // Enable or disable Backend Transfer, default is false. + // Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false + BackendTransfer *bool `json:"backendTransfer,omitempty" tf:"backend_transfer,omitempty"` + // The timestamp for when the project was created. // The timestamp for when the project was created Created *string `json:"created,omitempty" tf:"created,omitempty"` @@ -69,6 +117,18 @@ type ProjectObservation struct { // The unique ID of the project. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The name of the project. The maximum length is 80 characters + // The name of the project. The maximum length is 80 characters + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. + // The UUID of organization under which the project is created + OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + + // 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). + // 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) + PaymentMethodID *string `json:"paymentMethodId,omitempty" tf:"payment_method_id,omitempty"` + // The timestamp for the last time the project was updated. // The timestamp for the last time the project was updated Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` @@ -86,28 +146,17 @@ type ProjectParameters struct { // +kubebuilder:validation:Optional BackendTransfer *bool `json:"backendTransfer,omitempty" tf:"backend_transfer,omitempty"` - // The name of the project. The maximum length is 80 characters // The name of the project. The maximum length is 80 characters - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // The name of the project. The maximum length is 80 characters + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` - // The UUID of organization under which you want to create the project. If you - // leave it out, the project will be created under your the default organization of your account. + // The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. // The UUID of organization under which the project is created - // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` - // Reference to a Organization to populate organizationId. - // +kubebuilder:validation:Optional - OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` - - // Selector for a Organization to populate organizationId. - // +kubebuilder:validation:Optional - OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` - - // 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). + // 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). // 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) // +kubebuilder:validation:Optional PaymentMethodID *string `json:"paymentMethodId,omitempty" tf:"payment_method_id,omitempty"` @@ -117,6 +166,17 @@ type ProjectParameters struct { type ProjectSpec struct { v1.ResourceSpec `json:",inline"` ForProvider ProjectParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ProjectInitParameters `json:"initProvider,omitempty"` } // ProjectStatus defines the observed state of Project. @@ -126,19 +186,21 @@ type ProjectStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Project is the Schema for the Projects 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Project struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ProjectSpec `json:"spec"` - Status ProjectStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + Spec ProjectSpec `json:"spec"` + Status ProjectStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_projectapikey_terraformed.go b/apis/metal/v1alpha1/zz_projectapikey_terraformed.go new file mode 100755 index 0000000..d11c508 --- /dev/null +++ b/apis/metal/v1alpha1/zz_projectapikey_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this ProjectAPIKey +func (mg *ProjectAPIKey) GetTerraformResourceType() string { + return "equinix_metal_project_api_key" +} + +// GetConnectionDetailsMapping for this ProjectAPIKey +func (tr *ProjectAPIKey) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"token": "status.atProvider.token"} +} + +// GetObservation of this ProjectAPIKey +func (tr *ProjectAPIKey) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this ProjectAPIKey +func (tr *ProjectAPIKey) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this ProjectAPIKey +func (tr *ProjectAPIKey) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this ProjectAPIKey +func (tr *ProjectAPIKey) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this ProjectAPIKey +func (tr *ProjectAPIKey) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this ProjectAPIKey +func (tr *ProjectAPIKey) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this ProjectAPIKey +func (tr *ProjectAPIKey) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this ProjectAPIKey using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *ProjectAPIKey) LateInitialize(attrs []byte) (bool, error) { + params := &ProjectAPIKeyParameters{} + 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 *ProjectAPIKey) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_projectapikey_types.go b/apis/metal/v1alpha1/zz_projectapikey_types.go index 7e47d98..e30c0db 100755 --- a/apis/metal/v1alpha1/zz_projectapikey_types.go +++ b/apis/metal/v1alpha1/zz_projectapikey_types.go @@ -25,40 +25,68 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) -type ProjectAPIKeyObservation struct { - ID *string `json:"id,omitempty" tf:"id,omitempty"` +type ProjectAPIKeyInitParameters struct { + + // Description string for the Project API Key resource. + // Description string for the API key + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // UUID of the project where the API key is scoped to. + // UUID of project which the new API key is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Flag indicating whether the API key shoud be read-only + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` } -type ProjectAPIKeyParameters struct { +type ProjectAPIKeyObservation struct { // Description string for the Project API Key resource. // Description string for the API key - // +kubebuilder:validation:Required - Description *string `json:"description" tf:"description,omitempty"` + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + ID *string `json:"id,omitempty" tf:"id,omitempty"` // UUID of the project where the API key is scoped to. // UUID of project which the new API key is scoped to - // +crossplane:generate:reference:type=Project - // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. + // Flag indicating whether the API key shoud be read-only + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` +} + +type ProjectAPIKeyParameters struct { + + // Description string for the Project API Key resource. + // Description string for the API key // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + Description *string `json:"description,omitempty" tf:"description,omitempty"` - // Selector for a Project to populate projectId. + // UUID of the project where the API key is scoped to. + // UUID of project which the new API key is scoped to // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` // Flag indicating whether the API key shoud be read-only - // +kubebuilder:validation:Required - ReadOnly *bool `json:"readOnly" tf:"read_only,omitempty"` + // +kubebuilder:validation:Optional + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` } // ProjectAPIKeySpec defines the desired state of ProjectAPIKey type ProjectAPIKeySpec struct { v1.ResourceSpec `json:",inline"` ForProvider ProjectAPIKeyParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ProjectAPIKeyInitParameters `json:"initProvider,omitempty"` } // ProjectAPIKeyStatus defines the observed state of ProjectAPIKey. @@ -68,19 +96,23 @@ type ProjectAPIKeyStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // ProjectAPIKey is the Schema for the ProjectAPIKeys 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type ProjectAPIKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ProjectAPIKeySpec `json:"spec"` - Status ProjectAPIKeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.description) || (has(self.initProvider) && has(self.initProvider.description))",message="spec.forProvider.description is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.readOnly) || (has(self.initProvider) && has(self.initProvider.readOnly))",message="spec.forProvider.readOnly is a required parameter" + Spec ProjectAPIKeySpec `json:"spec"` + Status ProjectAPIKeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_projectsshkey_terraformed.go b/apis/metal/v1alpha1/zz_projectsshkey_terraformed.go new file mode 100755 index 0000000..d222f78 --- /dev/null +++ b/apis/metal/v1alpha1/zz_projectsshkey_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this ProjectSSHKey +func (mg *ProjectSSHKey) GetTerraformResourceType() string { + return "equinix_metal_project_ssh_key" +} + +// GetConnectionDetailsMapping for this ProjectSSHKey +func (tr *ProjectSSHKey) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this ProjectSSHKey +func (tr *ProjectSSHKey) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this ProjectSSHKey +func (tr *ProjectSSHKey) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this ProjectSSHKey +func (tr *ProjectSSHKey) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this ProjectSSHKey +func (tr *ProjectSSHKey) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this ProjectSSHKey +func (tr *ProjectSSHKey) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this ProjectSSHKey +func (tr *ProjectSSHKey) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this ProjectSSHKey +func (tr *ProjectSSHKey) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this ProjectSSHKey using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *ProjectSSHKey) LateInitialize(attrs []byte) (bool, error) { + params := &ProjectSSHKeyParameters{} + 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 *ProjectSSHKey) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_projectsshkey_types.go b/apis/metal/v1alpha1/zz_projectsshkey_types.go index b8059dd..87b2896 100755 --- a/apis/metal/v1alpha1/zz_projectsshkey_types.go +++ b/apis/metal/v1alpha1/zz_projectsshkey_types.go @@ -25,6 +25,21 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ProjectSSHKeyInitParameters struct { + + // The name of the SSH key for identification. + // The name of the SSH key for identification + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The ID of parent project. + // The ID of parent project + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // The public key. If this is a file, it can be read using the file interpolation function. + // The public key + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` +} + type ProjectSSHKeyObservation struct { // The timestamp for when the SSH key was created. @@ -38,10 +53,22 @@ type ProjectSSHKeyObservation struct { // The unique ID of the key. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The name of the SSH key for identification. + // The name of the SSH key for identification + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // The ID of parent project (same as project_id). // The UUID of the Equinix Metal API User who owns this key OwnerID *string `json:"ownerId,omitempty" tf:"owner_id,omitempty"` + // The ID of parent project. + // The ID of parent project + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // The public key. If this is a file, it can be read using the file interpolation function. + // The public key + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` + // The timestamp for the last time the SSH key was updated. // The timestamp for the last time the SSH key was updated Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` @@ -51,33 +78,35 @@ type ProjectSSHKeyParameters struct { // The name of the SSH key for identification. // The name of the SSH key for identification - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` // The ID of parent project. // The ID of parent project - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` - // The public key. If this is a file, it can be read using the file interpolation function. // The public key - // +kubebuilder:validation:Required - PublicKey *string `json:"publicKey" tf:"public_key,omitempty"` + // +kubebuilder:validation:Optional + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` } // ProjectSSHKeySpec defines the desired state of ProjectSSHKey type ProjectSSHKeySpec struct { v1.ResourceSpec `json:",inline"` ForProvider ProjectSSHKeyParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ProjectSSHKeyInitParameters `json:"initProvider,omitempty"` } // ProjectSSHKeyStatus defines the observed state of ProjectSSHKey. @@ -87,19 +116,23 @@ type ProjectSSHKeyStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // ProjectSSHKey is the Schema for the ProjectSSHKeys 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type ProjectSSHKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ProjectSSHKeySpec `json:"spec"` - Status ProjectSSHKeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.publicKey) || (has(self.initProvider) && has(self.initProvider.publicKey))",message="spec.forProvider.publicKey is a required parameter" + Spec ProjectSSHKeySpec `json:"spec"` + Status ProjectSSHKeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_reservedipblock_terraformed.go b/apis/metal/v1alpha1/zz_reservedipblock_terraformed.go new file mode 100755 index 0000000..03d2c32 --- /dev/null +++ b/apis/metal/v1alpha1/zz_reservedipblock_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this ReservedIPBlock +func (mg *ReservedIPBlock) GetTerraformResourceType() string { + return "equinix_metal_reserved_ip_block" +} + +// GetConnectionDetailsMapping for this ReservedIPBlock +func (tr *ReservedIPBlock) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this ReservedIPBlock +func (tr *ReservedIPBlock) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this ReservedIPBlock +func (tr *ReservedIPBlock) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this ReservedIPBlock +func (tr *ReservedIPBlock) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this ReservedIPBlock +func (tr *ReservedIPBlock) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this ReservedIPBlock +func (tr *ReservedIPBlock) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this ReservedIPBlock +func (tr *ReservedIPBlock) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this ReservedIPBlock +func (tr *ReservedIPBlock) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this ReservedIPBlock using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *ReservedIPBlock) LateInitialize(attrs []byte) (bool, error) { + params := &ReservedIPBlockParameters{} + 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 *ReservedIPBlock) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_reservedipblock_types.go b/apis/metal/v1alpha1/zz_reservedipblock_types.go index c033d5a..8bf7375 100755 --- a/apis/metal/v1alpha1/zz_reservedipblock_types.go +++ b/apis/metal/v1alpha1/zz_reservedipblock_types.go @@ -25,6 +25,57 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ReservedIPBlockInitParameters struct { + + // Only valid as an argument and required when type is vrf. The size of the network to reserve from an existing VRF ip_range. cidr can only be specified with vrf_id. Range is 22-31. Virtual Circuits require 30-31. Other VRF resources must use a CIDR in the 22-29 range. + // 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 + Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` + + // This may be helpful for self-managed IPAM. The object must be valid JSON. This may be helpful for self-managed IPAM. The object must be valid JSON. + CustomData *string `json:"customData,omitempty" tf:"custom_data,omitempty"` + + // Arbitrary description. + // Arbitrary description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide + // 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 + Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` + + // Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + // 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 + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // Only valid as an argument and required when type is vrf. An unreserved network address from an existing ip_range in the specified VRF. + // an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id + Network *string `json:"network,omitempty" tf:"network,omitempty"` + + // The metal project ID where to allocate the address block. + // The metal project ID where to allocate the address block + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // The number of allocated /32 addresses, a power of 2. Required when type is not vrf. + // The number of allocated /32 addresses, a power of 2 + Quantity *float64 `json:"quantity,omitempty" tf:"quantity,omitempty"` + + // String list of tags. + // Tags attached to the reserved block + // +listType=set + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility. + // Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Only valid and required when type is vrf. VRF ID for type=vrf reservations. + // VRF ID for type=vrf reservations + VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + + // 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. + // 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. + WaitForState *string `json:"waitForState,omitempty" tf:"wait_for_state,omitempty"` +} + type ReservedIPBlockObservation struct { Address *string `json:"address,omitempty" tf:"address,omitempty"` @@ -32,13 +83,27 @@ type ReservedIPBlockObservation struct { // Address family as integer (4 or 6) AddressFamily *float64 `json:"addressFamily,omitempty" tf:"address_family,omitempty"` + // Only valid as an argument and required when type is vrf. The size of the network to reserve from an existing VRF ip_range. cidr can only be specified with vrf_id. Range is 22-31. Virtual Circuits require 30-31. Other VRF resources must use a CIDR in the 22-29 range. + // 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 + Cidr *float64 `json:"cidr,omitempty" tf:"cidr,omitempty"` + // Address and mask in CIDR notation, e.g. 147.229.15.30/31. CidrNotation *string `json:"cidrNotation,omitempty" tf:"cidr_notation,omitempty"` + // This may be helpful for self-managed IPAM. The object must be valid JSON. This may be helpful for self-managed IPAM. The object must be valid JSON. + CustomData *string `json:"customData,omitempty" tf:"custom_data,omitempty"` + + // Arbitrary description. + // Arbitrary description + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide + // 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 + Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` + Gateway *string `json:"gateway,omitempty" tf:"gateway,omitempty"` - // Boolean flag whether addresses from a block are global (i.e. can be assigned in any - // metro). + // Boolean flag whether addresses from a block are global (i.e. can be assigned in any metro). // Flag indicating whether IP block is global, i.e. assignable in any location Global *bool `json:"global,omitempty" tf:"global,omitempty"` @@ -49,13 +114,46 @@ type ReservedIPBlockObservation struct { Management *bool `json:"management,omitempty" tf:"management,omitempty"` + // Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + // 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 + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + // Mask in decimal notation, e.g. 255.255.255.0. // Mask in decimal notation, e.g. 255.255.255.0 Netmask *string `json:"netmask,omitempty" tf:"netmask,omitempty"` + // Only valid as an argument and required when type is vrf. An unreserved network address from an existing ip_range in the specified VRF. + // an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id + Network *string `json:"network,omitempty" tf:"network,omitempty"` + + // The metal project ID where to allocate the address block. + // The metal project ID where to allocate the address block + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Boolean flag whether addresses from a block are public. // Flag indicating whether IP block is addressable from the Internet Public *bool `json:"public,omitempty" tf:"public,omitempty"` + + // The number of allocated /32 addresses, a power of 2. Required when type is not vrf. + // The number of allocated /32 addresses, a power of 2 + Quantity *float64 `json:"quantity,omitempty" tf:"quantity,omitempty"` + + // String list of tags. + // Tags attached to the reserved block + // +listType=set + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility. + // Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Only valid and required when type is vrf. VRF ID for type=vrf reservations. + // VRF ID for type=vrf reservations + VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + + // 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. + // 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. + WaitForState *string `json:"waitForState,omitempty" tf:"wait_for_state,omitempty"` } type ReservedIPBlockParameters struct { @@ -74,14 +172,12 @@ type ReservedIPBlockParameters struct { // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` - // (Deprecated) Facility where to allocate the public IP address block, makes sense only - // if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide + // (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide // 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 // +kubebuilder:validation:Optional Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` - // Metro where to allocate the public IP address block, makes sense only - // if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + // Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. // 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 // +kubebuilder:validation:Optional Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` @@ -93,18 +189,9 @@ type ReservedIPBlockParameters struct { // The metal project ID where to allocate the address block. // The metal project ID where to allocate the address block - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` - // The number of allocated /32 addresses, a power of 2. Required when type is not vrf. // The number of allocated /32 addresses, a power of 2 // +kubebuilder:validation:Optional @@ -113,28 +200,19 @@ type ReservedIPBlockParameters struct { // String list of tags. // Tags attached to the reserved block // +kubebuilder:validation:Optional + // +listType=set Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` - // One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward - // compatibility. + // One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility. // Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4. // +kubebuilder:validation:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` // Only valid and required when type is vrf. VRF ID for type=vrf reservations. // VRF ID for type=vrf reservations - // +crossplane:generate:reference:type=Vrf // +kubebuilder:validation:Optional VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` - // Reference to a Vrf to populate vrfId. - // +kubebuilder:validation:Optional - VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` - - // Selector for a Vrf to populate vrfId. - // +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. // 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 @@ -145,6 +223,17 @@ type ReservedIPBlockParameters struct { type ReservedIPBlockSpec struct { v1.ResourceSpec `json:",inline"` ForProvider ReservedIPBlockParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ReservedIPBlockInitParameters `json:"initProvider,omitempty"` } // ReservedIPBlockStatus defines the observed state of ReservedIPBlock. @@ -154,19 +243,21 @@ type ReservedIPBlockStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // ReservedIPBlock is the Schema for the ReservedIPBlocks 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type ReservedIPBlock struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ReservedIPBlockSpec `json:"spec"` - Status ReservedIPBlockStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + Spec ReservedIPBlockSpec `json:"spec"` + Status ReservedIPBlockStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_spotmarketrequest_terraformed.go b/apis/metal/v1alpha1/zz_spotmarketrequest_terraformed.go new file mode 100755 index 0000000..c00b2f3 --- /dev/null +++ b/apis/metal/v1alpha1/zz_spotmarketrequest_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this SpotMarketRequest +func (mg *SpotMarketRequest) GetTerraformResourceType() string { + return "equinix_metal_spot_market_request" +} + +// GetConnectionDetailsMapping for this SpotMarketRequest +func (tr *SpotMarketRequest) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this SpotMarketRequest +func (tr *SpotMarketRequest) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this SpotMarketRequest +func (tr *SpotMarketRequest) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this SpotMarketRequest +func (tr *SpotMarketRequest) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this SpotMarketRequest +func (tr *SpotMarketRequest) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this SpotMarketRequest +func (tr *SpotMarketRequest) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this SpotMarketRequest +func (tr *SpotMarketRequest) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this SpotMarketRequest +func (tr *SpotMarketRequest) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this SpotMarketRequest using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *SpotMarketRequest) LateInitialize(attrs []byte) (bool, error) { + params := &SpotMarketRequestParameters{} + 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 *SpotMarketRequest) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_spotmarketrequest_types.go b/apis/metal/v1alpha1/zz_spotmarketrequest_types.go index d528df8..09f4a74 100755 --- a/apis/metal/v1alpha1/zz_spotmarketrequest_types.go +++ b/apis/metal/v1alpha1/zz_spotmarketrequest_types.go @@ -25,10 +25,70 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type InstanceParametersInitParameters struct { + AlwaysPxe *bool `json:"alwaysPxe,omitempty" tf:"always_pxe,omitempty"` + + BillingCycle *string `json:"billingCycle,omitempty" tf:"billing_cycle,omitempty"` + + Customdata *string `json:"customdata,omitempty" tf:"customdata,omitempty"` + + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + Features []*string `json:"features,omitempty" tf:"features,omitempty"` + + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + IpxeScriptURL *string `json:"ipxeScriptUrl,omitempty" tf:"ipxe_script_url,omitempty"` + + // Blocks deletion of the SpotMarketRequest device until the lock is disabled. + Locked *bool `json:"locked,omitempty" tf:"locked,omitempty"` + + OperatingSystem *string `json:"operatingSystem,omitempty" tf:"operating_system,omitempty"` + + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + ProjectSSHKeys []*string `json:"projectSshKeys,omitempty" tf:"project_ssh_keys,omitempty"` + + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + UserSSHKeys []*string `json:"userSshKeys,omitempty" tf:"user_ssh_keys,omitempty"` + + Userdata *string `json:"userdata,omitempty" tf:"userdata,omitempty"` +} + type InstanceParametersObservation struct { + AlwaysPxe *bool `json:"alwaysPxe,omitempty" tf:"always_pxe,omitempty"` + + BillingCycle *string `json:"billingCycle,omitempty" tf:"billing_cycle,omitempty"` + + Customdata *string `json:"customdata,omitempty" tf:"customdata,omitempty"` + + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + Features []*string `json:"features,omitempty" tf:"features,omitempty"` + + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + IpxeScriptURL *string `json:"ipxeScriptUrl,omitempty" tf:"ipxe_script_url,omitempty"` + + // Blocks deletion of the SpotMarketRequest device until the lock is disabled. + Locked *bool `json:"locked,omitempty" tf:"locked,omitempty"` + + OperatingSystem *string `json:"operatingSystem,omitempty" tf:"operating_system,omitempty"` + + Plan *string `json:"plan,omitempty" tf:"plan,omitempty"` + + ProjectSSHKeys []*string `json:"projectSshKeys,omitempty" tf:"project_ssh_keys,omitempty"` + + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + TerminationTime *string `json:"terminationTime,omitempty" tf:"termination_time,omitempty"` TermintationTime *string `json:"termintationTime,omitempty" tf:"termintation_time,omitempty"` + + UserSSHKeys []*string `json:"userSshKeys,omitempty" tf:"user_ssh_keys,omitempty"` + + Userdata *string `json:"userdata,omitempty" tf:"userdata,omitempty"` } type InstanceParametersParameters struct { @@ -36,7 +96,7 @@ type InstanceParametersParameters struct { // +kubebuilder:validation:Optional AlwaysPxe *bool `json:"alwaysPxe,omitempty" tf:"always_pxe,omitempty"` - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional BillingCycle *string `json:"billingCycle" tf:"billing_cycle,omitempty"` // +kubebuilder:validation:Optional @@ -48,7 +108,7 @@ type InstanceParametersParameters struct { // +kubebuilder:validation:Optional Features []*string `json:"features,omitempty" tf:"features,omitempty"` - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Hostname *string `json:"hostname" tf:"hostname,omitempty"` // +kubebuilder:validation:Optional @@ -58,10 +118,10 @@ type InstanceParametersParameters struct { // +kubebuilder:validation:Optional Locked *bool `json:"locked,omitempty" tf:"locked,omitempty"` - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional OperatingSystem *string `json:"operatingSystem" tf:"operating_system,omitempty"` - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Plan *string `json:"plan" tf:"plan,omitempty"` // +kubebuilder:validation:Optional @@ -77,51 +137,105 @@ type InstanceParametersParameters struct { Userdata *string `json:"userdata,omitempty" tf:"userdata,omitempty"` } +type SpotMarketRequestInitParameters struct { + + // Maximum number devices to be created. + // Maximum number devices to be created + DevicesMax *float64 `json:"devicesMax,omitempty" tf:"devices_max,omitempty"` + + // Miniumum number devices to be created. + // Miniumum number devices to be created + DevicesMin *float64 `json:"devicesMin,omitempty" tf:"devices_min,omitempty"` + + // (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide + // Facility IDs where devices should be created + Facilities []*string `json:"facilities,omitempty" tf:"facilities,omitempty"` + + // Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs. + // Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md) + InstanceParameters []InstanceParametersInitParameters `json:"instanceParameters,omitempty" tf:"instance_parameters,omitempty"` + + // Maximum price user is willing to pay per hour per device. + // Maximum price user is willing to pay per hour per device + MaxBidPrice *float64 `json:"maxBidPrice,omitempty" tf:"max_bid_price,omitempty"` + + // Metro where devices should be created. + // Metro where devices should be created + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // Project ID. + // Project ID + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. + // On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed + WaitForDevices *bool `json:"waitForDevices,omitempty" tf:"wait_for_devices,omitempty"` +} + type SpotMarketRequestObservation struct { + // Maximum number devices to be created. + // Maximum number devices to be created + DevicesMax *float64 `json:"devicesMax,omitempty" tf:"devices_max,omitempty"` + + // Miniumum number devices to be created. + // Miniumum number devices to be created + DevicesMin *float64 `json:"devicesMin,omitempty" tf:"devices_min,omitempty"` + + // (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide + // Facility IDs where devices should be created + Facilities []*string `json:"facilities,omitempty" tf:"facilities,omitempty"` + // The ID of the Spot Market Request. ID *string `json:"id,omitempty" tf:"id,omitempty"` - // Key/Value pairs of parameters for devices provisioned from - // this request. Valid keys are: billing_cycle, plan, operating_system, hostname, - // termination_time, always_pxe, description, features, locked, project_ssh_keys, - // user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter - // description in equinix_metal_device docs. + // Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs. // Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md) - // +kubebuilder:validation:Required InstanceParameters []InstanceParametersObservation `json:"instanceParameters,omitempty" tf:"instance_parameters,omitempty"` + + // Maximum price user is willing to pay per hour per device. + // Maximum price user is willing to pay per hour per device + MaxBidPrice *float64 `json:"maxBidPrice,omitempty" tf:"max_bid_price,omitempty"` + + // Metro where devices should be created. + // Metro where devices should be created + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // Project ID. + // Project ID + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. + // On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed + WaitForDevices *bool `json:"waitForDevices,omitempty" tf:"wait_for_devices,omitempty"` } type SpotMarketRequestParameters struct { // Maximum number devices to be created. // Maximum number devices to be created - // +kubebuilder:validation:Required - DevicesMax *float64 `json:"devicesMax" tf:"devices_max,omitempty"` + // +kubebuilder:validation:Optional + DevicesMax *float64 `json:"devicesMax,omitempty" tf:"devices_max,omitempty"` // Miniumum number devices to be created. // Miniumum number devices to be created - // +kubebuilder:validation:Required - DevicesMin *float64 `json:"devicesMin" tf:"devices_min,omitempty"` + // +kubebuilder:validation:Optional + DevicesMin *float64 `json:"devicesMin,omitempty" tf:"devices_min,omitempty"` // (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide // Facility IDs where devices should be created // +kubebuilder:validation:Optional Facilities []*string `json:"facilities,omitempty" tf:"facilities,omitempty"` - // Key/Value pairs of parameters for devices provisioned from - // this request. Valid keys are: billing_cycle, plan, operating_system, hostname, - // termination_time, always_pxe, description, features, locked, project_ssh_keys, - // user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter - // description in equinix_metal_device docs. + // Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs. // Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md) - // +kubebuilder:validation:Required - InstanceParameters []InstanceParametersParameters `json:"instanceParameters" tf:"instance_parameters,omitempty"` + // +kubebuilder:validation:Optional + InstanceParameters []InstanceParametersParameters `json:"instanceParameters,omitempty" tf:"instance_parameters,omitempty"` // Maximum price user is willing to pay per hour per device. // Maximum price user is willing to pay per hour per device - // +kubebuilder:validation:Required - MaxBidPrice *float64 `json:"maxBidPrice" tf:"max_bid_price,omitempty"` + // +kubebuilder:validation:Optional + MaxBidPrice *float64 `json:"maxBidPrice,omitempty" tf:"max_bid_price,omitempty"` // Metro where devices should be created. // Metro where devices should be created @@ -130,20 +244,10 @@ type SpotMarketRequestParameters struct { // Project ID. // Project ID - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +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. + // On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. // On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed // +kubebuilder:validation:Optional WaitForDevices *bool `json:"waitForDevices,omitempty" tf:"wait_for_devices,omitempty"` @@ -153,6 +257,17 @@ type SpotMarketRequestParameters struct { type SpotMarketRequestSpec struct { v1.ResourceSpec `json:",inline"` ForProvider SpotMarketRequestParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider SpotMarketRequestInitParameters `json:"initProvider,omitempty"` } // SpotMarketRequestStatus defines the observed state of SpotMarketRequest. @@ -162,19 +277,25 @@ type SpotMarketRequestStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // SpotMarketRequest is the Schema for the SpotMarketRequests 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type SpotMarketRequest struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec SpotMarketRequestSpec `json:"spec"` - Status SpotMarketRequestStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.devicesMax) || (has(self.initProvider) && has(self.initProvider.devicesMax))",message="spec.forProvider.devicesMax is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.devicesMin) || (has(self.initProvider) && has(self.initProvider.devicesMin))",message="spec.forProvider.devicesMin is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.instanceParameters) || (has(self.initProvider) && has(self.initProvider.instanceParameters))",message="spec.forProvider.instanceParameters is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.maxBidPrice) || (has(self.initProvider) && has(self.initProvider.maxBidPrice))",message="spec.forProvider.maxBidPrice is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + Spec SpotMarketRequestSpec `json:"spec"` + Status SpotMarketRequestStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_sshkey_terraformed.go b/apis/metal/v1alpha1/zz_sshkey_terraformed.go new file mode 100755 index 0000000..8bf44ce --- /dev/null +++ b/apis/metal/v1alpha1/zz_sshkey_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this SSHKey +func (mg *SSHKey) GetTerraformResourceType() string { + return "equinix_metal_ssh_key" +} + +// GetConnectionDetailsMapping for this SSHKey +func (tr *SSHKey) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this SSHKey +func (tr *SSHKey) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this SSHKey +func (tr *SSHKey) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this SSHKey +func (tr *SSHKey) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this SSHKey +func (tr *SSHKey) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this SSHKey +func (tr *SSHKey) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this SSHKey +func (tr *SSHKey) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this SSHKey +func (tr *SSHKey) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this SSHKey using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *SSHKey) LateInitialize(attrs []byte) (bool, error) { + params := &SSHKeyParameters{} + 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 *SSHKey) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_sshkey_types.go b/apis/metal/v1alpha1/zz_sshkey_types.go index c05cc40..a53b8bb 100755 --- a/apis/metal/v1alpha1/zz_sshkey_types.go +++ b/apis/metal/v1alpha1/zz_sshkey_types.go @@ -25,6 +25,17 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type SSHKeyInitParameters struct { + + // The name of the SSH key for identification + // The name of the SSH key for identification + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The public key. If this is a file, it can be read using the file interpolation function + // The public key + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` +} + type SSHKeyObservation struct { // The timestamp for when the SSH key was created. @@ -38,10 +49,18 @@ type SSHKeyObservation struct { // The unique ID of the key. ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The name of the SSH key for identification + // The name of the SSH key for identification + Name *string `json:"name,omitempty" tf:"name,omitempty"` + // The UUID of the Equinix Metal API User who owns this key. // The UUID of the Equinix Metal API User who owns this key OwnerID *string `json:"ownerId,omitempty" tf:"owner_id,omitempty"` + // The public key. If this is a file, it can be read using the file interpolation function + // The public key + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` + // The timestamp for the last time the SSH key was updated. // The timestamp for the last time the SSH key was updated Updated *string `json:"updated,omitempty" tf:"updated,omitempty"` @@ -51,20 +70,30 @@ type SSHKeyParameters struct { // The name of the SSH key for identification // The name of the SSH key for identification - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` - // The public key. If this is a file, it - // can be read using the file interpolation function + // The public key. If this is a file, it can be read using the file interpolation function // The public key - // +kubebuilder:validation:Required - PublicKey *string `json:"publicKey" tf:"public_key,omitempty"` + // +kubebuilder:validation:Optional + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` } // SSHKeySpec defines the desired state of SSHKey type SSHKeySpec struct { v1.ResourceSpec `json:",inline"` ForProvider SSHKeyParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider SSHKeyInitParameters `json:"initProvider,omitempty"` } // SSHKeyStatus defines the observed state of SSHKey. @@ -74,19 +103,22 @@ type SSHKeyStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // SSHKey is the Schema for the SSHKeys 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type SSHKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec SSHKeySpec `json:"spec"` - Status SSHKeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.publicKey) || (has(self.initProvider) && has(self.initProvider.publicKey))",message="spec.forProvider.publicKey is a required parameter" + Spec SSHKeySpec `json:"spec"` + Status SSHKeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_userapikey_terraformed.go b/apis/metal/v1alpha1/zz_userapikey_terraformed.go new file mode 100755 index 0000000..b722213 --- /dev/null +++ b/apis/metal/v1alpha1/zz_userapikey_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this UserAPIKey +func (mg *UserAPIKey) GetTerraformResourceType() string { + return "equinix_metal_user_api_key" +} + +// GetConnectionDetailsMapping for this UserAPIKey +func (tr *UserAPIKey) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"token": "status.atProvider.token"} +} + +// GetObservation of this UserAPIKey +func (tr *UserAPIKey) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this UserAPIKey +func (tr *UserAPIKey) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this UserAPIKey +func (tr *UserAPIKey) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this UserAPIKey +func (tr *UserAPIKey) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this UserAPIKey +func (tr *UserAPIKey) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this UserAPIKey +func (tr *UserAPIKey) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this UserAPIKey +func (tr *UserAPIKey) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this UserAPIKey using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *UserAPIKey) LateInitialize(attrs []byte) (bool, error) { + params := &UserAPIKeyParameters{} + 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 *UserAPIKey) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_userapikey_types.go b/apis/metal/v1alpha1/zz_userapikey_types.go index 7eff44f..82aa224 100755 --- a/apis/metal/v1alpha1/zz_userapikey_types.go +++ b/apis/metal/v1alpha1/zz_userapikey_types.go @@ -25,9 +25,27 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type UserAPIKeyInitParameters struct { + + // Description string for the User API Key resource. + // Description string for the API key + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Flag indicating whether the API key shoud be read-only + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` +} + type UserAPIKeyObservation struct { + + // Description string for the User API Key resource. + // Description string for the API key + Description *string `json:"description,omitempty" tf:"description,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // Flag indicating whether the API key shoud be read-only + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` + // UUID of the owner of the API key. // UUID of user owning this key UserID *string `json:"userId,omitempty" tf:"user_id,omitempty"` @@ -37,18 +55,29 @@ type UserAPIKeyParameters struct { // Description string for the User API Key resource. // Description string for the API key - // +kubebuilder:validation:Required - Description *string `json:"description" tf:"description,omitempty"` + // +kubebuilder:validation:Optional + Description *string `json:"description,omitempty" tf:"description,omitempty"` // Flag indicating whether the API key shoud be read-only - // +kubebuilder:validation:Required - ReadOnly *bool `json:"readOnly" tf:"read_only,omitempty"` + // +kubebuilder:validation:Optional + ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` } // UserAPIKeySpec defines the desired state of UserAPIKey type UserAPIKeySpec struct { v1.ResourceSpec `json:",inline"` ForProvider UserAPIKeyParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider UserAPIKeyInitParameters `json:"initProvider,omitempty"` } // UserAPIKeyStatus defines the observed state of UserAPIKey. @@ -58,19 +87,22 @@ type UserAPIKeyStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // UserAPIKey is the Schema for the UserAPIKeys 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type UserAPIKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec UserAPIKeySpec `json:"spec"` - Status UserAPIKeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.description) || (has(self.initProvider) && has(self.initProvider.description))",message="spec.forProvider.description is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.readOnly) || (has(self.initProvider) && has(self.initProvider.readOnly))",message="spec.forProvider.readOnly is a required parameter" + Spec UserAPIKeySpec `json:"spec"` + Status UserAPIKeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_virtualcircuit_terraformed.go b/apis/metal/v1alpha1/zz_virtualcircuit_terraformed.go new file mode 100755 index 0000000..2b347ae --- /dev/null +++ b/apis/metal/v1alpha1/zz_virtualcircuit_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this VirtualCircuit +func (mg *VirtualCircuit) GetTerraformResourceType() string { + return "equinix_metal_virtual_circuit" +} + +// GetConnectionDetailsMapping for this VirtualCircuit +func (tr *VirtualCircuit) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"md5": "md5SecretRef"} +} + +// GetObservation of this VirtualCircuit +func (tr *VirtualCircuit) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this VirtualCircuit +func (tr *VirtualCircuit) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this VirtualCircuit +func (tr *VirtualCircuit) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this VirtualCircuit +func (tr *VirtualCircuit) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this VirtualCircuit +func (tr *VirtualCircuit) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this VirtualCircuit +func (tr *VirtualCircuit) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this VirtualCircuit +func (tr *VirtualCircuit) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this VirtualCircuit using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *VirtualCircuit) LateInitialize(attrs []byte) (bool, error) { + params := &VirtualCircuitParameters{} + 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 *VirtualCircuit) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_virtualcircuit_types.go b/apis/metal/v1alpha1/zz_virtualcircuit_types.go index ddb4454..98cb5c2 100755 --- a/apis/metal/v1alpha1/zz_virtualcircuit_types.go +++ b/apis/metal/v1alpha1/zz_virtualcircuit_types.go @@ -25,143 +25,312 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type VirtualCircuitInitParameters struct { + + // (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + // UUID of Connection where the VC is scoped to. Only used for dedicated connections + ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + + // (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + // The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + CustomerIP *string `json:"customerIp,omitempty" tf:"customer_ip,omitempty"` + + // (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + // The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + CustomerIPv6 *string `json:"customerIpv6,omitempty" tf:"customer_ipv6,omitempty"` + + // (String) Description of the Virtual Circuit resource + // Description of the Virtual Circuit resource + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String, Sensitive) The password that can be set for the VRF BGP peer + // The password that can be set for the VRF BGP peer + Md5SecretRef *v1.SecretKeySelector `json:"md5SecretRef,omitempty" tf:"-"` + + // (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + // The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + MetalIP *string `json:"metalIp,omitempty" tf:"metal_ip,omitempty"` + + // (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + // The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + MetalIPv6 *string `json:"metalIpv6,omitempty" tf:"metal_ipv6,omitempty"` + + // (String) Name of the Virtual Circuit resource + // Name of the Virtual Circuit resource + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // to-network VLAN ID + // Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) + NniVlan *float64 `json:"nniVlan,omitempty" tf:"nni_vlan,omitempty"` + + // (Number) 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. + // 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. + PeerAsn *float64 `json:"peerAsn,omitempty" tf:"peer_asn,omitempty"` + + // (String) UUID of the Connection Port where the VC is scoped to + // UUID of the Connection Port where the VC is scoped to + PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` + + // (String) UUID of the Project where the VC is scoped to + // UUID of the Project where the VC is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + // Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` + + // (String) 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. + // * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * 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. + // 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. + // * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * 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. + Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` + + // (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + // * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * For a /126 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. + // A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + // * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * For a /126 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. + SubnetIPv6 *string `json:"subnetIpv6,omitempty" tf:"subnet_ipv6,omitempty"` + + // (List of String) Tags attached to the virtual circuit + // Tags attached to the virtual circuit + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + // UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + VirtualCircuitID *string `json:"virtualCircuitId,omitempty" tf:"virtual_circuit_id,omitempty"` + + // (String) UUID of the VLAN to associate + // UUID of the VLAN to associate + VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + + // (String) UUID of the VRF to associate + // UUID of the VRF to associate + VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` +} + type VirtualCircuitObservation struct { + + // (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + // UUID of Connection where the VC is scoped to. Only used for dedicated connections + ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + + // (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + // The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + CustomerIP *string `json:"customerIp,omitempty" tf:"customer_ip,omitempty"` + + // (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + // The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + CustomerIPv6 *string `json:"customerIpv6,omitempty" tf:"customer_ipv6,omitempty"` + + // (String) Description of the Virtual Circuit resource + // Description of the Virtual Circuit resource + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (String) The ID of this resource. ID *string `json:"id,omitempty" tf:"id,omitempty"` - // NNI VLAN parameters, see the documentation for Equinix Fabric. - // Nni VLAN ID parameter, see https://metal.equinix.com/developers/docs/networking/fabric/ + // (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + // The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + MetalIP *string `json:"metalIp,omitempty" tf:"metal_ip,omitempty"` + + // (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + // The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + MetalIPv6 *string `json:"metalIpv6,omitempty" tf:"metal_ipv6,omitempty"` + + // (String) Name of the Virtual Circuit resource + // Name of the Virtual Circuit resource + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // to-network VLAN ID + // Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) + NniVlan *float64 `json:"nniVlan,omitempty" tf:"nni_vlan,omitempty"` + + // (Number) Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + // Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ NniVnid *float64 `json:"nniVnid,omitempty" tf:"nni_vnid,omitempty"` - // Status of the virtal circuit. + // (Number) 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. + // 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. + PeerAsn *float64 `json:"peerAsn,omitempty" tf:"peer_asn,omitempty"` + + // (String) UUID of the Connection Port where the VC is scoped to + // UUID of the Connection Port where the VC is scoped to + PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` + + // (String) UUID of the Project where the VC is scoped to + // UUID of the Project where the VC is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + // Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` + + // (String) Status of the virtual circuit resource // Status of the virtual circuit resource Status *string `json:"status,omitempty" tf:"status,omitempty"` - // VNID VLAN parameter, see the documentation for Equinix Fabric. - // VNID VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/ + // (String) 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. + // * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * 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. + // 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. + // * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * 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. + Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` + + // (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + // * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * For a /126 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. + // A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + // * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * For a /126 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. + SubnetIPv6 *string `json:"subnetIpv6,omitempty" tf:"subnet_ipv6,omitempty"` + + // (List of String) Tags attached to the virtual circuit + // Tags attached to the virtual circuit + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + // UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + VirtualCircuitID *string `json:"virtualCircuitId,omitempty" tf:"virtual_circuit_id,omitempty"` + + // (String) UUID of the VLAN to associate + // UUID of the VLAN to associate + VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + + // (Number) VNID VLAN parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + // VNID VLAN parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ Vnid *float64 `json:"vnid,omitempty" tf:"vnid,omitempty"` + + // (String) UUID of the VRF to associate + // UUID of the VRF to associate + VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` } type VirtualCircuitParameters struct { - // UUID of Connection where the VC is scoped to. - // UUID of Connection where the VC is scoped to - // +crossplane:generate:reference:type=Connection + // (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + // UUID of Connection where the VC is scoped to. Only used for dedicated connections // +kubebuilder:validation:Optional ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` - // Reference to a Connection to populate connectionId. - // +kubebuilder:validation:Optional - ConnectionIDRef *v1.Reference `json:"connectionIdRef,omitempty" tf:"-"` - - // Selector for a Connection to populate connectionId. - // +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. + // (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. // The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. // +kubebuilder:validation:Optional CustomerIP *string `json:"customerIp,omitempty" tf:"customer_ip,omitempty"` - // Description for the Virtual Circuit resource. + // (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + // The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + // +kubebuilder:validation:Optional + CustomerIPv6 *string `json:"customerIpv6,omitempty" tf:"customer_ipv6,omitempty"` + + // (String) Description of the Virtual Circuit resource // Description of the Virtual Circuit resource // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` - // The password that can be set for the VRF BGP peer + // (String, Sensitive) The password that can be set for the VRF BGP peer // The password that can be set for the VRF BGP peer // +kubebuilder:validation:Optional Md5SecretRef *v1.SecretKeySelector `json:"md5SecretRef,omitempty" tf:"-"` - // The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + // (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. // The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. // +kubebuilder:validation:Optional MetalIP *string `json:"metalIp,omitempty" tf:"metal_ip,omitempty"` - // Name of the Virtual Circuit resource. + // (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + // The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + // +kubebuilder:validation:Optional + MetalIPv6 *string `json:"metalIpv6,omitempty" tf:"metal_ipv6,omitempty"` + + // (String) Name of the Virtual Circuit resource // Name of the Virtual Circuit resource // +kubebuilder:validation:Optional Name *string `json:"name,omitempty" tf:"name,omitempty"` - // Equinix Metal network-to-network VLAN ID. + // to-network VLAN ID // Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) // +kubebuilder:validation:Optional NniVlan *float64 `json:"nniVlan,omitempty" tf:"nni_vlan,omitempty"` - // 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. + // (Number) 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. // 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. // +kubebuilder:validation:Optional PeerAsn *float64 `json:"peerAsn,omitempty" tf:"peer_asn,omitempty"` - // UUID of the Connection Port where the VC is scoped to. + // (String) UUID of the Connection Port where the VC is scoped to // UUID of the Connection Port where the VC is scoped to - // +kubebuilder:validation:Required - PortID *string `json:"portId" tf:"port_id,omitempty"` + // +kubebuilder:validation:Optional + PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` - // UUID of the Project where the VC is scoped to. + // (String) UUID of the Project where the VC is scoped to // UUID of the Project where the VC is scoped to - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` - - // Speed of the Virtual Circuit resource. + // (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. // Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. // +kubebuilder:validation:Optional Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` - // 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. + // (String) 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. + // * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * 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. // 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. // * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. // * 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. // +kubebuilder:validation:Optional Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` - // Tags for the Virtual Circuit resource. - // Tags attached to the virtual circuit + // (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + // * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * For a /126 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. + // A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + // * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + // * For a /126 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. // +kubebuilder:validation:Optional - Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` + SubnetIPv6 *string `json:"subnetIpv6,omitempty" tf:"subnet_ipv6,omitempty"` - // UUID of the VLAN to associate. - // UUID of the VLAN to associate - // +crossplane:generate:reference:type=Vlan + // (List of String) Tags attached to the virtual circuit + // Tags attached to the virtual circuit // +kubebuilder:validation:Optional - VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + Tags []*string `json:"tags,omitempty" tf:"tags,omitempty"` - // Reference to a Vlan to populate vlanId. + // (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + // UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. // +kubebuilder:validation:Optional - VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + VirtualCircuitID *string `json:"virtualCircuitId,omitempty" tf:"virtual_circuit_id,omitempty"` - // Selector for a Vlan to populate vlanId. + // (String) UUID of the VLAN to associate + // UUID of the VLAN to associate // +kubebuilder:validation:Optional - VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` + VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` - // UUID of the VRF to associate. + // (String) UUID of the VRF to associate // UUID of the VRF to associate - // +crossplane:generate:reference:type=Vrf // +kubebuilder:validation:Optional VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` - - // Reference to a Vrf to populate vrfId. - // +kubebuilder:validation:Optional - VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` - - // Selector for a Vrf to populate vrfId. - // +kubebuilder:validation:Optional - VrfIDSelector *v1.Selector `json:"vrfIdSelector,omitempty" tf:"-"` } // VirtualCircuitSpec defines the desired state of VirtualCircuit type VirtualCircuitSpec struct { v1.ResourceSpec `json:",inline"` ForProvider VirtualCircuitParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider VirtualCircuitInitParameters `json:"initProvider,omitempty"` } // VirtualCircuitStatus defines the observed state of VirtualCircuit. @@ -171,19 +340,22 @@ type VirtualCircuitStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // VirtualCircuit is the Schema for the VirtualCircuits 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type VirtualCircuit struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec VirtualCircuitSpec `json:"spec"` - Status VirtualCircuitStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.portId) || (has(self.initProvider) && has(self.initProvider.portId))",message="spec.forProvider.portId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + Spec VirtualCircuitSpec `json:"spec"` + Status VirtualCircuitStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_vlan_terraformed.go b/apis/metal/v1alpha1/zz_vlan_terraformed.go new file mode 100755 index 0000000..dcce306 --- /dev/null +++ b/apis/metal/v1alpha1/zz_vlan_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Vlan +func (mg *Vlan) GetTerraformResourceType() string { + return "equinix_metal_vlan" +} + +// GetConnectionDetailsMapping for this Vlan +func (tr *Vlan) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Vlan +func (tr *Vlan) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Vlan +func (tr *Vlan) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Vlan +func (tr *Vlan) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Vlan +func (tr *Vlan) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Vlan +func (tr *Vlan) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Vlan +func (tr *Vlan) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Vlan +func (tr *Vlan) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Vlan using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Vlan) LateInitialize(attrs []byte) (bool, error) { + params := &VlanParameters{} + 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 *Vlan) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_vlan_types.go b/apis/metal/v1alpha1/zz_vlan_types.go index a1e272f..ec8f9dc 100755 --- a/apis/metal/v1alpha1/zz_vlan_types.go +++ b/apis/metal/v1alpha1/zz_vlan_types.go @@ -25,10 +25,53 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type VlanInitParameters struct { + + // Description string. + // Description string + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Deprecated) Facility where to create the VLAN. Use metro instead; read the facility to metro migration guide + // Facility where to create the VLAN + Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` + + // Metro in which to create the VLAN + // Metro in which to create the VLAN + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // ID of parent project. + // ID of parent project + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // VLAN ID, must be unique in metro. + // VLAN ID, must be unique in metro + Vxlan *float64 `json:"vxlan,omitempty" tf:"vxlan,omitempty"` +} + type VlanObservation struct { + // Description string. + // Description string + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // (Deprecated) Facility where to create the VLAN. Use metro instead; read the facility to metro migration guide + // Facility where to create the VLAN + Facility *string `json:"facility,omitempty" tf:"facility,omitempty"` + // ID of the virtual network. ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Metro in which to create the VLAN + // Metro in which to create the VLAN + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // ID of parent project. + // ID of parent project + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // VLAN ID, must be unique in metro. + // VLAN ID, must be unique in metro + Vxlan *float64 `json:"vxlan,omitempty" tf:"vxlan,omitempty"` } type VlanParameters struct { @@ -50,18 +93,9 @@ type VlanParameters struct { // ID of parent project. // ID of parent project - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` - // VLAN ID, must be unique in metro. // VLAN ID, must be unique in metro // +kubebuilder:validation:Optional @@ -72,6 +106,17 @@ type VlanParameters struct { type VlanSpec struct { v1.ResourceSpec `json:",inline"` ForProvider VlanParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider VlanInitParameters `json:"initProvider,omitempty"` } // VlanStatus defines the observed state of Vlan. @@ -81,19 +126,21 @@ type VlanStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Vlan is the Schema for the Vlans 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Vlan struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec VlanSpec `json:"spec"` - Status VlanStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + Spec VlanSpec `json:"spec"` + Status VlanStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_vrf_terraformed.go b/apis/metal/v1alpha1/zz_vrf_terraformed.go new file mode 100755 index 0000000..529f562 --- /dev/null +++ b/apis/metal/v1alpha1/zz_vrf_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Vrf +func (mg *Vrf) GetTerraformResourceType() string { + return "equinix_metal_vrf" +} + +// GetConnectionDetailsMapping for this Vrf +func (tr *Vrf) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this Vrf +func (tr *Vrf) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Vrf +func (tr *Vrf) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Vrf +func (tr *Vrf) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Vrf +func (tr *Vrf) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Vrf +func (tr *Vrf) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Vrf +func (tr *Vrf) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Vrf +func (tr *Vrf) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Vrf using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Vrf) LateInitialize(attrs []byte) (bool, error) { + params := &VrfParameters{} + 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 *Vrf) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/metal/v1alpha1/zz_vrf_types.go b/apis/metal/v1alpha1/zz_vrf_types.go index 331ba6b..47ed42e 100755 --- a/apis/metal/v1alpha1/zz_vrf_types.go +++ b/apis/metal/v1alpha1/zz_vrf_types.go @@ -25,8 +25,62 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type VrfInitParameters struct { + + // Description of the VRF. + // Description of the VRF + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // 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. + // 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. + // +listType=set + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // The 4-byte ASN set on the VRF. + // The 4-byte ASN set on the VRF. + LocalAsn *float64 `json:"localAsn,omitempty" tf:"local_asn,omitempty"` + + // Metro ID or Code where the VRF will be deployed. + // Metro Code + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // User-supplied name of the VRF, unique to the project + // User-supplied name of the VRF, unique to the project + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Project ID where the VRF will be deployed. + // Project ID + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` +} + type VrfObservation struct { + + // Description of the VRF. + // Description of the VRF + Description *string `json:"description,omitempty" tf:"description,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // 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. + // 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. + // +listType=set + IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` + + // The 4-byte ASN set on the VRF. + // The 4-byte ASN set on the VRF. + LocalAsn *float64 `json:"localAsn,omitempty" tf:"local_asn,omitempty"` + + // Metro ID or Code where the VRF will be deployed. + // Metro Code + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` + + // User-supplied name of the VRF, unique to the project + // User-supplied name of the VRF, unique to the project + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Project ID where the VRF will be deployed. + // Project ID + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } type VrfParameters struct { @@ -39,6 +93,7 @@ type VrfParameters struct { // 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. // 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. // +kubebuilder:validation:Optional + // +listType=set IPRanges []*string `json:"ipRanges,omitempty" tf:"ip_ranges,omitempty"` // The 4-byte ASN set on the VRF. @@ -48,33 +103,35 @@ type VrfParameters struct { // Metro ID or Code where the VRF will be deployed. // Metro Code - // +kubebuilder:validation:Required - Metro *string `json:"metro" tf:"metro,omitempty"` + // +kubebuilder:validation:Optional + Metro *string `json:"metro,omitempty" tf:"metro,omitempty"` // User-supplied name of the VRF, unique to the project // User-supplied name of the VRF, unique to the project - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` // Project ID where the VRF will be deployed. // Project ID - // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - - // Reference to a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` - - // Selector for a Project to populate projectId. - // +kubebuilder:validation:Optional - ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` } // VrfSpec defines the desired state of Vrf type VrfSpec struct { v1.ResourceSpec `json:",inline"` ForProvider VrfParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider VrfInitParameters `json:"initProvider,omitempty"` } // VrfStatus defines the observed state of Vrf. @@ -84,19 +141,23 @@ type VrfStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Vrf is the Schema for the Vrfs 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Vrf struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec VrfSpec `json:"spec"` - Status VrfStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.metro) || (has(self.initProvider) && has(self.initProvider.metro))",message="spec.forProvider.metro is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" + Spec VrfSpec `json:"spec"` + Status VrfStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_acltemplate_terraformed.go b/apis/network/v1alpha1/zz_acltemplate_terraformed.go new file mode 100755 index 0000000..d9579b7 --- /dev/null +++ b/apis/network/v1alpha1/zz_acltemplate_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this ACLTemplate +func (mg *ACLTemplate) GetTerraformResourceType() string { + return "equinix_network_acl_template" +} + +// GetConnectionDetailsMapping for this ACLTemplate +func (tr *ACLTemplate) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this ACLTemplate +func (tr *ACLTemplate) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this ACLTemplate +func (tr *ACLTemplate) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this ACLTemplate +func (tr *ACLTemplate) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this ACLTemplate +func (tr *ACLTemplate) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this ACLTemplate +func (tr *ACLTemplate) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this ACLTemplate +func (tr *ACLTemplate) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this ACLTemplate +func (tr *ACLTemplate) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this ACLTemplate using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *ACLTemplate) LateInitialize(attrs []byte) (bool, error) { + params := &ACLTemplateParameters{} + 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 *ACLTemplate) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_acltemplate_types.go b/apis/network/v1alpha1/zz_acltemplate_types.go index ad27b73..fda89b8 100755 --- a/apis/network/v1alpha1/zz_acltemplate_types.go +++ b/apis/network/v1alpha1/zz_acltemplate_types.go @@ -25,10 +25,36 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ACLTemplateInitParameters struct { + + // ACL template description, up to 200 characters. + // ACL template description, up to 200 characters + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + // One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + InboundRule []InboundRuleInitParameters `json:"inboundRule,omitempty" tf:"inbound_rule,omitempty"` + + // (Deprecated) ACL template location metro code. + // ACL template location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // ACL template name. + // ACL template name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization. + // The unique identifier of Project Resource to which ACL template is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` +} + type ACLTemplateObservation struct { - // Status of ACL template provisioning process, where template was applied. - // One of PROVISIONING, PROVISIONED. + // ACL template description, up to 200 characters. + // ACL template description, up to 200 characters + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Status of ACL template provisioning process, where template was applied. One of PROVISIONING, PROVISIONED. // Status of ACL template provisioning process on a device, where template was applied DeviceACLStatus *string `json:"deviceAclStatus,omitempty" tf:"device_acl_status,omitempty"` @@ -42,12 +68,22 @@ type ACLTemplateObservation struct { ID *string `json:"id,omitempty" tf:"id,omitempty"` - // One or more rules to specify allowed inbound traffic. - // Rules are ordered, matching traffic rule stops processing subsequent ones. // One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. - // +kubebuilder:validation:Required + // One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. InboundRule []InboundRuleObservation `json:"inboundRule,omitempty" tf:"inbound_rule,omitempty"` + // (Deprecated) ACL template location metro code. + // ACL template location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // ACL template name. + // ACL template name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization. + // The unique identifier of Project Resource to which ACL template is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Unique identifier of ACL template resource. // Unique identifier of ACL template resource UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` @@ -60,11 +96,10 @@ type ACLTemplateParameters struct { // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` - // One or more rules to specify allowed inbound traffic. - // Rules are ordered, matching traffic rule stops processing subsequent ones. // One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. - // +kubebuilder:validation:Required - InboundRule []InboundRuleParameters `json:"inboundRule" tf:"inbound_rule,omitempty"` + // One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + // +kubebuilder:validation:Optional + InboundRule []InboundRuleParameters `json:"inboundRule,omitempty" tf:"inbound_rule,omitempty"` // (Deprecated) ACL template location metro code. // ACL template location metro code @@ -73,20 +108,21 @@ type ACLTemplateParameters struct { // ACL template name. // ACL template name - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` - // Unique Identifier for the project resource where the acl template is scoped to.If you - // leave it out, the ACL template will be created under the default project id of your organization. + // Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization. // The unique identifier of Project Resource to which ACL template is scoped to // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` } +type DeviceDetailsInitParameters struct { +} + type DeviceDetailsObservation struct { - // Device ACL provisioning status where template was applied. One of PROVISIONING, - // PROVISIONED. + // Device ACL provisioning status where template was applied. One of PROVISIONING, PROVISIONED. ACLStatus *string `json:"aclStatus,omitempty" tf:"acl_status,omitempty"` // Device name. @@ -99,13 +135,64 @@ type DeviceDetailsObservation struct { type DeviceDetailsParameters struct { } +type InboundRuleInitParameters struct { + + // Inbound rule description, up to 200 characters. + // Inbound rule description, up to 200 characters + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + // Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word + DstPort *string `json:"dstPort,omitempty" tf:"dst_port,omitempty"` + + // Inbound traffic protocol. One of IP, TCP, UDP. + // Inbound traffic protocol. One of: `IP`, `TCP`, `UDP` + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` + + // Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + // Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word + SrcPort *string `json:"srcPort,omitempty" tf:"src_port,omitempty"` + + // Inbound traffic source IP subnet in CIDR format. + // Inbound traffic source IP subnet in CIDR format + Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` + + // (Deprecated) Inbound traffic source IP subnets in CIDR format. + // Inbound traffic source IP subnets in CIDR format + Subnets []*string `json:"subnets,omitempty" tf:"subnets,omitempty"` +} + type InboundRuleObservation struct { + // Inbound rule description, up to 200 characters. + // Inbound rule description, up to 200 characters + Description *string `json:"description,omitempty" tf:"description,omitempty"` + + // Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + // Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word + DstPort *string `json:"dstPort,omitempty" tf:"dst_port,omitempty"` + + // Inbound traffic protocol. One of IP, TCP, UDP. + // Inbound traffic protocol. One of: `IP`, `TCP`, `UDP` + Protocol *string `json:"protocol,omitempty" tf:"protocol,omitempty"` + // Inbound rule sequence number SequenceNumber *float64 `json:"sequenceNumber,omitempty" tf:"sequence_number,omitempty"` // Type of traffic source used in a given inbound rule SourceType *string `json:"sourceType,omitempty" tf:"source_type,omitempty"` + + // Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + // Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word + SrcPort *string `json:"srcPort,omitempty" tf:"src_port,omitempty"` + + // Inbound traffic source IP subnet in CIDR format. + // Inbound traffic source IP subnet in CIDR format + Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` + + // (Deprecated) Inbound traffic source IP subnets in CIDR format. + // Inbound traffic source IP subnets in CIDR format + Subnets []*string `json:"subnets,omitempty" tf:"subnets,omitempty"` } type InboundRuleParameters struct { @@ -115,21 +202,19 @@ type InboundRuleParameters struct { // +kubebuilder:validation:Optional Description *string `json:"description,omitempty" tf:"description,omitempty"` - // Inbound traffic destination ports. Allowed values are a comma separated - // list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + // Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. // Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional DstPort *string `json:"dstPort" tf:"dst_port,omitempty"` // Inbound traffic protocol. One of IP, TCP, UDP. // Inbound traffic protocol. One of: `IP`, `TCP`, `UDP` - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Protocol *string `json:"protocol" tf:"protocol,omitempty"` - // Inbound traffic source ports. Allowed values are a comma separated list - // of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + // Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. // Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional SrcPort *string `json:"srcPort" tf:"src_port,omitempty"` // Inbound traffic source IP subnet in CIDR format. @@ -147,6 +232,17 @@ type InboundRuleParameters struct { type ACLTemplateSpec struct { v1.ResourceSpec `json:",inline"` ForProvider ACLTemplateParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ACLTemplateInitParameters `json:"initProvider,omitempty"` } // ACLTemplateStatus defines the observed state of ACLTemplate. @@ -156,19 +252,22 @@ type ACLTemplateStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // ACLTemplate is the Schema for the ACLTemplates 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type ACLTemplate struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ACLTemplateSpec `json:"spec"` - Status ACLTemplateStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.inboundRule) || (has(self.initProvider) && has(self.initProvider.inboundRule))",message="spec.forProvider.inboundRule is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + Spec ACLTemplateSpec `json:"spec"` + Status ACLTemplateStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_bgp_terraformed.go b/apis/network/v1alpha1/zz_bgp_terraformed.go new file mode 100755 index 0000000..3902bf5 --- /dev/null +++ b/apis/network/v1alpha1/zz_bgp_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this BGP +func (mg *BGP) GetTerraformResourceType() string { + return "equinix_network_bgp" +} + +// GetConnectionDetailsMapping for this BGP +func (tr *BGP) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"authentication_key": "authenticationKeySecretRef"} +} + +// GetObservation of this BGP +func (tr *BGP) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this BGP +func (tr *BGP) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this BGP +func (tr *BGP) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this BGP +func (tr *BGP) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this BGP +func (tr *BGP) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this BGP +func (tr *BGP) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this BGP +func (tr *BGP) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this BGP using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *BGP) LateInitialize(attrs []byte) (bool, error) { + params := &BGPParameters{} + 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 *BGP) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_bgp_types.go b/apis/network/v1alpha1/zz_bgp_types.go index 7693fe6..44ae639 100755 --- a/apis/network/v1alpha1/zz_bgp_types.go +++ b/apis/network/v1alpha1/zz_bgp_types.go @@ -25,22 +25,66 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type BGPInitParameters struct { + + // shared key used for BGP peer authentication. + // Shared key used for BGP peer authentication + AuthenticationKeySecretRef *v1.SecretKeySelector `json:"authenticationKeySecretRef,omitempty" tf:"-"` + + // identifier of a connection established between. network device and remote service provider that will be used for peering. + // Identifier of a connection established between network device and remote service provider that will be used for peering + ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + + // Local ASN number. + // Local ASN number + LocalAsn *float64 `json:"localAsn,omitempty" tf:"local_asn,omitempty"` + + // IP address in CIDR format of a local device. + // IP address in CIDR format of a local device + LocalIPAddress *string `json:"localIpAddress,omitempty" tf:"local_ip_address,omitempty"` + + // Remote ASN number. + // Remote ASN number + RemoteAsn *float64 `json:"remoteAsn,omitempty" tf:"remote_asn,omitempty"` + + // IP address of remote peer. + // IP address of remote peer + RemoteIPAddress *string `json:"remoteIpAddress,omitempty" tf:"remote_ip_address,omitempty"` +} + type BGPObservation struct { - // unique identifier of a network device that is a local peer in a given BGP peering - // configuration. + // identifier of a connection established between. network device and remote service provider that will be used for peering. + // Identifier of a connection established between network device and remote service provider that will be used for peering + ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + + // unique identifier of a network device that is a local peer in a given BGP peering configuration. // Unique identifier of a network device that is a local peer in a given BGP peering configuration DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` ID *string `json:"id,omitempty" tf:"id,omitempty"` - // BGP peering configuration provisioning status, one of PROVISIONING, - // PENDING_UPDATE, PROVISIONED, FAILED. + // Local ASN number. + // Local ASN number + LocalAsn *float64 `json:"localAsn,omitempty" tf:"local_asn,omitempty"` + + // IP address in CIDR format of a local device. + // IP address in CIDR format of a local device + LocalIPAddress *string `json:"localIpAddress,omitempty" tf:"local_ip_address,omitempty"` + + // BGP peering configuration provisioning status, one of PROVISIONING, PENDING_UPDATE, PROVISIONED, FAILED. // BGP peering configuration provisioning status ProvisioningStatus *string `json:"provisioningStatus,omitempty" tf:"provisioning_status,omitempty"` - // BGP peer state, one of Idle, Connect, Active, OpenSent, OpenConfirm, - // Established. + // Remote ASN number. + // Remote ASN number + RemoteAsn *float64 `json:"remoteAsn,omitempty" tf:"remote_asn,omitempty"` + + // IP address of remote peer. + // IP address of remote peer + RemoteIPAddress *string `json:"remoteIpAddress,omitempty" tf:"remote_ip_address,omitempty"` + + // BGP peer state, one of Idle, Connect, Active, OpenSent, OpenConfirm, Established. // BGP peer state State *string `json:"state,omitempty" tf:"state,omitempty"` @@ -56,37 +100,47 @@ type BGPParameters struct { // +kubebuilder:validation:Optional AuthenticationKeySecretRef *v1.SecretKeySelector `json:"authenticationKeySecretRef,omitempty" tf:"-"` - // identifier of a connection established between. - // network device and remote service provider that will be used for peering. + // identifier of a connection established between. network device and remote service provider that will be used for peering. // Identifier of a connection established between network device and remote service provider that will be used for peering - // +kubebuilder:validation:Required - ConnectionID *string `json:"connectionId" tf:"connection_id,omitempty"` + // +kubebuilder:validation:Optional + ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` // Local ASN number. // Local ASN number - // +kubebuilder:validation:Required - LocalAsn *float64 `json:"localAsn" tf:"local_asn,omitempty"` + // +kubebuilder:validation:Optional + LocalAsn *float64 `json:"localAsn,omitempty" tf:"local_asn,omitempty"` // IP address in CIDR format of a local device. // IP address in CIDR format of a local device - // +kubebuilder:validation:Required - LocalIPAddress *string `json:"localIpAddress" tf:"local_ip_address,omitempty"` + // +kubebuilder:validation:Optional + LocalIPAddress *string `json:"localIpAddress,omitempty" tf:"local_ip_address,omitempty"` // Remote ASN number. // Remote ASN number - // +kubebuilder:validation:Required - RemoteAsn *float64 `json:"remoteAsn" tf:"remote_asn,omitempty"` + // +kubebuilder:validation:Optional + RemoteAsn *float64 `json:"remoteAsn,omitempty" tf:"remote_asn,omitempty"` // IP address of remote peer. // IP address of remote peer - // +kubebuilder:validation:Required - RemoteIPAddress *string `json:"remoteIpAddress" tf:"remote_ip_address,omitempty"` + // +kubebuilder:validation:Optional + RemoteIPAddress *string `json:"remoteIpAddress,omitempty" tf:"remote_ip_address,omitempty"` } // BGPSpec defines the desired state of BGP type BGPSpec struct { v1.ResourceSpec `json:",inline"` ForProvider BGPParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider BGPInitParameters `json:"initProvider,omitempty"` } // BGPStatus defines the observed state of BGP. @@ -96,19 +150,25 @@ type BGPStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // BGP is the Schema for the BGPs 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type BGP struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BGPSpec `json:"spec"` - Status BGPStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.connectionId) || (has(self.initProvider) && has(self.initProvider.connectionId))",message="spec.forProvider.connectionId is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.localAsn) || (has(self.initProvider) && has(self.initProvider.localAsn))",message="spec.forProvider.localAsn is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.localIpAddress) || (has(self.initProvider) && has(self.initProvider.localIpAddress))",message="spec.forProvider.localIpAddress is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.remoteAsn) || (has(self.initProvider) && has(self.initProvider.remoteAsn))",message="spec.forProvider.remoteAsn is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.remoteIpAddress) || (has(self.initProvider) && has(self.initProvider.remoteIpAddress))",message="spec.forProvider.remoteIpAddress is a required parameter" + Spec BGPSpec `json:"spec"` + Status BGPStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_device_terraformed.go b/apis/network/v1alpha1/zz_device_terraformed.go new file mode 100755 index 0000000..126b958 --- /dev/null +++ b/apis/network/v1alpha1/zz_device_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Device +func (mg *Device) GetTerraformResourceType() string { + return "equinix_network_device" +} + +// GetConnectionDetailsMapping for this Device +func (tr *Device) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"cluster_details[*].node0[*].license_token": "clusterDetails[*].node0[*].licenseTokenSecretRef", "cluster_details[*].node0[*].vendor_configuration[*].activation_key": "clusterDetails[*].node0[*].vendorConfiguration[*].activationKeySecretRef", "cluster_details[*].node0[*].vendor_configuration[*].admin_password": "clusterDetails[*].node0[*].vendorConfiguration[*].adminPasswordSecretRef", "cluster_details[*].node0[*].vendor_configuration[*].license_id": "clusterDetails[*].node0[*].vendorConfiguration[*].licenseIdSecretRef", "cluster_details[*].node0[*].vendor_configuration[*].license_key": "clusterDetails[*].node0[*].vendorConfiguration[*].licenseKeySecretRef", "cluster_details[*].node0[*].vendor_configuration[*].panorama_auth_key": "clusterDetails[*].node0[*].vendorConfiguration[*].panoramaAuthKeySecretRef", "cluster_details[*].node0[*].vendor_configuration[*].root_password": "clusterDetails[*].node0[*].vendorConfiguration[*].rootPasswordSecretRef", "cluster_details[*].node1[*].license_token": "clusterDetails[*].node1[*].licenseTokenSecretRef", "cluster_details[*].node1[*].vendor_configuration[*].activation_key": "clusterDetails[*].node1[*].vendorConfiguration[*].activationKeySecretRef", "cluster_details[*].node1[*].vendor_configuration[*].admin_password": "clusterDetails[*].node1[*].vendorConfiguration[*].adminPasswordSecretRef", "cluster_details[*].node1[*].vendor_configuration[*].license_id": "clusterDetails[*].node1[*].vendorConfiguration[*].licenseIdSecretRef", "cluster_details[*].node1[*].vendor_configuration[*].license_key": "clusterDetails[*].node1[*].vendorConfiguration[*].licenseKeySecretRef", "cluster_details[*].node1[*].vendor_configuration[*].panorama_auth_key": "clusterDetails[*].node1[*].vendorConfiguration[*].panoramaAuthKeySecretRef", "cluster_details[*].node1[*].vendor_configuration[*].root_password": "clusterDetails[*].node1[*].vendorConfiguration[*].rootPasswordSecretRef"} +} + +// GetObservation of this Device +func (tr *Device) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Device +func (tr *Device) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Device +func (tr *Device) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Device +func (tr *Device) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Device +func (tr *Device) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Device +func (tr *Device) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Device +func (tr *Device) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Device using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Device) LateInitialize(attrs []byte) (bool, error) { + params := &DeviceParameters{} + 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 *Device) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_device_types.go b/apis/network/v1alpha1/zz_device_types.go index 8ce4c54..0663b3a 100755 --- a/apis/network/v1alpha1/zz_device_types.go +++ b/apis/network/v1alpha1/zz_device_types.go @@ -25,22 +25,37 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type ClusterDetailsInitParameters struct { + + // The name of the cluster device + // The name of the cluster device + ClusterName *string `json:"clusterName,omitempty" tf:"cluster_name,omitempty"` + + // An object that has node0 configuration. See Cluster Details - Nodes below for more details. + // An object that has node0 details + Node0 []Node0InitParameters `json:"node0,omitempty" tf:"node0,omitempty"` + + // An object that has node1 configuration. See Cluster Details - Nodes below for more details. + // An object that has node1 details + Node1 []Node1InitParameters `json:"node1,omitempty" tf:"node1,omitempty"` +} + type ClusterDetailsObservation struct { // The ID of the cluster. // The id of the cluster ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` - // An object that has node0 configuration. - // See Cluster Details - Nodes below for more details. + // The name of the cluster device + // The name of the cluster device + ClusterName *string `json:"clusterName,omitempty" tf:"cluster_name,omitempty"` + + // An object that has node0 configuration. See Cluster Details - Nodes below for more details. // An object that has node0 details - // +kubebuilder:validation:Required Node0 []Node0Observation `json:"node0,omitempty" tf:"node0,omitempty"` - // An object that has node1 configuration. - // See Cluster Details - Nodes below for more details. + // An object that has node1 configuration. See Cluster Details - Nodes below for more details. // An object that has node1 details - // +kubebuilder:validation:Required Node1 []Node1Observation `json:"node1,omitempty" tf:"node1,omitempty"` // The number of nodes in the cluster. @@ -52,39 +67,202 @@ type ClusterDetailsParameters struct { // The name of the cluster device // The name of the cluster device - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ClusterName *string `json:"clusterName" tf:"cluster_name,omitempty"` - // An object that has node0 configuration. - // See Cluster Details - Nodes below for more details. + // An object that has node0 configuration. See Cluster Details - Nodes below for more details. // An object that has node0 details - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Node0 []Node0Parameters `json:"node0" tf:"node0,omitempty"` - // An object that has node1 configuration. - // See Cluster Details - Nodes below for more details. + // An object that has node1 configuration. See Cluster Details - Nodes below for more details. // An object that has node1 details - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Node1 []Node1Parameters `json:"node1" tf:"node1,omitempty"` } +type DeviceInitParameters struct { + + // Identifier of a WAN interface ACL template that will be applied on the device. + // Unique identifier of applied ACL template + ACLTemplateID *string `json:"aclTemplateId,omitempty" tf:"acl_template_id,omitempty"` + + // Billing account number for a device. + // Device billing account number + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps). + // Additional Internet bandwidth, in Mbps, that will be allocated to the device + AdditionalBandwidth *float64 `json:"additionalBandwidth,omitempty" tf:"additional_bandwidth,omitempty"` + + // Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default). + // Boolean value that determines device licensing mode: bring your own license or subscription (default) + Byol *bool `json:"byol,omitempty" tf:"byol,omitempty"` + + // Identifier of a cloud init file that will be applied on the device. + // Unique identifier of applied cloud init file + CloudInitFileID *string `json:"cloudInitFileId,omitempty" tf:"cloud_init_file_id,omitempty"` + + // An object that has the cluster details. See Cluster Details below for more details. + // An object that has the cluster details + ClusterDetails []ClusterDetailsInitParameters `json:"clusterDetails,omitempty" tf:"cluster_details,omitempty"` + + // Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS + // Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT + Connectivity *string `json:"connectivity,omitempty" tf:"connectivity,omitempty"` + + // Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.) + // Number of CPU cores used by device + CoreCount *float64 `json:"coreCount,omitempty" tf:"core_count,omitempty"` + + // Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices. + // Unique ID of an existing device + DiverseDeviceID *string `json:"diverseDeviceId,omitempty" tf:"diverse_device_id,omitempty"` + + // Device hostname prefix. + // Device hostname prefix + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // Number of network interfaces on a device. If not specified, default number for a given device type will be used. + // Number of network interfaces on a device. If not specified, default number for a given device type will be used + InterfaceCount *float64 `json:"interfaceCount,omitempty" tf:"interface_count,omitempty"` + + // Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode. + // Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + LicenseFile *string `json:"licenseFile,omitempty" tf:"license_file,omitempty"` + + // Identifier of a license file that will be applied on the device. + // Unique identifier of applied license file + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + + // License Token applicable for some device types in BYOL licensing mode. + // License Token applicable for some device types in BYOL licensing mode + LicenseToken *string `json:"licenseToken,omitempty" tf:"license_token,omitempty"` + + // Device location metro code. + // Device location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // Identifier of an MGMT interface ACL template that will be applied on the device. + // Unique identifier of applied MGMT ACL template + MgmtACLTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty" tf:"mgmt_acl_template_uuid,omitempty"` + + // Device name. + // Device name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // List of email addresses that will receive device status notifications. + // List of email addresses that will receive device status notifications + // +listType=set + Notifications []*string `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // Name/number used to identify device order on the invoice. + // Name/number used to identify device order on the invoice + OrderReference *string `json:"orderReference,omitempty" tf:"order_reference,omitempty"` + + // Device software package code. + // Device software package code + PackageCode *string `json:"packageCode,omitempty" tf:"package_code,omitempty"` + + // Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. + // The unique identifier of Project Resource to which device is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Purchase order number associated with a device order. + // Purchase order number associated with a device order + PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` + + // Definition of SSH key that will be provisioned on a device + SSHKey []DeviceSSHKeyInitParameters `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` + + // Definition of secondary device for redundant device configurations. See Secondary Device below for more details. + // Definition of secondary device applicable for HA setup + SecondaryDevice []SecondaryDeviceInitParameters `json:"secondaryDevice,omitempty" tf:"secondary_device,omitempty"` + + // Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default). + // Boolean value that determines device management mode: self-managed or subscription (default) + SelfManaged *bool `json:"selfManaged,omitempty" tf:"self_managed,omitempty"` + + // Device term length. + // Device term length + TermLength *float64 `json:"termLength,omitempty" tf:"term_length,omitempty"` + + // Device license throughput. + // Device license throughput + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // License throughput unit. One of Mbps or Gbps. + // Device license throughput unit (Mbps or Gbps) + ThroughputUnit *string `json:"throughputUnit,omitempty" tf:"throughput_unit,omitempty"` + + // Device type code. + // Device type code + TypeCode *string `json:"typeCode,omitempty" tf:"type_code,omitempty"` + + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + // +mapType=granular + VendorConfiguration map[string]*string `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` + + // Device software software version. + // Device software software version + Version *string `json:"version,omitempty" tf:"version,omitempty"` + + // interface identifier. + // device interface id picked for WAN + WanInterfaceID *string `json:"wanInterfaceId,omitempty" tf:"wan_interface_id,omitempty"` +} + type DeviceObservation struct { + // Identifier of a WAN interface ACL template that will be applied on the device. + // Unique identifier of applied ACL template + ACLTemplateID *string `json:"aclTemplateId,omitempty" tf:"acl_template_id,omitempty"` + + // Billing account number for a device. + // Device billing account number + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps). + // Additional Internet bandwidth, in Mbps, that will be allocated to the device + AdditionalBandwidth *float64 `json:"additionalBandwidth,omitempty" tf:"additional_bandwidth,omitempty"` + // (Autonomous System Number) Unique identifier for a network on the internet. // Autonomous system number Asn *float64 `json:"asn,omitempty" tf:"asn,omitempty"` - // An object that has the cluster details. See - // Cluster Details below for more details. + // Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default). + // Boolean value that determines device licensing mode: bring your own license or subscription (default) + Byol *bool `json:"byol,omitempty" tf:"byol,omitempty"` + + // Identifier of a cloud init file that will be applied on the device. + // Unique identifier of applied cloud init file + CloudInitFileID *string `json:"cloudInitFileId,omitempty" tf:"cloud_init_file_id,omitempty"` + + // An object that has the cluster details. See Cluster Details below for more details. // An object that has the cluster details - // +kubebuilder:validation:Optional ClusterDetails []ClusterDetailsObservation `json:"clusterDetails,omitempty" tf:"cluster_details,omitempty"` - // Name of the device with diverse device UUID. This field is returned in device details if the - // device is created by passing diverse_device_id. + // Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS + // Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT + Connectivity *string `json:"connectivity,omitempty" tf:"connectivity,omitempty"` + + // Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.) + // Number of CPU cores used by device + CoreCount *float64 `json:"coreCount,omitempty" tf:"core_count,omitempty"` + + // Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices. + // Unique ID of an existing device + DiverseDeviceID *string `json:"diverseDeviceId,omitempty" tf:"diverse_device_id,omitempty"` + + // Name of the device with diverse device UUID. This field is returned in device details if the device is created by passing diverse_device_id. // Diverse Device Name of an existing device DiverseDeviceName *string `json:"diverseDeviceName,omitempty" tf:"diverse_device_name,omitempty"` + // Device hostname prefix. + // Device hostname prefix + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + // interface identifier. ID *string `json:"id,omitempty" tf:"id,omitempty"` @@ -92,18 +270,64 @@ type DeviceObservation struct { // Device location Equinix Business Exchange name Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` - // List of device interfaces. See Interface Attribute below - // for more details. + // List of device interfaces. See Interface Attribute below for more details. // List of device interfaces Interface []InterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` - // Device license registration status. Possible values are APPLYING_LICENSE, - // REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. + // Number of network interfaces on a device. If not specified, default number for a given device type will be used. + // Number of network interfaces on a device. If not specified, default number for a given device type will be used + InterfaceCount *float64 `json:"interfaceCount,omitempty" tf:"interface_count,omitempty"` + + // Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode. + // Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + LicenseFile *string `json:"licenseFile,omitempty" tf:"license_file,omitempty"` + + // Identifier of a license file that will be applied on the device. + // Unique identifier of applied license file + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + + // Device license registration status. Possible values are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. // Device license registration status LicenseStatus *string `json:"licenseStatus,omitempty" tf:"license_status,omitempty"` - // Device redundancy type applicable for HA devices, either - // primary or secondary. + // License Token applicable for some device types in BYOL licensing mode. + // License Token applicable for some device types in BYOL licensing mode + LicenseToken *string `json:"licenseToken,omitempty" tf:"license_token,omitempty"` + + // Device location metro code. + // Device location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // Identifier of an MGMT interface ACL template that will be applied on the device. + // Unique identifier of applied MGMT ACL template + MgmtACLTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty" tf:"mgmt_acl_template_uuid,omitempty"` + + // Device name. + // Device name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // List of email addresses that will receive device status notifications. + // List of email addresses that will receive device status notifications + // +listType=set + Notifications []*string `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // Name/number used to identify device order on the invoice. + // Name/number used to identify device order on the invoice + OrderReference *string `json:"orderReference,omitempty" tf:"order_reference,omitempty"` + + // Device software package code. + // Device software package code + PackageCode *string `json:"packageCode,omitempty" tf:"package_code,omitempty"` + + // Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. + // The unique identifier of Project Resource to which device is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Purchase order number associated with a device order. + // Purchase order number associated with a device order + PurchaseOrderNumber *string `json:"purchaseOrderNumber,omitempty" tf:"purchase_order_number,omitempty"` + + // Device redundancy type applicable for HA devices, either primary or secondary. // Device redundancy type applicable for HA devices, either primary or secondary RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` @@ -123,23 +347,54 @@ type DeviceObservation struct { // FQDN of SSH enabled interface on the device SSHIPFqdn *string `json:"sshIpFqdn,omitempty" tf:"ssh_ip_fqdn,omitempty"` - // Definition of secondary device for redundant - // device configurations. See Secondary Device below for more details. + // Definition of SSH key that will be provisioned on a device + SSHKey []DeviceSSHKeyObservation `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` + + // Definition of secondary device for redundant device configurations. See Secondary Device below for more details. // Definition of secondary device applicable for HA setup - // +kubebuilder:validation:Optional SecondaryDevice []SecondaryDeviceObservation `json:"secondaryDevice,omitempty" tf:"secondary_device,omitempty"` - // Device provisioning status. Possible values are - // INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, - // WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, - // DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + // Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default). + // Boolean value that determines device management mode: self-managed or subscription (default) + SelfManaged *bool `json:"selfManaged,omitempty" tf:"self_managed,omitempty"` + + // Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. // Device provisioning status Status *string `json:"status,omitempty" tf:"status,omitempty"` + // Device term length. + // Device term length + TermLength *float64 `json:"termLength,omitempty" tf:"term_length,omitempty"` + + // Device license throughput. + // Device license throughput + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // License throughput unit. One of Mbps or Gbps. + // Device license throughput unit (Mbps or Gbps) + ThroughputUnit *string `json:"throughputUnit,omitempty" tf:"throughput_unit,omitempty"` + + // Device type code. + // Device type code + TypeCode *string `json:"typeCode,omitempty" tf:"type_code,omitempty"` + // Device unique identifier. // Device unique identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + // +mapType=granular + VendorConfiguration map[string]*string `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` + + // Device software software version. + // Device software software version + Version *string `json:"version,omitempty" tf:"version,omitempty"` + + // interface identifier. + // device interface id picked for WAN + WanInterfaceID *string `json:"wanInterfaceId,omitempty" tf:"wan_interface_id,omitempty"` + // Device location zone code. // Device location zone code ZoneCode *string `json:"zoneCode,omitempty" tf:"zone_code,omitempty"` @@ -154,17 +409,15 @@ type DeviceParameters struct { // Billing account number for a device. // Device billing account number - // +kubebuilder:validation:Required - AccountNumber *string `json:"accountNumber" tf:"account_number,omitempty"` + // +kubebuilder:validation:Optional + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` - // Additional Internet bandwidth, in Mbps, that will be - // allocated to the device (in addition to default 15Mbps). + // Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps). // Additional Internet bandwidth, in Mbps, that will be allocated to the device // +kubebuilder:validation:Optional AdditionalBandwidth *float64 `json:"additionalBandwidth,omitempty" tf:"additional_bandwidth,omitempty"` - // Boolean value that determines device licensing mode, i.e., - // bring your own license or subscription (default). + // Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default). // Boolean value that determines device licensing mode: bring your own license or subscription (default) // +kubebuilder:validation:Optional Byol *bool `json:"byol,omitempty" tf:"byol,omitempty"` @@ -174,26 +427,22 @@ type DeviceParameters struct { // +kubebuilder:validation:Optional CloudInitFileID *string `json:"cloudInitFileId,omitempty" tf:"cloud_init_file_id,omitempty"` - // An object that has the cluster details. See - // Cluster Details below for more details. + // An object that has the cluster details. See Cluster Details below for more details. // An object that has the cluster details // +kubebuilder:validation:Optional ClusterDetails []ClusterDetailsParameters `json:"clusterDetails,omitempty" tf:"cluster_details,omitempty"` - // Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). - // If not specified, default will be INTERNET-ACCESS + // Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS // Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT // +kubebuilder:validation:Optional Connectivity *string `json:"connectivity,omitempty" tf:"connectivity,omitempty"` // Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.) // Number of CPU cores used by device - // +kubebuilder:validation:Required - CoreCount *float64 `json:"coreCount" tf:"core_count,omitempty"` + // +kubebuilder:validation:Optional + CoreCount *float64 `json:"coreCount,omitempty" tf:"core_count,omitempty"` - // Unique ID of an existing device. - // Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual - // device. This field is only meaningful for single devices. + // Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices. // Unique ID of an existing device // +kubebuilder:validation:Optional DiverseDeviceID *string `json:"diverseDeviceId,omitempty" tf:"diverse_device_id,omitempty"` @@ -203,14 +452,12 @@ type DeviceParameters struct { // +kubebuilder:validation:Optional Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` - // Number of network interfaces on a device. If not specified, - // default number for a given device type will be used. + // Number of network interfaces on a device. If not specified, default number for a given device type will be used. // Number of network interfaces on a device. If not specified, default number for a given device type will be used // +kubebuilder:validation:Optional InterfaceCount *float64 `json:"interfaceCount,omitempty" tf:"interface_count,omitempty"` - // Path to the license file that will be uploaded and applied on a - // device. Applicable for some device types in BYOL licensing mode. + // Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode. // Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode // +kubebuilder:validation:Optional LicenseFile *string `json:"licenseFile,omitempty" tf:"license_file,omitempty"` @@ -220,33 +467,31 @@ type DeviceParameters struct { // +kubebuilder:validation:Optional LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` - // License Token applicable for some device types in BYOL licensing - // mode. + // License Token applicable for some device types in BYOL licensing mode. // License Token applicable for some device types in BYOL licensing mode // +kubebuilder:validation:Optional LicenseToken *string `json:"licenseToken,omitempty" tf:"license_token,omitempty"` // Device location metro code. // Device location metro code - // +kubebuilder:validation:Required - MetroCode *string `json:"metroCode" tf:"metro_code,omitempty"` + // +kubebuilder:validation:Optional + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` - // Identifier of an MGMT interface ACL template that will be - // applied on the device. + // Identifier of an MGMT interface ACL template that will be applied on the device. // Unique identifier of applied MGMT ACL template // +kubebuilder:validation:Optional MgmtACLTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty" tf:"mgmt_acl_template_uuid,omitempty"` // Device name. // Device name - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` - // List of email addresses that will receive device status - // notifications. + // List of email addresses that will receive device status notifications. // List of email addresses that will receive device status notifications - // +kubebuilder:validation:Required - Notifications []*string `json:"notifications" tf:"notifications,omitempty"` + // +kubebuilder:validation:Optional + // +listType=set + Notifications []*string `json:"notifications,omitempty" tf:"notifications,omitempty"` // Name/number used to identify device order on the invoice. // Name/number used to identify device order on the invoice @@ -255,11 +500,10 @@ type DeviceParameters struct { // Device software package code. // Device software package code - // +kubebuilder:validation:Required - PackageCode *string `json:"packageCode" tf:"package_code,omitempty"` + // +kubebuilder:validation:Optional + PackageCode *string `json:"packageCode,omitempty" tf:"package_code,omitempty"` - // Unique Identifier for the project resource where the device is scoped to.If you - // leave it out, the device will be created under the default project id of your organization. + // Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. // The unique identifier of Project Resource to which device is scoped to // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` @@ -273,22 +517,20 @@ type DeviceParameters struct { // +kubebuilder:validation:Optional SSHKey []DeviceSSHKeyParameters `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` - // Definition of secondary device for redundant - // device configurations. See Secondary Device below for more details. + // Definition of secondary device for redundant device configurations. See Secondary Device below for more details. // Definition of secondary device applicable for HA setup // +kubebuilder:validation:Optional SecondaryDevice []SecondaryDeviceParameters `json:"secondaryDevice,omitempty" tf:"secondary_device,omitempty"` - // Boolean value that determines device management mode, i.e., - // self-managed or Equinix-managed (default). + // Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default). // Boolean value that determines device management mode: self-managed or subscription (default) // +kubebuilder:validation:Optional SelfManaged *bool `json:"selfManaged,omitempty" tf:"self_managed,omitempty"` // Device term length. // Device term length - // +kubebuilder:validation:Required - TermLength *float64 `json:"termLength" tf:"term_length,omitempty"` + // +kubebuilder:validation:Optional + TermLength *float64 `json:"termLength,omitempty" tf:"term_length,omitempty"` // Device license throughput. // Device license throughput @@ -302,19 +544,19 @@ type DeviceParameters struct { // Device type code. // Device type code - // +kubebuilder:validation:Required - TypeCode *string `json:"typeCode" tf:"type_code,omitempty"` + // +kubebuilder:validation:Optional + TypeCode *string `json:"typeCode,omitempty" tf:"type_code,omitempty"` - // Map of vendor specific configuration parameters for a device - // (controller1, activationKey, managementType, siteId, systemIpAddress) + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) // +kubebuilder:validation:Optional + // +mapType=granular VendorConfiguration map[string]*string `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` // Device software software version. // Device software software version - // +kubebuilder:validation:Required - Version *string `json:"version" tf:"version,omitempty"` + // +kubebuilder:validation:Optional + Version *string `json:"version,omitempty" tf:"version,omitempty"` // interface identifier. // device interface id picked for WAN @@ -322,22 +564,44 @@ type DeviceParameters struct { WanInterfaceID *string `json:"wanInterfaceId,omitempty" tf:"wan_interface_id,omitempty"` } +type DeviceSSHKeyInitParameters struct { + + // Device name. + // Reference by name to previously provisioned public SSH key + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // username associated with given key. + // Username associated with given key + Username *string `json:"username,omitempty" tf:"username,omitempty"` +} + type DeviceSSHKeyObservation struct { + + // Device name. + // Reference by name to previously provisioned public SSH key + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // username associated with given key. + // Username associated with given key + Username *string `json:"username,omitempty" tf:"username,omitempty"` } type DeviceSSHKeyParameters struct { // Device name. // Reference by name to previously provisioned public SSH key - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional KeyName *string `json:"keyName" tf:"key_name,omitempty"` // username associated with given key. // Username associated with given key - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Username *string `json:"username" tf:"username,omitempty"` } +type InterfaceInitParameters struct { +} + type InterfaceObservation struct { // interface management type (Equinix Managed or empty). @@ -358,10 +622,7 @@ type InterfaceObservation struct { // interface operational status. One of up, down. OperationalStatus *string `json:"operationalStatus,omitempty" tf:"operational_status,omitempty"` - // Device provisioning status. Possible values are - // INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, - // WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, - // DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + // Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. Status *string `json:"status,omitempty" tf:"status,omitempty"` // interface type. @@ -371,8 +632,27 @@ type InterfaceObservation struct { type InterfaceParameters struct { } +type Node0InitParameters struct { + + // License file id. This is necessary for Fortinet and Juniper clusters. + // License file id. This is necessary for Fortinet and Juniper clusters + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + + // License token. This is necessary for Palo Alto clusters. + // License token. This is necessary for Palo Alto clusters + LicenseTokenSecretRef *v1.SecretKeySelector `json:"licenseTokenSecretRef,omitempty" tf:"-"` + + // An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details. + // An object that has fields relevant to the vendor of the cluster device + VendorConfiguration []VendorConfigurationInitParameters `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` +} + type Node0Observation struct { + // License file id. This is necessary for Fortinet and Juniper clusters. + // License file id. This is necessary for Fortinet and Juniper clusters + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + // reference by name to previously provisioned public SSH key. // The name of the node Name *string `json:"name,omitempty" tf:"name,omitempty"` @@ -380,6 +660,10 @@ type Node0Observation struct { // Device unique identifier. // The unique id of the node UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + + // An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details. + // An object that has fields relevant to the vendor of the cluster device + VendorConfiguration []VendorConfigurationObservation `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` } type Node0Parameters struct { @@ -394,16 +678,33 @@ type Node0Parameters struct { // +kubebuilder:validation:Optional LicenseTokenSecretRef *v1.SecretKeySelector `json:"licenseTokenSecretRef,omitempty" tf:"-"` - // An object that has fields relevant to the vendor of the - // cluster device. See Cluster Details - Nodes - Vendor Configuration - // below for more details. + // An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details. // An object that has fields relevant to the vendor of the cluster device // +kubebuilder:validation:Optional VendorConfiguration []VendorConfigurationParameters `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` } +type Node1InitParameters struct { + + // Identifier of a license file that will be applied on a secondary device. + // License file id. This is necessary for Fortinet and Juniper clusters + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + + // License Token can be provided for some device types o the device. + // License token. This is necessary for Palo Alto clusters + LicenseTokenSecretRef *v1.SecretKeySelector `json:"licenseTokenSecretRef,omitempty" tf:"-"` + + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + // An object that has fields relevant to the vendor of the cluster device + VendorConfiguration []Node1VendorConfigurationInitParameters `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` +} + type Node1Observation struct { + // Identifier of a license file that will be applied on a secondary device. + // License file id. This is necessary for Fortinet and Juniper clusters + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + // reference by name to previously provisioned public SSH key. // The name of the node Name *string `json:"name,omitempty" tf:"name,omitempty"` @@ -411,6 +712,10 @@ type Node1Observation struct { // Device unique identifier. // The unique id of the node UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + // An object that has fields relevant to the vendor of the cluster device + VendorConfiguration []Node1VendorConfigurationObservation `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` } type Node1Parameters struct { @@ -425,14 +730,89 @@ type Node1Parameters struct { // +kubebuilder:validation:Optional LicenseTokenSecretRef *v1.SecretKeySelector `json:"licenseTokenSecretRef,omitempty" tf:"-"` - // Map of vendor specific configuration parameters for a device - // (controller1, activationKey, managementType, siteId, systemIpAddress) + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) // An object that has fields relevant to the vendor of the cluster device // +kubebuilder:validation:Optional VendorConfiguration []Node1VendorConfigurationParameters `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` } +type Node1VendorConfigurationInitParameters struct { + + // Activation key. This is required for Velocloud clusters. + // Activation key. This is required for Velocloud clusters + ActivationKeySecretRef *v1.SecretKeySelector `json:"activationKeySecretRef,omitempty" tf:"-"` + + // 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. + // 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 + AdminPasswordSecretRef *v1.SecretKeySelector `json:"adminPasswordSecretRef,omitempty" tf:"-"` + + // System IP Address. Mandatory for the Fortinet SDWAN cluster device. + // System IP Address. Mandatory for the Fortinet SDWAN cluster device + Controller1 *string `json:"controller1,omitempty" tf:"controller1,omitempty"` + + // Controller fqdn. This is required for Velocloud clusters. + // Controller fqdn. This is required for Velocloud clusters + ControllerFqdn *string `json:"controllerFqdn,omitempty" tf:"controller_fqdn,omitempty"` + + // Secondary device hostname. + // Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // interface identifier. + // License id. This field is relevant only for the BlueCat DNS and DHCP Server + LicenseIDSecretRef *v1.SecretKeySelector `json:"licenseIdSecretRef,omitempty" tf:"-"` + + // License key. This field is relevant only for the BlueCat DNS and DHCP Server + LicenseKeySecretRef *v1.SecretKeySelector `json:"licenseKeySecretRef,omitempty" tf:"-"` + + // Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + PanoramaAuthKeySecretRef *v1.SecretKeySelector `json:"panoramaAuthKeySecretRef,omitempty" tf:"-"` + + // Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + PanoramaIPAddress *string `json:"panoramaIpAddress,omitempty" tf:"panorama_ip_address,omitempty"` + + // Private address. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateAddress *string `json:"privateAddress,omitempty" tf:"private_address,omitempty"` + + // Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateCidrMask *string `json:"privateCidrMask,omitempty" tf:"private_cidr_mask,omitempty"` + + // Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateGateway *string `json:"privateGateway,omitempty" tf:"private_gateway,omitempty"` + + // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. + // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster + RootPasswordSecretRef *v1.SecretKeySelector `json:"rootPasswordSecretRef,omitempty" tf:"-"` +} + type Node1VendorConfigurationObservation struct { + + // System IP Address. Mandatory for the Fortinet SDWAN cluster device. + // System IP Address. Mandatory for the Fortinet SDWAN cluster device + Controller1 *string `json:"controller1,omitempty" tf:"controller1,omitempty"` + + // Controller fqdn. This is required for Velocloud clusters. + // Controller fqdn. This is required for Velocloud clusters + ControllerFqdn *string `json:"controllerFqdn,omitempty" tf:"controller_fqdn,omitempty"` + + // Secondary device hostname. + // Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + PanoramaIPAddress *string `json:"panoramaIpAddress,omitempty" tf:"panorama_ip_address,omitempty"` + + // Private address. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateAddress *string `json:"privateAddress,omitempty" tf:"private_address,omitempty"` + + // Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateCidrMask *string `json:"privateCidrMask,omitempty" tf:"private_cidr_mask,omitempty"` + + // Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateGateway *string `json:"privateGateway,omitempty" tf:"private_gateway,omitempty"` } type Node1VendorConfigurationParameters struct { @@ -442,8 +822,7 @@ type Node1VendorConfigurationParameters struct { // +kubebuilder:validation:Optional ActivationKeySecretRef *v1.SecretKeySelector `json:"activationKeySecretRef,omitempty" tf:"-"` - // 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. + // 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. // 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 // +kubebuilder:validation:Optional AdminPasswordSecretRef *v1.SecretKeySelector `json:"adminPasswordSecretRef,omitempty" tf:"-"` @@ -463,29 +842,145 @@ type Node1VendorConfigurationParameters struct { // +kubebuilder:validation:Optional Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` - // The CLI password of the device. This field is relevant only for the - // Velocloud SDWAN cluster. + // interface identifier. + // License id. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + LicenseIDSecretRef *v1.SecretKeySelector `json:"licenseIdSecretRef,omitempty" tf:"-"` + + // License key. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + LicenseKeySecretRef *v1.SecretKeySelector `json:"licenseKeySecretRef,omitempty" tf:"-"` + + // Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + // +kubebuilder:validation:Optional + PanoramaAuthKeySecretRef *v1.SecretKeySelector `json:"panoramaAuthKeySecretRef,omitempty" tf:"-"` + + // Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + // +kubebuilder:validation:Optional + PanoramaIPAddress *string `json:"panoramaIpAddress,omitempty" tf:"panorama_ip_address,omitempty"` + + // Private address. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + PrivateAddress *string `json:"privateAddress,omitempty" tf:"private_address,omitempty"` + + // Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + PrivateCidrMask *string `json:"privateCidrMask,omitempty" tf:"private_cidr_mask,omitempty"` + + // Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + PrivateGateway *string `json:"privateGateway,omitempty" tf:"private_gateway,omitempty"` + + // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster // +kubebuilder:validation:Optional RootPasswordSecretRef *v1.SecretKeySelector `json:"rootPasswordSecretRef,omitempty" tf:"-"` } +type SSHKeyInitParameters struct { + + // Device name. + // Reference by name to previously provisioned public SSH key + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // username associated with given key. + // Username associated with given key + Username *string `json:"username,omitempty" tf:"username,omitempty"` +} + type SSHKeyObservation struct { + + // Device name. + // Reference by name to previously provisioned public SSH key + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // username associated with given key. + // Username associated with given key + Username *string `json:"username,omitempty" tf:"username,omitempty"` } type SSHKeyParameters struct { // Device name. // Reference by name to previously provisioned public SSH key - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional KeyName *string `json:"keyName" tf:"key_name,omitempty"` // username associated with given key. // Username associated with given key - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Username *string `json:"username" tf:"username,omitempty"` } +type SecondaryDeviceInitParameters struct { + + // Identifier of a WAN interface ACL template that will be applied on a secondary device. + // Unique identifier of applied ACL template + ACLTemplateID *string `json:"aclTemplateId,omitempty" tf:"acl_template_id,omitempty"` + + // Billing account number for secondary device. + // Device billing account number + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // Additional Internet bandwidth, in Mbps, for a secondary device. + // Additional Internet bandwidth, in Mbps, that will be allocated to the device + AdditionalBandwidth *float64 `json:"additionalBandwidth,omitempty" tf:"additional_bandwidth,omitempty"` + + // Identifier of a cloud init file that will be applied on a secondary device. + // Unique identifier of applied cloud init file + CloudInitFileID *string `json:"cloudInitFileId,omitempty" tf:"cloud_init_file_id,omitempty"` + + // Secondary device hostname. + // Device hostname prefix + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode. + // Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + LicenseFile *string `json:"licenseFile,omitempty" tf:"license_file,omitempty"` + + // Identifier of a license file that will be applied on a secondary device. + // Unique identifier of applied license file + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + + // License Token can be provided for some device types o the device. + // License Token applicable for some device types in BYOL licensing mode + LicenseToken *string `json:"licenseToken,omitempty" tf:"license_token,omitempty"` + + // Metro location of a secondary device. + // Device location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // Identifier of an MGMT interface ACL template that will be applied on a secondary device. + // Unique identifier of applied MGMT ACL template + MgmtACLTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty" tf:"mgmt_acl_template_uuid,omitempty"` + + // Secondary device name. + // Device name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // List of email addresses that will receive notifications about secondary device. + // List of email addresses that will receive device status notifications + // +listType=set + Notifications []*string `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // Definition of SSH key that will be provisioned on a device + SSHKey []SSHKeyInitParameters `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` + + // Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress. + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + // +mapType=granular + VendorConfiguration map[string]*string `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` + + // interface identifier. + // device interface id picked for WAN + WanInterfaceID *string `json:"wanInterfaceId,omitempty" tf:"wan_interface_id,omitempty"` +} + +type SecondaryDeviceInterfaceInitParameters struct { +} + type SecondaryDeviceInterfaceObservation struct { // interface management type (Equinix Managed or empty). @@ -506,10 +1001,7 @@ type SecondaryDeviceInterfaceObservation struct { // interface operational status. One of up, down. OperationalStatus *string `json:"operationalStatus,omitempty" tf:"operational_status,omitempty"` - // Device provisioning status. Possible values are - // INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, - // WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, - // DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + // Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. Status *string `json:"status,omitempty" tf:"status,omitempty"` // interface type. @@ -521,31 +1013,76 @@ type SecondaryDeviceInterfaceParameters struct { type SecondaryDeviceObservation struct { + // Identifier of a WAN interface ACL template that will be applied on a secondary device. + // Unique identifier of applied ACL template + ACLTemplateID *string `json:"aclTemplateId,omitempty" tf:"acl_template_id,omitempty"` + + // Billing account number for secondary device. + // Device billing account number + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // Additional Internet bandwidth, in Mbps, for a secondary device. + // Additional Internet bandwidth, in Mbps, that will be allocated to the device + AdditionalBandwidth *float64 `json:"additionalBandwidth,omitempty" tf:"additional_bandwidth,omitempty"` + // (Autonomous System Number) Unique identifier for a network on the internet. // Autonomous system number Asn *float64 `json:"asn,omitempty" tf:"asn,omitempty"` + // Identifier of a cloud init file that will be applied on a secondary device. + // Unique identifier of applied cloud init file + CloudInitFileID *string `json:"cloudInitFileId,omitempty" tf:"cloud_init_file_id,omitempty"` + + // Secondary device hostname. + // Device hostname prefix + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + // Device location Equinix Business Exchange name. // Device location Equinix Business Exchange name Ibx *string `json:"ibx,omitempty" tf:"ibx,omitempty"` - // List of device interfaces. See Interface Attribute below - // for more details. + // List of device interfaces. See Interface Attribute below for more details. // List of device interfaces Interface []SecondaryDeviceInterfaceObservation `json:"interface,omitempty" tf:"interface,omitempty"` - // Device license registration status. Possible values are APPLYING_LICENSE, - // REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. + // Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode. + // Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + LicenseFile *string `json:"licenseFile,omitempty" tf:"license_file,omitempty"` + + // Identifier of a license file that will be applied on a secondary device. + // Unique identifier of applied license file + LicenseFileID *string `json:"licenseFileId,omitempty" tf:"license_file_id,omitempty"` + + // Device license registration status. Possible values are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. // Device license registration status LicenseStatus *string `json:"licenseStatus,omitempty" tf:"license_status,omitempty"` - // Unique Identifier for the project resource where the device is scoped to.If you - // leave it out, the device will be created under the default project id of your organization. + // License Token can be provided for some device types o the device. + // License Token applicable for some device types in BYOL licensing mode + LicenseToken *string `json:"licenseToken,omitempty" tf:"license_token,omitempty"` + + // Metro location of a secondary device. + // Device location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // Identifier of an MGMT interface ACL template that will be applied on a secondary device. + // Unique identifier of applied MGMT ACL template + MgmtACLTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty" tf:"mgmt_acl_template_uuid,omitempty"` + + // Secondary device name. + // Device name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // List of email addresses that will receive notifications about secondary device. + // List of email addresses that will receive device status notifications + // +listType=set + Notifications []*string `json:"notifications,omitempty" tf:"notifications,omitempty"` + + // Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. // The unique identifier of Project Resource to which device is scoped to ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Device redundancy type applicable for HA devices, either - // primary or secondary. + // Device redundancy type applicable for HA devices, either primary or secondary. // Device redundancy type applicable for HA devices, either primary or secondary RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` @@ -565,10 +1102,10 @@ type SecondaryDeviceObservation struct { // FQDN of SSH enabled interface on the device SSHIPFqdn *string `json:"sshIpFqdn,omitempty" tf:"ssh_ip_fqdn,omitempty"` - // Device provisioning status. Possible values are - // INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, - // WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, - // DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + // Definition of SSH key that will be provisioned on a device + SSHKey []SSHKeyObservation `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` + + // Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. // Device provisioning status Status *string `json:"status,omitempty" tf:"status,omitempty"` @@ -576,6 +1113,15 @@ type SecondaryDeviceObservation struct { // Device unique identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + // Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress. + // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + // +mapType=granular + VendorConfiguration map[string]*string `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` + + // interface identifier. + // device interface id picked for WAN + WanInterfaceID *string `json:"wanInterfaceId,omitempty" tf:"wan_interface_id,omitempty"` + // Device location zone code. // Device location zone code ZoneCode *string `json:"zoneCode,omitempty" tf:"zone_code,omitempty"` @@ -583,19 +1129,17 @@ type SecondaryDeviceObservation struct { type SecondaryDeviceParameters struct { - // Identifier of a WAN interface ACL template that will be applied - // on a secondary device. + // Identifier of a WAN interface ACL template that will be applied on a secondary device. // Unique identifier of applied ACL template // +kubebuilder:validation:Optional ACLTemplateID *string `json:"aclTemplateId,omitempty" tf:"acl_template_id,omitempty"` // Billing account number for secondary device. // Device billing account number - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional AccountNumber *string `json:"accountNumber" tf:"account_number,omitempty"` - // Additional Internet bandwidth, in Mbps, for a secondary - // device. + // Additional Internet bandwidth, in Mbps, for a secondary device. // Additional Internet bandwidth, in Mbps, that will be allocated to the device // +kubebuilder:validation:Optional AdditionalBandwidth *float64 `json:"additionalBandwidth,omitempty" tf:"additional_bandwidth,omitempty"` @@ -610,8 +1154,7 @@ type SecondaryDeviceParameters struct { // +kubebuilder:validation:Optional Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` - // Path to the license file that will be uploaded and applied on a - // secondary device. Applicable for some device types in BYOL licensing mode. + // Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode. // Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode // +kubebuilder:validation:Optional LicenseFile *string `json:"licenseFile,omitempty" tf:"license_file,omitempty"` @@ -628,35 +1171,33 @@ type SecondaryDeviceParameters struct { // Metro location of a secondary device. // Device location metro code - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode" tf:"metro_code,omitempty"` - // Identifier of an MGMT interface ACL template that will be - // applied on a secondary device. + // Identifier of an MGMT interface ACL template that will be applied on a secondary device. // Unique identifier of applied MGMT ACL template // +kubebuilder:validation:Optional MgmtACLTemplateUUID *string `json:"mgmtAclTemplateUuid,omitempty" tf:"mgmt_acl_template_uuid,omitempty"` // Secondary device name. // Device name - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Name *string `json:"name" tf:"name,omitempty"` - // List of email addresses that will receive notifications about - // secondary device. + // List of email addresses that will receive notifications about secondary device. // List of email addresses that will receive device status notifications - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional + // +listType=set Notifications []*string `json:"notifications" tf:"notifications,omitempty"` // Definition of SSH key that will be provisioned on a device // +kubebuilder:validation:Optional SSHKey []SSHKeyParameters `json:"sshKey,omitempty" tf:"ssh_key,omitempty"` - // Key/Value pairs of vendor specific configuration parameters - // for a secondary device. Key values are controller1, activationKey, managementType, siteId, - // systemIpAddress. + // Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress. // Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) // +kubebuilder:validation:Optional + // +mapType=granular VendorConfiguration map[string]*string `json:"vendorConfiguration,omitempty" tf:"vendor_configuration,omitempty"` // interface identifier. @@ -665,7 +1206,83 @@ type SecondaryDeviceParameters struct { WanInterfaceID *string `json:"wanInterfaceId,omitempty" tf:"wan_interface_id,omitempty"` } +type VendorConfigurationInitParameters struct { + + // Activation key. This is required for Velocloud clusters. + // Activation key. This is required for Velocloud clusters + ActivationKeySecretRef *v1.SecretKeySelector `json:"activationKeySecretRef,omitempty" tf:"-"` + + // 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. + // 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 + AdminPasswordSecretRef *v1.SecretKeySelector `json:"adminPasswordSecretRef,omitempty" tf:"-"` + + // System IP Address. Mandatory for the Fortinet SDWAN cluster device. + // System IP Address. Mandatory for the Fortinet SDWAN cluster device + Controller1 *string `json:"controller1,omitempty" tf:"controller1,omitempty"` + + // Controller fqdn. This is required for Velocloud clusters. + // Controller fqdn. This is required for Velocloud clusters + ControllerFqdn *string `json:"controllerFqdn,omitempty" tf:"controller_fqdn,omitempty"` + + // Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters. + // Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // interface identifier. + // License id. This field is relevant only for the BlueCat DNS and DHCP Server + LicenseIDSecretRef *v1.SecretKeySelector `json:"licenseIdSecretRef,omitempty" tf:"-"` + + // License key. This field is relevant only for the BlueCat DNS and DHCP Server + LicenseKeySecretRef *v1.SecretKeySelector `json:"licenseKeySecretRef,omitempty" tf:"-"` + + // Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + PanoramaAuthKeySecretRef *v1.SecretKeySelector `json:"panoramaAuthKeySecretRef,omitempty" tf:"-"` + + // Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + PanoramaIPAddress *string `json:"panoramaIpAddress,omitempty" tf:"panorama_ip_address,omitempty"` + + // Private address. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateAddress *string `json:"privateAddress,omitempty" tf:"private_address,omitempty"` + + // Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateCidrMask *string `json:"privateCidrMask,omitempty" tf:"private_cidr_mask,omitempty"` + + // Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateGateway *string `json:"privateGateway,omitempty" tf:"private_gateway,omitempty"` + + // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. + // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster + RootPasswordSecretRef *v1.SecretKeySelector `json:"rootPasswordSecretRef,omitempty" tf:"-"` +} + type VendorConfigurationObservation struct { + + // System IP Address. Mandatory for the Fortinet SDWAN cluster device. + // System IP Address. Mandatory for the Fortinet SDWAN cluster device + Controller1 *string `json:"controller1,omitempty" tf:"controller1,omitempty"` + + // Controller fqdn. This is required for Velocloud clusters. + // Controller fqdn. This is required for Velocloud clusters + ControllerFqdn *string `json:"controllerFqdn,omitempty" tf:"controller_fqdn,omitempty"` + + // Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters. + // Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` + + // Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + PanoramaIPAddress *string `json:"panoramaIpAddress,omitempty" tf:"panorama_ip_address,omitempty"` + + // Private address. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateAddress *string `json:"privateAddress,omitempty" tf:"private_address,omitempty"` + + // Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateCidrMask *string `json:"privateCidrMask,omitempty" tf:"private_cidr_mask,omitempty"` + + // Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server + PrivateGateway *string `json:"privateGateway,omitempty" tf:"private_gateway,omitempty"` } type VendorConfigurationParameters struct { @@ -675,8 +1292,7 @@ type VendorConfigurationParameters struct { // +kubebuilder:validation:Optional ActivationKeySecretRef *v1.SecretKeySelector `json:"activationKeySecretRef,omitempty" tf:"-"` - // 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. + // 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. // 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 // +kubebuilder:validation:Optional AdminPasswordSecretRef *v1.SecretKeySelector `json:"adminPasswordSecretRef,omitempty" tf:"-"` @@ -696,8 +1312,38 @@ type VendorConfigurationParameters struct { // +kubebuilder:validation:Optional Hostname *string `json:"hostname,omitempty" tf:"hostname,omitempty"` - // The CLI password of the device. This field is relevant only for the - // Velocloud SDWAN cluster. + // interface identifier. + // License id. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + LicenseIDSecretRef *v1.SecretKeySelector `json:"licenseIdSecretRef,omitempty" tf:"-"` + + // License key. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + LicenseKeySecretRef *v1.SecretKeySelector `json:"licenseKeySecretRef,omitempty" tf:"-"` + + // Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + // +kubebuilder:validation:Optional + PanoramaAuthKeySecretRef *v1.SecretKeySelector `json:"panoramaAuthKeySecretRef,omitempty" tf:"-"` + + // Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + // Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + // +kubebuilder:validation:Optional + PanoramaIPAddress *string `json:"panoramaIpAddress,omitempty" tf:"panorama_ip_address,omitempty"` + + // Private address. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + PrivateAddress *string `json:"privateAddress,omitempty" tf:"private_address,omitempty"` + + // Private CIDR Mask. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + PrivateCidrMask *string `json:"privateCidrMask,omitempty" tf:"private_cidr_mask,omitempty"` + + // Private gateway. This field is relevant only for the BlueCat DNS and DHCP Server + // +kubebuilder:validation:Optional + PrivateGateway *string `json:"privateGateway,omitempty" tf:"private_gateway,omitempty"` + + // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. // The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster // +kubebuilder:validation:Optional RootPasswordSecretRef *v1.SecretKeySelector `json:"rootPasswordSecretRef,omitempty" tf:"-"` @@ -707,6 +1353,17 @@ type VendorConfigurationParameters struct { type DeviceSpec struct { v1.ResourceSpec `json:",inline"` ForProvider DeviceParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider DeviceInitParameters `json:"initProvider,omitempty"` } // DeviceStatus defines the observed state of Device. @@ -716,19 +1373,29 @@ type DeviceStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // Device is the Schema for the Devices 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type Device struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec DeviceSpec `json:"spec"` - Status DeviceStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.accountNumber) || (has(self.initProvider) && has(self.initProvider.accountNumber))",message="spec.forProvider.accountNumber is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.coreCount) || (has(self.initProvider) && has(self.initProvider.coreCount))",message="spec.forProvider.coreCount is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.metroCode) || (has(self.initProvider) && has(self.initProvider.metroCode))",message="spec.forProvider.metroCode is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.notifications) || (has(self.initProvider) && has(self.initProvider.notifications))",message="spec.forProvider.notifications is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.packageCode) || (has(self.initProvider) && has(self.initProvider.packageCode))",message="spec.forProvider.packageCode is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.termLength) || (has(self.initProvider) && has(self.initProvider.termLength))",message="spec.forProvider.termLength is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.typeCode) || (has(self.initProvider) && has(self.initProvider.typeCode))",message="spec.forProvider.typeCode is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.version) || (has(self.initProvider) && has(self.initProvider.version))",message="spec.forProvider.version is a required parameter" + Spec DeviceSpec `json:"spec"` + Status DeviceStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_devicelink_terraformed.go b/apis/network/v1alpha1/zz_devicelink_terraformed.go new file mode 100755 index 0000000..1b573d3 --- /dev/null +++ b/apis/network/v1alpha1/zz_devicelink_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this DeviceLink +func (mg *DeviceLink) GetTerraformResourceType() string { + return "equinix_network_device_link" +} + +// GetConnectionDetailsMapping for this DeviceLink +func (tr *DeviceLink) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this DeviceLink +func (tr *DeviceLink) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this DeviceLink +func (tr *DeviceLink) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this DeviceLink +func (tr *DeviceLink) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this DeviceLink +func (tr *DeviceLink) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this DeviceLink +func (tr *DeviceLink) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this DeviceLink +func (tr *DeviceLink) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this DeviceLink +func (tr *DeviceLink) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this DeviceLink using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *DeviceLink) LateInitialize(attrs []byte) (bool, error) { + params := &DeviceLinkParameters{} + 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 *DeviceLink) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_devicelink_types.go b/apis/network/v1alpha1/zz_devicelink_types.go index b954e13..66be9fd 100755 --- a/apis/network/v1alpha1/zz_devicelink_types.go +++ b/apis/network/v1alpha1/zz_devicelink_types.go @@ -25,14 +25,40 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type DeviceLinkDeviceInitParameters struct { + + // Device ASN number. Not required for self configured devices. + // Device ASN number + Asn *float64 `json:"asn,omitempty" tf:"asn,omitempty"` + + // Device identifier. + // Device identifier + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Device network interface identifier to use for device link connection. + // Device network interface identifier to use for device link connection + InterfaceID *float64 `json:"interfaceId,omitempty" tf:"interface_id,omitempty"` +} + type DeviceLinkDeviceObservation struct { + // Device ASN number. Not required for self configured devices. + // Device ASN number + Asn *float64 `json:"asn,omitempty" tf:"asn,omitempty"` + + // Device identifier. + // Device identifier + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // IP address from device link subnet that was assigned to the device // Assigned IP address from device link subnet IPAddress *string `json:"ipAddress,omitempty" tf:"ip_address,omitempty"` - // device link provisioning status on a given device. One of PROVISIONING, - // PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. + // Device network interface identifier to use for device link connection. + // Device network interface identifier to use for device link connection + InterfaceID *float64 `json:"interfaceId,omitempty" tf:"interface_id,omitempty"` + + // device link provisioning status on a given device. One of PROVISIONING, PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. // Device link connection provisioning status Status *string `json:"status,omitempty" tf:"status,omitempty"` } @@ -46,31 +72,81 @@ type DeviceLinkDeviceParameters struct { // Device identifier. // Device identifier - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ID *string `json:"id" tf:"id,omitempty"` - // Device network interface identifier to use for device link - // connection. + // Device network interface identifier to use for device link connection. // Device network interface identifier to use for device link connection // +kubebuilder:validation:Optional InterfaceID *float64 `json:"interfaceId,omitempty" tf:"interface_id,omitempty"` } +type DeviceLinkInitParameters struct { + + // definition of one or more devices belonging to the device link. See Device section below for more details. + Device []DeviceLinkDeviceInitParameters `json:"device,omitempty" tf:"device,omitempty"` + + // (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details. + // Definition of one or more, inter metro connections belonging to the device link + Link []LinkInitParameters `json:"link,omitempty" tf:"link,omitempty"` + + // definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details. + // Definition of one or more, inter or intra metro connections belonging to the device link + MetroLink []MetroLinkInitParameters `json:"metroLink,omitempty" tf:"metro_link,omitempty"` + + // device link name. + // Device link name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization. + // project_id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Whether the connection should be created through Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID + // (Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID` + RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` + + // device link subnet in CIDR format. Not required for link between self configured devices. + // Device link subnet CIDR. + Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` +} + type DeviceLinkObservation struct { - // definition of one or more devices belonging to the - // device link. See Device section below for more details. - // +kubebuilder:validation:Required + // definition of one or more devices belonging to the device link. See Device section below for more details. Device []DeviceLinkDeviceObservation `json:"device,omitempty" tf:"device,omitempty"` // Device identifier. ID *string `json:"id,omitempty" tf:"id,omitempty"` - // Device link provisioning status. One of PROVISIONING, PROVISIONED, - // DEPROVISIONING, DEPROVISIONED, FAILED. + // (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details. + // Definition of one or more, inter metro connections belonging to the device link + Link []LinkObservation `json:"link,omitempty" tf:"link,omitempty"` + + // definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details. + // Definition of one or more, inter or intra metro connections belonging to the device link + MetroLink []MetroLinkObservation `json:"metroLink,omitempty" tf:"metro_link,omitempty"` + + // device link name. + // Device link name + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization. + // project_id + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Whether the connection should be created through Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID + // (Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID` + RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` + + // Device link provisioning status. One of PROVISIONING, PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. // Device link provisioning status Status *string `json:"status,omitempty" tf:"status,omitempty"` + // device link subnet in CIDR format. Not required for link between self configured devices. + // Device link subnet CIDR. + Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` + // Device link unique identifier. // Device link unique identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` @@ -78,61 +154,113 @@ type DeviceLinkObservation struct { type DeviceLinkParameters struct { - // definition of one or more devices belonging to the - // device link. See Device section below for more details. - // +kubebuilder:validation:Required - Device []DeviceLinkDeviceParameters `json:"device" tf:"device,omitempty"` + // definition of one or more devices belonging to the device link. See Device section below for more details. + // +kubebuilder:validation:Optional + Device []DeviceLinkDeviceParameters `json:"device,omitempty" tf:"device,omitempty"` - // (Deprecated) definition of one or more, inter metro, connections belonging - // to the device link. See Link section below for more details. + // (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details. // Definition of one or more, inter metro connections belonging to the device link // +kubebuilder:validation:Optional Link []LinkParameters `json:"link,omitempty" tf:"link,omitempty"` - // definition of one or more, inter metro, connections belonging - // to the device link. See Metro Link section below for more details. + // definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details. // Definition of one or more, inter or intra metro connections belonging to the device link // +kubebuilder:validation:Optional MetroLink []MetroLinkParameters `json:"metroLink,omitempty" tf:"metro_link,omitempty"` // device link name. // Device link name - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` - // Unique Identifier for the project resource where the device link is scoped to.If you - // leave it out, the device link will be created under the default project id of your organization. + // Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization. // project_id // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // Whether the connection should be created through - // Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID + // Whether the connection should be created through Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID // (Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID` // +kubebuilder:validation:Optional RedundancyType *string `json:"redundancyType,omitempty" tf:"redundancy_type,omitempty"` - // device link subnet in CIDR format. Not required for link - // between self configured devices. + // device link subnet in CIDR format. Not required for link between self configured devices. // Device link subnet CIDR. // +kubebuilder:validation:Optional Subnet *string `json:"subnet,omitempty" tf:"subnet,omitempty"` } +type LinkInitParameters struct { + + // billing account number to be used for connection charges + // Billing account number to be used for connection charges + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // connection destination metro code. + // Connection destination metro code + DstMetroCode *string `json:"dstMetroCode,omitempty" tf:"dst_metro_code,omitempty"` + + // (Deprecated) connection destination zone code is not required. + // Connection destination zone code + DstZoneCode *string `json:"dstZoneCode,omitempty" tf:"dst_zone_code,omitempty"` + + // connection source metro code. + // Connection source metro code + SrcMetroCode *string `json:"srcMetroCode,omitempty" tf:"src_metro_code,omitempty"` + + // (Deprecated) connection source zone code is not required. + // Connection source zone code + SrcZoneCode *string `json:"srcZoneCode,omitempty" tf:"src_zone_code,omitempty"` + + // connection throughput. + // Connection throughput + Throughput *string `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // connection throughput unit (Mbps or Gbps). + // Connection throughput unit + ThroughputUnit *string `json:"throughputUnit,omitempty" tf:"throughput_unit,omitempty"` +} + type LinkObservation struct { + + // billing account number to be used for connection charges + // Billing account number to be used for connection charges + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // connection destination metro code. + // Connection destination metro code + DstMetroCode *string `json:"dstMetroCode,omitempty" tf:"dst_metro_code,omitempty"` + + // (Deprecated) connection destination zone code is not required. + // Connection destination zone code + DstZoneCode *string `json:"dstZoneCode,omitempty" tf:"dst_zone_code,omitempty"` + + // connection source metro code. + // Connection source metro code + SrcMetroCode *string `json:"srcMetroCode,omitempty" tf:"src_metro_code,omitempty"` + + // (Deprecated) connection source zone code is not required. + // Connection source zone code + SrcZoneCode *string `json:"srcZoneCode,omitempty" tf:"src_zone_code,omitempty"` + + // connection throughput. + // Connection throughput + Throughput *string `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // connection throughput unit (Mbps or Gbps). + // Connection throughput unit + ThroughputUnit *string `json:"throughputUnit,omitempty" tf:"throughput_unit,omitempty"` } type LinkParameters struct { - // billing account number to be used for - // connection charges + // billing account number to be used for connection charges // Billing account number to be used for connection charges - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional AccountNumber *string `json:"accountNumber" tf:"account_number,omitempty"` // connection destination metro code. // Connection destination metro code - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional DstMetroCode *string `json:"dstMetroCode" tf:"dst_metro_code,omitempty"` // (Deprecated) connection destination zone code is not required. @@ -142,7 +270,7 @@ type LinkParameters struct { // connection source metro code. // Connection source metro code - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional SrcMetroCode *string `json:"srcMetroCode" tf:"src_metro_code,omitempty"` // (Deprecated) connection source zone code is not required. @@ -152,38 +280,70 @@ type LinkParameters struct { // connection throughput. // Connection throughput - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Throughput *string `json:"throughput" tf:"throughput,omitempty"` // connection throughput unit (Mbps or Gbps). // Connection throughput unit - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ThroughputUnit *string `json:"throughputUnit" tf:"throughput_unit,omitempty"` } +type MetroLinkInitParameters struct { + + // billing account number to be used for connection charges + // Billing account number to be used for connection charges + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // connection metro code. + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // connection throughput. + // Connection throughput + Throughput *string `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // connection throughput unit (Mbps or Gbps). + // Connection throughput unit + ThroughputUnit *string `json:"throughputUnit,omitempty" tf:"throughput_unit,omitempty"` +} + type MetroLinkObservation struct { + + // billing account number to be used for connection charges + // Billing account number to be used for connection charges + AccountNumber *string `json:"accountNumber,omitempty" tf:"account_number,omitempty"` + + // connection metro code. + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // connection throughput. + // Connection throughput + Throughput *string `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // connection throughput unit (Mbps or Gbps). + // Connection throughput unit + ThroughputUnit *string `json:"throughputUnit,omitempty" tf:"throughput_unit,omitempty"` } type MetroLinkParameters struct { - // billing account number to be used for - // connection charges + // billing account number to be used for connection charges // Billing account number to be used for connection charges - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional AccountNumber *string `json:"accountNumber" tf:"account_number,omitempty"` // connection metro code. - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional MetroCode *string `json:"metroCode" tf:"metro_code,omitempty"` // connection throughput. // Connection throughput - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional Throughput *string `json:"throughput" tf:"throughput,omitempty"` // connection throughput unit (Mbps or Gbps). // Connection throughput unit - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ThroughputUnit *string `json:"throughputUnit" tf:"throughput_unit,omitempty"` } @@ -191,6 +351,17 @@ type MetroLinkParameters struct { type DeviceLinkSpec struct { v1.ResourceSpec `json:",inline"` ForProvider DeviceLinkParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider DeviceLinkInitParameters `json:"initProvider,omitempty"` } // DeviceLinkStatus defines the observed state of DeviceLink. @@ -200,19 +371,22 @@ type DeviceLinkStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // DeviceLink is the Schema for the DeviceLinks 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type DeviceLink struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec DeviceLinkSpec `json:"spec"` - Status DeviceLinkStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.device) || (has(self.initProvider) && has(self.initProvider.device))",message="spec.forProvider.device is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + Spec DeviceLinkSpec `json:"spec"` + Status DeviceLinkStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_file_terraformed.go b/apis/network/v1alpha1/zz_file_terraformed.go new file mode 100755 index 0000000..6c80ae7 --- /dev/null +++ b/apis/network/v1alpha1/zz_file_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this File +func (mg *File) GetTerraformResourceType() string { + return "equinix_network_file" +} + +// GetConnectionDetailsMapping for this File +func (tr *File) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"content": "contentSecretRef"} +} + +// GetObservation of this File +func (tr *File) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this File +func (tr *File) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this File +func (tr *File) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this File +func (tr *File) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this File +func (tr *File) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this File +func (tr *File) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this File +func (tr *File) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this File using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *File) LateInitialize(attrs []byte) (bool, error) { + params := &FileParameters{} + 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 *File) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_file_types.go b/apis/network/v1alpha1/zz_file_types.go index 4a9b372..8bb234d 100755 --- a/apis/network/v1alpha1/zz_file_types.go +++ b/apis/network/v1alpha1/zz_file_types.go @@ -25,9 +25,65 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type FileInitParameters struct { + + // Boolean value that determines device licensing mode, i.e., bring your own license or subscription. + // Boolean value that determines device licensing mode: bring your own license or subscription + Byol *bool `json:"byol,omitempty" tf:"byol,omitempty"` + + // Uploaded file content, expected to be a UTF-8 encoded string. + // Uploaded file content, expected to be a UTF-8 encoded string + ContentSecretRef v1.SecretKeySelector `json:"contentSecretRef" tf:"-"` + + // Device type code. + // Device type code + DeviceTypeCode *string `json:"deviceTypeCode,omitempty" tf:"device_type_code,omitempty"` + + // File name. + // File name + FileName *string `json:"fileName,omitempty" tf:"file_name,omitempty"` + + // File upload location metro code. It should match the device location metro code. + // File upload location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // File process type (LICENSE or CLOUD_INIT). + // File process type (LICENSE or CLOUD_INIT) + ProcessType *string `json:"processType,omitempty" tf:"process_type,omitempty"` + + // Boolean value that determines device management mode, i.e., self-managed or Equinix-managed. + // Boolean value that determines device management mode: self-managed or equinix-managed + SelfManaged *bool `json:"selfManaged,omitempty" tf:"self_managed,omitempty"` +} + type FileObservation struct { + + // Boolean value that determines device licensing mode, i.e., bring your own license or subscription. + // Boolean value that determines device licensing mode: bring your own license or subscription + Byol *bool `json:"byol,omitempty" tf:"byol,omitempty"` + + // Device type code. + // Device type code + DeviceTypeCode *string `json:"deviceTypeCode,omitempty" tf:"device_type_code,omitempty"` + + // File name. + // File name + FileName *string `json:"fileName,omitempty" tf:"file_name,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` + // File upload location metro code. It should match the device location metro code. + // File upload location metro code + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` + + // File process type (LICENSE or CLOUD_INIT). + // File process type (LICENSE or CLOUD_INIT) + ProcessType *string `json:"processType,omitempty" tf:"process_type,omitempty"` + + // Boolean value that determines device management mode, i.e., self-managed or Equinix-managed. + // Boolean value that determines device management mode: self-managed or equinix-managed + SelfManaged *bool `json:"selfManaged,omitempty" tf:"self_managed,omitempty"` + // File upload status. // File upload status Status *string `json:"status,omitempty" tf:"status,omitempty"` @@ -39,48 +95,57 @@ type FileObservation struct { type FileParameters struct { - // Boolean value that determines device licensing mode, i.e., - // bring your own license or subscription. + // Boolean value that determines device licensing mode, i.e., bring your own license or subscription. // Boolean value that determines device licensing mode: bring your own license or subscription - // +kubebuilder:validation:Required - Byol *bool `json:"byol" tf:"byol,omitempty"` + // +kubebuilder:validation:Optional + Byol *bool `json:"byol,omitempty" tf:"byol,omitempty"` // Uploaded file content, expected to be a UTF-8 encoded string. // Uploaded file content, expected to be a UTF-8 encoded string - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional ContentSecretRef v1.SecretKeySelector `json:"contentSecretRef" tf:"-"` // Device type code. // Device type code - // +kubebuilder:validation:Required - DeviceTypeCode *string `json:"deviceTypeCode" tf:"device_type_code,omitempty"` + // +kubebuilder:validation:Optional + DeviceTypeCode *string `json:"deviceTypeCode,omitempty" tf:"device_type_code,omitempty"` // File name. // File name - // +kubebuilder:validation:Required - FileName *string `json:"fileName" tf:"file_name,omitempty"` + // +kubebuilder:validation:Optional + FileName *string `json:"fileName,omitempty" tf:"file_name,omitempty"` // File upload location metro code. It should match the device location metro code. // File upload location metro code - // +kubebuilder:validation:Required - MetroCode *string `json:"metroCode" tf:"metro_code,omitempty"` + // +kubebuilder:validation:Optional + MetroCode *string `json:"metroCode,omitempty" tf:"metro_code,omitempty"` // File process type (LICENSE or CLOUD_INIT). // File process type (LICENSE or CLOUD_INIT) - // +kubebuilder:validation:Required - ProcessType *string `json:"processType" tf:"process_type,omitempty"` + // +kubebuilder:validation:Optional + ProcessType *string `json:"processType,omitempty" tf:"process_type,omitempty"` - // Boolean value that determines device management mode, i.e., - // self-managed or Equinix-managed. + // Boolean value that determines device management mode, i.e., self-managed or Equinix-managed. // Boolean value that determines device management mode: self-managed or equinix-managed - // +kubebuilder:validation:Required - SelfManaged *bool `json:"selfManaged" tf:"self_managed,omitempty"` + // +kubebuilder:validation:Optional + SelfManaged *bool `json:"selfManaged,omitempty" tf:"self_managed,omitempty"` } // FileSpec defines the desired state of File type FileSpec struct { v1.ResourceSpec `json:",inline"` ForProvider FileParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider FileInitParameters `json:"initProvider,omitempty"` } // FileStatus defines the observed state of File. @@ -90,19 +155,27 @@ type FileStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // File is the Schema for the Files 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type File struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec FileSpec `json:"spec"` - Status FileStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.byol) || (has(self.initProvider) && has(self.initProvider.byol))",message="spec.forProvider.byol is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.contentSecretRef)",message="spec.forProvider.contentSecretRef is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceTypeCode) || (has(self.initProvider) && has(self.initProvider.deviceTypeCode))",message="spec.forProvider.deviceTypeCode is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.fileName) || (has(self.initProvider) && has(self.initProvider.fileName))",message="spec.forProvider.fileName is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.metroCode) || (has(self.initProvider) && has(self.initProvider.metroCode))",message="spec.forProvider.metroCode is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.processType) || (has(self.initProvider) && has(self.initProvider.processType))",message="spec.forProvider.processType is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.selfManaged) || (has(self.initProvider) && has(self.initProvider.selfManaged))",message="spec.forProvider.selfManaged is a required parameter" + Spec FileSpec `json:"spec"` + Status FileStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_generated.conversion_hubs.go b/apis/network/v1alpha1/zz_generated.conversion_hubs.go new file mode 100755 index 0000000..ca8dd00 --- /dev/null +++ b/apis/network/v1alpha1/zz_generated.conversion_hubs.go @@ -0,0 +1,40 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +// Hub marks this type as a conversion hub. +func (tr *ACLTemplate) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *BGP) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *Device) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *DeviceLink) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *File) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *SSHKey) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *SSHUser) Hub() {} diff --git a/apis/network/v1alpha1/zz_generated.deepcopy.go b/apis/network/v1alpha1/zz_generated.deepcopy.go index 65c0f66..c5d8b12 100644 --- a/apis/network/v1alpha1/zz_generated.deepcopy.go +++ b/apis/network/v1alpha1/zz_generated.deepcopy.go @@ -1,5 +1,4 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated /* Copyright 2021 The Crossplane Authors. @@ -53,6 +52,48 @@ func (in *ACLTemplate) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ACLTemplateInitParameters) DeepCopyInto(out *ACLTemplateInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.InboundRule != nil { + in, out := &in.InboundRule, &out.InboundRule + *out = make([]InboundRuleInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ACLTemplateInitParameters. +func (in *ACLTemplateInitParameters) DeepCopy() *ACLTemplateInitParameters { + if in == nil { + return nil + } + out := new(ACLTemplateInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ACLTemplateList) DeepCopyInto(out *ACLTemplateList) { *out = *in @@ -88,6 +129,11 @@ func (in *ACLTemplateList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ACLTemplateObservation) DeepCopyInto(out *ACLTemplateObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } if in.DeviceACLStatus != nil { in, out := &in.DeviceACLStatus, &out.DeviceACLStatus *out = new(string) @@ -117,6 +163,21 @@ func (in *ACLTemplateObservation) DeepCopyInto(out *ACLTemplateObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -181,6 +242,7 @@ func (in *ACLTemplateSpec) DeepCopyInto(out *ACLTemplateSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ACLTemplateSpec. @@ -237,6 +299,51 @@ func (in *BGP) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BGPInitParameters) DeepCopyInto(out *BGPInitParameters) { + *out = *in + if in.AuthenticationKeySecretRef != nil { + in, out := &in.AuthenticationKeySecretRef, &out.AuthenticationKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.ConnectionID != nil { + in, out := &in.ConnectionID, &out.ConnectionID + *out = new(string) + **out = **in + } + if in.LocalAsn != nil { + in, out := &in.LocalAsn, &out.LocalAsn + *out = new(float64) + **out = **in + } + if in.LocalIPAddress != nil { + in, out := &in.LocalIPAddress, &out.LocalIPAddress + *out = new(string) + **out = **in + } + if in.RemoteAsn != nil { + in, out := &in.RemoteAsn, &out.RemoteAsn + *out = new(float64) + **out = **in + } + if in.RemoteIPAddress != nil { + in, out := &in.RemoteIPAddress, &out.RemoteIPAddress + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPInitParameters. +func (in *BGPInitParameters) DeepCopy() *BGPInitParameters { + if in == nil { + return nil + } + out := new(BGPInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BGPList) DeepCopyInto(out *BGPList) { *out = *in @@ -272,6 +379,11 @@ func (in *BGPList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *BGPObservation) DeepCopyInto(out *BGPObservation) { *out = *in + if in.ConnectionID != nil { + in, out := &in.ConnectionID, &out.ConnectionID + *out = new(string) + **out = **in + } if in.DeviceID != nil { in, out := &in.DeviceID, &out.DeviceID *out = new(string) @@ -282,11 +394,31 @@ func (in *BGPObservation) DeepCopyInto(out *BGPObservation) { *out = new(string) **out = **in } + if in.LocalAsn != nil { + in, out := &in.LocalAsn, &out.LocalAsn + *out = new(float64) + **out = **in + } + if in.LocalIPAddress != nil { + in, out := &in.LocalIPAddress, &out.LocalIPAddress + *out = new(string) + **out = **in + } if in.ProvisioningStatus != nil { in, out := &in.ProvisioningStatus, &out.ProvisioningStatus *out = new(string) **out = **in } + if in.RemoteAsn != nil { + in, out := &in.RemoteAsn, &out.RemoteAsn + *out = new(float64) + **out = **in + } + if in.RemoteIPAddress != nil { + in, out := &in.RemoteIPAddress, &out.RemoteIPAddress + *out = new(string) + **out = **in + } if in.State != nil { in, out := &in.State, &out.State *out = new(string) @@ -359,6 +491,7 @@ func (in *BGPSpec) DeepCopyInto(out *BGPSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BGPSpec. @@ -388,6 +521,40 @@ func (in *BGPStatus) DeepCopy() *BGPStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterDetailsInitParameters) DeepCopyInto(out *ClusterDetailsInitParameters) { + *out = *in + if in.ClusterName != nil { + in, out := &in.ClusterName, &out.ClusterName + *out = new(string) + **out = **in + } + if in.Node0 != nil { + in, out := &in.Node0, &out.Node0 + *out = make([]Node0InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Node1 != nil { + in, out := &in.Node1, &out.Node1 + *out = make([]Node1InitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDetailsInitParameters. +func (in *ClusterDetailsInitParameters) DeepCopy() *ClusterDetailsInitParameters { + if in == nil { + return nil + } + out := new(ClusterDetailsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterDetailsObservation) DeepCopyInto(out *ClusterDetailsObservation) { *out = *in @@ -396,6 +563,11 @@ func (in *ClusterDetailsObservation) DeepCopyInto(out *ClusterDetailsObservation *out = new(string) **out = **in } + if in.ClusterName != nil { + in, out := &in.ClusterName, &out.ClusterName + *out = new(string) + **out = **in + } if in.Node0 != nil { in, out := &in.Node0, &out.Node0 *out = make([]Node0Observation, len(*in)) @@ -488,6 +660,21 @@ func (in *Device) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceDetailsInitParameters) DeepCopyInto(out *DeviceDetailsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceDetailsInitParameters. +func (in *DeviceDetailsInitParameters) DeepCopy() *DeviceDetailsInitParameters { + if in == nil { + return nil + } + out := new(DeviceDetailsInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceDetailsObservation) DeepCopyInto(out *DeviceDetailsObservation) { *out = *in @@ -534,95 +721,394 @@ func (in *DeviceDetailsParameters) DeepCopy() *DeviceDetailsParameters { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DeviceLink) DeepCopyInto(out *DeviceLink) { - *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 DeviceLink. -func (in *DeviceLink) DeepCopy() *DeviceLink { - if in == nil { - return nil - } - out := new(DeviceLink) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DeviceLink) 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 *DeviceLinkDeviceObservation) DeepCopyInto(out *DeviceLinkDeviceObservation) { +func (in *DeviceInitParameters) DeepCopyInto(out *DeviceInitParameters) { *out = *in - if in.IPAddress != nil { - in, out := &in.IPAddress, &out.IPAddress + if in.ACLTemplateID != nil { + in, out := &in.ACLTemplateID, &out.ACLTemplateID *out = new(string) **out = **in } - if in.Status != nil { - in, out := &in.Status, &out.Status + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber *out = new(string) **out = **in } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkDeviceObservation. -func (in *DeviceLinkDeviceObservation) DeepCopy() *DeviceLinkDeviceObservation { - if in == nil { - return nil - } - out := new(DeviceLinkDeviceObservation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DeviceLinkDeviceParameters) DeepCopyInto(out *DeviceLinkDeviceParameters) { - *out = *in - if in.Asn != nil { - in, out := &in.Asn, &out.Asn + if in.AdditionalBandwidth != nil { + in, out := &in.AdditionalBandwidth, &out.AdditionalBandwidth *out = new(float64) **out = **in } - if in.ID != nil { - in, out := &in.ID, &out.ID - *out = new(string) + if in.Byol != nil { + in, out := &in.Byol, &out.Byol + *out = new(bool) **out = **in } - if in.InterfaceID != nil { - in, out := &in.InterfaceID, &out.InterfaceID - *out = new(float64) + if in.CloudInitFileID != nil { + in, out := &in.CloudInitFileID, &out.CloudInitFileID + *out = new(string) **out = **in } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkDeviceParameters. -func (in *DeviceLinkDeviceParameters) DeepCopy() *DeviceLinkDeviceParameters { - if in == nil { - return nil - } - out := new(DeviceLinkDeviceParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DeviceLinkList) DeepCopyInto(out *DeviceLinkList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DeviceLink, len(*in)) + if in.ClusterDetails != nil { + in, out := &in.ClusterDetails, &out.ClusterDetails + *out = make([]ClusterDetailsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Connectivity != nil { + in, out := &in.Connectivity, &out.Connectivity + *out = new(string) + **out = **in + } + if in.CoreCount != nil { + in, out := &in.CoreCount, &out.CoreCount + *out = new(float64) + **out = **in + } + if in.DiverseDeviceID != nil { + in, out := &in.DiverseDeviceID, &out.DiverseDeviceID + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.InterfaceCount != nil { + in, out := &in.InterfaceCount, &out.InterfaceCount + *out = new(float64) + **out = **in + } + if in.LicenseFile != nil { + in, out := &in.LicenseFile, &out.LicenseFile + *out = new(string) + **out = **in + } + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } + if in.LicenseToken != nil { + in, out := &in.LicenseToken, &out.LicenseToken + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MgmtACLTemplateUUID != nil { + in, out := &in.MgmtACLTemplateUUID, &out.MgmtACLTemplateUUID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *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.OrderReference != nil { + in, out := &in.OrderReference, &out.OrderReference + *out = new(string) + **out = **in + } + if in.PackageCode != nil { + in, out := &in.PackageCode, &out.PackageCode + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.PurchaseOrderNumber != nil { + in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber + *out = new(string) + **out = **in + } + if in.SSHKey != nil { + in, out := &in.SSHKey, &out.SSHKey + *out = make([]DeviceSSHKeyInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SecondaryDevice != nil { + in, out := &in.SecondaryDevice, &out.SecondaryDevice + *out = make([]SecondaryDeviceInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SelfManaged != nil { + in, out := &in.SelfManaged, &out.SelfManaged + *out = new(bool) + **out = **in + } + if in.TermLength != nil { + in, out := &in.TermLength, &out.TermLength + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.ThroughputUnit != nil { + in, out := &in.ThroughputUnit, &out.ThroughputUnit + *out = new(string) + **out = **in + } + if in.TypeCode != nil { + in, out := &in.TypeCode, &out.TypeCode + *out = new(string) + **out = **in + } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } + if in.WanInterfaceID != nil { + in, out := &in.WanInterfaceID, &out.WanInterfaceID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceInitParameters. +func (in *DeviceInitParameters) DeepCopy() *DeviceInitParameters { + if in == nil { + return nil + } + out := new(DeviceInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceLink) DeepCopyInto(out *DeviceLink) { + *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 DeviceLink. +func (in *DeviceLink) DeepCopy() *DeviceLink { + if in == nil { + return nil + } + out := new(DeviceLink) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeviceLink) 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 *DeviceLinkDeviceInitParameters) DeepCopyInto(out *DeviceLinkDeviceInitParameters) { + *out = *in + if in.Asn != nil { + in, out := &in.Asn, &out.Asn + *out = new(float64) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InterfaceID != nil { + in, out := &in.InterfaceID, &out.InterfaceID + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkDeviceInitParameters. +func (in *DeviceLinkDeviceInitParameters) DeepCopy() *DeviceLinkDeviceInitParameters { + if in == nil { + return nil + } + out := new(DeviceLinkDeviceInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceLinkDeviceObservation) DeepCopyInto(out *DeviceLinkDeviceObservation) { + *out = *in + if in.Asn != nil { + in, out := &in.Asn, &out.Asn + *out = new(float64) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.IPAddress != nil { + in, out := &in.IPAddress, &out.IPAddress + *out = new(string) + **out = **in + } + if in.InterfaceID != nil { + in, out := &in.InterfaceID, &out.InterfaceID + *out = new(float64) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkDeviceObservation. +func (in *DeviceLinkDeviceObservation) DeepCopy() *DeviceLinkDeviceObservation { + if in == nil { + return nil + } + out := new(DeviceLinkDeviceObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceLinkDeviceParameters) DeepCopyInto(out *DeviceLinkDeviceParameters) { + *out = *in + if in.Asn != nil { + in, out := &in.Asn, &out.Asn + *out = new(float64) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InterfaceID != nil { + in, out := &in.InterfaceID, &out.InterfaceID + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkDeviceParameters. +func (in *DeviceLinkDeviceParameters) DeepCopy() *DeviceLinkDeviceParameters { + if in == nil { + return nil + } + out := new(DeviceLinkDeviceParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceLinkInitParameters) DeepCopyInto(out *DeviceLinkInitParameters) { + *out = *in + if in.Device != nil { + in, out := &in.Device, &out.Device + *out = make([]DeviceLinkDeviceInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Link != nil { + in, out := &in.Link, &out.Link + *out = make([]LinkInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MetroLink != nil { + in, out := &in.MetroLink, &out.MetroLink + *out = make([]MetroLinkInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.RedundancyType != nil { + in, out := &in.RedundancyType, &out.RedundancyType + *out = new(string) + **out = **in + } + if in.Subnet != nil { + in, out := &in.Subnet, &out.Subnet + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkInitParameters. +func (in *DeviceLinkInitParameters) DeepCopy() *DeviceLinkInitParameters { + if in == nil { + return nil + } + out := new(DeviceLinkInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceLinkList) DeepCopyInto(out *DeviceLinkList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeviceLink, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -662,11 +1148,45 @@ func (in *DeviceLinkObservation) DeepCopyInto(out *DeviceLinkObservation) { *out = new(string) **out = **in } + if in.Link != nil { + in, out := &in.Link, &out.Link + *out = make([]LinkObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.MetroLink != nil { + in, out := &in.MetroLink, &out.MetroLink + *out = make([]MetroLinkObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.RedundancyType != nil { + in, out := &in.RedundancyType, &out.RedundancyType + *out = new(string) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.Subnet != nil { + in, out := &in.Subnet, &out.Subnet + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -745,6 +1265,7 @@ func (in *DeviceLinkSpec) DeepCopyInto(out *DeviceLinkSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceLinkSpec. @@ -809,11 +1330,36 @@ func (in *DeviceList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = *in + if in.ACLTemplateID != nil { + in, out := &in.ACLTemplateID, &out.ACLTemplateID + *out = new(string) + **out = **in + } + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.AdditionalBandwidth != nil { + in, out := &in.AdditionalBandwidth, &out.AdditionalBandwidth + *out = new(float64) + **out = **in + } if in.Asn != nil { in, out := &in.Asn, &out.Asn *out = new(float64) **out = **in } + if in.Byol != nil { + in, out := &in.Byol, &out.Byol + *out = new(bool) + **out = **in + } + if in.CloudInitFileID != nil { + in, out := &in.CloudInitFileID, &out.CloudInitFileID + *out = new(string) + **out = **in + } if in.ClusterDetails != nil { in, out := &in.ClusterDetails, &out.ClusterDetails *out = make([]ClusterDetailsObservation, len(*in)) @@ -821,11 +1367,31 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.Connectivity != nil { + in, out := &in.Connectivity, &out.Connectivity + *out = new(string) + **out = **in + } + if in.CoreCount != nil { + in, out := &in.CoreCount, &out.CoreCount + *out = new(float64) + **out = **in + } + if in.DiverseDeviceID != nil { + in, out := &in.DiverseDeviceID, &out.DiverseDeviceID + *out = new(string) + **out = **in + } if in.DiverseDeviceName != nil { in, out := &in.DiverseDeviceName, &out.DiverseDeviceName *out = new(string) **out = **in } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -843,11 +1409,77 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.InterfaceCount != nil { + in, out := &in.InterfaceCount, &out.InterfaceCount + *out = new(float64) + **out = **in + } + if in.LicenseFile != nil { + in, out := &in.LicenseFile, &out.LicenseFile + *out = new(string) + **out = **in + } + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } if in.LicenseStatus != nil { in, out := &in.LicenseStatus, &out.LicenseStatus *out = new(string) **out = **in } + if in.LicenseToken != nil { + in, out := &in.LicenseToken, &out.LicenseToken + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MgmtACLTemplateUUID != nil { + in, out := &in.MgmtACLTemplateUUID, &out.MgmtACLTemplateUUID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *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.OrderReference != nil { + in, out := &in.OrderReference, &out.OrderReference + *out = new(string) + **out = **in + } + if in.PackageCode != nil { + in, out := &in.PackageCode, &out.PackageCode + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.PurchaseOrderNumber != nil { + in, out := &in.PurchaseOrderNumber, &out.PurchaseOrderNumber + *out = new(string) + **out = **in + } if in.RedundancyType != nil { in, out := &in.RedundancyType, &out.RedundancyType *out = new(string) @@ -873,6 +1505,13 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { *out = new(string) **out = **in } + if in.SSHKey != nil { + in, out := &in.SSHKey, &out.SSHKey + *out = make([]DeviceSSHKeyObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.SecondaryDevice != nil { in, out := &in.SecondaryDevice, &out.SecondaryDevice *out = make([]SecondaryDeviceObservation, len(*in)) @@ -880,16 +1519,67 @@ func (in *DeviceObservation) DeepCopyInto(out *DeviceObservation) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.SelfManaged != nil { + in, out := &in.SelfManaged, &out.SelfManaged + *out = new(bool) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) **out = **in } + if in.TermLength != nil { + in, out := &in.TermLength, &out.TermLength + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.ThroughputUnit != nil { + in, out := &in.ThroughputUnit, &out.ThroughputUnit + *out = new(string) + **out = **in + } + if in.TypeCode != nil { + in, out := &in.TypeCode, &out.TypeCode + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) **out = **in } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } + if in.WanInterfaceID != nil { + in, out := &in.WanInterfaceID, &out.WanInterfaceID + *out = new(string) + **out = **in + } if in.ZoneCode != nil { in, out := &in.ZoneCode, &out.ZoneCode *out = new(string) @@ -1075,7 +1765,8 @@ func (in *DeviceParameters) DeepCopyInto(out *DeviceParameters) { if val == nil { (*out)[key] = nil } else { - in, out := &val, &outVal + inVal := (*in)[key] + in, out := &inVal, &outVal *out = new(string) **out = **in } @@ -1104,9 +1795,44 @@ func (in *DeviceParameters) DeepCopy() *DeviceParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeviceSSHKeyInitParameters) DeepCopyInto(out *DeviceSSHKeyInitParameters) { + *out = *in + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSSHKeyInitParameters. +func (in *DeviceSSHKeyInitParameters) DeepCopy() *DeviceSSHKeyInitParameters { + if in == nil { + return nil + } + out := new(DeviceSSHKeyInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DeviceSSHKeyObservation) DeepCopyInto(out *DeviceSSHKeyObservation) { *out = *in + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSSHKeyObservation. @@ -1149,6 +1875,7 @@ func (in *DeviceSpec) DeepCopyInto(out *DeviceSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSpec. @@ -1205,6 +1932,52 @@ func (in *File) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FileInitParameters) DeepCopyInto(out *FileInitParameters) { + *out = *in + if in.Byol != nil { + in, out := &in.Byol, &out.Byol + *out = new(bool) + **out = **in + } + out.ContentSecretRef = in.ContentSecretRef + if in.DeviceTypeCode != nil { + in, out := &in.DeviceTypeCode, &out.DeviceTypeCode + *out = new(string) + **out = **in + } + if in.FileName != nil { + in, out := &in.FileName, &out.FileName + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.ProcessType != nil { + in, out := &in.ProcessType, &out.ProcessType + *out = new(string) + **out = **in + } + if in.SelfManaged != nil { + in, out := &in.SelfManaged, &out.SelfManaged + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FileInitParameters. +func (in *FileInitParameters) DeepCopy() *FileInitParameters { + if in == nil { + return nil + } + out := new(FileInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FileList) DeepCopyInto(out *FileList) { *out = *in @@ -1240,11 +2013,41 @@ func (in *FileList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FileObservation) DeepCopyInto(out *FileObservation) { *out = *in + if in.Byol != nil { + in, out := &in.Byol, &out.Byol + *out = new(bool) + **out = **in + } + if in.DeviceTypeCode != nil { + in, out := &in.DeviceTypeCode, &out.DeviceTypeCode + *out = new(string) + **out = **in + } + if in.FileName != nil { + in, out := &in.FileName, &out.FileName + *out = new(string) + **out = **in + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) **out = **in } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.ProcessType != nil { + in, out := &in.ProcessType, &out.ProcessType + *out = new(string) + **out = **in + } + if in.SelfManaged != nil { + in, out := &in.SelfManaged, &out.SelfManaged + *out = new(bool) + **out = **in + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) @@ -1318,6 +2121,7 @@ func (in *FileSpec) DeepCopyInto(out *FileSpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FileSpec. @@ -1347,9 +2151,75 @@ func (in *FileStatus) DeepCopy() *FileStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InboundRuleInitParameters) DeepCopyInto(out *InboundRuleInitParameters) { + *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DstPort != nil { + in, out := &in.DstPort, &out.DstPort + *out = new(string) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } + if in.SrcPort != nil { + in, out := &in.SrcPort, &out.SrcPort + *out = new(string) + **out = **in + } + if in.Subnet != nil { + in, out := &in.Subnet, &out.Subnet + *out = new(string) + **out = **in + } + if in.Subnets != nil { + in, out := &in.Subnets, &out.Subnets + *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 InboundRuleInitParameters. +func (in *InboundRuleInitParameters) DeepCopy() *InboundRuleInitParameters { + if in == nil { + return nil + } + out := new(InboundRuleInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InboundRuleObservation) DeepCopyInto(out *InboundRuleObservation) { *out = *in + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.DstPort != nil { + in, out := &in.DstPort, &out.DstPort + *out = new(string) + **out = **in + } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(string) + **out = **in + } if in.SequenceNumber != nil { in, out := &in.SequenceNumber, &out.SequenceNumber *out = new(float64) @@ -1360,6 +2230,27 @@ func (in *InboundRuleObservation) DeepCopyInto(out *InboundRuleObservation) { *out = new(string) **out = **in } + if in.SrcPort != nil { + in, out := &in.SrcPort, &out.SrcPort + *out = new(string) + **out = **in + } + if in.Subnet != nil { + in, out := &in.Subnet, &out.Subnet + *out = new(string) + **out = **in + } + if in.Subnets != nil { + in, out := &in.Subnets, &out.Subnets + *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 InboundRuleObservation. @@ -1423,6 +2314,21 @@ func (in *InboundRuleParameters) DeepCopy() *InboundRuleParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InterfaceInitParameters) DeepCopyInto(out *InterfaceInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InterfaceInitParameters. +func (in *InterfaceInitParameters) DeepCopy() *InterfaceInitParameters { + if in == nil { + return nil + } + out := new(InterfaceInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *InterfaceObservation) DeepCopyInto(out *InterfaceObservation) { *out = *in @@ -1488,14 +2394,99 @@ func (in *InterfaceParameters) DeepCopy() *InterfaceParameters { if in == nil { return nil } - out := new(InterfaceParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LinkObservation) DeepCopyInto(out *LinkObservation) { - *out = *in + out := new(InterfaceParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinkInitParameters) DeepCopyInto(out *LinkInitParameters) { + *out = *in + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.DstMetroCode != nil { + in, out := &in.DstMetroCode, &out.DstMetroCode + *out = new(string) + **out = **in + } + if in.DstZoneCode != nil { + in, out := &in.DstZoneCode, &out.DstZoneCode + *out = new(string) + **out = **in + } + if in.SrcMetroCode != nil { + in, out := &in.SrcMetroCode, &out.SrcMetroCode + *out = new(string) + **out = **in + } + if in.SrcZoneCode != nil { + in, out := &in.SrcZoneCode, &out.SrcZoneCode + *out = new(string) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(string) + **out = **in + } + if in.ThroughputUnit != nil { + in, out := &in.ThroughputUnit, &out.ThroughputUnit + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinkInitParameters. +func (in *LinkInitParameters) DeepCopy() *LinkInitParameters { + if in == nil { + return nil + } + out := new(LinkInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LinkObservation) DeepCopyInto(out *LinkObservation) { + *out = *in + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.DstMetroCode != nil { + in, out := &in.DstMetroCode, &out.DstMetroCode + *out = new(string) + **out = **in + } + if in.DstZoneCode != nil { + in, out := &in.DstZoneCode, &out.DstZoneCode + *out = new(string) + **out = **in + } + if in.SrcMetroCode != nil { + in, out := &in.SrcMetroCode, &out.SrcMetroCode + *out = new(string) + **out = **in + } + if in.SrcZoneCode != nil { + in, out := &in.SrcZoneCode, &out.SrcZoneCode + *out = new(string) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(string) + **out = **in + } + if in.ThroughputUnit != nil { + in, out := &in.ThroughputUnit, &out.ThroughputUnit + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LinkObservation. @@ -1558,9 +2549,64 @@ func (in *LinkParameters) DeepCopy() *LinkParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MetroLinkInitParameters) DeepCopyInto(out *MetroLinkInitParameters) { + *out = *in + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(string) + **out = **in + } + if in.ThroughputUnit != nil { + in, out := &in.ThroughputUnit, &out.ThroughputUnit + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetroLinkInitParameters. +func (in *MetroLinkInitParameters) DeepCopy() *MetroLinkInitParameters { + if in == nil { + return nil + } + out := new(MetroLinkInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MetroLinkObservation) DeepCopyInto(out *MetroLinkObservation) { *out = *in + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(string) + **out = **in + } + if in.ThroughputUnit != nil { + in, out := &in.ThroughputUnit, &out.ThroughputUnit + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MetroLinkObservation. @@ -1608,9 +2654,46 @@ func (in *MetroLinkParameters) DeepCopy() *MetroLinkParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Node0InitParameters) DeepCopyInto(out *Node0InitParameters) { + *out = *in + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } + if in.LicenseTokenSecretRef != nil { + in, out := &in.LicenseTokenSecretRef, &out.LicenseTokenSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make([]VendorConfigurationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Node0InitParameters. +func (in *Node0InitParameters) DeepCopy() *Node0InitParameters { + if in == nil { + return nil + } + out := new(Node0InitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Node0Observation) DeepCopyInto(out *Node0Observation) { *out = *in + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } if in.Name != nil { in, out := &in.Name, &out.Name *out = new(string) @@ -1621,6 +2704,13 @@ func (in *Node0Observation) DeepCopyInto(out *Node0Observation) { *out = new(string) **out = **in } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make([]VendorConfigurationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Node0Observation. @@ -1665,9 +2755,46 @@ func (in *Node0Parameters) DeepCopy() *Node0Parameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Node1InitParameters) DeepCopyInto(out *Node1InitParameters) { + *out = *in + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } + if in.LicenseTokenSecretRef != nil { + in, out := &in.LicenseTokenSecretRef, &out.LicenseTokenSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make([]Node1VendorConfigurationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Node1InitParameters. +func (in *Node1InitParameters) DeepCopy() *Node1InitParameters { + if in == nil { + return nil + } + out := new(Node1InitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Node1Observation) DeepCopyInto(out *Node1Observation) { *out = *in + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } if in.Name != nil { in, out := &in.Name, &out.Name *out = new(string) @@ -1678,6 +2805,13 @@ func (in *Node1Observation) DeepCopyInto(out *Node1Observation) { *out = new(string) **out = **in } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make([]Node1VendorConfigurationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Node1Observation. @@ -1722,9 +2856,124 @@ func (in *Node1Parameters) DeepCopy() *Node1Parameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Node1VendorConfigurationInitParameters) DeepCopyInto(out *Node1VendorConfigurationInitParameters) { + *out = *in + if in.ActivationKeySecretRef != nil { + in, out := &in.ActivationKeySecretRef, &out.ActivationKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.AdminPasswordSecretRef != nil { + in, out := &in.AdminPasswordSecretRef, &out.AdminPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.Controller1 != nil { + in, out := &in.Controller1, &out.Controller1 + *out = new(string) + **out = **in + } + if in.ControllerFqdn != nil { + in, out := &in.ControllerFqdn, &out.ControllerFqdn + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.LicenseIDSecretRef != nil { + in, out := &in.LicenseIDSecretRef, &out.LicenseIDSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.LicenseKeySecretRef != nil { + in, out := &in.LicenseKeySecretRef, &out.LicenseKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaAuthKeySecretRef != nil { + in, out := &in.PanoramaAuthKeySecretRef, &out.PanoramaAuthKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaIPAddress != nil { + in, out := &in.PanoramaIPAddress, &out.PanoramaIPAddress + *out = new(string) + **out = **in + } + if in.PrivateAddress != nil { + in, out := &in.PrivateAddress, &out.PrivateAddress + *out = new(string) + **out = **in + } + if in.PrivateCidrMask != nil { + in, out := &in.PrivateCidrMask, &out.PrivateCidrMask + *out = new(string) + **out = **in + } + if in.PrivateGateway != nil { + in, out := &in.PrivateGateway, &out.PrivateGateway + *out = new(string) + **out = **in + } + if in.RootPasswordSecretRef != nil { + in, out := &in.RootPasswordSecretRef, &out.RootPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Node1VendorConfigurationInitParameters. +func (in *Node1VendorConfigurationInitParameters) DeepCopy() *Node1VendorConfigurationInitParameters { + if in == nil { + return nil + } + out := new(Node1VendorConfigurationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Node1VendorConfigurationObservation) DeepCopyInto(out *Node1VendorConfigurationObservation) { *out = *in + if in.Controller1 != nil { + in, out := &in.Controller1, &out.Controller1 + *out = new(string) + **out = **in + } + if in.ControllerFqdn != nil { + in, out := &in.ControllerFqdn, &out.ControllerFqdn + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.PanoramaIPAddress != nil { + in, out := &in.PanoramaIPAddress, &out.PanoramaIPAddress + *out = new(string) + **out = **in + } + if in.PrivateAddress != nil { + in, out := &in.PrivateAddress, &out.PrivateAddress + *out = new(string) + **out = **in + } + if in.PrivateCidrMask != nil { + in, out := &in.PrivateCidrMask, &out.PrivateCidrMask + *out = new(string) + **out = **in + } + if in.PrivateGateway != nil { + in, out := &in.PrivateGateway, &out.PrivateGateway + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Node1VendorConfigurationObservation. @@ -1745,23 +2994,58 @@ func (in *Node1VendorConfigurationParameters) DeepCopyInto(out *Node1VendorConfi *out = new(v1.SecretKeySelector) **out = **in } - if in.AdminPasswordSecretRef != nil { - in, out := &in.AdminPasswordSecretRef, &out.AdminPasswordSecretRef + if in.AdminPasswordSecretRef != nil { + in, out := &in.AdminPasswordSecretRef, &out.AdminPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.Controller1 != nil { + in, out := &in.Controller1, &out.Controller1 + *out = new(string) + **out = **in + } + if in.ControllerFqdn != nil { + in, out := &in.ControllerFqdn, &out.ControllerFqdn + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.LicenseIDSecretRef != nil { + in, out := &in.LicenseIDSecretRef, &out.LicenseIDSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.LicenseKeySecretRef != nil { + in, out := &in.LicenseKeySecretRef, &out.LicenseKeySecretRef *out = new(v1.SecretKeySelector) **out = **in } - if in.Controller1 != nil { - in, out := &in.Controller1, &out.Controller1 + if in.PanoramaAuthKeySecretRef != nil { + in, out := &in.PanoramaAuthKeySecretRef, &out.PanoramaAuthKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaIPAddress != nil { + in, out := &in.PanoramaIPAddress, &out.PanoramaIPAddress *out = new(string) **out = **in } - if in.ControllerFqdn != nil { - in, out := &in.ControllerFqdn, &out.ControllerFqdn + if in.PrivateAddress != nil { + in, out := &in.PrivateAddress, &out.PrivateAddress *out = new(string) **out = **in } - if in.Hostname != nil { - in, out := &in.Hostname, &out.Hostname + if in.PrivateCidrMask != nil { + in, out := &in.PrivateCidrMask, &out.PrivateCidrMask + *out = new(string) + **out = **in + } + if in.PrivateGateway != nil { + in, out := &in.PrivateGateway, &out.PrivateGateway *out = new(string) **out = **in } @@ -1809,6 +3093,66 @@ func (in *SSHKey) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SSHKeyInitParameters) DeepCopyInto(out *SSHKeyInitParameters) { + *out = *in + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeyInitParameters. +func (in *SSHKeyInitParameters) DeepCopy() *SSHKeyInitParameters { + if in == nil { + return nil + } + out := new(SSHKeyInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SSHKeyInitParameters_2) DeepCopyInto(out *SSHKeyInitParameters_2) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.PublicKey != nil { + in, out := &in.PublicKey, &out.PublicKey + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeyInitParameters_2. +func (in *SSHKeyInitParameters_2) DeepCopy() *SSHKeyInitParameters_2 { + if in == nil { + return nil + } + out := new(SSHKeyInitParameters_2) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SSHKeyList) DeepCopyInto(out *SSHKeyList) { *out = *in @@ -1844,6 +3188,16 @@ func (in *SSHKeyList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SSHKeyObservation) DeepCopyInto(out *SSHKeyObservation) { *out = *in + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeyObservation. @@ -1864,6 +3218,26 @@ func (in *SSHKeyObservation_2) DeepCopyInto(out *SSHKeyObservation_2) { *out = new(string) **out = **in } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProjectID != nil { + in, out := &in.ProjectID, &out.ProjectID + *out = new(string) + **out = **in + } + if in.PublicKey != nil { + in, out := &in.PublicKey, &out.PublicKey + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } if in.UUID != nil { in, out := &in.UUID, &out.UUID *out = new(string) @@ -1946,6 +3320,7 @@ func (in *SSHKeySpec) DeepCopyInto(out *SSHKeySpec) { *out = *in in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHKeySpec. @@ -2002,6 +3377,38 @@ func (in *SSHUser) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SSHUserInitParameters) DeepCopyInto(out *SSHUserInitParameters) { + *out = *in + if in.DeviceIds != nil { + in, out := &in.DeviceIds, &out.DeviceIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + out.PasswordSecretRef = in.PasswordSecretRef + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserInitParameters. +func (in *SSHUserInitParameters) DeepCopy() *SSHUserInitParameters { + if in == nil { + return nil + } + out := new(SSHUserInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SSHUserList) DeepCopyInto(out *SSHUserList) { *out = *in @@ -2037,6 +3444,17 @@ func (in *SSHUserList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SSHUserObservation) DeepCopyInto(out *SSHUserObservation) { *out = *in + if in.DeviceIds != nil { + in, out := &in.DeviceIds, &out.DeviceIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.ID != nil { in, out := &in.ID, &out.ID *out = new(string) @@ -2047,6 +3465,11 @@ func (in *SSHUserObservation) DeepCopyInto(out *SSHUserObservation) { *out = new(string) **out = **in } + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserObservation. @@ -2073,54 +3496,179 @@ func (in *SSHUserParameters) DeepCopyInto(out *SSHUserParameters) { } } } - out.PasswordSecretRef = in.PasswordSecretRef - if in.Username != nil { - in, out := &in.Username, &out.Username + out.PasswordSecretRef = in.PasswordSecretRef + if in.Username != nil { + in, out := &in.Username, &out.Username + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserParameters. +func (in *SSHUserParameters) DeepCopy() *SSHUserParameters { + if in == nil { + return nil + } + out := new(SSHUserParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SSHUserSpec) DeepCopyInto(out *SSHUserSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserSpec. +func (in *SSHUserSpec) DeepCopy() *SSHUserSpec { + if in == nil { + return nil + } + out := new(SSHUserSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SSHUserStatus) DeepCopyInto(out *SSHUserStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserStatus. +func (in *SSHUserStatus) DeepCopy() *SSHUserStatus { + if in == nil { + return nil + } + out := new(SSHUserStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecondaryDeviceInitParameters) DeepCopyInto(out *SecondaryDeviceInitParameters) { + *out = *in + if in.ACLTemplateID != nil { + in, out := &in.ACLTemplateID, &out.ACLTemplateID + *out = new(string) + **out = **in + } + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.AdditionalBandwidth != nil { + in, out := &in.AdditionalBandwidth, &out.AdditionalBandwidth + *out = new(float64) + **out = **in + } + if in.CloudInitFileID != nil { + in, out := &in.CloudInitFileID, &out.CloudInitFileID + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.LicenseFile != nil { + in, out := &in.LicenseFile, &out.LicenseFile + *out = new(string) + **out = **in + } + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } + if in.LicenseToken != nil { + in, out := &in.LicenseToken, &out.LicenseToken + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MgmtACLTemplateUUID != nil { + in, out := &in.MgmtACLTemplateUUID, &out.MgmtACLTemplateUUID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *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.SSHKey != nil { + in, out := &in.SSHKey, &out.SSHKey + *out = make([]SSHKeyInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.WanInterfaceID != nil { + in, out := &in.WanInterfaceID, &out.WanInterfaceID *out = new(string) **out = **in } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserParameters. -func (in *SSHUserParameters) DeepCopy() *SSHUserParameters { - if in == nil { - return nil - } - out := new(SSHUserParameters) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SSHUserSpec) DeepCopyInto(out *SSHUserSpec) { - *out = *in - in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) - in.ForProvider.DeepCopyInto(&out.ForProvider) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserSpec. -func (in *SSHUserSpec) DeepCopy() *SSHUserSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecondaryDeviceInitParameters. +func (in *SecondaryDeviceInitParameters) DeepCopy() *SecondaryDeviceInitParameters { if in == nil { return nil } - out := new(SSHUserSpec) + out := new(SecondaryDeviceInitParameters) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SSHUserStatus) DeepCopyInto(out *SSHUserStatus) { +func (in *SecondaryDeviceInterfaceInitParameters) DeepCopyInto(out *SecondaryDeviceInterfaceInitParameters) { *out = *in - in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) - in.AtProvider.DeepCopyInto(&out.AtProvider) } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SSHUserStatus. -func (in *SSHUserStatus) DeepCopy() *SSHUserStatus { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecondaryDeviceInterfaceInitParameters. +func (in *SecondaryDeviceInterfaceInitParameters) DeepCopy() *SecondaryDeviceInterfaceInitParameters { if in == nil { return nil } - out := new(SSHUserStatus) + out := new(SecondaryDeviceInterfaceInitParameters) in.DeepCopyInto(out) return out } @@ -2198,11 +3746,36 @@ func (in *SecondaryDeviceInterfaceParameters) DeepCopy() *SecondaryDeviceInterfa // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SecondaryDeviceObservation) DeepCopyInto(out *SecondaryDeviceObservation) { *out = *in + if in.ACLTemplateID != nil { + in, out := &in.ACLTemplateID, &out.ACLTemplateID + *out = new(string) + **out = **in + } + if in.AccountNumber != nil { + in, out := &in.AccountNumber, &out.AccountNumber + *out = new(string) + **out = **in + } + if in.AdditionalBandwidth != nil { + in, out := &in.AdditionalBandwidth, &out.AdditionalBandwidth + *out = new(float64) + **out = **in + } if in.Asn != nil { in, out := &in.Asn, &out.Asn *out = new(float64) **out = **in } + if in.CloudInitFileID != nil { + in, out := &in.CloudInitFileID, &out.CloudInitFileID + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } if in.Ibx != nil { in, out := &in.Ibx, &out.Ibx *out = new(string) @@ -2215,11 +3788,52 @@ func (in *SecondaryDeviceObservation) DeepCopyInto(out *SecondaryDeviceObservati (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.LicenseFile != nil { + in, out := &in.LicenseFile, &out.LicenseFile + *out = new(string) + **out = **in + } + if in.LicenseFileID != nil { + in, out := &in.LicenseFileID, &out.LicenseFileID + *out = new(string) + **out = **in + } if in.LicenseStatus != nil { in, out := &in.LicenseStatus, &out.LicenseStatus *out = new(string) **out = **in } + if in.LicenseToken != nil { + in, out := &in.LicenseToken, &out.LicenseToken + *out = new(string) + **out = **in + } + if in.MetroCode != nil { + in, out := &in.MetroCode, &out.MetroCode + *out = new(string) + **out = **in + } + if in.MgmtACLTemplateUUID != nil { + in, out := &in.MgmtACLTemplateUUID, &out.MgmtACLTemplateUUID + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Notifications != nil { + in, out := &in.Notifications, &out.Notifications + *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.ProjectID != nil { in, out := &in.ProjectID, &out.ProjectID *out = new(string) @@ -2250,6 +3864,13 @@ func (in *SecondaryDeviceObservation) DeepCopyInto(out *SecondaryDeviceObservati *out = new(string) **out = **in } + if in.SSHKey != nil { + in, out := &in.SSHKey, &out.SSHKey + *out = make([]SSHKeyObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) @@ -2260,6 +3881,27 @@ func (in *SecondaryDeviceObservation) DeepCopyInto(out *SecondaryDeviceObservati *out = new(string) **out = **in } + if in.VendorConfiguration != nil { + in, out := &in.VendorConfiguration, &out.VendorConfiguration + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.WanInterfaceID != nil { + in, out := &in.WanInterfaceID, &out.WanInterfaceID + *out = new(string) + **out = **in + } if in.ZoneCode != nil { in, out := &in.ZoneCode, &out.ZoneCode *out = new(string) @@ -2361,7 +4003,8 @@ func (in *SecondaryDeviceParameters) DeepCopyInto(out *SecondaryDeviceParameters if val == nil { (*out)[key] = nil } else { - in, out := &val, &outVal + inVal := (*in)[key] + in, out := &inVal, &outVal *out = new(string) **out = **in } @@ -2385,9 +4028,124 @@ func (in *SecondaryDeviceParameters) DeepCopy() *SecondaryDeviceParameters { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VendorConfigurationInitParameters) DeepCopyInto(out *VendorConfigurationInitParameters) { + *out = *in + if in.ActivationKeySecretRef != nil { + in, out := &in.ActivationKeySecretRef, &out.ActivationKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.AdminPasswordSecretRef != nil { + in, out := &in.AdminPasswordSecretRef, &out.AdminPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.Controller1 != nil { + in, out := &in.Controller1, &out.Controller1 + *out = new(string) + **out = **in + } + if in.ControllerFqdn != nil { + in, out := &in.ControllerFqdn, &out.ControllerFqdn + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.LicenseIDSecretRef != nil { + in, out := &in.LicenseIDSecretRef, &out.LicenseIDSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.LicenseKeySecretRef != nil { + in, out := &in.LicenseKeySecretRef, &out.LicenseKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaAuthKeySecretRef != nil { + in, out := &in.PanoramaAuthKeySecretRef, &out.PanoramaAuthKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaIPAddress != nil { + in, out := &in.PanoramaIPAddress, &out.PanoramaIPAddress + *out = new(string) + **out = **in + } + if in.PrivateAddress != nil { + in, out := &in.PrivateAddress, &out.PrivateAddress + *out = new(string) + **out = **in + } + if in.PrivateCidrMask != nil { + in, out := &in.PrivateCidrMask, &out.PrivateCidrMask + *out = new(string) + **out = **in + } + if in.PrivateGateway != nil { + in, out := &in.PrivateGateway, &out.PrivateGateway + *out = new(string) + **out = **in + } + if in.RootPasswordSecretRef != nil { + in, out := &in.RootPasswordSecretRef, &out.RootPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VendorConfigurationInitParameters. +func (in *VendorConfigurationInitParameters) DeepCopy() *VendorConfigurationInitParameters { + if in == nil { + return nil + } + out := new(VendorConfigurationInitParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VendorConfigurationObservation) DeepCopyInto(out *VendorConfigurationObservation) { *out = *in + if in.Controller1 != nil { + in, out := &in.Controller1, &out.Controller1 + *out = new(string) + **out = **in + } + if in.ControllerFqdn != nil { + in, out := &in.ControllerFqdn, &out.ControllerFqdn + *out = new(string) + **out = **in + } + if in.Hostname != nil { + in, out := &in.Hostname, &out.Hostname + *out = new(string) + **out = **in + } + if in.PanoramaIPAddress != nil { + in, out := &in.PanoramaIPAddress, &out.PanoramaIPAddress + *out = new(string) + **out = **in + } + if in.PrivateAddress != nil { + in, out := &in.PrivateAddress, &out.PrivateAddress + *out = new(string) + **out = **in + } + if in.PrivateCidrMask != nil { + in, out := &in.PrivateCidrMask, &out.PrivateCidrMask + *out = new(string) + **out = **in + } + if in.PrivateGateway != nil { + in, out := &in.PrivateGateway, &out.PrivateGateway + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VendorConfigurationObservation. @@ -2428,6 +4186,41 @@ func (in *VendorConfigurationParameters) DeepCopyInto(out *VendorConfigurationPa *out = new(string) **out = **in } + if in.LicenseIDSecretRef != nil { + in, out := &in.LicenseIDSecretRef, &out.LicenseIDSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.LicenseKeySecretRef != nil { + in, out := &in.LicenseKeySecretRef, &out.LicenseKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaAuthKeySecretRef != nil { + in, out := &in.PanoramaAuthKeySecretRef, &out.PanoramaAuthKeySecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.PanoramaIPAddress != nil { + in, out := &in.PanoramaIPAddress, &out.PanoramaIPAddress + *out = new(string) + **out = **in + } + if in.PrivateAddress != nil { + in, out := &in.PrivateAddress, &out.PrivateAddress + *out = new(string) + **out = **in + } + if in.PrivateCidrMask != nil { + in, out := &in.PrivateCidrMask, &out.PrivateCidrMask + *out = new(string) + **out = **in + } + if in.PrivateGateway != nil { + in, out := &in.PrivateGateway, &out.PrivateGateway + *out = new(string) + **out = **in + } if in.RootPasswordSecretRef != nil { in, out := &in.RootPasswordSecretRef, &out.RootPasswordSecretRef *out = new(v1.SecretKeySelector) diff --git a/apis/network/v1alpha1/zz_generated.managed.go b/apis/network/v1alpha1/zz_generated.managed.go index 663396f..1123185 100644 --- a/apis/network/v1alpha1/zz_generated.managed.go +++ b/apis/network/v1alpha1/zz_generated.managed.go @@ -29,19 +29,16 @@ func (mg *ACLTemplate) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this ACLTemplate. +func (mg *ACLTemplate) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this ACLTemplate. func (mg *ACLTemplate) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this ACLTemplate. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *ACLTemplate) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this ACLTemplate. func (mg *ACLTemplate) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -62,19 +59,16 @@ func (mg *ACLTemplate) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this ACLTemplate. +func (mg *ACLTemplate) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this ACLTemplate. func (mg *ACLTemplate) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this ACLTemplate. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *ACLTemplate) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this ACLTemplate. func (mg *ACLTemplate) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -95,19 +89,16 @@ func (mg *BGP) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this BGP. +func (mg *BGP) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this BGP. func (mg *BGP) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this BGP. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *BGP) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this BGP. func (mg *BGP) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -128,19 +119,16 @@ func (mg *BGP) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this BGP. +func (mg *BGP) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this BGP. func (mg *BGP) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this BGP. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *BGP) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this BGP. func (mg *BGP) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -161,19 +149,16 @@ func (mg *Device) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this Device. +func (mg *Device) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this Device. func (mg *Device) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this Device. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *Device) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this Device. func (mg *Device) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -194,19 +179,16 @@ func (mg *Device) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this Device. +func (mg *Device) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this Device. func (mg *Device) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this Device. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *Device) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this Device. func (mg *Device) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -227,19 +209,16 @@ func (mg *DeviceLink) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this DeviceLink. +func (mg *DeviceLink) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this DeviceLink. func (mg *DeviceLink) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this DeviceLink. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *DeviceLink) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this DeviceLink. func (mg *DeviceLink) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -260,19 +239,16 @@ func (mg *DeviceLink) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this DeviceLink. +func (mg *DeviceLink) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this DeviceLink. func (mg *DeviceLink) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this DeviceLink. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *DeviceLink) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this DeviceLink. func (mg *DeviceLink) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -293,19 +269,16 @@ func (mg *File) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this File. +func (mg *File) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this File. func (mg *File) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this File. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *File) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this File. func (mg *File) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -326,19 +299,16 @@ func (mg *File) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this File. +func (mg *File) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this File. func (mg *File) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this File. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *File) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this File. func (mg *File) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -359,19 +329,16 @@ func (mg *SSHKey) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this SSHKey. +func (mg *SSHKey) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this SSHKey. func (mg *SSHKey) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this SSHKey. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *SSHKey) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this SSHKey. func (mg *SSHKey) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -392,19 +359,16 @@ func (mg *SSHKey) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this SSHKey. +func (mg *SSHKey) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this SSHKey. func (mg *SSHKey) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this SSHKey. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *SSHKey) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this SSHKey. func (mg *SSHKey) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r @@ -425,19 +389,16 @@ func (mg *SSHUser) GetDeletionPolicy() xpv1.DeletionPolicy { return mg.Spec.DeletionPolicy } +// GetManagementPolicies of this SSHUser. +func (mg *SSHUser) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + // GetProviderConfigReference of this SSHUser. func (mg *SSHUser) GetProviderConfigReference() *xpv1.Reference { return mg.Spec.ProviderConfigReference } -/* -GetProviderReference of this SSHUser. -Deprecated: Use GetProviderConfigReference. -*/ -func (mg *SSHUser) GetProviderReference() *xpv1.Reference { - return mg.Spec.ProviderReference -} - // GetPublishConnectionDetailsTo of this SSHUser. func (mg *SSHUser) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { return mg.Spec.PublishConnectionDetailsTo @@ -458,19 +419,16 @@ func (mg *SSHUser) SetDeletionPolicy(r xpv1.DeletionPolicy) { mg.Spec.DeletionPolicy = r } +// SetManagementPolicies of this SSHUser. +func (mg *SSHUser) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + // SetProviderConfigReference of this SSHUser. func (mg *SSHUser) SetProviderConfigReference(r *xpv1.Reference) { mg.Spec.ProviderConfigReference = r } -/* -SetProviderReference of this SSHUser. -Deprecated: Use SetProviderConfigReference. -*/ -func (mg *SSHUser) SetProviderReference(r *xpv1.Reference) { - mg.Spec.ProviderReference = r -} - // SetPublishConnectionDetailsTo of this SSHUser. func (mg *SSHUser) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { mg.Spec.PublishConnectionDetailsTo = r diff --git a/apis/network/v1alpha1/zz_generated_terraformed.go b/apis/network/v1alpha1/zz_generated_terraformed.go deleted file mode 100755 index 82e3503..0000000 --- a/apis/network/v1alpha1/zz_generated_terraformed.go +++ /dev/null @@ -1,544 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package v1alpha1 - -import ( - "github.com/pkg/errors" - - "github.com/upbound/upjet/pkg/resource" - "github.com/upbound/upjet/pkg/resource/json" -) - -// GetTerraformResourceType returns Terraform resource type for this ACLTemplate -func (mg *ACLTemplate) GetTerraformResourceType() string { - return "equinix_network_acl_template" -} - -// GetConnectionDetailsMapping for this ACLTemplate -func (tr *ACLTemplate) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this ACLTemplate -func (tr *ACLTemplate) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this ACLTemplate -func (tr *ACLTemplate) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this ACLTemplate -func (tr *ACLTemplate) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this ACLTemplate -func (tr *ACLTemplate) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this ACLTemplate -func (tr *ACLTemplate) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this ACLTemplate using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *ACLTemplate) LateInitialize(attrs []byte) (bool, error) { - params := &ACLTemplateParameters{} - 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 *ACLTemplate) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this BGP -func (mg *BGP) GetTerraformResourceType() string { - return "equinix_network_bgp" -} - -// GetConnectionDetailsMapping for this BGP -func (tr *BGP) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"authentication_key": "spec.forProvider.authenticationKeySecretRef"} -} - -// GetObservation of this BGP -func (tr *BGP) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this BGP -func (tr *BGP) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this BGP -func (tr *BGP) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this BGP -func (tr *BGP) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this BGP -func (tr *BGP) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this BGP using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *BGP) LateInitialize(attrs []byte) (bool, error) { - params := &BGPParameters{} - 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 *BGP) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this Device -func (mg *Device) GetTerraformResourceType() string { - return "equinix_network_device" -} - -// GetConnectionDetailsMapping for this Device -func (tr *Device) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"cluster_details[*].node0[*].license_token": "spec.forProvider.clusterDetails[*].node0[*].licenseTokenSecretRef", "cluster_details[*].node0[*].vendor_configuration[*].activation_key": "spec.forProvider.clusterDetails[*].node0[*].vendorConfiguration[*].activationKeySecretRef", "cluster_details[*].node0[*].vendor_configuration[*].admin_password": "spec.forProvider.clusterDetails[*].node0[*].vendorConfiguration[*].adminPasswordSecretRef", "cluster_details[*].node0[*].vendor_configuration[*].root_password": "spec.forProvider.clusterDetails[*].node0[*].vendorConfiguration[*].rootPasswordSecretRef", "cluster_details[*].node1[*].license_token": "spec.forProvider.clusterDetails[*].node1[*].licenseTokenSecretRef", "cluster_details[*].node1[*].vendor_configuration[*].activation_key": "spec.forProvider.clusterDetails[*].node1[*].vendorConfiguration[*].activationKeySecretRef", "cluster_details[*].node1[*].vendor_configuration[*].admin_password": "spec.forProvider.clusterDetails[*].node1[*].vendorConfiguration[*].adminPasswordSecretRef", "cluster_details[*].node1[*].vendor_configuration[*].root_password": "spec.forProvider.clusterDetails[*].node1[*].vendorConfiguration[*].rootPasswordSecretRef"} -} - -// GetObservation of this Device -func (tr *Device) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this Device -func (tr *Device) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this Device -func (tr *Device) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this Device -func (tr *Device) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this Device -func (tr *Device) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this Device using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *Device) LateInitialize(attrs []byte) (bool, error) { - params := &DeviceParameters{} - 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 *Device) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this DeviceLink -func (mg *DeviceLink) GetTerraformResourceType() string { - return "equinix_network_device_link" -} - -// GetConnectionDetailsMapping for this DeviceLink -func (tr *DeviceLink) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this DeviceLink -func (tr *DeviceLink) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this DeviceLink -func (tr *DeviceLink) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this DeviceLink -func (tr *DeviceLink) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this DeviceLink -func (tr *DeviceLink) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this DeviceLink -func (tr *DeviceLink) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this DeviceLink using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *DeviceLink) LateInitialize(attrs []byte) (bool, error) { - params := &DeviceLinkParameters{} - 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 *DeviceLink) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this File -func (mg *File) GetTerraformResourceType() string { - return "equinix_network_file" -} - -// GetConnectionDetailsMapping for this File -func (tr *File) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"content": "spec.forProvider.contentSecretRef"} -} - -// GetObservation of this File -func (tr *File) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this File -func (tr *File) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this File -func (tr *File) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this File -func (tr *File) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this File -func (tr *File) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this File using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *File) LateInitialize(attrs []byte) (bool, error) { - params := &FileParameters{} - 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 *File) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this SSHKey -func (mg *SSHKey) GetTerraformResourceType() string { - return "equinix_network_ssh_key" -} - -// GetConnectionDetailsMapping for this SSHKey -func (tr *SSHKey) GetConnectionDetailsMapping() map[string]string { - return nil -} - -// GetObservation of this SSHKey -func (tr *SSHKey) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this SSHKey -func (tr *SSHKey) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this SSHKey -func (tr *SSHKey) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this SSHKey -func (tr *SSHKey) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this SSHKey -func (tr *SSHKey) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this SSHKey using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *SSHKey) LateInitialize(attrs []byte) (bool, error) { - params := &SSHKeyParameters_2{} - 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 *SSHKey) GetTerraformSchemaVersion() int { - return 0 -} - -// GetTerraformResourceType returns Terraform resource type for this SSHUser -func (mg *SSHUser) GetTerraformResourceType() string { - return "equinix_network_ssh_user" -} - -// GetConnectionDetailsMapping for this SSHUser -func (tr *SSHUser) GetConnectionDetailsMapping() map[string]string { - return map[string]string{"password": "spec.forProvider.passwordSecretRef"} -} - -// GetObservation of this SSHUser -func (tr *SSHUser) GetObservation() (map[string]any, error) { - o, err := json.TFParser.Marshal(tr.Status.AtProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(o, &base) -} - -// SetObservation for this SSHUser -func (tr *SSHUser) SetObservation(obs map[string]any) error { - p, err := json.TFParser.Marshal(obs) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) -} - -// GetID returns ID of underlying Terraform resource of this SSHUser -func (tr *SSHUser) GetID() string { - if tr.Status.AtProvider.ID == nil { - return "" - } - return *tr.Status.AtProvider.ID -} - -// GetParameters of this SSHUser -func (tr *SSHUser) GetParameters() (map[string]any, error) { - p, err := json.TFParser.Marshal(tr.Spec.ForProvider) - if err != nil { - return nil, err - } - base := map[string]any{} - return base, json.TFParser.Unmarshal(p, &base) -} - -// SetParameters for this SSHUser -func (tr *SSHUser) SetParameters(params map[string]any) error { - p, err := json.TFParser.Marshal(params) - if err != nil { - return err - } - return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) -} - -// LateInitialize this SSHUser using its observed tfState. -// returns True if there are any spec changes for the resource. -func (tr *SSHUser) LateInitialize(attrs []byte) (bool, error) { - params := &SSHUserParameters{} - 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 *SSHUser) GetTerraformSchemaVersion() int { - return 0 -} diff --git a/apis/network/v1alpha1/zz_sshkey_terraformed.go b/apis/network/v1alpha1/zz_sshkey_terraformed.go new file mode 100755 index 0000000..2ac951a --- /dev/null +++ b/apis/network/v1alpha1/zz_sshkey_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this SSHKey +func (mg *SSHKey) GetTerraformResourceType() string { + return "equinix_network_ssh_key" +} + +// GetConnectionDetailsMapping for this SSHKey +func (tr *SSHKey) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this SSHKey +func (tr *SSHKey) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this SSHKey +func (tr *SSHKey) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this SSHKey +func (tr *SSHKey) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this SSHKey +func (tr *SSHKey) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this SSHKey +func (tr *SSHKey) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this SSHKey +func (tr *SSHKey) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this SSHKey +func (tr *SSHKey) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this SSHKey using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *SSHKey) LateInitialize(attrs []byte) (bool, error) { + params := &SSHKeyParameters_2{} + 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 *SSHKey) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_sshkey_types.go b/apis/network/v1alpha1/zz_sshkey_types.go index 1f2c5eb..759cd0a 100755 --- a/apis/network/v1alpha1/zz_sshkey_types.go +++ b/apis/network/v1alpha1/zz_sshkey_types.go @@ -25,9 +25,44 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type SSHKeyInitParameters_2 struct { + + // The name of SSH key used for identification. + // The name of SSH key used for identification + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization. + // The unique identifier of Project Resource to which ssh key is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // The SSH public key. If this is a file, it can be read using the file interpolation function. + // The SSH public key. If this is a file, it can be read using the file interpolation function + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` + + // The type of SSH key: RSA (default) or DSA. + // The type of SSH key: RSA (default) or DSA + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + type SSHKeyObservation_2 struct { ID *string `json:"id,omitempty" tf:"id,omitempty"` + // The name of SSH key used for identification. + // The name of SSH key used for identification + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization. + // The unique identifier of Project Resource to which ssh key is scoped to + ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // The SSH public key. If this is a file, it can be read using the file interpolation function. + // The SSH public key. If this is a file, it can be read using the file interpolation function + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` + + // The type of SSH key: RSA (default) or DSA. + // The type of SSH key: RSA (default) or DSA + Type *string `json:"type,omitempty" tf:"type,omitempty"` + // The unique identifier of the key // The unique identifier of the key UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` @@ -37,20 +72,18 @@ type SSHKeyParameters_2 struct { // The name of SSH key used for identification. // The name of SSH key used for identification - // +kubebuilder:validation:Required - Name *string `json:"name" tf:"name,omitempty"` + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` - // Unique Identifier for the project resource where the SSH key is scoped to.If you - // leave it out, the ssh key will be created under the default project id of your organization. + // Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization. // The unique identifier of Project Resource to which ssh key is scoped to // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` - // The SSH public key. If this is a file, it can be read using the file - // interpolation function. + // The SSH public key. If this is a file, it can be read using the file interpolation function. // The SSH public key. If this is a file, it can be read using the file interpolation function - // +kubebuilder:validation:Required - PublicKey *string `json:"publicKey" tf:"public_key,omitempty"` + // +kubebuilder:validation:Optional + PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` // The type of SSH key: RSA (default) or DSA. // The type of SSH key: RSA (default) or DSA @@ -62,6 +95,17 @@ type SSHKeyParameters_2 struct { type SSHKeySpec struct { v1.ResourceSpec `json:",inline"` ForProvider SSHKeyParameters_2 `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider SSHKeyInitParameters_2 `json:"initProvider,omitempty"` } // SSHKeyStatus defines the observed state of SSHKey. @@ -71,19 +115,22 @@ type SSHKeyStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // SSHKey is the Schema for the SSHKeys 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type SSHKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec SSHKeySpec `json:"spec"` - Status SSHKeyStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.publicKey) || (has(self.initProvider) && has(self.initProvider.publicKey))",message="spec.forProvider.publicKey is a required parameter" + Spec SSHKeySpec `json:"spec"` + Status SSHKeyStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/network/v1alpha1/zz_sshuser_terraformed.go b/apis/network/v1alpha1/zz_sshuser_terraformed.go new file mode 100755 index 0000000..718c0b0 --- /dev/null +++ b/apis/network/v1alpha1/zz_sshuser_terraformed.go @@ -0,0 +1,141 @@ +/* +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 upjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this SSHUser +func (mg *SSHUser) GetTerraformResourceType() string { + return "equinix_network_ssh_user" +} + +// GetConnectionDetailsMapping for this SSHUser +func (tr *SSHUser) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"password": "passwordSecretRef"} +} + +// GetObservation of this SSHUser +func (tr *SSHUser) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this SSHUser +func (tr *SSHUser) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this SSHUser +func (tr *SSHUser) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this SSHUser +func (tr *SSHUser) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this SSHUser +func (tr *SSHUser) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this SSHUser +func (tr *SSHUser) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this SSHUser +func (tr *SSHUser) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this SSHUser using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *SSHUser) LateInitialize(attrs []byte) (bool, error) { + params := &SSHUserParameters{} + 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 *SSHUser) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/network/v1alpha1/zz_sshuser_types.go b/apis/network/v1alpha1/zz_sshuser_types.go index df8608d..d9eacb1 100755 --- a/apis/network/v1alpha1/zz_sshuser_types.go +++ b/apis/network/v1alpha1/zz_sshuser_types.go @@ -25,36 +25,74 @@ import ( v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" ) +type SSHUserInitParameters struct { + + // list of device identifiers to which user will have access. + // list of device identifiers to which user will have access + // +listType=set + DeviceIds []*string `json:"deviceIds,omitempty" tf:"device_ids,omitempty"` + + // SSH user password. + // SSH user password + PasswordSecretRef v1.SecretKeySelector `json:"passwordSecretRef" tf:"-"` + + // SSH user login name. + // SSH user login name + Username *string `json:"username,omitempty" tf:"username,omitempty"` +} + type SSHUserObservation struct { + + // list of device identifiers to which user will have access. + // list of device identifiers to which user will have access + // +listType=set + DeviceIds []*string `json:"deviceIds,omitempty" tf:"device_ids,omitempty"` + ID *string `json:"id,omitempty" tf:"id,omitempty"` // SSH user unique identifier. // SSH user unique identifier UUID *string `json:"uuid,omitempty" tf:"uuid,omitempty"` + + // SSH user login name. + // SSH user login name + Username *string `json:"username,omitempty" tf:"username,omitempty"` } type SSHUserParameters struct { // list of device identifiers to which user will have access. // list of device identifiers to which user will have access - // +kubebuilder:validation:Required - DeviceIds []*string `json:"deviceIds" tf:"device_ids,omitempty"` + // +kubebuilder:validation:Optional + // +listType=set + DeviceIds []*string `json:"deviceIds,omitempty" tf:"device_ids,omitempty"` // SSH user password. // SSH user password - // +kubebuilder:validation:Required + // +kubebuilder:validation:Optional PasswordSecretRef v1.SecretKeySelector `json:"passwordSecretRef" tf:"-"` // SSH user login name. // SSH user login name - // +kubebuilder:validation:Required - Username *string `json:"username" tf:"username,omitempty"` + // +kubebuilder:validation:Optional + Username *string `json:"username,omitempty" tf:"username,omitempty"` } // SSHUserSpec defines the desired state of SSHUser type SSHUserSpec struct { v1.ResourceSpec `json:",inline"` ForProvider SSHUserParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider SSHUserInitParameters `json:"initProvider,omitempty"` } // SSHUserStatus defines the observed state of SSHUser. @@ -64,19 +102,23 @@ type SSHUserStatus struct { } // +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion // SSHUser is the Schema for the SSHUsers 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="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" // +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" -// +kubebuilder:subresource:status // +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,equinix} type SSHUser struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec SSHUserSpec `json:"spec"` - Status SSHUserStatus `json:"status,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceIds) || (has(self.initProvider) && has(self.initProvider.deviceIds))",message="spec.forProvider.deviceIds is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.passwordSecretRef)",message="spec.forProvider.passwordSecretRef is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.username) || (has(self.initProvider) && has(self.initProvider.username))",message="spec.forProvider.username is a required parameter" + Spec SSHUserSpec `json:"spec"` + Status SSHUserStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index eb9bed7..4cb3adc 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -1,5 +1,4 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated /* Copyright 2021 The Crossplane Authors. diff --git a/apis/zz_register.go b/apis/zz_register.go index b10cf14..b90ad9d 100755 --- a/apis/zz_register.go +++ b/apis/zz_register.go @@ -22,8 +22,7 @@ package apis import ( "k8s.io/apimachinery/pkg/runtime" - v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/ecx/v1alpha1" - v1alpha1fabric "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" + v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" v1alpha1metal "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" v1alpha1network "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" v1alpha1apis "github.com/crossplane-contrib/provider-jet-equinix/apis/v1alpha1" @@ -33,7 +32,6 @@ func init() { // Register the types with the Scheme so the components can map objects to GroupVersionKinds and back AddToSchemes = append(AddToSchemes, v1alpha1.SchemeBuilder.AddToScheme, - v1alpha1fabric.SchemeBuilder.AddToScheme, v1alpha1metal.SchemeBuilder.AddToScheme, v1alpha1network.SchemeBuilder.AddToScheme, v1alpha1apis.SchemeBuilder.AddToScheme, diff --git a/examples-generated/ecx/l2connection.yaml b/examples-generated/ecx/l2connection.yaml deleted file mode 100644 index 8fa234c..0000000 --- a/examples-generated/ecx/l2connection.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: ecx.equinix.jet.crossplane.io/v1alpha1 -kind: L2Connection -metadata: - annotations: - meta.upbound.io/example-id: ecx/v1alpha1/l2connection - labels: - testing.upbound.io/example-name: port-2-aws - name: port-2-aws -spec: - forProvider: - authorizationKey: "345742915919" - name: tf-aws - notifications: - - marry@equinix.com - - john@equinix.com - portUuid: ${data.equinix_ecx_port.sv-qinq-pri.id} - profileUuidSelector: - matchLabels: - testing.upbound.io/example-name: equinix_ecx_l2_sellerprofile - sellerMetroCode: SV - sellerRegion: us-west-1 - speed: 200 - speedUnit: MB - vlanCtag: 1000 - vlanStag: 777 - ---- - diff --git a/examples-generated/ecx/l2connectionaccepter.yaml b/examples-generated/ecx/l2connectionaccepter.yaml deleted file mode 100644 index 1c05ccb..0000000 --- a/examples-generated/ecx/l2connectionaccepter.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: ecx.equinix.jet.crossplane.io/v1alpha1 -kind: L2ConnectionAccepter -metadata: - annotations: - meta.upbound.io/example-id: ecx/v1alpha1/l2connectionaccepter - labels: - testing.upbound.io/example-name: accepter - name: accepter -spec: - forProvider: - connectionId: ${equinix_ecx_l2_connection.awsConn.id} - ---- - diff --git a/examples-generated/ecx/l2serviceprofile.yaml b/examples-generated/ecx/l2serviceprofile.yaml deleted file mode 100644 index e26a45a..0000000 --- a/examples-generated/ecx/l2serviceprofile.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: ecx.equinix.jet.crossplane.io/v1alpha1 -kind: L2Serviceprofile -metadata: - annotations: - meta.upbound.io/example-id: ecx/v1alpha1/l2serviceprofile - labels: - testing.upbound.io/example-name: private-profile - name: private-profile -spec: - forProvider: - bandwidthThresholdNotifications: - - John.Doe@example.com - - Marry.Doe@example.com - connectionNameLabel: Connection - description: my private profile - features: - - allowRemoteConnections: true - testProfile: false - name: private-profile - port: - - metroCode: NY - uuid: a867f685-422f-22f7-6de0-320a5c00abdd - - metroCode: NY - uuid: a867f685-4231-2317-6de0-320a5c00abdd - private: true - privateUserEmails: - - John.Doe@example.com - - Marry.Doe@example.com - profileStatuschangeNotifications: - - John.Doe@example.com - - Marry.Doe@example.com - speedBand: - - speed: 1000 - speedUnit: MB - - speed: 500 - speedUnit: MB - - speed: 100 - speedUnit: MB - vcStatuschangeNotifications: - - John.Doe@example.com - - Marry.Doe@example.com - ---- - diff --git a/examples-generated/fabric/v1alpha1/cloudrouter.yaml b/examples-generated/fabric/v1alpha1/cloudrouter.yaml new file mode 100644 index 0000000..57e593e --- /dev/null +++ b/examples-generated/fabric/v1alpha1/cloudrouter.yaml @@ -0,0 +1,27 @@ +apiVersion: fabric.equinix.jet.crossplane.io/v1alpha1 +kind: CloudRouter +metadata: + annotations: + meta.upbound.io/example-id: fabric/v1alpha1/cloudrouter + labels: + testing.upbound.io/example-name: new_cloud_router + name: new-cloud-router +spec: + forProvider: + account: + - accountNumber: "203612" + location: + - metroCode: SV + name: Router-SV + notifications: + - emails: + - example@equinix.com + - test1@equinix.com + type: ALL + order: + - purchaseOrderNumber: 1-323292 + package: + - code: STANDARD + project: + - projectId: "776847000642406" + type: XF_ROUTER diff --git a/examples-generated/fabric/v1alpha1/connection.yaml b/examples-generated/fabric/v1alpha1/connection.yaml new file mode 100644 index 0000000..c46bf05 --- /dev/null +++ b/examples-generated/fabric/v1alpha1/connection.yaml @@ -0,0 +1,38 @@ +apiVersion: fabric.equinix.jet.crossplane.io/v1alpha1 +kind: Connection +metadata: + annotations: + meta.upbound.io/example-id: fabric/v1alpha1/connection + labels: + testing.upbound.io/example-name: port2port + name: port2port +spec: + forProvider: + aSide: + - accessPoint: + - linkProtocol: + - type: QINQ + vlanSTag: "1976" + port: + - uuid: + type: COLO + bandwidth: 50 + name: ConnectionName + notifications: + - emails: + - example@equinix.com + - test1@equinix.com + type: ALL + order: + - purchaseOrderNumber: 1-323292 + type: EVPL_VC + zSide: + - accessPoint: + - linkProtocol: + - type: QINQ + vlanSTag: "3711" + location: + - metroCode: SV + port: + - uuid: + type: COLO diff --git a/examples-generated/fabric/v1alpha1/network.yaml b/examples-generated/fabric/v1alpha1/network.yaml new file mode 100644 index 0000000..ae50af4 --- /dev/null +++ b/examples-generated/fabric/v1alpha1/network.yaml @@ -0,0 +1,20 @@ +apiVersion: fabric.equinix.jet.crossplane.io/v1alpha1 +kind: Network +metadata: + annotations: + meta.upbound.io/example-id: fabric/v1alpha1/network + labels: + testing.upbound.io/example-name: new_network + name: new-network +spec: + forProvider: + name: Network-SV + notifications: + - emails: + - example@equinix.com + - test1@equinix.com + type: ALL + project: + - projectId: "776847000642406" + scope: GLOBAL + type: EVPLAN diff --git a/examples-generated/fabric/v1alpha1/serviceprofile.yaml b/examples-generated/fabric/v1alpha1/serviceprofile.yaml new file mode 100644 index 0000000..952a540 --- /dev/null +++ b/examples-generated/fabric/v1alpha1/serviceprofile.yaml @@ -0,0 +1,35 @@ +apiVersion: fabric.equinix.jet.crossplane.io/v1alpha1 +kind: ServiceProfile +metadata: + annotations: + meta.upbound.io/example-id: fabric/v1alpha1/serviceprofile + labels: + testing.upbound.io/example-name: new_service_profile + name: new-service-profile +spec: + forProvider: + accessPointTypeConfigs: + - allowBandwidthAutoApproval: false + allowCustomBandwidth: true + allowRemoteConnections: true + bandwidthAlertThreshold: 10 + connectionLabel: Service Profile Tag1 + connectionRedundancyRequired: false + supportedBandwidths: + - 100 + - 500 + type: COLO + allowedEmails: + - test@equinix.com + - testagain@equinix.com + description: Service Profile for Receiving Connections + name: Name Of Business + Use Case Tag + notifications: + - emails: + - someone@sample.com + type: BANDWIDTH_ALERT + ports: + - type: XF_PORT + uuid: c791f8cb-5cc9-cc90-8ce0-306a5c00a4ee + type: L2_PROFILE + visibility: PUBLIC diff --git a/examples-generated/metal/bgpsession.yaml b/examples-generated/metal/v1alpha1/bgpsession.yaml similarity index 77% rename from examples-generated/metal/bgpsession.yaml rename to examples-generated/metal/v1alpha1/bgpsession.yaml index bb551a1..55930f4 100644 --- a/examples-generated/metal/bgpsession.yaml +++ b/examples-generated/metal/v1alpha1/bgpsession.yaml @@ -9,9 +9,7 @@ metadata: spec: forProvider: addressFamily: ipv4 - deviceIdSelector: - matchLabels: - testing.upbound.io/example-name: test + deviceId: ${equinix_metal_device.test.id} --- @@ -31,9 +29,7 @@ spec: - ny operatingSystem: ubuntu_20_04 plan: c3.small.x86 - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} --- @@ -48,10 +44,5 @@ metadata: spec: forProvider: metro: ny - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} quantity: 1 - ---- - diff --git a/examples-generated/metal/connection.yaml b/examples-generated/metal/v1alpha1/connection.yaml similarity index 56% rename from examples-generated/metal/connection.yaml rename to examples-generated/metal/v1alpha1/connection.yaml index 4223eea..8e59fa6 100644 --- a/examples-generated/metal/connection.yaml +++ b/examples-generated/metal/v1alpha1/connection.yaml @@ -11,9 +11,7 @@ spec: contactEmail: username@example.com metro: sv name: tf-metal-to-azure - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} redundancy: redundant serviceTokenType: a_side speed: 1000Mbps @@ -21,8 +19,8 @@ spec: --- -apiVersion: ecx.equinix.jet.crossplane.io/v1alpha1 -kind: L2Connection +apiVersion: fabric.equinix.jet.crossplane.io/v1alpha1 +kind: Connection metadata: annotations: meta.upbound.io/example-id: metal/v1alpha1/connection @@ -31,21 +29,16 @@ metadata: name: example spec: forProvider: - authorizationKey: ${azurerm_express_route_circuit.example.service_key} + authorization_key: ${azurerm_express_route_circuit.example.service_key} name: tf-metal-to-azure - namedTag: PRIVATE + named_tag: PRIVATE notifications: - example@equinix.com - profileUuidSelector: - matchLabels: - testing.upbound.io/example-name: equinix_ecx_l2_sellerprofile - secondaryConnection: + profile_uuid: ${data.equinix_fabric_sellerprofile.example.uuid} + secondary_connection: - name: tf-metal-to-azure-sec - serviceToken: ${equinix_metal_connection.example.service_tokens.1.id} - sellerMetroCode: AM - serviceToken: ${equinix_metal_connection.example.service_tokens.0.id} + service_token: ${equinix_metal_connection.example.service_tokens.1.id} + seller_metro_code: AM + service_token: ${equinix_metal_connection.example.service_tokens.0.id} speed: ${azurerm_express_route_circuit.example.bandwidth_in_mbps} - speedUnit: MB - ---- - + speed_unit: MB diff --git a/examples-generated/metal/device.yaml b/examples-generated/metal/v1alpha1/device.yaml similarity index 78% rename from examples-generated/metal/device.yaml rename to examples-generated/metal/v1alpha1/device.yaml index 125f27b..d12fa8f 100644 --- a/examples-generated/metal/device.yaml +++ b/examples-generated/metal/v1alpha1/device.yaml @@ -13,9 +13,4 @@ spec: metro: sv operatingSystem: ubuntu_20_04 plan: c3.small.x86 - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - ---- - + projectId: ${local.project_id} diff --git a/examples-generated/metal/gateway.yaml b/examples-generated/metal/v1alpha1/gateway.yaml similarity index 66% rename from examples-generated/metal/gateway.yaml rename to examples-generated/metal/v1alpha1/gateway.yaml index ff8e260..8e7db82 100644 --- a/examples-generated/metal/gateway.yaml +++ b/examples-generated/metal/v1alpha1/gateway.yaml @@ -9,12 +9,8 @@ metadata: spec: forProvider: privateIpv4SubnetSize: 8 - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - vlanIdSelector: - matchLabels: - testing.upbound.io/example-name: test + projectId: ${local.project_id} + vlanId: ${equinix_metal_vlan.test.id} --- @@ -30,9 +26,4 @@ spec: forProvider: description: test VLAN in SV metro: sv - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - ---- - + projectId: ${local.project_id} diff --git a/examples-generated/metal/ipattachment.yaml b/examples-generated/metal/v1alpha1/ipattachment.yaml similarity index 78% rename from examples-generated/metal/ipattachment.yaml rename to examples-generated/metal/v1alpha1/ipattachment.yaml index 16d5854..4030504 100644 --- a/examples-generated/metal/ipattachment.yaml +++ b/examples-generated/metal/v1alpha1/ipattachment.yaml @@ -10,9 +10,7 @@ spec: forProvider: cidrNotation: ${join("/", [cidrhost(metal_reserved_ip_block.myblock.cidr_notation, 0), "32"])} - deviceIdSelector: - matchLabels: - testing.upbound.io/example-name: mydevice + deviceId: ${equinix_metal_device.mydevice.id} --- @@ -27,10 +25,5 @@ metadata: spec: forProvider: metro: ny - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} quantity: 2 - ---- - diff --git a/examples-generated/metal/organization.yaml b/examples-generated/metal/v1alpha1/organization.yaml similarity index 98% rename from examples-generated/metal/organization.yaml rename to examples-generated/metal/v1alpha1/organization.yaml index b4c4f50..eada142 100644 --- a/examples-generated/metal/organization.yaml +++ b/examples-generated/metal/v1alpha1/organization.yaml @@ -10,6 +10,3 @@ spec: forProvider: description: quux name: foobar - ---- - diff --git a/examples-generated/metal/organizationmember.yaml b/examples-generated/metal/v1alpha1/organizationmember.yaml similarity index 78% rename from examples-generated/metal/organizationmember.yaml rename to examples-generated/metal/v1alpha1/organizationmember.yaml index 2099906..bd55b6f 100644 --- a/examples-generated/metal/organizationmember.yaml +++ b/examples-generated/metal/v1alpha1/organizationmember.yaml @@ -9,13 +9,8 @@ metadata: spec: forProvider: invitee: member@example.com - organizationIdSelector: - matchLabels: - testing.upbound.io/example-name: example + organizationId: ${var.organization_id} projectsIds: - ${var.project_id} roles: - limited_collaborator - ---- - diff --git a/examples-generated/metal/project.yaml b/examples-generated/metal/v1alpha1/project.yaml similarity index 97% rename from examples-generated/metal/project.yaml rename to examples-generated/metal/v1alpha1/project.yaml index cb362dd..3124784 100644 --- a/examples-generated/metal/project.yaml +++ b/examples-generated/metal/v1alpha1/project.yaml @@ -9,6 +9,3 @@ metadata: spec: forProvider: name: Terraform Fun - ---- - diff --git a/examples-generated/metal/projectapikey.yaml b/examples-generated/metal/v1alpha1/projectapikey.yaml similarity index 76% rename from examples-generated/metal/projectapikey.yaml rename to examples-generated/metal/v1alpha1/projectapikey.yaml index 92f12db..7035671 100644 --- a/examples-generated/metal/projectapikey.yaml +++ b/examples-generated/metal/v1alpha1/projectapikey.yaml @@ -9,10 +9,5 @@ metadata: spec: forProvider: description: Read-only key scoped to a projct - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.existing_project_id} readOnly: true - ---- - diff --git a/examples-generated/metal/projectsshkey.yaml b/examples-generated/metal/v1alpha1/projectsshkey.yaml similarity index 88% rename from examples-generated/metal/projectsshkey.yaml rename to examples-generated/metal/v1alpha1/projectsshkey.yaml index 5f21022..0eadf0f 100644 --- a/examples-generated/metal/projectsshkey.yaml +++ b/examples-generated/metal/v1alpha1/projectsshkey.yaml @@ -9,9 +9,7 @@ metadata: spec: forProvider: name: test - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} publicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDM/unxJeFqxsTJcu6mhqsMHSaVlpu+Jj/P+44zrm6X/MAoHSX3X9oLgujEjjZ74yLfdfe0bJrbL2YgJzNaEkIQQ1VPMHB5EhTKUBGnzlPP0hHTnxsjAm9qDHgUPgvgFDQSAMzdJRJ0Cexo16Ph9VxCoLh3dxiE7s2gaM2FdVg7P8aSxKypsxAhYV3D0AwqzoOyT6WWhBoQ0xZ85XevOTnJCpImSemEGs6nVGEsWcEc1d1YvdxFjAK4SdsKUMkj4Dsy/leKsdi/DEAf356vbMT1UHsXXvy5TlHu/Pa6qF53v32Enz+nhKy7/8W2Yt2yWx8HnQcT2rug9lvCXagJO6oauqRTO77C4QZn13ZLMZgLT66S/tNh2EX0gi6vmIs5dth8uF+K6nxIyKJXbcA4ASg7F1OJrHKFZdTc5v1cPeq6PcbqGgc+8SrPYQmzvQqLoMBuxyos2hUkYOmw3aeWJj9nFa8Wu5WaN89mUeOqSkU4S5cgUzWUOmKey56B/j/s1sVys9rMhZapVs0wL4L9GBBM48N5jAQZnnpo85A8KsZq5ME22bTLqnxsDXqDYZvS7PSI6Dxi7eleOFE/NYYDkrgDLHTQri8ucDMVeVWHgoMY2bPXdn7KKy5jW5jKsf8EPARXg77A4gRYmgKrcwIKqJEUPqyxJBe0CPoGTqgXPRsUiQ== tomk@hp2 @@ -32,11 +30,6 @@ spec: metro: ny operatingSystem: ubuntu_20_04 plan: c3.medium.x86 - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} projectSshKeyIds: - ${equinix_metal_project_ssh_key.test.id} - ---- - diff --git a/examples-generated/metal/reservedipblock.yaml b/examples-generated/metal/v1alpha1/reservedipblock.yaml similarity index 76% rename from examples-generated/metal/reservedipblock.yaml rename to examples-generated/metal/v1alpha1/reservedipblock.yaml index 35bb406..07fa373 100644 --- a/examples-generated/metal/reservedipblock.yaml +++ b/examples-generated/metal/v1alpha1/reservedipblock.yaml @@ -9,10 +9,5 @@ metadata: spec: forProvider: metro: sv - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} quantity: 2 - ---- - diff --git a/examples-generated/metal/spotmarketrequest.yaml b/examples-generated/metal/v1alpha1/spotmarketrequest.yaml similarity index 82% rename from examples-generated/metal/spotmarketrequest.yaml rename to examples-generated/metal/v1alpha1/spotmarketrequest.yaml index 00d748a..e6dba30 100644 --- a/examples-generated/metal/spotmarketrequest.yaml +++ b/examples-generated/metal/v1alpha1/spotmarketrequest.yaml @@ -17,9 +17,4 @@ spec: plan: c3.small.x86 maxBidPrice: 0.03 metro: ny - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - ---- - + projectId: ${local.project_id} diff --git a/examples-generated/metal/sshkey.yaml b/examples-generated/metal/v1alpha1/sshkey.yaml similarity index 87% rename from examples-generated/metal/sshkey.yaml rename to examples-generated/metal/v1alpha1/sshkey.yaml index f967548..1e4a424 100644 --- a/examples-generated/metal/sshkey.yaml +++ b/examples-generated/metal/v1alpha1/sshkey.yaml @@ -28,9 +28,4 @@ spec: metro: sv operatingSystem: ubuntu_20_04 plan: c3.small.x86 - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - ---- - + projectId: ${local.project_id} diff --git a/examples-generated/metal/userapikey.yaml b/examples-generated/metal/v1alpha1/userapikey.yaml similarity index 98% rename from examples-generated/metal/userapikey.yaml rename to examples-generated/metal/v1alpha1/userapikey.yaml index 0ff7419..2434856 100644 --- a/examples-generated/metal/userapikey.yaml +++ b/examples-generated/metal/v1alpha1/userapikey.yaml @@ -10,6 +10,3 @@ spec: forProvider: description: Read-only user key readOnly: true - ---- - diff --git a/examples-generated/metal/virtualcircuit.yaml b/examples-generated/metal/v1alpha1/virtualcircuit.yaml similarity index 63% rename from examples-generated/metal/virtualcircuit.yaml rename to examples-generated/metal/v1alpha1/virtualcircuit.yaml index 67570bd..605d3bc 100644 --- a/examples-generated/metal/virtualcircuit.yaml +++ b/examples-generated/metal/v1alpha1/virtualcircuit.yaml @@ -8,17 +8,11 @@ metadata: name: test spec: forProvider: - connectionIdSelector: - matchLabels: - testing.upbound.io/example-name: example + connectionId: ${local.conn_id} nniVlan: 1056 portId: ${data.equinix_metal_connection.test.ports[0].id} - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - vlanIdSelector: - matchLabels: - testing.upbound.io/example-name: test + projectId: ${local.project_id} + vlanId: ${equinix_metal_vlan.test.id} --- @@ -33,9 +27,4 @@ metadata: spec: forProvider: metro: ${data.equinix_metal_connection.test.metro} - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example - ---- - + projectId: ${local.project_id} diff --git a/examples-generated/metal/vlan.yaml b/examples-generated/metal/v1alpha1/vlan.yaml similarity index 75% rename from examples-generated/metal/vlan.yaml rename to examples-generated/metal/v1alpha1/vlan.yaml index 35a0f5b..d682292 100644 --- a/examples-generated/metal/vlan.yaml +++ b/examples-generated/metal/v1alpha1/vlan.yaml @@ -10,10 +10,5 @@ spec: forProvider: description: VLAN in New Jersey metro: sv - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${local.project_id} vxlan: 1040 - ---- - diff --git a/examples-generated/metal/vrf.yaml b/examples-generated/metal/v1alpha1/vrf.yaml similarity index 87% rename from examples-generated/metal/vrf.yaml rename to examples-generated/metal/v1alpha1/vrf.yaml index 20b922c..546f0b4 100644 --- a/examples-generated/metal/vrf.yaml +++ b/examples-generated/metal/v1alpha1/vrf.yaml @@ -15,9 +15,7 @@ spec: localAsn: "65000" metro: da name: example-vrf - projectIdSelector: - matchLabels: - testing.upbound.io/example-name: example + projectId: ${equinix_metal_project.example.id} --- @@ -32,6 +30,3 @@ metadata: spec: forProvider: name: example - ---- - diff --git a/examples-generated/network/acltemplate.yaml b/examples-generated/network/v1alpha1/acltemplate.yaml similarity index 98% rename from examples-generated/network/acltemplate.yaml rename to examples-generated/network/v1alpha1/acltemplate.yaml index 7b11377..f91e657 100644 --- a/examples-generated/network/acltemplate.yaml +++ b/examples-generated/network/v1alpha1/acltemplate.yaml @@ -21,6 +21,3 @@ spec: subnet: 172.16.25.0/24 name: test projectId: a86d7112-d740-4758-9c9c-31e66373746b - ---- - diff --git a/examples-generated/network/bgp.yaml b/examples-generated/network/v1alpha1/bgp.yaml similarity index 98% rename from examples-generated/network/bgp.yaml rename to examples-generated/network/v1alpha1/bgp.yaml index 14c9863..2d076f5 100644 --- a/examples-generated/network/bgp.yaml +++ b/examples-generated/network/v1alpha1/bgp.yaml @@ -17,6 +17,3 @@ spec: localIpAddress: 10.1.1.1/30 remoteAsn: 66123 remoteIpAddress: 10.1.1.2 - ---- - diff --git a/examples-generated/network/device.yaml b/examples-generated/network/v1alpha1/device.yaml similarity index 99% rename from examples-generated/network/device.yaml rename to examples-generated/network/v1alpha1/device.yaml index 540ddc2..3d56213 100644 --- a/examples-generated/network/device.yaml +++ b/examples-generated/network/v1alpha1/device.yaml @@ -34,6 +34,3 @@ spec: throughputUnit: Mbps typeCode: CSR1000V version: 16.09.05 - ---- - diff --git a/examples-generated/network/devicelink.yaml b/examples-generated/network/v1alpha1/devicelink.yaml similarity index 99% rename from examples-generated/network/devicelink.yaml rename to examples-generated/network/v1alpha1/devicelink.yaml index fd620e1..47170a2 100644 --- a/examples-generated/network/devicelink.yaml +++ b/examples-generated/network/v1alpha1/devicelink.yaml @@ -26,6 +26,3 @@ spec: name: test-link projectId: a86d7112-d740-4758-9c9c-31e66373746b subnet: 192.168.40.64/27 - ---- - diff --git a/examples-generated/network/file.yaml b/examples-generated/network/v1alpha1/file.yaml similarity index 98% rename from examples-generated/network/file.yaml rename to examples-generated/network/v1alpha1/file.yaml index 614f6fa..dd9e17b 100644 --- a/examples-generated/network/file.yaml +++ b/examples-generated/network/v1alpha1/file.yaml @@ -18,6 +18,3 @@ spec: metroCode: SV processType: CLOUD_INIT selfManaged: true - ---- - diff --git a/examples-generated/network/sshkey.yaml b/examples-generated/network/v1alpha1/sshkey.yaml similarity index 98% rename from examples-generated/network/sshkey.yaml rename to examples-generated/network/v1alpha1/sshkey.yaml index 7ade369..ab43a64 100644 --- a/examples-generated/network/sshkey.yaml +++ b/examples-generated/network/v1alpha1/sshkey.yaml @@ -12,6 +12,3 @@ spec: projectId: a86d7112-d740-4758-9c9c-31e66373746b publicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDpXGdxljAyPp9vH97436U171cX type: RSA - ---- - diff --git a/examples-generated/network/sshuser.yaml b/examples-generated/network/v1alpha1/sshuser.yaml similarity index 98% rename from examples-generated/network/sshuser.yaml rename to examples-generated/network/v1alpha1/sshuser.yaml index 3d2971e..c87739f 100644 --- a/examples-generated/network/sshuser.yaml +++ b/examples-generated/network/v1alpha1/sshuser.yaml @@ -16,6 +16,3 @@ spec: name: example-secret namespace: upbound-system username: john - ---- - diff --git a/examples/ecx/l2connection.yaml b/examples/ecx/l2connection.yaml deleted file mode 100644 index a186709..0000000 --- a/examples/ecx/l2connection.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: ecx.equinix.jet.crossplane.io/v1alpha1 -kind: L2Connection -metadata: - name: example -spec: - forProvider: - name: "equinix-crossplane-jet-example" - profileUuid: "" - speed: "" - speedUnit: "" - notifications: "" - deviceUuid: "" - portUuid: "" - vlanStag: "" - sellerMetroCode: "" - authorizationKey: "" - providerConfigRef: - name: default diff --git a/internal/controller/ecx/l2connection/zz_controller.go b/internal/controller/ecx/l2connection/zz_controller.go deleted file mode 100755 index 928af5f..0000000 --- a/internal/controller/ecx/l2connection/zz_controller.go +++ /dev/null @@ -1,63 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package l2connection - -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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" - ctrl "sigs.k8s.io/controller-runtime" - - v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/ecx/v1alpha1" -) - -// Setup adds a controller that reconciles L2Connection managed resources. -func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { - name := managed.ControllerName(v1alpha1.L2Connection_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.L2Connection_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_ecx_l2_connection"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.L2Connection_GroupVersionKind))), - )), - managed.WithLogger(o.Logger.WithValues("controller", name)), - managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), - managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), - managed.WithInitializers(initializers), - managed.WithConnectionPublishers(cps...), - managed.WithPollInterval(o.PollInterval), - ) - - return ctrl.NewControllerManagedBy(mgr). - Named(name). - WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.L2Connection{}). - Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) -} diff --git a/internal/controller/ecx/l2connectionaccepter/zz_controller.go b/internal/controller/ecx/l2connectionaccepter/zz_controller.go deleted file mode 100755 index bb7b707..0000000 --- a/internal/controller/ecx/l2connectionaccepter/zz_controller.go +++ /dev/null @@ -1,63 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package l2connectionaccepter - -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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" - ctrl "sigs.k8s.io/controller-runtime" - - v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/ecx/v1alpha1" -) - -// Setup adds a controller that reconciles L2ConnectionAccepter managed resources. -func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { - name := managed.ControllerName(v1alpha1.L2ConnectionAccepter_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.L2ConnectionAccepter_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_ecx_l2_connection_accepter"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.L2ConnectionAccepter_GroupVersionKind))), - )), - managed.WithLogger(o.Logger.WithValues("controller", name)), - managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), - managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), - managed.WithInitializers(initializers), - managed.WithConnectionPublishers(cps...), - managed.WithPollInterval(o.PollInterval), - ) - - return ctrl.NewControllerManagedBy(mgr). - Named(name). - WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.L2ConnectionAccepter{}). - Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) -} diff --git a/internal/controller/ecx/l2serviceprofile/zz_controller.go b/internal/controller/ecx/l2serviceprofile/zz_controller.go deleted file mode 100755 index a83d703..0000000 --- a/internal/controller/ecx/l2serviceprofile/zz_controller.go +++ /dev/null @@ -1,63 +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. -*/ - -// Code generated by upjet. DO NOT EDIT. - -package l2serviceprofile - -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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" - ctrl "sigs.k8s.io/controller-runtime" - - v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/ecx/v1alpha1" -) - -// Setup adds a controller that reconciles L2Serviceprofile managed resources. -func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { - name := managed.ControllerName(v1alpha1.L2Serviceprofile_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.L2Serviceprofile_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_ecx_l2_serviceprofile"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.L2Serviceprofile_GroupVersionKind))), - )), - managed.WithLogger(o.Logger.WithValues("controller", name)), - managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), - managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), - managed.WithInitializers(initializers), - managed.WithConnectionPublishers(cps...), - managed.WithPollInterval(o.PollInterval), - ) - - return ctrl.NewControllerManagedBy(mgr). - Named(name). - WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.L2Serviceprofile{}). - Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) -} diff --git a/internal/controller/fabric/cloudrouter/zz_controller.go b/internal/controller/fabric/cloudrouter/zz_controller.go index 3b12206..b8af6e7 100755 --- a/internal/controller/fabric/cloudrouter/zz_controller.go +++ b/internal/controller/fabric/cloudrouter/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles CloudRouter managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.CloudRouter_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_cloud_router"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.CloudRouter_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.CloudRouter_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.CloudRouter_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_cloud_router"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.CloudRouter + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.CloudRouter{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.CloudRouter") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.CloudRouterList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.CloudRouterList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.CloudRouter_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.CloudRouter{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.CloudRouter{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/fabric/connection/zz_controller.go b/internal/controller/fabric/connection/zz_controller.go index d6a5fff..d6cc419 100755 --- a/internal/controller/fabric/connection/zz_controller.go +++ b/internal/controller/fabric/connection/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Connection managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_connection"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Connection_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_connection"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Connection + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Connection{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Connection") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ConnectionList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ConnectionList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Connection{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Connection{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/fabric/network/zz_controller.go b/internal/controller/fabric/network/zz_controller.go index 174a1af..c7a66f6 100755 --- a/internal/controller/fabric/network/zz_controller.go +++ b/internal/controller/fabric/network/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Network managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Network_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_network"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Network_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Network_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Network_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_network"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Network + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Network{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Network") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.NetworkList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.NetworkList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Network_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Network{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Network{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/fabric/routingprotocol/zz_controller.go b/internal/controller/fabric/routingprotocol/zz_controller.go index c72fc6f..3b12057 100755 --- a/internal/controller/fabric/routingprotocol/zz_controller.go +++ b/internal/controller/fabric/routingprotocol/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles RoutingProtocol managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.RoutingProtocol_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_routing_protocol"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.RoutingProtocol_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.RoutingProtocol_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.RoutingProtocol_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_routing_protocol"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.RoutingProtocol + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.RoutingProtocol{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.RoutingProtocol") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.RoutingProtocolList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.RoutingProtocolList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.RoutingProtocol_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.RoutingProtocol{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.RoutingProtocol{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/fabric/serviceprofile/zz_controller.go b/internal/controller/fabric/serviceprofile/zz_controller.go index 21f4b75..e759923 100755 --- a/internal/controller/fabric/serviceprofile/zz_controller.go +++ b/internal/controller/fabric/serviceprofile/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/fabric/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles ServiceProfile managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.ServiceProfile_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_service_profile"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ServiceProfile_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.ServiceProfile_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ServiceProfile_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_fabric_service_profile"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.ServiceProfile + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.ServiceProfile{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.ServiceProfile") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ServiceProfileList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ServiceProfileList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.ServiceProfile_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.ServiceProfile{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.ServiceProfile{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/bgpsession/zz_controller.go b/internal/controller/metal/bgpsession/zz_controller.go index f5f90b1..9730780 100755 --- a/internal/controller/metal/bgpsession/zz_controller.go +++ b/internal/controller/metal/bgpsession/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles BGPSession managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.BGPSession_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_bgp_session"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.BGPSession_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.BGPSession_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.BGPSession_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_bgp_session"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.BGPSession + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.BGPSession{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.BGPSession") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.BGPSessionList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.BGPSessionList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.BGPSession_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.BGPSession{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.BGPSession{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/connection/zz_controller.go b/internal/controller/metal/connection/zz_controller.go index 8f254ba..cdebfbf 100755 --- a/internal/controller/metal/connection/zz_controller.go +++ b/internal/controller/metal/connection/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Connection managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_connection"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Connection_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_connection"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Connection + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Connection{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Connection") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ConnectionList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ConnectionList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Connection_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Connection{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Connection{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/device/zz_controller.go b/internal/controller/metal/device/zz_controller.go index 798a4b1..21c621c 100755 --- a/internal/controller/metal/device/zz_controller.go +++ b/internal/controller/metal/device/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Device managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_device"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Device_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_device"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Device + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Device{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Device") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.DeviceList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.DeviceList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Device{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Device{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/devicenetworktype/zz_controller.go b/internal/controller/metal/devicenetworktype/zz_controller.go index ed10f15..189d201 100755 --- a/internal/controller/metal/devicenetworktype/zz_controller.go +++ b/internal/controller/metal/devicenetworktype/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles DeviceNetworkType managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.DeviceNetworkType_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_device_network_type"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.DeviceNetworkType_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.DeviceNetworkType_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.DeviceNetworkType_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_device_network_type"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.DeviceNetworkType + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.DeviceNetworkType{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.DeviceNetworkType") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.DeviceNetworkTypeList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.DeviceNetworkTypeList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.DeviceNetworkType_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.DeviceNetworkType{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.DeviceNetworkType{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/gateway/zz_controller.go b/internal/controller/metal/gateway/zz_controller.go index 66913c2..a5285d4 100755 --- a/internal/controller/metal/gateway/zz_controller.go +++ b/internal/controller/metal/gateway/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Gateway managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Gateway_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_gateway"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Gateway_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Gateway_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Gateway_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_gateway"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Gateway + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Gateway{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Gateway") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.GatewayList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.GatewayList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Gateway_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Gateway{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Gateway{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/ipattachment/zz_controller.go b/internal/controller/metal/ipattachment/zz_controller.go index 4fb74e6..551f997 100755 --- a/internal/controller/metal/ipattachment/zz_controller.go +++ b/internal/controller/metal/ipattachment/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles IPAttachment managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.IPAttachment_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_ip_attachment"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.IPAttachment_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.IPAttachment_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.IPAttachment_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_ip_attachment"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.IPAttachment + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.IPAttachment{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.IPAttachment") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.IPAttachmentList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.IPAttachmentList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.IPAttachment_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.IPAttachment{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.IPAttachment{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/organization/zz_controller.go b/internal/controller/metal/organization/zz_controller.go index 4013567..23dc8d0 100755 --- a/internal/controller/metal/organization/zz_controller.go +++ b/internal/controller/metal/organization/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Organization managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Organization_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_organization"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Organization_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Organization_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Organization_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_organization"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Organization + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Organization{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Organization") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.OrganizationList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.OrganizationList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Organization_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Organization{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Organization{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/organizationmember/zz_controller.go b/internal/controller/metal/organizationmember/zz_controller.go index 453f639..f045a49 100755 --- a/internal/controller/metal/organizationmember/zz_controller.go +++ b/internal/controller/metal/organizationmember/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles OrganizationMember managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - 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"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.OrganizationMember_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.OrganizationMember_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.OrganizationMember_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_organization_member"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.OrganizationMember + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.OrganizationMember{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.OrganizationMember") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.OrganizationMemberList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.OrganizationMemberList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.OrganizationMember_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.OrganizationMember{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.OrganizationMember{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/port/zz_controller.go b/internal/controller/metal/port/zz_controller.go index 8ebc342..3b62f2b 100755 --- a/internal/controller/metal/port/zz_controller.go +++ b/internal/controller/metal/port/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Port managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Port_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_port"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Port_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Port_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Port_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_port"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Port + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Port{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Port") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.PortList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.PortList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Port_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Port{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Port{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/portvlanattachment/zz_controller.go b/internal/controller/metal/portvlanattachment/zz_controller.go index 24b3ab7..9e2c111 100755 --- a/internal/controller/metal/portvlanattachment/zz_controller.go +++ b/internal/controller/metal/portvlanattachment/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles PortVlanAttachment managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.PortVlanAttachment_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_port_vlan_attachment"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.PortVlanAttachment_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.PortVlanAttachment_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.PortVlanAttachment_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_port_vlan_attachment"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.PortVlanAttachment + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.PortVlanAttachment{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.PortVlanAttachment") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.PortVlanAttachmentList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.PortVlanAttachmentList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.PortVlanAttachment_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.PortVlanAttachment{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.PortVlanAttachment{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/project/zz_controller.go b/internal/controller/metal/project/zz_controller.go index 732f144..4aab9bc 100755 --- a/internal/controller/metal/project/zz_controller.go +++ b/internal/controller/metal/project/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Project managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Project_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_project"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Project_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Project_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Project_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_project"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Project + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Project{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Project") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ProjectList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ProjectList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Project_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Project{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Project{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/projectapikey/zz_controller.go b/internal/controller/metal/projectapikey/zz_controller.go index 6a6a9b6..d21fa63 100755 --- a/internal/controller/metal/projectapikey/zz_controller.go +++ b/internal/controller/metal/projectapikey/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles ProjectAPIKey managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.ProjectAPIKey_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_project_api_key"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ProjectAPIKey_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.ProjectAPIKey_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ProjectAPIKey_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_project_api_key"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.ProjectAPIKey + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.ProjectAPIKey{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.ProjectAPIKey") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ProjectAPIKeyList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ProjectAPIKeyList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.ProjectAPIKey_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.ProjectAPIKey{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.ProjectAPIKey{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/projectsshkey/zz_controller.go b/internal/controller/metal/projectsshkey/zz_controller.go index 050e13f..7d14235 100755 --- a/internal/controller/metal/projectsshkey/zz_controller.go +++ b/internal/controller/metal/projectsshkey/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles ProjectSSHKey managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.ProjectSSHKey_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_project_ssh_key"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ProjectSSHKey_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.ProjectSSHKey_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ProjectSSHKey_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_project_ssh_key"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.ProjectSSHKey + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.ProjectSSHKey{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.ProjectSSHKey") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ProjectSSHKeyList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ProjectSSHKeyList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.ProjectSSHKey_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.ProjectSSHKey{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.ProjectSSHKey{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/reservedipblock/zz_controller.go b/internal/controller/metal/reservedipblock/zz_controller.go index 926b612..36e7ee8 100755 --- a/internal/controller/metal/reservedipblock/zz_controller.go +++ b/internal/controller/metal/reservedipblock/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles ReservedIPBlock managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.ReservedIPBlock_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_reserved_ip_block"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ReservedIPBlock_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.ReservedIPBlock_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ReservedIPBlock_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_reserved_ip_block"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.ReservedIPBlock + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.ReservedIPBlock{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.ReservedIPBlock") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ReservedIPBlockList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ReservedIPBlockList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.ReservedIPBlock_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.ReservedIPBlock{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.ReservedIPBlock{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/spotmarketrequest/zz_controller.go b/internal/controller/metal/spotmarketrequest/zz_controller.go index 0dfdd3d..c2dcb8d 100755 --- a/internal/controller/metal/spotmarketrequest/zz_controller.go +++ b/internal/controller/metal/spotmarketrequest/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles SpotMarketRequest managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.SpotMarketRequest_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_spot_market_request"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SpotMarketRequest_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.SpotMarketRequest_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SpotMarketRequest_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_spot_market_request"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.SpotMarketRequest + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.SpotMarketRequest{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.SpotMarketRequest") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.SpotMarketRequestList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.SpotMarketRequestList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.SpotMarketRequest_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.SpotMarketRequest{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.SpotMarketRequest{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/sshkey/zz_controller.go b/internal/controller/metal/sshkey/zz_controller.go index df4d686..fc68afc 100755 --- a/internal/controller/metal/sshkey/zz_controller.go +++ b/internal/controller/metal/sshkey/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles SSHKey managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_ssh_key"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.SSHKey_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_ssh_key"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.SSHKey + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.SSHKey{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.SSHKey") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.SSHKeyList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.SSHKeyList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.SSHKey{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.SSHKey{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/userapikey/zz_controller.go b/internal/controller/metal/userapikey/zz_controller.go index 55de824..d07b6a1 100755 --- a/internal/controller/metal/userapikey/zz_controller.go +++ b/internal/controller/metal/userapikey/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles UserAPIKey managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.UserAPIKey_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_user_api_key"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.UserAPIKey_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.UserAPIKey_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.UserAPIKey_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_user_api_key"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.UserAPIKey + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.UserAPIKey{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.UserAPIKey") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.UserAPIKeyList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.UserAPIKeyList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.UserAPIKey_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.UserAPIKey{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.UserAPIKey{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/virtualcircuit/zz_controller.go b/internal/controller/metal/virtualcircuit/zz_controller.go index 83c0e9c..5006c3c 100755 --- a/internal/controller/metal/virtualcircuit/zz_controller.go +++ b/internal/controller/metal/virtualcircuit/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles VirtualCircuit managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.VirtualCircuit_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_virtual_circuit"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.VirtualCircuit_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.VirtualCircuit_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.VirtualCircuit_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_virtual_circuit"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.VirtualCircuit + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.VirtualCircuit{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.VirtualCircuit") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.VirtualCircuitList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.VirtualCircuitList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.VirtualCircuit_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.VirtualCircuit{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.VirtualCircuit{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/vlan/zz_controller.go b/internal/controller/metal/vlan/zz_controller.go index 2d88d24..64b3ea3 100755 --- a/internal/controller/metal/vlan/zz_controller.go +++ b/internal/controller/metal/vlan/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Vlan managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Vlan_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_vlan"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Vlan_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Vlan_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Vlan_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_vlan"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Vlan + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Vlan{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Vlan") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.VlanList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.VlanList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Vlan_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Vlan{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Vlan{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/metal/vrf/zz_controller.go b/internal/controller/metal/vrf/zz_controller.go index 27697ab..7462229 100755 --- a/internal/controller/metal/vrf/zz_controller.go +++ b/internal/controller/metal/vrf/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Vrf managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Vrf_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_vrf"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Vrf_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Vrf_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Vrf_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_metal_vrf"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Vrf + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Vrf{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Vrf") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.VrfList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.VrfList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Vrf_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Vrf{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Vrf{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/acltemplate/zz_controller.go b/internal/controller/network/acltemplate/zz_controller.go index 1d05711..8f5f373 100755 --- a/internal/controller/network/acltemplate/zz_controller.go +++ b/internal/controller/network/acltemplate/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles ACLTemplate managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.ACLTemplate_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_acl_template"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ACLTemplate_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.ACLTemplate_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.ACLTemplate_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_acl_template"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.ACLTemplate + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.ACLTemplate{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.ACLTemplate") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.ACLTemplateList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.ACLTemplateList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.ACLTemplate_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.ACLTemplate{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.ACLTemplate{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/bgp/zz_controller.go b/internal/controller/network/bgp/zz_controller.go index 9666f6f..7bef7f7 100755 --- a/internal/controller/network/bgp/zz_controller.go +++ b/internal/controller/network/bgp/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles BGP managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.BGP_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_bgp"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.BGP_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.BGP_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.BGP_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_bgp"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.BGP + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.BGP{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.BGP") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.BGPList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.BGPList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.BGP_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.BGP{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.BGP{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/device/zz_controller.go b/internal/controller/network/device/zz_controller.go index f039db5..c677b29 100755 --- a/internal/controller/network/device/zz_controller.go +++ b/internal/controller/network/device/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles Device managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_device"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.Device_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_device"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.Device + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.Device{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.Device") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.DeviceList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.DeviceList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.Device_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.Device{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.Device{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/devicelink/zz_controller.go b/internal/controller/network/devicelink/zz_controller.go index 54fd4d3..95a4bcd 100755 --- a/internal/controller/network/devicelink/zz_controller.go +++ b/internal/controller/network/devicelink/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles DeviceLink managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.DeviceLink_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_device_link"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.DeviceLink_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.DeviceLink_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.DeviceLink_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_device_link"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.DeviceLink + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.DeviceLink{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.DeviceLink") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.DeviceLinkList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.DeviceLinkList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.DeviceLink_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.DeviceLink{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.DeviceLink{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/file/zz_controller.go b/internal/controller/network/file/zz_controller.go index 979ad09..21cbf4e 100755 --- a/internal/controller/network/file/zz_controller.go +++ b/internal/controller/network/file/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles File managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.File_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_file"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.File_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.File_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.File_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_file"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.File + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.File{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.File") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.FileList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.FileList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.File_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.File{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.File{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/sshkey/zz_controller.go b/internal/controller/network/sshkey/zz_controller.go index 062cd2d..3d4d738 100755 --- a/internal/controller/network/sshkey/zz_controller.go +++ b/internal/controller/network/sshkey/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles SSHKey managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_ssh_key"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.SSHKey_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_ssh_key"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.SSHKey + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.SSHKey{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.SSHKey") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.SSHKeyList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.SSHKeyList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.SSHKey_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.SSHKey{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.SSHKey{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/network/sshuser/zz_controller.go b/internal/controller/network/sshuser/zz_controller.go index 68bfd24..1beb376 100755 --- a/internal/controller/network/sshuser/zz_controller.go +++ b/internal/controller/network/sshuser/zz_controller.go @@ -26,11 +26,15 @@ import ( "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/upbound/upjet/pkg/controller" - "github.com/upbound/upjet/pkg/terraform" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/terraform" + "github.com/pkg/errors" ctrl "sigs.k8s.io/controller-runtime" v1alpha1 "github.com/crossplane-contrib/provider-jet-equinix/apis/network/v1alpha1" + features "github.com/crossplane-contrib/provider-jet-equinix/internal/features" ) // Setup adds a controller that reconciles SSHUser managed resources. @@ -39,25 +43,57 @@ func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { 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)) + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) } - r := managed.NewReconciler(mgr, - xpresource.ManagedKind(v1alpha1.SSHUser_GroupVersionKind), - managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_ssh_user"], - tjcontroller.WithCallbackProvider(tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHUser_GroupVersionKind))), + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1alpha1.SSHUser_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1alpha1.SSHUser_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter(tjcontroller.NewConnector(mgr.GetClient(), o.WorkspaceStore, o.SetupFn, o.Provider.Resources["equinix_network_ssh_user"], tjcontroller.WithLogger(o.Logger), tjcontroller.WithConnectorEventHandler(eventHandler), + tjcontroller.WithCallbackProvider(ac), )), managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithFinalizer(terraform.NewWorkspaceFinalizer(o.WorkspaceStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), - managed.WithTimeout(3*time.Minute), + managed.WithTimeout(3 * time.Minute), managed.WithInitializers(initializers), managed.WithConnectionPublishers(cps...), managed.WithPollInterval(o.PollInterval), - ) + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1alpha1.SSHUser + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1alpha1.SSHUser{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1alpha1.SSHUser") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1alpha1.SSHUserList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1alpha1.SSHUserList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1alpha1.SSHUser_GroupVersionKind), opts...) return ctrl.NewControllerManagedBy(mgr). Named(name). WithOptions(o.ForControllerRuntime()). - For(&v1alpha1.SSHUser{}). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1alpha1.SSHUser{}, eventHandler). Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) } diff --git a/internal/controller/zz_setup.go b/internal/controller/zz_setup.go index 9470b56..c8208f8 100755 --- a/internal/controller/zz_setup.go +++ b/internal/controller/zz_setup.go @@ -1,5 +1,17 @@ /* -Copyright 2021 Upbound Inc. +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 controller @@ -7,11 +19,8 @@ package controller import ( ctrl "sigs.k8s.io/controller-runtime" - "github.com/upbound/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller" - l2connection "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/ecx/l2connection" - l2connectionaccepter "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/ecx/l2connectionaccepter" - l2serviceprofile "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/ecx/l2serviceprofile" cloudrouter "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/fabric/cloudrouter" connection "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/fabric/connection" network "github.com/crossplane-contrib/provider-jet-equinix/internal/controller/fabric/network" @@ -51,9 +60,6 @@ import ( // the supplied manager. func Setup(mgr ctrl.Manager, o controller.Options) error { for _, setup := range []func(ctrl.Manager, controller.Options) error{ - l2connection.Setup, - l2connectionaccepter.Setup, - l2serviceprofile.Setup, cloudrouter.Setup, connection.Setup, network.Setup, diff --git a/package/crds/ecx.equinix.jet.crossplane.io_l2connectionaccepters.yaml b/package/crds/ecx.equinix.jet.crossplane.io_l2connectionaccepters.yaml deleted file mode 100644 index c2fd33f..0000000 --- a/package/crds/ecx.equinix.jet.crossplane.io_l2connectionaccepters.yaml +++ /dev/null @@ -1,342 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null - name: l2connectionaccepters.ecx.equinix.jet.crossplane.io -spec: - group: ecx.equinix.jet.crossplane.io - names: - categories: - - crossplane - - managed - - equinix - kind: L2ConnectionAccepter - listKind: L2ConnectionAccepterList - plural: l2connectionaccepters - singular: l2connectionaccepter - 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: L2ConnectionAccepter is the Schema for the L2ConnectionAccepters - 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: L2ConnectionAccepterSpec defines the desired state of L2ConnectionAccepter - 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: - accessKeySecretRef: - description: and secret_key resource arguments Access Key used - to accept connection on provider side - properties: - key: - description: The key to select. - type: string - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - key - - name - - namespace - type: object - awsProfile: - description: argument or AWS_PROFILE environmental variable AWS - Profile Name for retrieving credentials from shared credentials - file - type: string - connectionId: - description: Identifier of Layer 2 connection that will be accepted. - Identifier of layer 2 connection that will be accepted - type: string - secretKeySecretRef: - description: Secret Key used to accept connection on provider - side. Secret Key used to accept connection on provider side - properties: - key: - description: The key to select. - type: string - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - key - - name - - namespace - type: object - required: - - connectionId - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - publishConnectionDetailsTo: - description: PublishConnectionDetailsTo specifies the connection secret - config which contains a name, metadata and a reference to secret - store config to which any connection details for this managed resource - should be written. Connection details frequently include the endpoint, - username, and password required to connect to the managed resource. - properties: - configRef: - default: - name: default - description: SecretStoreConfigRef specifies which secret store - config should be used for this ConnectionSecret. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - metadata: - description: Metadata is the metadata for connection secret. - properties: - annotations: - additionalProperties: - type: string - description: Annotations are the annotations to be added to - connection secret. - For Kubernetes secrets, this will be - used as "metadata.annotations". - It is up to Secret Store - implementation for others store types. - type: object - labels: - additionalProperties: - type: string - description: Labels are the labels/tags to be added to connection - secret. - For Kubernetes secrets, this will be used as "metadata.labels". - - It is up to Secret Store implementation for others store - types. - type: object - type: - description: Type is the SecretType for the connection secret. - - Only valid for Kubernetes Secret Stores. - type: string - type: object - name: - description: Name is the name of the connection secret. - type: string - required: - - name - type: object - writeConnectionSecretToRef: - description: WriteConnectionSecretToReference specifies the namespace - and name of a Secret to which any connection details for this managed - resource should be written. Connection details frequently include - the endpoint, username, and password required to connect to the - managed resource. This field is planned to be replaced in a future - release in favor of PublishConnectionDetailsTo. Currently, both - could be set independently and connection details would be published - to both without affecting each other. - properties: - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - name - - namespace - type: object - required: - - forProvider - type: object - status: - description: L2ConnectionAccepterStatus defines the observed state of - L2ConnectionAccepter. - properties: - atProvider: - properties: - awsConnectionId: - description: Identifier of a hosted Direct Connect connection - on AWS side, applicable for accepter resource with connections - to AWS only. Identifier of a hosted Direct Connect connection - on AWS side, applicable for accepter resource with connections - to AWS only - type: string - id: - type: string - type: object - conditions: - description: Conditions of the resource. - items: - description: A Condition that may apply to a resource. - properties: - lastTransitionTime: - description: LastTransitionTime is the last time this condition - transitioned from one status to another. - format: date-time - type: string - message: - description: A Message containing details about this condition's - last transition from one status to another, if any. - type: string - reason: - description: A Reason for this condition's last transition from - one status to another. - type: string - status: - description: Status of this condition; is it currently True, - False, or Unknown? - type: string - type: - description: Type of this condition. At most one of each condition - type may apply to a resource at any point in time. - type: string - required: - - lastTransitionTime - - reason - - status - - type - type: object - type: array - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} diff --git a/package/crds/ecx.equinix.jet.crossplane.io_l2connections.yaml b/package/crds/ecx.equinix.jet.crossplane.io_l2connections.yaml deleted file mode 100644 index dcba2e8..0000000 --- a/package/crds/ecx.equinix.jet.crossplane.io_l2connections.yaml +++ /dev/null @@ -1,761 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null - name: l2connections.ecx.equinix.jet.crossplane.io -spec: - group: ecx.equinix.jet.crossplane.io - names: - categories: - - crossplane - - managed - - equinix - kind: L2Connection - listKind: L2ConnectionList - plural: l2connections - singular: l2connection - 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: L2Connection is the Schema for the L2Connections 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: L2ConnectionSpec defines the desired state of L2Connection - 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: - additionalInfo: - description: one or more additional information key-value objects - One or more additional information key-value objects - items: - properties: - name: - description: secondary connection name Additional information - key - type: string - value: - description: additional information value Additional information - value - type: string - required: - - name - - value - type: object - type: array - authorizationKey: - description: Unique identifier authorizing Equinix to provision - a connection towards a cloud service provider. At Equinix, an - Authorization Key is a generic term and is NOT encrypted on - Equinix Fabric. Cloud Service Providers might use a different - name to refer to this key such as Service Key or Authentication - Key. Value depends on a provider service profile, more information - on Equinix Fabric how to guide. Text field used to authorize - connection on the provider side. Value depends on a provider - service profile used for connection - type: string - deviceInterfaceId: - description: Applicable with device_uuid, identifier of network - interface on a given device, used for a connection. If not specified - then first available interface will be selected. Identifier - of network interface on a given device, used for a connection. - If not specified then first available interface will be selected - type: number - deviceUuid: - description: Unique identifier of the Network Edge virtual device - from which the connection would originate. Unique identifier - of the Network Edge virtual device from which the connection - would originate - type: string - name: - description: Connection name. An alpha-numeric 24 characters string - which can include only hyphens and underscores Connection name. - An alpha-numeric 24 characters string which can include only - hyphens and underscores - type: string - namedTag: - description: 'The type of peering to set up when connecting to - Azure Express Route. Valid values: PRIVATE, MICROSOFT, MANUAL*, - PUBLIC*. 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)' - type: string - notifications: - description: A list of email addresses used for sending connection - update notifications. A list of email addresses used for sending - connection update notifications - items: - type: string - type: array - portUuid: - description: Unique identifier of the Equinix Fabric Port from - which the connection would originate. Unique identifier of the - buyer's port from which the connection would originate - type: string - profileUuid: - description: Unique identifier of the service provider's profile. - Unique identifier of the service provider's service profile - type: string - profileUuidRef: - description: Reference to a L2Serviceprofile to populate profileUuid. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - profileUuidSelector: - description: Selector for a L2Serviceprofile to populate profileUuid. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object - purchaseOrderNumber: - description: Connection's purchase order number to reflect on - the invoice Connection's purchase order number to reflect on - the invoice - type: string - secondaryConnection: - description: Definition of secondary connection for redundant, - HA connectivity. See Secondary Connection below for more details. - Definition of secondary connection for redundant, HA connectivity - items: - properties: - authorizationKey: - description: Unique identifier authorizing Equinix to provision - a connection towards a cloud service provider. If not - specified primary authorization_key will be used. However, - some service providers may require different keys for - each connection. More information on Equinix Fabric how - to guide. Text field used to authorize connection on the - provider side. Value depends on a provider service profile - used for connection - type: string - deviceInterfaceId: - description: Applicable with device_uuid, identifier of - network interface on a given device. If not specified - then first available interface will be selected. Identifier - of network interface on a given device, used for a connection. - If not specified then first available interface will be - selected - type: number - deviceUuid: - description: Applicable with primary device_uuid. Identifier - of the Network Edge virtual device from which the secondary - connection would originate. If not specified primary device_uuid - will be used. Unique identifier of the Network Edge virtual - device from which the connection would originate - type: string - name: - description: secondary connection name Connection name. - An alpha-numeric 24 characters string which can include - only hyphens and underscores - type: string - portUuid: - description: Applicable with primary port_uuid. Identifier - of the Equinix Fabric Port from which the secondary connection - would originate. If not specified primary port_uuid will - be used. Unique identifier of the buyer's port from which - the connection would originate - type: string - profileUuid: - description: Unique identifier of the service provider's - profile. Unique identifier of the service provider's service - profile - type: string - sellerMetroCode: - description: The metro code that denotes the secondary connection’s - destination (Z side). . The metro code that denotes the - connection's remote side (z-side) - type: string - sellerRegion: - description: The region in which the seller port resides. - If not specified primary seller_region will be used. The - region in which the seller port resides - type: string - serviceToken: - description: Required with primary service_token. Unique - Equinix Fabric key given by a provider that grants you - authorization to enable connectivity from an Equinix Fabric - Port or virtual device. Each connection (primary and secondary) - requires a separate token. More details in Fabric Service - Tokens. Unique Equinix Fabric key given by a provider - that grants you authorization to enable connectivity from - a shared multi-tenant port (a-side) - type: string - speed: - description: Speed/Bandwidth to be allocated to the secondary - connection. If not specified primary speed will be used. - Speed/Bandwidth to be allocated to the connection - type: number - speedUnit: - description: Unit of the speed/bandwidth to be allocated - to the secondary connection. If not specified primary - speed_unit will be used. Unit of the speed/bandwidth to - be allocated to the connection - type: string - vlanCtag: - description: Applicable with port_uuid. C-Tag/Inner-Tag - of the secondary connection, a numeric character ranging - from 2 - 4094. C-Tag/Inner-Tag of the connection, a numeric - character ranging from 2 - 4094 - type: number - vlanStag: - description: S-Tag/Outer-Tag of the secondary connection, - a numeric character ranging from 2 - 4094. S-Tag/Outer-Tag - of the connection, a numeric character ranging from 2 - - 4094 - type: number - required: - - name - type: object - type: array - sellerMetroCode: - description: The metro code that denotes the connection’s remote/destination - side (z-side). The metro code that denotes the connection's - remote side (z-side) - type: string - sellerRegion: - description: The region in which the seller port resides. The - region in which the seller port resides - type: string - serviceToken: - description: '- A-side service tokens authorize you to create - a connection from a customer port, which created the token for - you, to a service profile or your own port. More details in - A-Side Fabric Service Tokens. Unique Equinix Fabric key given - by a provider that grants you authorization to enable connectivity - from a shared multi-tenant port (a-side)' - type: string - speed: - description: Speed/Bandwidth to be allocated to the connection. - Speed/Bandwidth to be allocated to the connection - type: number - speedUnit: - description: Unit of the speed/bandwidth to be allocated to the - connection. Unit of the speed/bandwidth to be allocated to the - connection - type: string - vlanCtag: - description: C-Tag/Inner-Tag of the connection - a numeric character - ranging from 2 - 4094. C-Tag/Inner-Tag of the connection, a - numeric character ranging from 2 - 4094 - type: number - vlanStag: - description: S-Tag/Outer-Tag of the connection - a numeric character - ranging from 2 - 4094. S-Tag/Outer-Tag of the connection, a - numeric character ranging from 2 - 4094 - type: number - zsidePortUuid: - description: Unique identifier of the port on the remote/destination - side (z-side). Allows you to connect between your own ports - or virtual devices across your company's Equinix Fabric deployment, - with no need for a private service profile. Unique identifier - of the port on the remote side (z-side) - type: string - zsideServiceToken: - description: '- Z-side service tokens authorize you to create - a connection from your port or virtual device to a customer - port which created the token for you. zside_service_token cannot - be used with secondary_connection. More details in Z-Side Fabric - Service Tokens. Unique Equinix Fabric key given by a provider - that grants you authorization to enable connectivity to a shared - multi-tenant port (z-side)' - type: string - zsideVlanCtag: - description: C-Tag/Inner-Tag of the connection on the remote/destination - side (z-side) - a numeric character ranging from 2 - 4094. secondary_connection - is defined it will internally use same zside_vlan_ctag for the - secondary connection. C-Tag/Inner-Tag of the connection on the - remote side (z-side) - type: number - zsideVlanStag: - description: S-Tag/Outer-Tag of the connection on the remote/destination - side (z-side) - a numeric character ranging from 2 - 4094. S-Tag/Outer-Tag - of the connection on the remote side (z-side) - type: number - required: - - name - - notifications - - speed - - speedUnit - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - publishConnectionDetailsTo: - description: PublishConnectionDetailsTo specifies the connection secret - config which contains a name, metadata and a reference to secret - store config to which any connection details for this managed resource - should be written. Connection details frequently include the endpoint, - username, and password required to connect to the managed resource. - properties: - configRef: - default: - name: default - description: SecretStoreConfigRef specifies which secret store - config should be used for this ConnectionSecret. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - metadata: - description: Metadata is the metadata for connection secret. - properties: - annotations: - additionalProperties: - type: string - description: Annotations are the annotations to be added to - connection secret. - For Kubernetes secrets, this will be - used as "metadata.annotations". - It is up to Secret Store - implementation for others store types. - type: object - labels: - additionalProperties: - type: string - description: Labels are the labels/tags to be added to connection - secret. - For Kubernetes secrets, this will be used as "metadata.labels". - - It is up to Secret Store implementation for others store - types. - type: object - type: - description: Type is the SecretType for the connection secret. - - Only valid for Kubernetes Secret Stores. - type: string - type: object - name: - description: Name is the name of the connection secret. - type: string - required: - - name - type: object - writeConnectionSecretToRef: - description: WriteConnectionSecretToReference specifies the namespace - and name of a Secret to which any connection details for this managed - resource should be written. Connection details frequently include - the endpoint, username, and password required to connect to the - managed resource. This field is planned to be replaced in a future - release in favor of PublishConnectionDetailsTo. Currently, both - could be set independently and connection details would be published - to both without affecting each other. - properties: - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - name - - namespace - type: object - required: - - forProvider - type: object - status: - description: L2ConnectionStatus defines the observed state of L2Connection. - properties: - atProvider: - properties: - actions: - description: One or more pending actions to complete connection - provisioning. One or more pending actions to complete connection - provisioning - items: - properties: - message: - type: string - operationId: - type: string - requiredData: - items: - properties: - editable: - type: boolean - key: - type: string - label: - type: string - validationPattern: - type: string - value: - description: additional information value - type: string - type: object - type: array - type: - type: string - type: object - type: array - id: - type: string - providerStatus: - description: Connection provisioning status on service provider's - side. Connection provisioning status on service provider's side - type: string - redundancyGroup: - description: Unique identifier of group containing a primary and - secondary connection. Unique identifier of group containing - a primary and secondary connection - type: string - redundancyType: - description: Connection redundancy type, applicable for HA connections. - Valid values are PRIMARY, SECONDARY. Connection redundancy type, - applicable for HA connections. Either primary or secondary - type: string - redundantUuid: - description: Unique identifier of the redundant connection, applicable - for HA connections. Unique identifier of the redundant connection, - applicable for HA connections - type: string - secondaryConnection: - description: Definition of secondary connection for redundant, - HA connectivity. See Secondary Connection below for more details. - Definition of secondary connection for redundant, HA connectivity - items: - properties: - actions: - description: One or more pending actions to complete connection - provisioning. One or more pending actions to complete - connection provisioning - items: - properties: - message: - type: string - operationId: - type: string - requiredData: - items: - properties: - editable: - type: boolean - key: - type: string - label: - type: string - validationPattern: - type: string - value: - description: additional information value - type: string - type: object - type: array - type: - type: string - type: object - type: array - providerStatus: - description: Connection provisioning status on service provider's - side. Connection provisioning status on service provider's - side - type: string - redundancyGroup: - description: Unique identifier of group containing a primary - and secondary connection. Unique identifier of group containing - a primary and secondary connection - type: string - redundancyType: - description: Connection redundancy type, applicable for - HA connections. Valid values are PRIMARY, SECONDARY. Connection - redundancy type, applicable for HA connections. Either - primary or secondary - type: string - redundantUuid: - description: Unique identifier of the redundant connection, - applicable for HA connections. Unique identifier of the - redundant connection, applicable for HA connections - type: string - status: - description: Connection provisioning status on Equinix Fabric - side. Connection provisioning status on Equinix Fabric - side - type: string - uuid: - description: Unique identifier of the connection. Unique - identifier of the connection - type: string - vendorToken: - description: The Equinix Fabric Token the connection was - created with. Applicable if the connection was created - with a service_token (a-side) or zside_service_token (z-side). - The Equinix Fabric Token the connection was created with. - Applicable if the connection was created with a ServiceToken - (a-side) or ZSideServiceToken (z-side) - type: string - zsidePortUuid: - description: Unique identifier of the port on the remote/destination - side (z-side). Allows you to connect between your own - ports or virtual devices across your company's Equinix - Fabric deployment, with no need for a private service - profile. Unique identifier of the port on the remote side - (z-side) - type: string - zsideVlanCtag: - description: C-Tag/Inner-Tag of the connection on the remote/destination - side (z-side) - a numeric character ranging from 2 - 4094. - secondary_connection is defined it will internally use - same zside_vlan_ctag for the secondary connection. C-Tag/Inner-Tag - of the connection on the remote side (z-side) - type: number - zsideVlanStag: - description: S-Tag/Outer-Tag of the connection on the remote/destination - side (z-side) - a numeric character ranging from 2 - 4094. - S-Tag/Outer-Tag of the connection on the remote side (z-side) - type: number - type: object - type: array - status: - description: Connection provisioning status on Equinix Fabric - side. Connection provisioning status on Equinix Fabric side - type: string - uuid: - description: Unique identifier of the connection. Unique identifier - of the connection - type: string - vendorToken: - description: The Equinix Fabric Token the connection was created - with. Applicable if the connection was created with a service_token - (a-side) or zside_service_token (z-side). The Equinix Fabric - Token the connection was created with. Applicable if the connection - was created with a ServiceToken (a-side) or ZSideServiceToken - (z-side) - 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: {} diff --git a/package/crds/ecx.equinix.jet.crossplane.io_l2serviceprofiles.yaml b/package/crds/ecx.equinix.jet.crossplane.io_l2serviceprofiles.yaml deleted file mode 100644 index 0c6becf..0000000 --- a/package/crds/ecx.equinix.jet.crossplane.io_l2serviceprofiles.yaml +++ /dev/null @@ -1,510 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null - name: l2serviceprofiles.ecx.equinix.jet.crossplane.io -spec: - group: ecx.equinix.jet.crossplane.io - names: - categories: - - crossplane - - managed - - equinix - kind: L2Serviceprofile - listKind: L2ServiceprofileList - plural: l2serviceprofiles - singular: l2serviceprofile - 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: L2Serviceprofile is the Schema for the L2Serviceprofiles 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: L2ServiceprofileSpec defines the desired state of L2Serviceprofile - 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: - apiIntegration: - description: Boolean value that determines if API integration - is enabled. It allows you to complete connection provisioning - in less than five minutes. Without API Integration, additional - manual steps will be required and the provisioning will likely - take longer. Specifies the API integration ID that was provided - to the customer during onboarding - type: boolean - authkeyLabel: - description: Name of the authentication key label to be used by - the Authentication Key service. It allows Service Providers - with QinQ ports to accept groups of connections or VLANs from - Dot1q customers. This is similar to S-Tag/C-Tag capabilities. - Name of the authentication key label to be used by the Authentication - Key service - type: string - bandwidthAlertThreshold: - description: Specifies the port bandwidth threshold percentage. - If the bandwidth limit is met or exceeded, an alert is sent - to the seller. Specifies the port bandwidth threshold percentage. - If the bandwidth limit is met or exceeded, an alert is sent - to the seller - type: number - bandwidthThresholdNotifications: - description: A list of email addresses that will receive notifications - about bandwidth thresholds. A list of email addresses that will - receive notifications about bandwidth thresholds - items: - type: string - type: array - connectionNameLabel: - description: Custom name used for calling a connections e.g. circuit. - Defaults to Connection. Custom name used for calling a connections - i.e. circuit. Defaults to Connection - type: string - ctagLabel: - description: C-Tag/Inner-Tag label name for the connections. C-Tag/Inner-Tag - label name for the connections - type: string - description: - description: Description of the service profile. Description of - the service profile - type: string - equinixManagedPortVlan: - description: Applicable when api_integration is set to true. It - indicates whether the port and VLAN details are managed by Equinix. - Boolean value that indicates whether the port and VLAN details - are managed by Equinix - type: boolean - features: - description: Block of profile features configuration. See Features - below for more details. Block of profile features configuration - items: - properties: - allowRemoteConnections: - description: Indicates whether or not connections to this - profile can be created from remote metro locations. Indicates - whether or not connections to this profile can be created - from remote metro locations - type: boolean - testProfile: - description: (Deprecated) Indicates whether or not this - profile can be used for test connections. Indicates whether - or not this profile can be used for test connections - type: boolean - required: - - allowRemoteConnections - type: object - type: array - integrationId: - description: Specifies the API integration ID that was provided - to the customer during onboarding. You can validate your API - integration ID using the validateIntegrationId API. Specifies - the API integration ID that was provided to the customer during - onboarding - type: string - name: - description: Name of the service profile. An alpha-numeric 50 - characters string which can include only hyphens and underscores. - Name of the service profile. An alpha-numeric 50 characters - string which can include only hyphens and underscores - type: string - oversubscription: - description: You can set an alert for when a percentage of your - profile has been sold. Service providers like to use this functionality - to alert them when they need to add more ports or when they - need to create a new service profile. Required with oversubscription_allowed, - defaults to 1x. Oversubscription limit that will cause alerting. - Default is 1x - type: string - oversubscriptionAllowed: - 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. By - selecting this service, you acknowledge that you will manage - decisions on when to increase capacity on these link. 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 - type: boolean - port: - description: One or more definitions of ports residing in locations, - from which your customers will be able to access services using - this service profile. See Port below for more details. One or - more definitions of ports associated with the profile - items: - properties: - metroCode: - description: The metro code of location where the port resides. - Port location metro code - type: string - uuid: - description: Unique identifier of the port. Unique identifier - of the port - type: string - required: - - metroCode - - uuid - type: object - type: array - private: - description: Boolean value that indicates whether or not this - is a private profile, i.e. not public like AWS/Azure/Oracle/Google, - etc. If private, it can only be available for creating connections - if correct permissions are granted. Boolean value that indicates - whether or not this is a private profile. - type: boolean - privateUserEmails: - description: An array of users email ids who have permission to - access this service profile. Argument is required when profile - is set as private. A list of email addresses associated to users - that will be allowed to access this service profile. Applicable - for private profiles - items: - type: string - type: array - profileStatuschangeNotifications: - description: A list of email addresses that will receive notifications - about profile status changes. A list of email addresses that - will receive notifications about profile status changes - items: - type: string - type: array - redundancyRequired: - description: Boolean value that determines if your connections - will require redundancy. if yes, then users need to create a - secondary redundant connection. Boolean value that determines - if yourconnections will require redundancy - type: boolean - secondaryVlanFromPrimary: - description: Indicates whether the VLAN ID of. the secondary connection - is the same as the primary connection. Indicates whether the - VLAN ID of the secondary connection is the same as the primary - connection - type: boolean - servicekeyAutogenerated: - description: Boolean value that indicates whether multiple connections - can be created with the same authorization key to connect to - this service profile after the first connection has been approved - by the seller. Boolean value that indicates whether multiple - connections can be created with the same authorization key - type: boolean - speedBand: - description: One or more definitions of supported speed/bandwidth. - Argument is required when speed_from_api is set to false. See - Speed Band below for more details. One or more definitions of - supported speed/bandwidth configurations - items: - properties: - speed: - description: Speed/bandwidth supported by this service profile. - Speed/bandwidth supported by given service profile - type: number - speedUnit: - description: Unit of the speed/bandwidth supported by this - service profile. One of MB, GB. Unit of the speed/bandwidth - supported by given service profile - type: string - required: - - speed - - speedUnit - type: object - type: array - speedCustomizationAllowed: - description: Boolean value that determines if customer is allowed - to enter a custom connection speed. Boolean value that determines - if customer is allowed to enter a custom connection speed - type: boolean - speedFromApi: - description: Boolean valuta that determines if connection speed - will be derived from an API call. Argument has to be specified - when api_integration is enabled. Boolean valuta that determines - if connection speed will be derived from an API call - type: boolean - tagType: - description: 'Specifies additional tagging information required - by the seller profile for Dot1Q to QinQ translation. See Enhance - Dot1q to QinQ translation support for additional information. - Valid values are: Specifies additional tagging information required - by the seller profile for Dot1Q to QinQ translation' - type: string - vcStatuschangeNotifications: - description: A list of email addresses that will receive notifications - about connections approvals and rejections. A list of email - addresses that will receive notifications about connections - approvals and rejections - items: - type: string - type: array - required: - - bandwidthThresholdNotifications - - features - - name - - port - - profileStatuschangeNotifications - - vcStatuschangeNotifications - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - publishConnectionDetailsTo: - description: PublishConnectionDetailsTo specifies the connection secret - config which contains a name, metadata and a reference to secret - store config to which any connection details for this managed resource - should be written. Connection details frequently include the endpoint, - username, and password required to connect to the managed resource. - properties: - configRef: - default: - name: default - description: SecretStoreConfigRef specifies which secret store - config should be used for this ConnectionSecret. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - metadata: - description: Metadata is the metadata for connection secret. - properties: - annotations: - additionalProperties: - type: string - description: Annotations are the annotations to be added to - connection secret. - For Kubernetes secrets, this will be - used as "metadata.annotations". - It is up to Secret Store - implementation for others store types. - type: object - labels: - additionalProperties: - type: string - description: Labels are the labels/tags to be added to connection - secret. - For Kubernetes secrets, this will be used as "metadata.labels". - - It is up to Secret Store implementation for others store - types. - type: object - type: - description: Type is the SecretType for the connection secret. - - Only valid for Kubernetes Secret Stores. - type: string - type: object - name: - description: Name is the name of the connection secret. - type: string - required: - - name - type: object - writeConnectionSecretToRef: - description: WriteConnectionSecretToReference specifies the namespace - and name of a Secret to which any connection details for this managed - resource should be written. Connection details frequently include - the endpoint, username, and password required to connect to the - managed resource. This field is planned to be replaced in a future - release in favor of PublishConnectionDetailsTo. Currently, both - could be set independently and connection details would be published - to both without affecting each other. - properties: - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - name - - namespace - type: object - required: - - forProvider - type: object - status: - description: L2ServiceprofileStatus defines the observed state of L2Serviceprofile. - properties: - atProvider: - properties: - id: - type: string - state: - description: Service profile provisioning status. Service profile - provisioning status - type: string - uuid: - description: Unique identifier of the service profile. Unique - identifier of the service profile - 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: {} diff --git a/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml b/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml index 0388161..fc7835a 100644 --- a/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml +++ b/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: providerconfigs.equinix.jet.crossplane.io spec: group: equinix.jet.crossplane.io @@ -33,14 +32,19 @@ spec: description: A ProviderConfig configures a Equinix JET provider. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + 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' + 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 @@ -51,8 +55,9 @@ spec: description: Credentials required to authenticate to this provider. properties: env: - description: Env is a reference to an environment variable that - contains credentials that must be used to connect to the provider. + description: |- + Env is a reference to an environment variable that contains credentials + that must be used to connect to the provider. properties: name: description: Name is the name of an environment variable. @@ -61,8 +66,9 @@ spec: - name type: object fs: - description: Fs is a reference to a filesystem location that contains - credentials that must be used to connect to the provider. + description: |- + Fs is a reference to a filesystem location that contains credentials that + must be used to connect to the provider. properties: path: description: Path is a filesystem path. @@ -71,8 +77,9 @@ spec: - path type: object secretRef: - description: A SecretRef is a reference to a secret key that contains - the credentials that must be used to connect to the provider. + description: |- + A SecretRef is a reference to a secret key that contains the credentials + that must be used to connect to the provider. properties: key: description: The key to select. @@ -112,14 +119,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -129,8 +145,9 @@ spec: 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. + 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 @@ -139,6 +156,9 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map users: description: Users of this provider configuration. format: int64 diff --git a/package/crds/equinix.jet.crossplane.io_providerconfigusages.yaml b/package/crds/equinix.jet.crossplane.io_providerconfigusages.yaml index 51f0f64..9e640d0 100644 --- a/package/crds/equinix.jet.crossplane.io_providerconfigusages.yaml +++ b/package/crds/equinix.jet.crossplane.io_providerconfigusages.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: providerconfigusages.equinix.jet.crossplane.io spec: group: equinix.jet.crossplane.io @@ -38,14 +37,19 @@ spec: description: A ProviderConfigUsage indicates that a resource is using a ProviderConfig. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + 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' + 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 @@ -60,19 +64,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this reference - is required. The default is 'Required', which means the reconcile - will fail if the reference cannot be resolved. 'Optional' means - this reference will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should be resolved. - The default is 'IfNotPresent', which will attempt to resolve - the reference only when the corresponding field is not present. - Use 'Always' to resolve the reference on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent diff --git a/package/crds/equinix.jet.crossplane.io_storeconfigs.yaml b/package/crds/equinix.jet.crossplane.io_storeconfigs.yaml index c40e9db..f7e358c 100644 --- a/package/crds/equinix.jet.crossplane.io_storeconfigs.yaml +++ b/package/crds/equinix.jet.crossplane.io_storeconfigs.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: storeconfigs.equinix.jet.crossplane.io spec: group: equinix.jet.crossplane.io @@ -36,14 +35,19 @@ spec: details. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + 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' + 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 @@ -51,24 +55,26 @@ spec: description: A StoreConfigSpec defines the desired state of a ProviderConfig. properties: defaultScope: - description: DefaultScope used for scoping secrets for "cluster-scoped" - resources. If store type is "Kubernetes", this would mean the default - namespace to store connection secrets for cluster scoped resources. + description: |- + DefaultScope used for scoping secrets for "cluster-scoped" resources. + If store type is "Kubernetes", this would mean the default namespace to + store connection secrets for cluster scoped resources. In case of "Vault", this would be used as the default parent path. Typically, should be set as Crossplane installation namespace. type: string kubernetes: - description: Kubernetes configures a Kubernetes secret store. If the - "type" is "Kubernetes" but no config provided, in cluster config + description: |- + Kubernetes configures a Kubernetes secret store. + If the "type" is "Kubernetes" but no config provided, in cluster config will be used. properties: auth: description: Credentials used to connect to the Kubernetes API. properties: env: - description: Env is a reference to an environment variable - that contains credentials that must be used to connect to - the provider. + description: |- + Env is a reference to an environment variable that contains credentials + that must be used to connect to the provider. properties: name: description: Name is the name of an environment variable. @@ -77,9 +83,9 @@ spec: - name type: object fs: - description: Fs is a reference to a filesystem location that - contains credentials that must be used to connect to the - provider. + description: |- + Fs is a reference to a filesystem location that contains credentials that + must be used to connect to the provider. properties: path: description: Path is a filesystem path. @@ -88,9 +94,9 @@ spec: - path type: object secretRef: - description: A SecretRef is a reference to a secret key that - contains the credentials that must be used to connect to - the provider. + description: |- + A SecretRef is a reference to a secret key that contains the credentials + that must be used to connect to the provider. properties: key: description: The key to select. @@ -120,149 +126,41 @@ spec: required: - auth type: object - type: - default: Kubernetes - description: Type configures which secret store to be used. Only the - configuration block for this store will be used and others will - be ignored if provided. Default is Kubernetes. - type: string - vault: - description: Vault configures a Vault secret store. + plugin: + description: Plugin configures External secret store as a plugin. properties: - auth: - description: Auth configures an authentication method for Vault. + configRef: + description: ConfigRef contains store config reference info. properties: - method: - description: Method configures which auth method will be used. + apiVersion: + description: APIVersion of the referenced config. type: string - token: - description: Token configures Token Auth for Vault. - properties: - env: - description: Env is a reference to an environment variable - that contains credentials that must be used to connect - to the provider. - properties: - name: - description: Name is the name of an environment variable. - type: string - required: - - name - type: object - fs: - description: Fs is a reference to a filesystem location - that contains credentials that must be used to connect - to the provider. - properties: - path: - description: Path is a filesystem path. - type: string - required: - - path - type: object - secretRef: - description: A SecretRef is a reference to a secret key - that contains the credentials that must be used to connect - to the provider. - properties: - key: - description: The key to select. - type: string - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - key - - name - - namespace - type: object - source: - description: Source of the credentials. - enum: - - None - - Secret - - Environment - - Filesystem - type: string - required: - - source - type: object - required: - - method - type: object - caBundle: - description: CABundle configures CA bundle for Vault Server. - properties: - env: - description: Env is a reference to an environment variable - that contains credentials that must be used to connect to - the provider. - properties: - name: - description: Name is the name of an environment variable. - type: string - required: - - name - type: object - fs: - description: Fs is a reference to a filesystem location that - contains credentials that must be used to connect to the - provider. - properties: - path: - description: Path is a filesystem path. - type: string - required: - - path - type: object - secretRef: - description: A SecretRef is a reference to a secret key that - contains the credentials that must be used to connect to - the provider. - properties: - key: - description: The key to select. - type: string - name: - description: Name of the secret. - type: string - namespace: - description: Namespace of the secret. - type: string - required: - - key - - name - - namespace - type: object - source: - description: Source of the credentials. - enum: - - None - - Secret - - Environment - - Filesystem + kind: + description: Kind of the referenced config. + type: string + name: + description: Name of the referenced config. type: string required: - - source + - apiVersion + - kind + - name type: object - mountPath: - description: MountPath is the mount path of the KV secrets engine. + endpoint: + description: Endpoint is the endpoint of the gRPC server. type: string - server: - description: Server is the url of the Vault server, e.g. "https://vault.acme.org" - type: string - version: - default: v2 - description: Version of the KV Secrets engine of Vault. https://www.vaultproject.io/docs/secrets/kv - type: string - required: - - auth - - mountPath - - server type: object + type: + default: Kubernetes + description: |- + Type configures which secret store to be used. Only the configuration + block for this store will be used and others will be ignored if provided. + Default is Kubernetes. + enum: + - Kubernetes + - Vault + - Plugin + type: string required: - defaultScope type: object @@ -275,14 +173,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -292,8 +199,9 @@ spec: 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. + 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 @@ -302,6 +210,9 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map type: object required: - spec diff --git a/package/crds/fabric.equinix.jet.crossplane.io_cloudrouters.yaml b/package/crds/fabric.equinix.jet.crossplane.io_cloudrouters.yaml index 2b96545..33cd1f7 100644 --- a/package/crds/fabric.equinix.jet.crossplane.io_cloudrouters.yaml +++ b/package/crds/fabric.equinix.jet.crossplane.io_cloudrouters.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: cloudrouters.fabric.equinix.jet.crossplane.io spec: group: fabric.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -35,17 +34,24 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: CloudRouter is the Schema for the CloudRouters API. + description: CloudRouter is the Schema for the CloudRouters API. Fabric V4 + API compatible resource allows creation and management of Equinix Fabric + Cloud Router 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' + 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' + 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 @@ -54,9 +60,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,166 +75,354 @@ spec: forProvider: properties: account: - description: Customer account information that is associated with - this Fabric Cloud Router + description: |- + (Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema) + Customer account information that is associated with this Fabric Cloud Router items: properties: accountNumber: - description: Account Number + description: |- + (Number) Account Number + Account Number type: number type: object type: array description: - description: Customer-provided Fabric Cloud Router description + description: |- + provided Fabric Cloud Router description + Customer-provided Fabric Cloud Router description type: string href: - description: Fabric Cloud Router URI information + description: |- + (String) Fabric Cloud Router URI information + Fabric Cloud Router URI information type: string location: - description: Fabric Cloud Router location + description: |- + (Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema) + Fabric Cloud Router location items: properties: ibx: - description: IBX Code + description: |- + (String) IBX Code + IBX Code type: string metroCode: - description: Access point metro code + description: |- + (String) Access point metro code + Access point metro code type: string metroName: - description: Access point metro name + description: |- + (String) Access point metro name + Access point metro name type: string region: - description: Access point region + description: |- + (String) Access point region + Access point region type: string type: object type: array name: - description: Fabric Cloud Router name. An alpha-numeric 24 characters - string which can include only hyphens and underscores + description: |- + numeric 24 characters string which can include only hyphens and underscores + Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores type: string notifications: - description: Preferences for notifications on Fabric Cloud Router - configuration or status changes + description: |- + (Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema) + Preferences for notifications on Fabric Cloud Router configuration or status changes items: properties: emails: - description: Array of contact emails + description: |- + (List of String) Array of contact emails + Array of contact emails items: type: string type: array sendInterval: - description: Send interval + description: |- + (String) Send interval + Send interval type: string type: - description: Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, - NOTIFICATIONS + description: |- + (String) Defines the FCR type like; XF_ROUTER + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS type: string - required: - - emails - - type type: object type: array order: - description: Order information related to this Fabric Cloud Router + description: |- + (Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema) + Order information related to this Fabric Cloud Router items: properties: billingTier: - description: Billing tier for connection bandwidth + description: |- + (String) Billing tier for connection bandwidth + Billing tier for connection bandwidth type: string orderId: - description: Order Identification + description: |- + (String) Order Identification + Order Identification type: string orderNumber: - description: Order Reference Number + description: |- + (String) Order Reference Number + Order Reference Number type: string purchaseOrderNumber: - description: Purchase order number + description: |- + (String) Purchase order number + Purchase order number type: string type: object type: array package: - description: Fabric Cloud Router Package Type + description: |- + (Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema) + Fabric Cloud Router Package Type items: properties: code: - description: Fabric Cloud Router package code + description: |- + (String) Fabric Cloud Router package code + Fabric Cloud Router package code type: string - required: - - code type: object type: array project: - description: 'Customer resource hierarchy project information. - Applicable to customers onboarded to Equinix Identity and Access - Management. For more information see Identity and Access Management: - Projects' + description: |- + (Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema) + Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects items: properties: href: - description: Unique Resource URL + description: |- + (String) Fabric Cloud Router URI information + Unique Resource URL type: string projectId: - description: Project Id + description: |- + (String) Project Id + Project Id type: string type: object type: array type: - description: Defines the FCR type like; XF_ROUTER + description: |- + (String) Defines the FCR type like; XF_ROUTER + Defines the FCR type like; XF_ROUTER type: string uuid: - description: Equinix-assigned Fabric Cloud Router identifier + description: |- + assigned Fabric Cloud Router identifier + Equinix-assigned Fabric Cloud Router identifier type: string - required: - - account - - location - - name - - notifications - - package - - project - - type 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + account: + description: |- + (Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema) + Customer account information that is associated with this Fabric Cloud Router + items: + properties: + accountNumber: + description: |- + (Number) Account Number + Account Number + type: number + type: object + type: array + description: + description: |- + provided Fabric Cloud Router description + Customer-provided Fabric Cloud Router description + type: string + href: + description: |- + (String) Fabric Cloud Router URI information + Fabric Cloud Router URI information + type: string + location: + description: |- + (Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema) + Fabric Cloud Router location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array name: - description: Name of the referenced object. + description: |- + numeric 24 characters string which can include only hyphens and underscores + Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores + type: string + notifications: + description: |- + (Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema) + Preferences for notifications on Fabric Cloud Router configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + (String) Defines the FCR type like; XF_ROUTER + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array + order: + description: |- + (Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema) + Order information related to this Fabric Cloud Router + items: + properties: + billingTier: + description: |- + (String) Billing tier for connection bandwidth + Billing tier for connection bandwidth + type: string + orderId: + description: |- + (String) Order Identification + Order Identification + type: string + orderNumber: + description: |- + (String) Order Reference Number + Order Reference Number + type: string + purchaseOrderNumber: + description: |- + (String) Purchase order number + Purchase order number + type: string + type: object + type: array + package: + description: |- + (Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema) + Fabric Cloud Router Package Type + items: + properties: + code: + description: |- + (String) Fabric Cloud Router package code + Fabric Cloud Router package code + type: string + type: object + type: array + project: + description: |- + (Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema) + Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects + items: + properties: + href: + description: |- + (String) Fabric Cloud Router URI information + Unique Resource URL + type: string + projectId: + description: |- + (String) Project Id + Project Id + type: string + type: object + type: array + type: + description: |- + (String) Defines the FCR type like; XF_ROUTER + Defines the FCR type like; XF_ROUTER + type: string + uuid: + description: |- + assigned Fabric Cloud Router identifier + Equinix-assigned Fabric Cloud Router identifier type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -233,21 +432,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -257,17 +456,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -277,21 +478,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -306,21 +507,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -331,14 +533,15 @@ spec: - 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. + 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. @@ -353,66 +556,271 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.account is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.account) + || (has(self.initProvider) && has(self.initProvider.account))' + - message: spec.forProvider.location is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.location) + || (has(self.initProvider) && has(self.initProvider.location))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.notifications is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.notifications) + || (has(self.initProvider) && has(self.initProvider.notifications))' + - message: spec.forProvider.package is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.__package__) + || (has(self.initProvider) && has(self.initProvider.__package__))' + - message: spec.forProvider.project is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.project) + || (has(self.initProvider) && has(self.initProvider.project))' + - message: spec.forProvider.type is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.type) + || (has(self.initProvider) && has(self.initProvider.type))' status: description: CloudRouterStatus defines the observed state of CloudRouter. properties: atProvider: properties: + account: + description: |- + (Block Set, Min: 1, Max: 1) Customer account information that is associated with this Fabric Cloud Router (see below for nested schema) + Customer account information that is associated with this Fabric Cloud Router + items: + properties: + accountNumber: + description: |- + (Number) Account Number + Account Number + type: number + type: object + type: array bgpIpv4RoutesCount: - description: Number of IPv4 BGP routes in use (including non-distinct - prefixes) + description: |- + distinct prefixes) + Number of IPv4 BGP routes in use (including non-distinct prefixes) type: number bgpIpv6RoutesCount: - description: Number of IPv6 BGP routes in use (including non-distinct - prefixes) + description: |- + distinct prefixes) + Number of IPv6 BGP routes in use (including non-distinct prefixes) type: number changeLog: - description: Captures Fabric Cloud Router lifecycle change information + description: |- + (Set of Object) Captures Fabric Cloud Router lifecycle change information (see below for nested schema) + Captures Fabric Cloud Router lifecycle change information items: properties: createdBy: + description: (String) type: string createdByEmail: + description: (String) type: string createdByFullName: + description: (String) type: string createdDateTime: + description: (String) type: string deletedBy: + description: (String) type: string deletedByEmail: + description: (String) type: string deletedByFullName: + description: (String) type: string deletedDateTime: + description: (String) type: string updatedBy: + description: (String) type: string updatedByEmail: + description: (String) type: string updatedByFullName: + description: (String) type: string updatedDateTime: + description: (String) type: string type: object type: array connectionsCount: - description: Number of connections associated with this Fabric - Cloud Router instance + description: |- + (Number) Number of connections associated with this Fabric Cloud Router instance + Number of connections associated with this Fabric Cloud Router instance type: number + description: + description: |- + provided Fabric Cloud Router description + Customer-provided Fabric Cloud Router description + type: string distinctIpv4PrefixesCount: - description: Number of distinct IPv4 routes + description: |- + (Number) Number of distinct IPv4 routes + Number of distinct IPv4 routes type: number distinctIpv6PrefixesCount: - description: Number of distinct IPv6 routes + description: |- + (Number) Number of distinct IPv6 routes + Number of distinct IPv6 routes type: number equinixAsn: - description: Equinix ASN + description: |- + (Number) Equinix ASN + Equinix ASN type: number + href: + description: |- + (String) Fabric Cloud Router URI information + Fabric Cloud Router URI information + type: string id: + description: (String) The ID of this resource. + type: string + location: + description: |- + (Block Set, Min: 1, Max: 1) Fabric Cloud Router location (see below for nested schema) + Fabric Cloud Router location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Fabric Cloud Router name. An alpha-numeric 24 characters string which can include only hyphens and underscores type: string + notifications: + description: |- + (Block List, Min: 1) Preferences for notifications on Fabric Cloud Router configuration or status changes (see below for nested schema) + Preferences for notifications on Fabric Cloud Router configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + (String) Defines the FCR type like; XF_ROUTER + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array + order: + description: |- + (Block Set, Min: 1, Max: 1) Order information related to this Fabric Cloud Router (see below for nested schema) + Order information related to this Fabric Cloud Router + items: + properties: + billingTier: + description: |- + (String) Billing tier for connection bandwidth + Billing tier for connection bandwidth + type: string + orderId: + description: |- + (String) Order Identification + Order Identification + type: string + orderNumber: + description: |- + (String) Order Reference Number + Order Reference Number + type: string + purchaseOrderNumber: + description: |- + (String) Purchase order number + Purchase order number + type: string + type: object + type: array + package: + description: |- + (Block Set, Min: 1, Max: 1) Fabric Cloud Router Package Type (see below for nested schema) + Fabric Cloud Router Package Type + items: + properties: + code: + description: |- + (String) Fabric Cloud Router package code + Fabric Cloud Router package code + type: string + type: object + type: array + project: + description: |- + (Block Set, Min: 1, Max: 1) Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects (see below for nested schema) + Customer resource hierarchy project information. Applicable to customers onboarded to Equinix Identity and Access Management. For more information see Identity and Access Management: Projects + items: + properties: + href: + description: |- + (String) Fabric Cloud Router URI information + Unique Resource URL + type: string + projectId: + description: |- + (String) Project Id + Project Id + type: string + type: object + type: array state: - description: Fabric Cloud Router overall state + description: |- + (String) Fabric Cloud Router overall state + Fabric Cloud Router overall state + type: string + type: + description: |- + (String) Defines the FCR type like; XF_ROUTER + Defines the FCR type like; XF_ROUTER + type: string + uuid: + description: |- + assigned Fabric Cloud Router identifier + Equinix-assigned Fabric Cloud Router identifier type: string type: object conditions: @@ -421,14 +829,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -438,8 +855,9 @@ spec: 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. + 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 @@ -448,6 +866,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/fabric.equinix.jet.crossplane.io_connections.yaml b/package/crds/fabric.equinix.jet.crossplane.io_connections.yaml index faacd84..bc5cd7c 100644 --- a/package/crds/fabric.equinix.jet.crossplane.io_connections.yaml +++ b/package/crds/fabric.equinix.jet.crossplane.io_connections.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: connections.fabric.equinix.jet.crossplane.io spec: group: fabric.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -35,17 +34,23 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: Connection is the Schema for the Connections API. + description: Connection is the Schema for the Connections API. Fabric V4 API + compatible resource allows creation and management of Equinix Fabric connection 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' + 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' + 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 @@ -54,9 +59,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,521 +74,1284 @@ spec: forProvider: properties: aSide: - description: Requester or Customer side connection configuration - object of the multi-segment connection + description: |- + segment connection (see below for nested schema) + Requester or Customer side connection configuration object of the multi-segment connection + items: + properties: + accessPoint: + description: |- + (Block Set, Max: 1) Point of access details (see below for nested schema) + Point of access details + items: + properties: + account: + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Account + items: + type: object + type: array + authenticationKey: + description: |- + (String) Authentication key for provider based connections + Authentication key for provider based connections + type: string + gateway: + description: |- + (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + **Deprecated** `gateway` Use `router` attribute instead + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier + type: string + type: object + type: array + interface: + description: |- + (Block Set, Max: 1) Virtual device interface (see below for nested schema) + Virtual device interface + items: + properties: + id: + description: |- + (String) The ID of this resource. + id + type: number + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Interface type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned interface identifier + type: string + type: object + type: array + linkProtocol: + description: |- + (Block Set, Max: 1) Connection link protocol (see below for nested schema) + Connection link protocol + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + type: string + vlanCTag: + description: |- + (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + Vlan Customer Tag information, vlanCTag value specified for QINQ connections + type: number + vlanSTag: + description: |- + (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + Vlan Provider Tag information, vlanSTag value specified for QINQ connections + type: number + vlanTag: + description: |- + (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + Vlan Tag information, vlanTag value specified for DOT1Q connections + type: number + type: object + type: array + location: + description: |- + (Block Set, Max: 1) Access point location (see below for nested schema) + Access point location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + network: + description: |- + (Block Set, Max: 1) network access point information (see below for nested schema) + network access point information + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned Network identifier + type: string + type: object + type: array + peeringType: + description: |- + PRIVATE,MICROSOFT,PUBLIC, MANUAL + Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + type: string + port: + description: |- + (Block Set, Max: 1) Port access point information (see below for nested schema) + Port access point information + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned Port identifier + type: string + type: object + type: array + profile: + description: |- + (Block Set, Max: 1) Service Profile (see below for nested schema) + Service Profile + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + type: string + uuid: + description: |- + assigned connection identifier + Equinix assigned service profile identifier + type: string + type: object + type: array + router: + description: |- + (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + Cloud Router access point information that replaces `gateway` + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier + type: string + type: object + type: array + sellerRegion: + description: |- + (String) Access point seller region + Access point seller region + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + type: string + virtualDevice: + description: |- + (Block Set, Max: 1) Virtual device (see below for nested schema) + Virtual device + items: + properties: + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned Virtual Device Name + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Virtual Device type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned Virtual Device identifier + type: string + type: object + type: array + type: object + type: array + additionalInfo: + description: |- + (List of Map of String) Connection additional information + Connection side additional information + items: + properties: + key: + description: |- + (String) Additional information key + Additional information key + type: string + value: + description: |- + (String) Additional information value + Additional information value + type: string + type: object + type: array + serviceToken: + description: |- + (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Token type - VC_TOKEN + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned service token identifier + type: string + type: object + type: array + type: object + type: array + additionalInfo: + description: |- + (List of Map of String) Connection additional information + Connection additional information + items: + additionalProperties: + type: string + type: object + type: array + bandwidth: + description: |- + (Number) Connection bandwidth in Mbps + Connection bandwidth in Mbps + type: number + description: + description: |- + provided connection description + Customer-provided connection description + type: string + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores + type: string + notifications: + description: |- + (Block List, Min: 1) Preferences for notifications on connection configuration or status changes (see below for nested schema) + Preferences for notifications on connection configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array + order: + description: |- + (Block Set, Min: 1, Max: 1) Order details (see below for nested schema) + Order details + items: + properties: + billingTier: + description: |- + (String) Billing tier for connection bandwidth + Billing tier for connection bandwidth + type: string + orderId: + description: |- + (String) Order Identification + Order Identification + type: string + orderNumber: + description: |- + (String) Order Reference Number + Order Reference Number + type: string + purchaseOrderNumber: + description: |- + (String) Purchase order number + Purchase order number + type: string + type: object + type: array + project: + description: |- + (Block Set, Max: 1) Project information (see below for nested schema) + Project information + items: + properties: + projectId: + description: |- + (String) Project Id + Project Id + type: string + type: object + type: array + redundancy: + description: |- + (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + Connection Redundancy Configuration + items: + properties: + group: + description: |- + (String) + Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group) + type: string + priority: + description: |- + (String) + Connection priority in redundancy group - PRIMARY, SECONDARY + type: string + type: object + type: array + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC + type: string + zSide: + description: |- + segment connection (see below for nested schema) + Destination or Provider side connection configuration object of the multi-segment connection + items: + properties: + accessPoint: + description: |- + (Block Set, Max: 1) Point of access details (see below for nested schema) + Point of access details + items: + properties: + account: + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Account + items: + type: object + type: array + authenticationKey: + description: |- + (String) Authentication key for provider based connections + Authentication key for provider based connections + type: string + gateway: + description: |- + (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + **Deprecated** `gateway` Use `router` attribute instead + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier + type: string + type: object + type: array + interface: + description: |- + (Block Set, Max: 1) Virtual device interface (see below for nested schema) + Virtual device interface + items: + properties: + id: + description: |- + (String) The ID of this resource. + id + type: number + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Interface type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned interface identifier + type: string + type: object + type: array + linkProtocol: + description: |- + (Block Set, Max: 1) Connection link protocol (see below for nested schema) + Connection link protocol + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + type: string + vlanCTag: + description: |- + (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + Vlan Customer Tag information, vlanCTag value specified for QINQ connections + type: number + vlanSTag: + description: |- + (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + Vlan Provider Tag information, vlanSTag value specified for QINQ connections + type: number + vlanTag: + description: |- + (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + Vlan Tag information, vlanTag value specified for DOT1Q connections + type: number + type: object + type: array + location: + description: |- + (Block Set, Max: 1) Access point location (see below for nested schema) + Access point location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + network: + description: |- + (Block Set, Max: 1) network access point information (see below for nested schema) + network access point information + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned Network identifier + type: string + type: object + type: array + peeringType: + description: |- + PRIVATE,MICROSOFT,PUBLIC, MANUAL + Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + type: string + port: + description: |- + (Block Set, Max: 1) Port access point information (see below for nested schema) + Port access point information + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned Port identifier + type: string + type: object + type: array + profile: + description: |- + (Block Set, Max: 1) Service Profile (see below for nested schema) + Service Profile + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + type: string + uuid: + description: |- + assigned connection identifier + Equinix assigned service profile identifier + type: string + type: object + type: array + router: + description: |- + (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + Cloud Router access point information that replaces `gateway` + items: + properties: + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier + type: string + type: object + type: array + sellerRegion: + description: |- + (String) Access point seller region + Access point seller region + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + type: string + virtualDevice: + description: |- + (Block Set, Max: 1) Virtual device (see below for nested schema) + Virtual device + items: + properties: + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned Virtual Device Name + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Virtual Device type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned Virtual Device identifier + type: string + type: object + type: array + type: object + type: array + additionalInfo: + description: |- + (List of Map of String) Connection additional information + Connection side additional information + items: + properties: + key: + description: |- + (String) Additional information key + Additional information key + type: string + value: + description: |- + (String) Additional information value + Additional information value + type: string + type: object + type: array + serviceToken: + description: |- + (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Token type - VC_TOKEN + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned service token identifier + type: string + type: object + type: array + type: object + type: array + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + aSide: + description: |- + segment connection (see below for nested schema) + Requester or Customer side connection configuration object of the multi-segment connection items: properties: accessPoint: - description: Point of access details + description: |- + (Block Set, Max: 1) Point of access details (see below for nested schema) + Point of access details items: properties: account: - description: Account + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Account items: type: object type: array authenticationKey: - description: Authentication key for provider based - connections + description: |- + (String) Authentication key for provider based connections + Authentication key for provider based connections type: string gateway: - description: '**Deprecated** `gateway` Use `router` - attribute instead' + description: |- + (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + **Deprecated** `gateway` Use `router` attribute instead items: properties: uuid: - description: Equinix-assigned virtual gateway - identifier + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier type: string type: object type: array interface: - description: Virtual device interface + description: |- + (Block Set, Max: 1) Virtual device interface (see below for nested schema) + Virtual device interface items: properties: id: - description: id + description: |- + (String) The ID of this resource. + id type: number type: - description: Interface type + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Interface type type: string uuid: - description: Equinix-assigned interface identifier + description: |- + assigned connection identifier + Equinix-assigned interface identifier type: string type: object type: array linkProtocol: - description: Connection link protocol + description: |- + (Block Set, Max: 1) Connection link protocol (see below for nested schema) + Connection link protocol items: properties: type: - description: Type of the link protocol - UNTAGGED, - DOT1Q, QINQ, EVPN_VXLAN + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN type: string vlanCTag: - description: Vlan Customer Tag information, - vlanCTag value specified for QINQ connections + description: |- + (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + Vlan Customer Tag information, vlanCTag value specified for QINQ connections type: number vlanSTag: - description: Vlan Provider Tag information, - vlanSTag value specified for QINQ connections + description: |- + (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + Vlan Provider Tag information, vlanSTag value specified for QINQ connections type: number vlanTag: - description: Vlan Tag information, vlanTag value - specified for DOT1Q connections + description: |- + (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + Vlan Tag information, vlanTag value specified for DOT1Q connections type: number type: object type: array location: - description: Access point location + description: |- + (Block Set, Max: 1) Access point location (see below for nested schema) + Access point location items: properties: ibx: - description: IBX Code + description: |- + (String) IBX Code + IBX Code type: string metroCode: - description: Access point metro code + description: |- + (String) Access point metro code + Access point metro code type: string metroName: - description: Access point metro name + description: |- + (String) Access point metro name + Access point metro name type: string region: - description: Access point region + description: |- + (String) Access point region + Access point region type: string type: object type: array network: - description: network access point information + description: |- + (Block Set, Max: 1) network access point information (see below for nested schema) + network access point information items: properties: uuid: - description: Equinix-assigned Network identifier + description: |- + assigned connection identifier + Equinix-assigned Network identifier type: string type: object type: array peeringType: - description: Peering Type- PRIVATE,MICROSOFT,PUBLIC, - MANUAL + description: |- + PRIVATE,MICROSOFT,PUBLIC, MANUAL + Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL type: string port: - description: Port access point information + description: |- + (Block Set, Max: 1) Port access point information (see below for nested schema) + Port access point information items: properties: uuid: - description: Equinix-assigned Port identifier + description: |- + assigned connection identifier + Equinix-assigned Port identifier type: string type: object type: array profile: - description: Service Profile + description: |- + (Block Set, Max: 1) Service Profile (see below for nested schema) + Service Profile items: properties: type: - description: Service profile type - L2_PROFILE, - L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE type: string uuid: - description: Equinix assigned service profile - identifier + description: |- + assigned connection identifier + Equinix assigned service profile identifier type: string - required: - - type - - uuid type: object type: array router: - description: Cloud Router access point information - that replaces `gateway` + description: |- + (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + Cloud Router access point information that replaces `gateway` items: properties: uuid: - description: Equinix-assigned virtual gateway - identifier + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier type: string type: object type: array sellerRegion: - description: Access point seller region + description: |- + (String) Access point seller region + Access point seller region type: string type: - description: Access point type - COLO, VD, VG, SP, - IGW, SUBNET, CLOUD_ROUTER, NETWORK + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK type: string virtualDevice: - description: Virtual device + description: |- + (Block Set, Max: 1) Virtual device (see below for nested schema) + Virtual device items: properties: name: - description: Customer-assigned Virtual Device - Name + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned Virtual Device Name type: string type: - description: Virtual Device type + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Virtual Device type type: string uuid: - description: Equinix-assigned Virtual Device - identifier + description: |- + assigned connection identifier + Equinix-assigned Virtual Device identifier type: string type: object type: array type: object type: array additionalInfo: - description: Connection side additional information + description: |- + (List of Map of String) Connection additional information + Connection side additional information items: properties: key: - description: Additional information key + description: |- + (String) Additional information key + Additional information key type: string value: - description: Additional information value + description: |- + (String) Additional information value + Additional information value type: string type: object type: array serviceToken: - description: For service token based connections, Service - tokens authorize users to access protected resources and - services. Resource owners can distribute the tokens to - trusted partners and vendors, allowing selected third - parties to work directly with Equinix network assets + description: |- + (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets items: properties: type: - description: Token type - VC_TOKEN + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Token type - VC_TOKEN type: string uuid: - description: Equinix-assigned service token identifier + description: |- + assigned connection identifier + Equinix-assigned service token identifier type: string type: object type: array type: object type: array additionalInfo: - description: Connection additional information + description: |- + (List of Map of String) Connection additional information + Connection additional information items: additionalProperties: type: string type: object type: array bandwidth: - description: Connection bandwidth in Mbps + description: |- + (Number) Connection bandwidth in Mbps + Connection bandwidth in Mbps type: number description: - description: Customer-provided connection description + description: |- + provided connection description + Customer-provided connection description type: string name: - description: Connection name. An alpha-numeric 24 characters string - which can include only hyphens and underscores + description: |- + numeric 24 characters string which can include only hyphens and underscores + Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores type: string notifications: - description: Preferences for notifications on connection configuration - or status changes + description: |- + (Block List, Min: 1) Preferences for notifications on connection configuration or status changes (see below for nested schema) + Preferences for notifications on connection configuration or status changes items: properties: emails: - description: Array of contact emails + description: |- + (List of String) Array of contact emails + Array of contact emails items: type: string type: array sendInterval: - description: Send interval + description: |- + (String) Send interval + Send interval type: string type: - description: Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, - NOTIFICATIONS + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS type: string - required: - - emails - - type type: object type: array order: - description: Order details + description: |- + (Block Set, Min: 1, Max: 1) Order details (see below for nested schema) + Order details items: properties: billingTier: - description: Billing tier for connection bandwidth + description: |- + (String) Billing tier for connection bandwidth + Billing tier for connection bandwidth type: string orderId: - description: Order Identification + description: |- + (String) Order Identification + Order Identification type: string orderNumber: - description: Order Reference Number + description: |- + (String) Order Reference Number + Order Reference Number type: string purchaseOrderNumber: - description: Purchase order number + description: |- + (String) Purchase order number + Purchase order number type: string type: object type: array project: - description: Project information + description: |- + (Block Set, Max: 1) Project information (see below for nested schema) + Project information items: properties: projectId: - description: Project Id + description: |- + (String) Project Id + Project Id type: string type: object type: array redundancy: - description: Connection Redundancy Configuration + description: |- + (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + Connection Redundancy Configuration items: properties: group: - description: Redundancy group identifier (Use the redundancy.0.group - UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group - or equinix_fabric_connection.primary_port_connection.redundancy.0.group) + description: |- + (String) + Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group) type: string priority: - description: Connection priority in redundancy group - PRIMARY, - SECONDARY + description: |- + (String) + Connection priority in redundancy group - PRIMARY, SECONDARY type: string type: object type: array type: - description: Defines the connection type like EVPL_VC, EPL_VC, - IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, - IA_VC, EC_VC + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC type: string zSide: - description: Destination or Provider side connection configuration - object of the multi-segment connection + description: |- + segment connection (see below for nested schema) + Destination or Provider side connection configuration object of the multi-segment connection items: properties: accessPoint: - description: Point of access details + description: |- + (Block Set, Max: 1) Point of access details (see below for nested schema) + Point of access details items: properties: account: - description: Account + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Account items: type: object type: array authenticationKey: - description: Authentication key for provider based - connections + description: |- + (String) Authentication key for provider based connections + Authentication key for provider based connections type: string gateway: - description: '**Deprecated** `gateway` Use `router` - attribute instead' + description: |- + (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + **Deprecated** `gateway` Use `router` attribute instead items: properties: uuid: - description: Equinix-assigned virtual gateway - identifier + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier type: string type: object type: array interface: - description: Virtual device interface + description: |- + (Block Set, Max: 1) Virtual device interface (see below for nested schema) + Virtual device interface items: properties: id: - description: id + description: |- + (String) The ID of this resource. + id type: number type: - description: Interface type + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Interface type type: string uuid: - description: Equinix-assigned interface identifier + description: |- + assigned connection identifier + Equinix-assigned interface identifier type: string type: object type: array linkProtocol: - description: Connection link protocol + description: |- + (Block Set, Max: 1) Connection link protocol (see below for nested schema) + Connection link protocol items: properties: type: - description: Type of the link protocol - UNTAGGED, - DOT1Q, QINQ, EVPN_VXLAN + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN type: string vlanCTag: - description: Vlan Customer Tag information, - vlanCTag value specified for QINQ connections + description: |- + (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + Vlan Customer Tag information, vlanCTag value specified for QINQ connections type: number vlanSTag: - description: Vlan Provider Tag information, - vlanSTag value specified for QINQ connections + description: |- + (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + Vlan Provider Tag information, vlanSTag value specified for QINQ connections type: number vlanTag: - description: Vlan Tag information, vlanTag value - specified for DOT1Q connections + description: |- + (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + Vlan Tag information, vlanTag value specified for DOT1Q connections type: number type: object type: array location: - description: Access point location + description: |- + (Block Set, Max: 1) Access point location (see below for nested schema) + Access point location items: properties: ibx: - description: IBX Code + description: |- + (String) IBX Code + IBX Code type: string metroCode: - description: Access point metro code + description: |- + (String) Access point metro code + Access point metro code type: string metroName: - description: Access point metro name + description: |- + (String) Access point metro name + Access point metro name type: string region: - description: Access point region + description: |- + (String) Access point region + Access point region type: string type: object type: array network: - description: network access point information + description: |- + (Block Set, Max: 1) network access point information (see below for nested schema) + network access point information items: properties: uuid: - description: Equinix-assigned Network identifier + description: |- + assigned connection identifier + Equinix-assigned Network identifier type: string type: object type: array peeringType: - description: Peering Type- PRIVATE,MICROSOFT,PUBLIC, - MANUAL + description: |- + PRIVATE,MICROSOFT,PUBLIC, MANUAL + Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL type: string port: - description: Port access point information + description: |- + (Block Set, Max: 1) Port access point information (see below for nested schema) + Port access point information items: properties: uuid: - description: Equinix-assigned Port identifier + description: |- + assigned connection identifier + Equinix-assigned Port identifier type: string type: object type: array profile: - description: Service Profile + description: |- + (Block Set, Max: 1) Service Profile (see below for nested schema) + Service Profile items: properties: type: - description: Service profile type - L2_PROFILE, - L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE type: string uuid: - description: Equinix assigned service profile - identifier + description: |- + assigned connection identifier + Equinix assigned service profile identifier type: string - required: - - type - - uuid type: object type: array router: - description: Cloud Router access point information - that replaces `gateway` + description: |- + (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + Cloud Router access point information that replaces `gateway` items: properties: uuid: - description: Equinix-assigned virtual gateway - identifier + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier type: string type: object type: array sellerRegion: - description: Access point seller region + description: |- + (String) Access point seller region + Access point seller region type: string type: - description: Access point type - COLO, VD, VG, SP, - IGW, SUBNET, CLOUD_ROUTER, NETWORK + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK type: string virtualDevice: - description: Virtual device + description: |- + (Block Set, Max: 1) Virtual device (see below for nested schema) + Virtual device items: properties: name: - description: Customer-assigned Virtual Device - Name + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned Virtual Device Name type: string type: - description: Virtual Device type + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Virtual Device type type: string uuid: - description: Equinix-assigned Virtual Device - identifier + description: |- + assigned connection identifier + Equinix-assigned Virtual Device identifier type: string type: object type: array type: object type: array additionalInfo: - description: Connection side additional information + description: |- + (List of Map of String) Connection additional information + Connection side additional information items: properties: key: - description: Additional information key + description: |- + (String) Additional information key + Additional information key type: string value: - description: Additional information value + description: |- + (String) Additional information value + Additional information value type: string type: object type: array serviceToken: - description: For service token based connections, Service - tokens authorize users to access protected resources and - services. Resource owners can distribute the tokens to - trusted partners and vendors, allowing selected third - parties to work directly with Equinix network assets + description: |- + (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets items: properties: type: - description: Token type - VC_TOKEN + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Token type - VC_TOKEN type: string uuid: - description: Equinix-assigned service token identifier + description: |- + assigned connection identifier + Equinix-assigned service token identifier type: string type: object type: array type: object type: array - required: - - aSide - - bandwidth - - name - - notifications - - type - - zSide type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array providerConfigRef: default: name: default - description: ProviderConfigReference specifies how the provider that - will be used to create, observe, update, and delete this managed - resource should be configured. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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`' + 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. @@ -588,21 +1361,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -612,17 +1385,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -632,21 +1407,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -661,21 +1436,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -686,14 +1462,15 @@ spec: - 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. + 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. @@ -708,432 +1485,1073 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.aSide is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.aSide) + || (has(self.initProvider) && has(self.initProvider.aSide))' + - message: spec.forProvider.bandwidth is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.bandwidth) + || (has(self.initProvider) && has(self.initProvider.bandwidth))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.notifications is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.notifications) + || (has(self.initProvider) && has(self.initProvider.notifications))' + - message: spec.forProvider.type is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.type) + || (has(self.initProvider) && has(self.initProvider.type))' + - message: spec.forProvider.zSide is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.zSide) + || (has(self.initProvider) && has(self.initProvider.zSide))' status: description: ConnectionStatus defines the observed state of Connection. properties: atProvider: properties: aSide: - description: Requester or Customer side connection configuration - object of the multi-segment connection + description: |- + segment connection (see below for nested schema) + Requester or Customer side connection configuration object of the multi-segment connection items: properties: accessPoint: - description: Point of access details + description: |- + (Block Set, Max: 1) Point of access details (see below for nested schema) + Point of access details items: properties: account: - description: Account + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Account items: properties: accountName: - description: Legal name of the accountholder. + description: |- + (String) Legal name of the accountholder. + Legal name of the accountholder. type: string accountNumber: - description: Equinix-assigned account number. + description: |- + assigned account number. + Equinix-assigned account number. type: number globalCustId: - description: Equinix-assigned ID of the subscriber's - parent organization. + description: |- + assigned ID of the subscriber's parent organization. + Equinix-assigned ID of the subscriber's parent organization. type: string globalOrgId: - description: Equinix-assigned ID of the subscriber's - parent organization. + description: |- + assigned ID of the subscriber's parent organization. + Equinix-assigned ID of the subscriber's parent organization. type: string globalOrganizationName: - description: Equinix-assigned name of the subscriber's - parent organization. + description: |- + assigned name of the subscriber's parent organization. + Equinix-assigned name of the subscriber's parent organization. type: string orgId: - description: Equinix-assigned ID of the subscriber's - organization. + description: |- + assigned ID of the subscriber's organization. + Equinix-assigned ID of the subscriber's organization. type: number organizationName: - description: Equinix-assigned name of the subscriber's - organization. + description: |- + assigned name of the subscriber's organization. + Equinix-assigned name of the subscriber's organization. type: string ucmId: - description: Enterprise datastore id + description: |- + (String) Enterprise datastore id + Enterprise datastore id type: string type: object type: array + authenticationKey: + description: |- + (String) Authentication key for provider based connections + Authentication key for provider based connections + type: string gateway: - description: '**Deprecated** `gateway` Use `router` - attribute instead' + description: |- + (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + **Deprecated** `gateway` Use `router` attribute instead items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier + type: string + type: object + type: array + interface: + description: |- + (Block Set, Max: 1) Virtual device interface (see below for nested schema) + Virtual device interface + items: + properties: + id: + description: |- + (String) The ID of this resource. + id + type: number + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Interface type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned interface identifier + type: string + type: object + type: array + linkProtocol: + description: |- + (Block Set, Max: 1) Connection link protocol (see below for nested schema) + Connection link protocol + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + type: string + vlanCTag: + description: |- + (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + Vlan Customer Tag information, vlanCTag value specified for QINQ connections + type: number + vlanSTag: + description: |- + (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + Vlan Provider Tag information, vlanSTag value specified for QINQ connections + type: number + vlanTag: + description: |- + (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + Vlan Tag information, vlanTag value specified for DOT1Q connections + type: number + type: object + type: array + location: + description: |- + (Block Set, Max: 1) Access point location (see below for nested schema) + Access point location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region type: string type: object type: array network: - description: network access point information + description: |- + (Block Set, Max: 1) network access point information (see below for nested schema) + network access point information items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned Network identifier type: string type: object type: array + peeringType: + description: |- + PRIVATE,MICROSOFT,PUBLIC, MANUAL + Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + type: string port: - description: Port access point information + description: |- + (Block Set, Max: 1) Port access point information (see below for nested schema) + Port access point information items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier type: string name: - description: Port name + description: |- + numeric 24 characters string which can include only hyphens and underscores + Port name type: string redundancy: - description: Redundancy Information + description: |- + (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + Redundancy Information items: properties: enabled: + description: (Boolean) type: boolean group: + description: (String) type: string priority: + description: (String) type: string type: object type: array + uuid: + description: |- + assigned connection identifier + Equinix-assigned Port identifier + type: string type: object type: array profile: - description: Service Profile + description: |- + (Block Set, Max: 1) Service Profile (see below for nested schema) + Service Profile items: properties: accessPointTypeConfigs: - description: Access point config information + description: |- + (List of Object) Access point config information (see below for nested schema) + Access point config information items: properties: type: + description: (String) Defines the connection + type like EVPL_VC, EPL_VC, IPWAN_VC, + IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, + EIA_VC, EC_VC type: string uuid: + description: assigned connection identifier type: string type: object type: array description: - description: User-provided service description + description: |- + provided connection description + User-provided service description type: string href: - description: Service Profile URI response attribute + description: |- + (String) Connection URI information + Service Profile URI response attribute type: string name: - description: Customer-assigned service profile - name + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned service profile name + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + type: string + uuid: + description: |- + assigned connection identifier + Equinix assigned service profile identifier type: string type: object type: array providerConnectionId: - description: Provider assigned Connection Id + description: |- + (String) Provider assigned Connection Id + Provider assigned Connection Id type: string router: - description: Cloud Router access point information - that replaces `gateway` + description: |- + (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + Cloud Router access point information that replaces `gateway` items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier type: string type: object type: array + sellerRegion: + description: |- + (String) Access point seller region + Access point seller region + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + type: string virtualDevice: - description: Virtual device + description: |- + (Block Set, Max: 1) Virtual device (see below for nested schema) + Virtual device items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned Virtual Device Name + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Virtual Device type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned Virtual Device identifier type: string type: object type: array type: object type: array + additionalInfo: + description: |- + (List of Map of String) Connection additional information + Connection side additional information + items: + properties: + key: + description: |- + (String) Additional information key + Additional information key + type: string + value: + description: |- + (String) Additional information value + Additional information value + type: string + type: object + type: array serviceToken: - description: For service token based connections, Service - tokens authorize users to access protected resources and - services. Resource owners can distribute the tokens to - trusted partners and vendors, allowing selected third - parties to work directly with Equinix network assets + description: |- + (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets items: properties: description: - description: Service token description + description: |- + provided connection description + Service token description type: string href: - description: An absolute URL that is the subject of - the link's context + description: |- + (String) Connection URI information + An absolute URL that is the subject of the link's context + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Token type - VC_TOKEN + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned service token identifier type: string type: object type: array type: object type: array account: - description: Customer account information that is associated with - this connection + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Customer account information that is associated with this connection items: properties: accountName: + description: (String) Legal name of the accountholder. type: string accountNumber: + description: assigned account number. type: number globalCustId: + description: assigned ID of the subscriber's parent organization. type: string globalOrgId: + description: assigned ID of the subscriber's parent organization. type: string globalOrganizationName: + description: assigned name of the subscriber's parent organization. type: string orgId: + description: assigned ID of the subscriber's organization. type: number organizationName: + description: assigned name of the subscriber's organization. type: string ucmId: + description: (String) Enterprise datastore id type: string type: object type: array + additionalInfo: + description: |- + (List of Map of String) Connection additional information + Connection additional information + items: + additionalProperties: + type: string + type: object + type: array + bandwidth: + description: |- + (Number) Connection bandwidth in Mbps + Connection bandwidth in Mbps + type: number changeLog: - description: Captures connection lifecycle change information + description: |- + (Set of Object) Captures connection lifecycle change information (see below for nested schema) + Captures connection lifecycle change information items: properties: createdBy: + description: (String) type: string createdByEmail: + description: (String) type: string createdByFullName: + description: (String) type: string createdDateTime: + description: (String) type: string deletedBy: + description: (String) type: string deletedByEmail: + description: (String) type: string deletedByFullName: + description: (String) type: string deletedDateTime: + description: (String) type: string updatedBy: + description: (String) type: string updatedByEmail: + description: (String) type: string updatedByFullName: + description: (String) type: string updatedDateTime: + description: (String) type: string type: object type: array + description: + description: |- + provided connection description + Customer-provided connection description + type: string direction: - description: Connection directionality from the requester point - of view + description: |- + (String) Connection directionality from the requester point of view + Connection directionality from the requester point of view type: string href: - description: Connection URI information + description: |- + (String) Connection URI information + Connection URI information type: string id: + description: (String) The ID of this resource. type: string isRemote: - description: Connection property derived from access point locations + description: |- + (Boolean) Connection property derived from access point locations + Connection property derived from access point locations type: boolean + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Connection name. An alpha-numeric 24 characters string which can include only hyphens and underscores + type: string + notifications: + description: |- + (Block List, Min: 1) Preferences for notifications on connection configuration or status changes (see below for nested schema) + Preferences for notifications on connection configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array operation: - description: Connection type-specific operational data + description: |- + specific operational data (see below for nested schema) + Connection type-specific operational data items: properties: equinixStatus: + description: (String) type: string errors: + description: (List of Object) (see below for nested schema) items: properties: additionalInfo: + description: (List of Map of String) Connection additional + information items: properties: property: + description: (String) type: string reason: + description: (String) type: string type: object type: array correlationId: + description: (String) type: string details: + description: (String) type: string errorCode: + description: (String) type: string errorMessage: + description: (String) type: string help: + description: (String) type: string type: object type: array providerStatus: + description: (String) + type: string + type: object + type: array + order: + description: |- + (Block Set, Min: 1, Max: 1) Order details (see below for nested schema) + Order details + items: + properties: + billingTier: + description: |- + (String) Billing tier for connection bandwidth + Billing tier for connection bandwidth + type: string + orderId: + description: |- + (String) Order Identification + Order Identification + type: string + orderNumber: + description: |- + (String) Order Reference Number + Order Reference Number + type: string + purchaseOrderNumber: + description: |- + (String) Purchase order number + Purchase order number type: string type: object type: array project: - description: Project information + description: |- + (Block Set, Max: 1) Project information (see below for nested schema) + Project information items: properties: href: - description: Unique Resource URL + description: |- + (String) Connection URI information + Unique Resource URL + type: string + projectId: + description: |- + (String) Project Id + Project Id + type: string + type: object + type: array + redundancy: + description: |- + (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + Connection Redundancy Configuration + items: + properties: + group: + description: |- + (String) + Redundancy group identifier (Use the redundancy.0.group UUID of primary connection; e.g. one(equinix_fabric_connection.primary_port_connection.redundancy).group or equinix_fabric_connection.primary_port_connection.redundancy.0.group) + type: string + priority: + description: |- + (String) + Connection priority in redundancy group - PRIMARY, SECONDARY type: string type: object type: array state: - description: Connection overall state + description: |- + (String) Connection overall state + Connection overall state + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, IA_VC, EC_VC type: string uuid: - description: Equinix-assigned connection identifier + description: |- + assigned connection identifier + Equinix-assigned connection identifier type: string zSide: - description: Destination or Provider side connection configuration - object of the multi-segment connection + description: |- + segment connection (see below for nested schema) + Destination or Provider side connection configuration object of the multi-segment connection items: properties: accessPoint: - description: Point of access details + description: |- + (Block Set, Max: 1) Point of access details (see below for nested schema) + Point of access details items: properties: account: - description: Account + description: |- + (Set of Object) Customer account information that is associated with this connection (see below for nested schema) + Account items: properties: accountName: - description: Legal name of the accountholder. + description: |- + (String) Legal name of the accountholder. + Legal name of the accountholder. type: string accountNumber: - description: Equinix-assigned account number. + description: |- + assigned account number. + Equinix-assigned account number. type: number globalCustId: - description: Equinix-assigned ID of the subscriber's - parent organization. + description: |- + assigned ID of the subscriber's parent organization. + Equinix-assigned ID of the subscriber's parent organization. type: string globalOrgId: - description: Equinix-assigned ID of the subscriber's - parent organization. + description: |- + assigned ID of the subscriber's parent organization. + Equinix-assigned ID of the subscriber's parent organization. type: string globalOrganizationName: - description: Equinix-assigned name of the subscriber's - parent organization. + description: |- + assigned name of the subscriber's parent organization. + Equinix-assigned name of the subscriber's parent organization. type: string orgId: - description: Equinix-assigned ID of the subscriber's - organization. + description: |- + assigned ID of the subscriber's organization. + Equinix-assigned ID of the subscriber's organization. type: number organizationName: - description: Equinix-assigned name of the subscriber's - organization. + description: |- + assigned name of the subscriber's organization. + Equinix-assigned name of the subscriber's organization. type: string ucmId: - description: Enterprise datastore id + description: |- + (String) Enterprise datastore id + Enterprise datastore id type: string type: object type: array + authenticationKey: + description: |- + (String) Authentication key for provider based connections + Authentication key for provider based connections + type: string gateway: - description: '**Deprecated** `gateway` Use `router` - attribute instead' + description: |- + (Block Set, Max: 1, Deprecated) Deprecated gateway Use router attribute instead (see below for nested schema) + **Deprecated** `gateway` Use `router` attribute instead items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier + type: string + type: object + type: array + interface: + description: |- + (Block Set, Max: 1) Virtual device interface (see below for nested schema) + Virtual device interface + items: + properties: + id: + description: |- + (String) The ID of this resource. + id + type: number + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Interface type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned interface identifier + type: string + type: object + type: array + linkProtocol: + description: |- + (Block Set, Max: 1) Connection link protocol (see below for nested schema) + Connection link protocol + items: + properties: + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Type of the link protocol - UNTAGGED, DOT1Q, QINQ, EVPN_VXLAN + type: string + vlanCTag: + description: |- + (Number) Vlan Customer Tag information, vlanCTag value specified for QINQ connections + Vlan Customer Tag information, vlanCTag value specified for QINQ connections + type: number + vlanSTag: + description: |- + (Number) Vlan Provider Tag information, vlanSTag value specified for QINQ connections + Vlan Provider Tag information, vlanSTag value specified for QINQ connections + type: number + vlanTag: + description: |- + (Number) Vlan Tag information, vlanTag value specified for DOT1Q connections + Vlan Tag information, vlanTag value specified for DOT1Q connections + type: number + type: object + type: array + location: + description: |- + (Block Set, Max: 1) Access point location (see below for nested schema) + Access point location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region type: string type: object type: array network: - description: network access point information + description: |- + (Block Set, Max: 1) network access point information (see below for nested schema) + network access point information items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned Network identifier type: string type: object type: array + peeringType: + description: |- + PRIVATE,MICROSOFT,PUBLIC, MANUAL + Peering Type- PRIVATE,MICROSOFT,PUBLIC, MANUAL + type: string port: - description: Port access point information + description: |- + (Block Set, Max: 1) Port access point information (see below for nested schema) + Port access point information items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier type: string name: - description: Port name + description: |- + numeric 24 characters string which can include only hyphens and underscores + Port name type: string redundancy: - description: Redundancy Information + description: |- + (Block Set, Max: 1) Connection Redundancy Configuration (see below for nested schema) + Redundancy Information items: properties: enabled: + description: (Boolean) type: boolean group: + description: (String) type: string priority: + description: (String) type: string type: object type: array + uuid: + description: |- + assigned connection identifier + Equinix-assigned Port identifier + type: string type: object type: array profile: - description: Service Profile + description: |- + (Block Set, Max: 1) Service Profile (see below for nested schema) + Service Profile items: properties: accessPointTypeConfigs: - description: Access point config information + description: |- + (List of Object) Access point config information (see below for nested schema) + Access point config information items: properties: type: + description: (String) Defines the connection + type like EVPL_VC, EPL_VC, IPWAN_VC, + IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, + EIA_VC, EC_VC type: string uuid: + description: assigned connection identifier type: string type: object type: array description: - description: User-provided service description + description: |- + provided connection description + User-provided service description type: string href: - description: Service Profile URI response attribute + description: |- + (String) Connection URI information + Service Profile URI response attribute type: string name: - description: Customer-assigned service profile - name + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned service profile name + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + type: string + uuid: + description: |- + assigned connection identifier + Equinix assigned service profile identifier type: string type: object type: array providerConnectionId: - description: Provider assigned Connection Id + description: |- + (String) Provider assigned Connection Id + Provider assigned Connection Id type: string router: - description: Cloud Router access point information - that replaces `gateway` + description: |- + (Block Set, Max: 1) Cloud Router access point information that replaces gateway (see below for nested schema) + Cloud Router access point information that replaces `gateway` items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned virtual gateway identifier type: string type: object type: array + sellerRegion: + description: |- + (String) Access point seller region + Access point seller region + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Access point type - COLO, VD, VG, SP, IGW, SUBNET, CLOUD_ROUTER, NETWORK + type: string virtualDevice: - description: Virtual device + description: |- + (Block Set, Max: 1) Virtual device (see below for nested schema) + Virtual device items: properties: href: - description: Unique Resource Identifier + description: |- + (String) Connection URI information + Unique Resource Identifier + type: string + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Customer-assigned Virtual Device Name + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Virtual Device type + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned Virtual Device identifier type: string type: object type: array type: object type: array + additionalInfo: + description: |- + (List of Map of String) Connection additional information + Connection side additional information + items: + properties: + key: + description: |- + (String) Additional information key + Additional information key + type: string + value: + description: |- + (String) Additional information value + Additional information value + type: string + type: object + type: array serviceToken: - description: For service token based connections, Service - tokens authorize users to access protected resources and - services. Resource owners can distribute the tokens to - trusted partners and vendors, allowing selected third - parties to work directly with Equinix network assets + description: |- + (Block Set, Max: 1) For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets (see below for nested schema) + For service token based connections, Service tokens authorize users to access protected resources and services. Resource owners can distribute the tokens to trusted partners and vendors, allowing selected third parties to work directly with Equinix network assets items: properties: description: - description: Service token description + description: |- + provided connection description + Service token description type: string href: - description: An absolute URL that is the subject of - the link's context + description: |- + (String) Connection URI information + An absolute URL that is the subject of the link's context + type: string + type: + description: |- + (String) Defines the connection type like EVPL_VC, EPL_VC, IPWAN_VC, IP_VC, ACCESS_EPL_VC, EVPLAN_VC, EPLAN_VC, EIA_VC, EC_VC + Token type - VC_TOKEN + type: string + uuid: + description: |- + assigned connection identifier + Equinix-assigned service token identifier type: string type: object type: array @@ -1146,14 +2564,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -1163,8 +2590,9 @@ spec: 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. + 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 @@ -1173,6 +2601,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/fabric.equinix.jet.crossplane.io_networks.yaml b/package/crds/fabric.equinix.jet.crossplane.io_networks.yaml index 31c042d..7b2ee4d 100644 --- a/package/crds/fabric.equinix.jet.crossplane.io_networks.yaml +++ b/package/crds/fabric.equinix.jet.crossplane.io_networks.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: networks.fabric.equinix.jet.crossplane.io spec: group: fabric.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -35,17 +34,23 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: Network is the Schema for the Networks API. + description: Network is the Schema for the Networks API. Fabric V4 API compatible + resource allows creation and management of Equinix Fabric Network 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' + 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' + 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 @@ -54,9 +59,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,115 +74,216 @@ spec: forProvider: properties: location: - description: Fabric Network location + description: |- + (Block Set, Max: 1) Fabric Network location (see below for nested schema) + Fabric Network location items: properties: ibx: - description: IBX Code + description: |- + (String) IBX Code + IBX Code type: string metroCode: - description: Access point metro code + description: |- + (String) Access point metro code + Access point metro code type: string metroName: - description: Access point metro name + description: |- + (String) Access point metro name + Access point metro name type: string region: - description: Access point region + description: |- + (String) Access point region + Access point region type: string type: object type: array name: - description: Fabric Network name. An alpha-numeric 24 characters - string which can include only hyphens and underscores + description: |- + numeric 24 characters string which can include only hyphens and underscores + Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores type: string notifications: - description: Preferences for notifications on Fabric Network configuration - or status changes + description: |- + (Block List, Min: 1) Preferences for notifications on Fabric Network configuration or status changes (see below for nested schema) + Preferences for notifications on Fabric Network configuration or status changes items: properties: emails: - description: Array of contact emails + description: |- + (List of String) Array of contact emails + Array of contact emails items: type: string type: array sendInterval: - description: Send interval + description: |- + (String) Send interval + Send interval type: string type: - description: Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, - NOTIFICATIONS + description: |- + EVPLAN, EPLAN, IPWAN + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS type: string - required: - - emails - - type type: object type: array project: - description: Fabric Network project + description: |- + (Block Set, Min: 1) Fabric Network project (see below for nested schema) + Fabric Network project items: properties: projectId: - description: Customer project identifier + description: |- + (String) Customer project identifier + Customer project identifier type: string - required: - - projectId type: object type: array scope: - description: Fabric Network scope + description: |- + (String) Fabric Network scope + Fabric Network scope type: string type: - description: Supported Network types - EVPLAN, EPLAN, IPWAN + description: |- + EVPLAN, EPLAN, IPWAN + Supported Network types - EVPLAN, EPLAN, IPWAN type: string - required: - - name - - notifications - - project - - scope - - type 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + location: + description: |- + (Block Set, Max: 1) Fabric Network location (see below for nested schema) + Fabric Network location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array name: - description: Name of the referenced object. + description: |- + numeric 24 characters string which can include only hyphens and underscores + Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores + type: string + notifications: + description: |- + (Block List, Min: 1) Preferences for notifications on Fabric Network configuration or status changes (see below for nested schema) + Preferences for notifications on Fabric Network configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + EVPLAN, EPLAN, IPWAN + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array + project: + description: |- + (Block Set, Min: 1) Fabric Network project (see below for nested schema) + Fabric Network project + items: + properties: + projectId: + description: |- + (String) Customer project identifier + Customer project identifier + type: string + type: object + type: array + scope: + description: |- + (String) Fabric Network scope + Fabric Network scope + type: string + type: + description: |- + EVPLAN, EPLAN, IPWAN + Supported Network types - EVPLAN, EPLAN, IPWAN type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -182,21 +293,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -206,17 +317,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -226,21 +339,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -255,21 +368,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -280,14 +394,15 @@ spec: - 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. + 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. @@ -302,76 +417,207 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.notifications is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.notifications) + || (has(self.initProvider) && has(self.initProvider.notifications))' + - message: spec.forProvider.project is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.project) + || (has(self.initProvider) && has(self.initProvider.project))' + - message: spec.forProvider.scope is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.scope) + || (has(self.initProvider) && has(self.initProvider.scope))' + - message: spec.forProvider.type is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.type) + || (has(self.initProvider) && has(self.initProvider.type))' status: description: NetworkStatus defines the observed state of Network. properties: atProvider: properties: change: - description: Information on asset change operation + description: |- + (Set of Object) Information on asset change operation (see below for nested schema) + Information on asset change operation items: properties: href: + description: (String) Fabric Network URI information type: string type: + description: EVPLAN, EPLAN, IPWAN type: string uuid: + description: assigned network identifier type: string type: object type: array changeLog: - description: A permanent record of asset creation, modification, - or deletion + description: |- + (Set of Object) A permanent record of asset creation, modification, or deletion (see below for nested schema) + A permanent record of asset creation, modification, or deletion items: properties: createdBy: + description: (String) type: string createdByEmail: + description: (String) type: string createdByFullName: + description: (String) type: string createdDateTime: + description: (String) type: string deletedBy: + description: (String) type: string deletedByEmail: + description: (String) type: string deletedByFullName: + description: (String) type: string deletedDateTime: + description: (String) type: string updatedBy: + description: (String) type: string updatedByEmail: + description: (String) type: string updatedByFullName: + description: (String) type: string updatedDateTime: + description: (String) type: string type: object type: array connectionsCount: - description: Number of connections associated with this network + description: |- + (Number) Number of connections associated with this network + Number of connections associated with this network type: number href: - description: Fabric Network URI information + description: |- + (String) Fabric Network URI information + Fabric Network URI information type: string id: + description: (String) The ID of this resource. + type: string + location: + description: |- + (Block Set, Max: 1) Fabric Network location (see below for nested schema) + Fabric Network location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + name: + description: |- + numeric 24 characters string which can include only hyphens and underscores + Fabric Network name. An alpha-numeric 24 characters string which can include only hyphens and underscores type: string + notifications: + description: |- + (Block List, Min: 1) Preferences for notifications on Fabric Network configuration or status changes (see below for nested schema) + Preferences for notifications on Fabric Network configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + EVPLAN, EPLAN, IPWAN + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array operation: - description: Network operation information that is associated - with this Fabric Network + description: |- + (Set of Object) Network operation information that is associated with this Fabric Network (see below for nested schema) + Network operation information that is associated with this Fabric Network items: properties: equinixStatus: + description: (String) + type: string + type: object + type: array + project: + description: |- + (Block Set, Min: 1) Fabric Network project (see below for nested schema) + Fabric Network project + items: + properties: + projectId: + description: |- + (String) Customer project identifier + Customer project identifier type: string type: object type: array + scope: + description: |- + (String) Fabric Network scope + Fabric Network scope + type: string state: - description: Fabric Network overall state + description: |- + (String) Fabric Network overall state + Fabric Network overall state + type: string + type: + description: |- + EVPLAN, EPLAN, IPWAN + Supported Network types - EVPLAN, EPLAN, IPWAN type: string uuid: - description: Equinix-assigned network identifier + description: |- + assigned network identifier + Equinix-assigned network identifier type: string type: object conditions: @@ -380,14 +626,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -397,8 +652,9 @@ spec: 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. + 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 @@ -407,6 +663,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/fabric.equinix.jet.crossplane.io_routingprotocols.yaml b/package/crds/fabric.equinix.jet.crossplane.io_routingprotocols.yaml index e709a8f..ee9c1d0 100644 --- a/package/crds/fabric.equinix.jet.crossplane.io_routingprotocols.yaml +++ b/package/crds/fabric.equinix.jet.crossplane.io_routingprotocols.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: routingprotocols.fabric.equinix.jet.crossplane.io spec: group: fabric.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -39,14 +38,19 @@ spec: value> 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' + 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' + 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 @@ -55,9 +59,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -75,8 +84,6 @@ spec: description: Interval range between the received BFD control packets type: string - required: - - enabled type: object type: array bgpAuthKey: @@ -92,8 +99,6 @@ spec: enabled: description: Admin status for the BGP session type: boolean - required: - - customerPeerIp type: object type: array bgpIpv6: @@ -106,8 +111,6 @@ spec: enabled: description: Admin status for the BGP session type: boolean - required: - - customerPeerIp type: object type: array connectionUuid: @@ -126,8 +129,6 @@ spec: equinixIfaceIp: description: Equinix side Interface IP address type: string - required: - - equinixIfaceIp type: object type: array directIpv6: @@ -149,51 +150,132 @@ spec: uuid: description: Equinix-assigned routing protocol identifier type: string - required: - - connectionUuid 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + bfd: + description: Bidirectional Forwarding Detection + items: + properties: + enabled: + description: Bidirectional Forwarding Detection enablement + type: boolean + interval: + description: Interval range between the received BFD control + packets + type: string + type: object + type: array + bgpAuthKey: + description: BGP authorization key + type: string + bgpIpv4: + description: Routing Protocol BGP IPv4 + items: + properties: + customerPeerIp: + description: Customer side peering ip + type: string + enabled: + description: Admin status for the BGP session + type: boolean + type: object + type: array + bgpIpv6: + description: Routing Protocol BGP IPv6 + items: + properties: + customerPeerIp: + description: Customer side peering ip + type: string + enabled: + description: Admin status for the BGP session + type: boolean + type: object + type: array + connectionUuid: + description: Connection URI associated with Routing Protocol + type: string + customerAsn: + description: Customer-provided ASN + type: number + description: + description: Customer-provided Fabric Routing Protocol description + type: string + directIpv4: + description: Routing Protocol Direct IPv4 + items: + properties: + equinixIfaceIp: + description: Equinix side Interface IP address + type: string + type: object + type: array + directIpv6: + description: Routing Protocol Direct IPv6 + items: + properties: + equinixIfaceIp: + description: Equinix side Interface IP address + type: string + type: object + type: array name: - description: Name of the referenced object. + description: Routing Protocol name. An alpha-numeric 24 characters + string which can include only hyphens and underscores + type: string + type: + description: Defines the routing protocol type like BGP or DIRECT + type: string + uuid: + description: Equinix-assigned routing protocol identifier type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -203,21 +285,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -227,17 +309,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -247,21 +331,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -276,21 +360,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -301,14 +386,15 @@ spec: - 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. + 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. @@ -323,15 +409,42 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.connectionUuid is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.connectionUuid) + || (has(self.initProvider) && has(self.initProvider.connectionUuid))' status: description: RoutingProtocolStatus defines the observed state of RoutingProtocol. properties: atProvider: properties: + bfd: + description: Bidirectional Forwarding Detection + items: + properties: + enabled: + description: Bidirectional Forwarding Detection enablement + type: boolean + interval: + description: Interval range between the received BFD control + packets + type: string + type: object + type: array + bgpAuthKey: + description: BGP authorization key + type: string bgpIpv4: description: Routing Protocol BGP IPv4 items: properties: + customerPeerIp: + description: Customer side peering ip + type: string + enabled: + description: Admin status for the BGP session + type: boolean equinixPeerIp: description: Equinix side peering ip type: string @@ -341,6 +454,12 @@ spec: description: Routing Protocol BGP IPv6 items: properties: + customerPeerIp: + description: Customer side peering ip + type: string + enabled: + description: Admin status for the BGP session + type: boolean equinixPeerIp: description: Equinix side peering ip type: string @@ -388,6 +507,33 @@ spec: type: string type: object type: array + connectionUuid: + description: Connection URI associated with Routing Protocol + type: string + customerAsn: + description: Customer-provided ASN + type: number + description: + description: Customer-provided Fabric Routing Protocol description + type: string + directIpv4: + description: Routing Protocol Direct IPv4 + items: + properties: + equinixIfaceIp: + description: Equinix side Interface IP address + type: string + type: object + type: array + directIpv6: + description: Routing Protocol Direct IPv6 + items: + properties: + equinixIfaceIp: + description: Equinix side Interface IP address + type: string + type: object + type: array equinixAsn: description: Equinix ASN type: number @@ -396,6 +542,10 @@ spec: type: string id: type: string + name: + description: Routing Protocol name. An alpha-numeric 24 characters + string which can include only hyphens and underscores + type: string operation: description: Routing Protocol type-specific operational data items: @@ -429,6 +579,12 @@ spec: state: description: Routing Protocol overall state type: string + type: + description: Defines the routing protocol type like BGP or DIRECT + type: string + uuid: + description: Equinix-assigned routing protocol identifier + type: string type: object conditions: description: Conditions of the resource. @@ -436,14 +592,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -453,8 +618,9 @@ spec: 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. + 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 @@ -463,6 +629,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/fabric.equinix.jet.crossplane.io_serviceprofiles.yaml b/package/crds/fabric.equinix.jet.crossplane.io_serviceprofiles.yaml index 34dad7b..90871ca 100644 --- a/package/crds/fabric.equinix.jet.crossplane.io_serviceprofiles.yaml +++ b/package/crds/fabric.equinix.jet.crossplane.io_serviceprofiles.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: serviceprofiles.fabric.equinix.jet.crossplane.io spec: group: fabric.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -35,18 +34,24 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: ServiceProfile is the Schema for the ServiceProfiles API. + description: ServiceProfile is the Schema for the ServiceProfiles API. Fabric + V4 API compatible resource allows creation and management of Equinix Fabric + Service Profile 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' + 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' + 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 @@ -55,9 +60,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -65,410 +75,996 @@ spec: forProvider: properties: accessPointTypeConfigs: - description: Access point config information + description: |- + (Block List) Access point config information (see below for nested schema) + Access point config information items: properties: allowBandwidthAutoApproval: - description: Setting to enable or disable the ability of - the buyer to change connection bandwidth without approval - of the seller + description: |- + (Boolean) Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller type: boolean allowBandwidthUpgrade: - description: Availability of a bandwidth upgrade. The default - is false + description: |- + (Boolean) Availability of a bandwidth upgrade. The default is false + Availability of a bandwidth upgrade. The default is false type: boolean allowCustomBandwidth: - description: Setting to enable or disable the ability of - the buyer to customize the bandwidth + description: |- + (Boolean) Setting to enable or disable the ability of the buyer to customize the bandwidth + Setting to enable or disable the ability of the buyer to customize the bandwidth type: boolean allowRemoteConnections: - description: Setting to allow or prohibit remote connections - to the service profile + description: |- + (Boolean) Setting to allow or prohibit remote connections to the service profile + Setting to allow or prohibit remote connections to the service profile type: boolean apiConfig: - description: Api configuration details + description: |- + (Block Set, Max: 1) Api configuration details (see below for nested schema) + Api configuration details items: properties: allowOverSubscription: - description: Setting showing that oversubscription - support is available (true) or not (false). The - default is false + description: |- + (Boolean) Setting showing that oversubscription support is available (true) or not (false). The default is false + Setting showing that oversubscription support is available (true) or not (false). The default is false type: boolean apiAvailable: - description: Indicates if it's possible to establish - connections based on the given service profile using - the Equinix Fabric API. + description: |- + (Boolean) Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. type: boolean bandwidthFromApi: - description: Indicates if the connection bandwidth - can be obtained directly from the cloud service - provider. + description: |- + (Boolean) Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + Indicates if the connection bandwidth can be obtained directly from the cloud service provider. type: boolean equinixManagedPort: - description: Setting indicating that the port is managed - by Equinix (true) or not (false) + description: |- + (Boolean) Setting indicating that the port is managed by Equinix (true) or not (false) + Setting indicating that the port is managed by Equinix (true) or not (false) type: boolean equinixManagedVlan: - description: Setting indicating that the VLAN is managed - by Equinix (true) or not (false) + description: |- + (Boolean) Setting indicating that the VLAN is managed by Equinix (true) or not (false) + Setting indicating that the VLAN is managed by Equinix (true) or not (false) type: boolean integrationId: - description: A unique identifier issued during onboarding - and used to integrate the customer's service profile - with the Equinix Fabric API. + description: |- + (String) A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. type: string overSubscriptionLimit: - description: Port bandwidth multiplier that determines - the total bandwidth that can be allocated to users - creating connections to your services. For example, - a 10 Gbps port combined with an overSubscriptionLimit - parameter value of 10 allows your subscribers to - create connections with a total bandwidth of 100 - Gbps. + description: |- + (Number) Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. type: number type: object type: array authenticationKey: - description: Authentication key details + description: |- + (Block Set, Max: 1) Authentication key details (see below for nested schema) + Authentication key details items: properties: description: - description: Description of authorization key + description: |- + provided service description + Description of authorization key type: string label: - description: Name of the parameter that must be provided - to authorize the connection. + description: |- + (String) Name of the parameter that must be provided to authorize the connection. + Name of the parameter that must be provided to authorize the connection. type: string required: - description: Requirement to configure an authentication - key. + description: |- + (Boolean) Requirement to configure an authentication key. + Requirement to configure an authentication key. type: boolean type: object type: array bandwidthAlertThreshold: - description: Percentage of port bandwidth at which an allocation - alert is generated + description: |- + (Number) Percentage of port bandwidth at which an allocation alert is generated + Percentage of port bandwidth at which an allocation alert is generated type: number connectionLabel: - description: Custom name for Connection + description: |- + (String) Custom name for Connection + Custom name for Connection type: string connectionRedundancyRequired: - description: Mandate redundant connections + description: |- + (Boolean) Mandate redundant connections + Mandate redundant connections type: boolean enableAutoGenerateServiceKey: - description: Enable auto generate service key + description: |- + (Boolean) Enable auto generate service key + Enable auto generate service key type: boolean linkProtocolConfig: - description: Link protocol configuration details + description: |- + (Block Set, Max: 1) Link protocol configuration details (see below for nested schema) + Link protocol configuration details items: properties: encapsulation: - description: Data frames encapsulation standard.UNTAGGED - - Untagged encapsulation for EPL connections. DOT1Q - - DOT1Q encapsulation standard. QINQ - QINQ encapsulation - standard. + description: |- + Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. type: string encapsulationStrategy: - description: Additional tagging information required - by the seller profile. + description: |- + (String) Additional tagging information required by the seller profile. + Additional tagging information required by the seller profile. type: string reuseVlanSTag: - description: Automatically accept subsequent DOT1Q - to QINQ connections that use the same authentication - key. These connections will have the same VLAN S-tag - assigned as the initial connection. + description: |- + tag assigned as the initial connection. + Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. type: boolean type: object type: array supportedBandwidths: - description: Supported bandwidths + description: |- + (List of Number) Supported bandwidths + Supported bandwidths items: type: number type: array type: - description: Type of access point type config - VD, COLO + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Type of access point type config - VD, COLO type: string - required: - - type type: object type: array allowedEmails: - description: Array of contact emails + description: |- + (List of String) Array of contact emails + Array of contact emails items: type: string type: array customFields: - description: Custom Fields + description: |- + (Block List) Custom Fields (see below for nested schema) + Custom Fields items: properties: captureInEmail: - description: Required field + description: |- + (Boolean) Required field + Required field type: boolean dataType: - description: Data type + description: |- + (String) Data type + Data type type: string description: - description: Description + description: |- + provided service description + Description type: string label: - description: Label + description: |- + (String) Name of the parameter that must be provided to authorize the connection. + Label type: string options: - description: Options + description: |- + (List of String) Options + Options items: type: string type: array required: - description: Required field + description: |- + (Boolean) Requirement to configure an authentication key. + Required field type: boolean - required: - - dataType - - label - - required type: object type: array description: - description: User-provided service description + description: |- + provided service description + User-provided service description type: string marketingInfo: - description: Marketing Info + description: |- + (Block Set, Max: 1) Marketing Info (see below for nested schema) + Marketing Info items: properties: logo: - description: Logo + description: |- + (String) Logo + Logo type: string processStep: - description: Process Step + description: |- + (Block List) Process Step (see below for nested schema) + Process Step items: properties: description: - description: Description + description: |- + provided service description + Description type: string subTitle: - description: Sub Title + description: |- + (String) Sub Title + Sub Title type: string title: - description: Title + description: |- + (String) Title + Title type: string type: object type: array promotion: - description: Promotion + description: |- + (Boolean) Promotion + Promotion type: boolean type: object type: array metros: - description: Access point config information + description: |- + (Block List) Access point config information (see below for nested schema) + Access point config information items: properties: code: - description: Metro Code - Example SV + description: |- + Example SV + Metro Code - Example SV type: string displayName: - description: Display Name + description: |- + (String) Display Name + Display Name type: string ibxs: - description: IBX- Equinix International Business Exchange - list + description: |- + Equinix International Business Exchange list + IBX- Equinix International Business Exchange list items: type: string type: array inTrail: - description: In Trail + description: |- + (Boolean) In Trail + In Trail type: boolean name: - description: Metro Name + description: |- + assigned service profile name + Metro Name type: string sellerRegions: additionalProperties: type: string - description: Seller Regions + description: |- + (Map of String) Seller Regions + Seller Regions type: object + x-kubernetes-map-type: granular type: object type: array name: - description: Customer-assigned service profile name + description: |- + assigned service profile name + Customer-assigned service profile name type: string notifications: - description: Preferences for notifications on connection configuration - or status changes + description: |- + (Block List) Preferences for notifications on connection configuration or status changes (see below for nested schema) + Preferences for notifications on connection configuration or status changes items: properties: emails: - description: Array of contact emails + description: |- + (List of String) Array of contact emails + Array of contact emails items: type: string type: array sendInterval: - description: Send interval + description: |- + (String) Send interval + Send interval type: string type: - description: Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, - NOTIFICATIONS + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS type: string - required: - - emails - - type type: object type: array ports: - description: Ports + description: |- + (Block List) Ports (see below for nested schema) + Ports items: properties: crossConnectId: - description: Cross Connect Id + description: |- + (String) Cross Connect Id + Cross Connect Id type: string location: - description: Colo/Port Location + description: |- + (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + Colo/Port Location items: properties: ibx: - description: IBX Code + description: |- + (String) IBX Code + IBX Code type: string metroCode: - description: Access point metro code + description: |- + (String) Access point metro code + Access point metro code type: string metroName: - description: Access point metro name + description: |- + (String) Access point metro name + Access point metro name type: string region: - description: Access point region + description: |- + (String) Access point region + Access point region type: string type: object type: array sellerRegion: - description: Seller Region + description: |- + (String) Seller Region + Seller Region type: string sellerRegionDescription: - description: Seller Region details + description: |- + (String) Seller Region details + Seller Region details type: string type: - description: Colo/Port Type + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Colo/Port Type type: string uuid: - description: Colo/Port Uuid + description: |- + (String) Equinix assigned service profile identifier + Colo/Port Uuid type: string - required: - - type - - uuid type: object type: array project: - description: Project information + description: |- + (Block Set, Max: 1) Project information (see below for nested schema) + Project information items: properties: projectId: - description: Project Id + description: |- + (String) Project Id + Project Id type: string type: object type: array selfProfile: - description: Self Profile indicating if the profile is created - for customer's self use + description: |- + (Boolean) Self Profile indicating if the profile is created for customer's self use + Self Profile indicating if the profile is created for customer's self use type: boolean state: - description: Service profile state - ACTIVE, PENDING_APPROVAL, - DELETED, REJECTED + description: |- + ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED type: string tags: - description: Tags attached to the connection + description: |- + (List of String) Tags attached to the connection + Tags attached to the connection items: type: string type: array type: - description: Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, - ECMC_PROFILE, IA_PROFILE + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE type: string viewPoint: description: 'Flips view between buyer and seller representation. Available values : aSide, zSide. Default value : aSide' type: string virtualDevices: - description: Virtual Devices + description: |- + (Block List) Virtual Devices (see below for nested schema) + Virtual Devices items: properties: interfaceUuid: - description: Device Interface Uuid + description: |- + (String) Device Interface Uuid + Device Interface Uuid type: string location: - description: Device Location + description: |- + (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + Device Location items: properties: ibx: - description: IBX Code + description: |- + (String) IBX Code + IBX Code type: string metroCode: - description: Access point metro code + description: |- + (String) Access point metro code + Access point metro code type: string metroName: - description: Access point metro name + description: |- + (String) Access point metro name + Access point metro name type: string region: - description: Access point region + description: |- + (String) Access point region + Access point region type: string type: object type: array type: - description: Virtual Device Type + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Virtual Device Type type: string uuid: - description: Virtual Device Uuid + description: |- + (String) Equinix assigned service profile identifier + Virtual Device Uuid type: string - required: - - type - - uuid type: object type: array visibility: - description: Service profile visibility - PUBLIC, PRIVATE + description: |- + PUBLIC, PRIVATE + Service profile visibility - PUBLIC, PRIVATE type: string - required: - - description - - name - - type 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + accessPointTypeConfigs: + description: |- + (Block List) Access point config information (see below for nested schema) + Access point config information + items: + properties: + allowBandwidthAutoApproval: + description: |- + (Boolean) Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + type: boolean + allowBandwidthUpgrade: + description: |- + (Boolean) Availability of a bandwidth upgrade. The default is false + Availability of a bandwidth upgrade. The default is false + type: boolean + allowCustomBandwidth: + description: |- + (Boolean) Setting to enable or disable the ability of the buyer to customize the bandwidth + Setting to enable or disable the ability of the buyer to customize the bandwidth + type: boolean + allowRemoteConnections: + description: |- + (Boolean) Setting to allow or prohibit remote connections to the service profile + Setting to allow or prohibit remote connections to the service profile + type: boolean + apiConfig: + description: |- + (Block Set, Max: 1) Api configuration details (see below for nested schema) + Api configuration details + items: + properties: + allowOverSubscription: + description: |- + (Boolean) Setting showing that oversubscription support is available (true) or not (false). The default is false + Setting showing that oversubscription support is available (true) or not (false). The default is false + type: boolean + apiAvailable: + description: |- + (Boolean) Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + type: boolean + bandwidthFromApi: + description: |- + (Boolean) Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + type: boolean + equinixManagedPort: + description: |- + (Boolean) Setting indicating that the port is managed by Equinix (true) or not (false) + Setting indicating that the port is managed by Equinix (true) or not (false) + type: boolean + equinixManagedVlan: + description: |- + (Boolean) Setting indicating that the VLAN is managed by Equinix (true) or not (false) + Setting indicating that the VLAN is managed by Equinix (true) or not (false) + type: boolean + integrationId: + description: |- + (String) A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + type: string + overSubscriptionLimit: + description: |- + (Number) Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + type: number + type: object + type: array + authenticationKey: + description: |- + (Block Set, Max: 1) Authentication key details (see below for nested schema) + Authentication key details + items: + properties: + description: + description: |- + provided service description + Description of authorization key + type: string + label: + description: |- + (String) Name of the parameter that must be provided to authorize the connection. + Name of the parameter that must be provided to authorize the connection. + type: string + required: + description: |- + (Boolean) Requirement to configure an authentication key. + Requirement to configure an authentication key. + type: boolean + type: object + type: array + bandwidthAlertThreshold: + description: |- + (Number) Percentage of port bandwidth at which an allocation alert is generated + Percentage of port bandwidth at which an allocation alert is generated + type: number + connectionLabel: + description: |- + (String) Custom name for Connection + Custom name for Connection + type: string + connectionRedundancyRequired: + description: |- + (Boolean) Mandate redundant connections + Mandate redundant connections + type: boolean + enableAutoGenerateServiceKey: + description: |- + (Boolean) Enable auto generate service key + Enable auto generate service key + type: boolean + linkProtocolConfig: + description: |- + (Block Set, Max: 1) Link protocol configuration details (see below for nested schema) + Link protocol configuration details + items: + properties: + encapsulation: + description: |- + Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + type: string + encapsulationStrategy: + description: |- + (String) Additional tagging information required by the seller profile. + Additional tagging information required by the seller profile. + type: string + reuseVlanSTag: + description: |- + tag assigned as the initial connection. + Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. + type: boolean + type: object + type: array + supportedBandwidths: + description: |- + (List of Number) Supported bandwidths + Supported bandwidths + items: + type: number + type: array + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Type of access point type config - VD, COLO + type: string + type: object + type: array + allowedEmails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + customFields: + description: |- + (Block List) Custom Fields (see below for nested schema) + Custom Fields + items: + properties: + captureInEmail: + description: |- + (Boolean) Required field + Required field + type: boolean + dataType: + description: |- + (String) Data type + Data type + type: string + description: + description: |- + provided service description + Description + type: string + label: + description: |- + (String) Name of the parameter that must be provided to authorize the connection. + Label + type: string + options: + description: |- + (List of String) Options + Options + items: + type: string + type: array + required: + description: |- + (Boolean) Requirement to configure an authentication key. + Required field + type: boolean + type: object + type: array + description: + description: |- + provided service description + User-provided service description + type: string + marketingInfo: + description: |- + (Block Set, Max: 1) Marketing Info (see below for nested schema) + Marketing Info + items: + properties: + logo: + description: |- + (String) Logo + Logo + type: string + processStep: + description: |- + (Block List) Process Step (see below for nested schema) + Process Step + items: + properties: + description: + description: |- + provided service description + Description + type: string + subTitle: + description: |- + (String) Sub Title + Sub Title + type: string + title: + description: |- + (String) Title + Title + type: string + type: object + type: array + promotion: + description: |- + (Boolean) Promotion + Promotion + type: boolean + type: object + type: array + metros: + description: |- + (Block List) Access point config information (see below for nested schema) + Access point config information + items: + properties: + code: + description: |- + Example SV + Metro Code - Example SV + type: string + displayName: + description: |- + (String) Display Name + Display Name + type: string + ibxs: + description: |- + Equinix International Business Exchange list + IBX- Equinix International Business Exchange list + items: + type: string + type: array + inTrail: + description: |- + (Boolean) In Trail + In Trail + type: boolean + name: + description: |- + assigned service profile name + Metro Name + type: string + sellerRegions: + additionalProperties: + type: string + description: |- + (Map of String) Seller Regions + Seller Regions + type: object + x-kubernetes-map-type: granular + type: object + type: array name: - description: Name of the referenced object. + description: |- + assigned service profile name + Customer-assigned service profile name + type: string + notifications: + description: |- + (Block List) Preferences for notifications on connection configuration or status changes (see below for nested schema) + Preferences for notifications on connection configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array + ports: + description: |- + (Block List) Ports (see below for nested schema) + Ports + items: + properties: + crossConnectId: + description: |- + (String) Cross Connect Id + Cross Connect Id + type: string + location: + description: |- + (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + Colo/Port Location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + sellerRegion: + description: |- + (String) Seller Region + Seller Region + type: string + sellerRegionDescription: + description: |- + (String) Seller Region details + Seller Region details + type: string + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Colo/Port Type + type: string + uuid: + description: |- + (String) Equinix assigned service profile identifier + Colo/Port Uuid + type: string + type: object + type: array + project: + description: |- + (Block Set, Max: 1) Project information (see below for nested schema) + Project information + items: + properties: + projectId: + description: |- + (String) Project Id + Project Id + type: string + type: object + type: array + selfProfile: + description: |- + (Boolean) Self Profile indicating if the profile is created for customer's self use + Self Profile indicating if the profile is created for customer's self use + type: boolean + state: + description: |- + ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + type: string + tags: + description: |- + (List of String) Tags attached to the connection + Tags attached to the connection + items: + type: string + type: array + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + type: string + viewPoint: + description: 'Flips view between buyer and seller representation. + Available values : aSide, zSide. Default value : aSide' + type: string + virtualDevices: + description: |- + (Block List) Virtual Devices (see below for nested schema) + Virtual Devices + items: + properties: + interfaceUuid: + description: |- + (String) Device Interface Uuid + Device Interface Uuid + type: string + location: + description: |- + (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + Device Location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Virtual Device Type + type: string + uuid: + description: |- + (String) Equinix assigned service profile identifier + Virtual Device Uuid + type: string + type: object + type: array + visibility: + description: |- + PUBLIC, PRIVATE + Service profile visibility - PUBLIC, PRIVATE type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -478,21 +1074,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -502,17 +1098,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -522,21 +1120,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -551,21 +1149,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -576,14 +1175,15 @@ spec: - 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. + 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. @@ -598,88 +1198,593 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.description is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.description) + || (has(self.initProvider) && has(self.initProvider.description))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.type is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.type) + || (has(self.initProvider) && has(self.initProvider.type))' status: description: ServiceProfileStatus defines the observed state of ServiceProfile. properties: atProvider: properties: accessPointTypeConfigs: - description: Access point config information + description: |- + (Block List) Access point config information (see below for nested schema) + Access point config information items: properties: + allowBandwidthAutoApproval: + description: |- + (Boolean) Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + Setting to enable or disable the ability of the buyer to change connection bandwidth without approval of the seller + type: boolean + allowBandwidthUpgrade: + description: |- + (Boolean) Availability of a bandwidth upgrade. The default is false + Availability of a bandwidth upgrade. The default is false + type: boolean + allowCustomBandwidth: + description: |- + (Boolean) Setting to enable or disable the ability of the buyer to customize the bandwidth + Setting to enable or disable the ability of the buyer to customize the bandwidth + type: boolean + allowRemoteConnections: + description: |- + (Boolean) Setting to allow or prohibit remote connections to the service profile + Setting to allow or prohibit remote connections to the service profile + type: boolean + apiConfig: + description: |- + (Block Set, Max: 1) Api configuration details (see below for nested schema) + Api configuration details + items: + properties: + allowOverSubscription: + description: |- + (Boolean) Setting showing that oversubscription support is available (true) or not (false). The default is false + Setting showing that oversubscription support is available (true) or not (false). The default is false + type: boolean + apiAvailable: + description: |- + (Boolean) Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + Indicates if it's possible to establish connections based on the given service profile using the Equinix Fabric API. + type: boolean + bandwidthFromApi: + description: |- + (Boolean) Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + Indicates if the connection bandwidth can be obtained directly from the cloud service provider. + type: boolean + equinixManagedPort: + description: |- + (Boolean) Setting indicating that the port is managed by Equinix (true) or not (false) + Setting indicating that the port is managed by Equinix (true) or not (false) + type: boolean + equinixManagedVlan: + description: |- + (Boolean) Setting indicating that the VLAN is managed by Equinix (true) or not (false) + Setting indicating that the VLAN is managed by Equinix (true) or not (false) + type: boolean + integrationId: + description: |- + (String) A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + A unique identifier issued during onboarding and used to integrate the customer's service profile with the Equinix Fabric API. + type: string + overSubscriptionLimit: + description: |- + (Number) Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + Port bandwidth multiplier that determines the total bandwidth that can be allocated to users creating connections to your services. For example, a 10 Gbps port combined with an overSubscriptionLimit parameter value of 10 allows your subscribers to create connections with a total bandwidth of 100 Gbps. + type: number + type: object + type: array + authenticationKey: + description: |- + (Block Set, Max: 1) Authentication key details (see below for nested schema) + Authentication key details + items: + properties: + description: + description: |- + provided service description + Description of authorization key + type: string + label: + description: |- + (String) Name of the parameter that must be provided to authorize the connection. + Name of the parameter that must be provided to authorize the connection. + type: string + required: + description: |- + (Boolean) Requirement to configure an authentication key. + Requirement to configure an authentication key. + type: boolean + type: object + type: array + bandwidthAlertThreshold: + description: |- + (Number) Percentage of port bandwidth at which an allocation alert is generated + Percentage of port bandwidth at which an allocation alert is generated + type: number + connectionLabel: + description: |- + (String) Custom name for Connection + Custom name for Connection + type: string + connectionRedundancyRequired: + description: |- + (Boolean) Mandate redundant connections + Mandate redundant connections + type: boolean + enableAutoGenerateServiceKey: + description: |- + (Boolean) Enable auto generate service key + Enable auto generate service key + type: boolean + linkProtocolConfig: + description: |- + (Block Set, Max: 1) Link protocol configuration details (see below for nested schema) + Link protocol configuration details + items: + properties: + encapsulation: + description: |- + Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + Data frames encapsulation standard.UNTAGGED - Untagged encapsulation for EPL connections. DOT1Q - DOT1Q encapsulation standard. QINQ - QINQ encapsulation standard. + type: string + encapsulationStrategy: + description: |- + (String) Additional tagging information required by the seller profile. + Additional tagging information required by the seller profile. + type: string + reuseVlanSTag: + description: |- + tag assigned as the initial connection. + Automatically accept subsequent DOT1Q to QINQ connections that use the same authentication key. These connections will have the same VLAN S-tag assigned as the initial connection. + type: boolean + type: object + type: array + supportedBandwidths: + description: |- + (List of Number) Supported bandwidths + Supported bandwidths + items: + type: number + type: array + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Type of access point type config - VD, COLO + type: string uuid: - description: Colo/Port Uuid + description: |- + (String) Equinix assigned service profile identifier + Colo/Port Uuid type: string type: object type: array account: - description: Service Profile Owner Account Information + description: |- + (Set of Object) Service Profile Owner Account Information (see below for nested schema) + Service Profile Owner Account Information items: properties: accountName: + description: (String) type: string accountNumber: + description: (Number) type: number globalCustId: + description: (String) type: string globalOrgId: + description: (String) type: string globalOrganizationName: + description: (String) type: string orgId: + description: (Number) type: number organizationName: + description: (String) type: string ucmId: + description: (String) type: string type: object type: array + allowedEmails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array changeLog: - description: Captures connection lifecycle change information + description: |- + (Set of Object) Captures connection lifecycle change information (see below for nested schema) + Captures connection lifecycle change information items: properties: createdBy: + description: (String) type: string createdByEmail: + description: (String) type: string createdByFullName: + description: (String) type: string createdDateTime: + description: (String) type: string deletedBy: + description: (String) type: string deletedByEmail: + description: (String) type: string deletedByFullName: + description: (String) type: string deletedDateTime: + description: (String) type: string updatedBy: + description: (String) type: string updatedByEmail: + description: (String) type: string updatedByFullName: + description: (String) type: string updatedDateTime: + description: (String) type: string type: object type: array + customFields: + description: |- + (Block List) Custom Fields (see below for nested schema) + Custom Fields + items: + properties: + captureInEmail: + description: |- + (Boolean) Required field + Required field + type: boolean + dataType: + description: |- + (String) Data type + Data type + type: string + description: + description: |- + provided service description + Description + type: string + label: + description: |- + (String) Name of the parameter that must be provided to authorize the connection. + Label + type: string + options: + description: |- + (List of String) Options + Options + items: + type: string + type: array + required: + description: |- + (Boolean) Requirement to configure an authentication key. + Required field + type: boolean + type: object + type: array + description: + description: |- + provided service description + User-provided service description + type: string href: - description: Service Profile URI response attribute + description: |- + (String) Service Profile URI response attribute + Service Profile URI response attribute type: string id: + description: (String) The ID of this resource. + type: string + marketingInfo: + description: |- + (Block Set, Max: 1) Marketing Info (see below for nested schema) + Marketing Info + items: + properties: + logo: + description: |- + (String) Logo + Logo + type: string + processStep: + description: |- + (Block List) Process Step (see below for nested schema) + Process Step + items: + properties: + description: + description: |- + provided service description + Description + type: string + subTitle: + description: |- + (String) Sub Title + Sub Title + type: string + title: + description: |- + (String) Title + Title + type: string + type: object + type: array + promotion: + description: |- + (Boolean) Promotion + Promotion + type: boolean + type: object + type: array + metros: + description: |- + (Block List) Access point config information (see below for nested schema) + Access point config information + items: + properties: + code: + description: |- + Example SV + Metro Code - Example SV + type: string + displayName: + description: |- + (String) Display Name + Display Name + type: string + ibxs: + description: |- + Equinix International Business Exchange list + IBX- Equinix International Business Exchange list + items: + type: string + type: array + inTrail: + description: |- + (Boolean) In Trail + In Trail + type: boolean + name: + description: |- + assigned service profile name + Metro Name + type: string + sellerRegions: + additionalProperties: + type: string + description: |- + (Map of String) Seller Regions + Seller Regions + type: object + x-kubernetes-map-type: granular + type: object + type: array + name: + description: |- + assigned service profile name + Customer-assigned service profile name type: string + notifications: + description: |- + (Block List) Preferences for notifications on connection configuration or status changes (see below for nested schema) + Preferences for notifications on connection configuration or status changes + items: + properties: + emails: + description: |- + (List of String) Array of contact emails + Array of contact emails + items: + type: string + type: array + sendInterval: + description: |- + (String) Send interval + Send interval + type: string + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Notification Type - ALL,CONNECTION_APPROVAL,SALES_REP_NOTIFICATIONS, NOTIFICATIONS + type: string + type: object + type: array + ports: + description: |- + (Block List) Ports (see below for nested schema) + Ports + items: + properties: + crossConnectId: + description: |- + (String) Cross Connect Id + Cross Connect Id + type: string + location: + description: |- + (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + Colo/Port Location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + sellerRegion: + description: |- + (String) Seller Region + Seller Region + type: string + sellerRegionDescription: + description: |- + (String) Seller Region details + Seller Region details + type: string + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Colo/Port Type + type: string + uuid: + description: |- + (String) Equinix assigned service profile identifier + Colo/Port Uuid + type: string + type: object + type: array project: - description: Project information + description: |- + (Block Set, Max: 1) Project information (see below for nested schema) + Project information items: properties: href: - description: Unique Resource URL + description: |- + (String) Service Profile URI response attribute + Unique Resource URL + type: string + projectId: + description: |- + (String) Project Id + Project Id type: string type: object type: array + selfProfile: + description: |- + (Boolean) Self Profile indicating if the profile is created for customer's self use + Self Profile indicating if the profile is created for customer's self use + type: boolean + state: + description: |- + ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + Service profile state - ACTIVE, PENDING_APPROVAL, DELETED, REJECTED + type: string + tags: + description: |- + (List of String) Tags attached to the connection + Tags attached to the connection + items: + type: string + type: array + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Service profile type - L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE, IA_PROFILE + type: string uuid: - description: Equinix assigned service profile identifier + description: |- + (String) Equinix assigned service profile identifier + Equinix assigned service profile identifier + type: string + viewPoint: + description: 'Flips view between buyer and seller representation. + Available values : aSide, zSide. Default value : aSide' + type: string + virtualDevices: + description: |- + (Block List) Virtual Devices (see below for nested schema) + Virtual Devices + items: + properties: + interfaceUuid: + description: |- + (String) Device Interface Uuid + Device Interface Uuid + type: string + location: + description: |- + (Block Set, Max: 1) Colo/Port Location (see below for nested schema) + Device Location + items: + properties: + ibx: + description: |- + (String) IBX Code + IBX Code + type: string + metroCode: + description: |- + (String) Access point metro code + Access point metro code + type: string + metroName: + description: |- + (String) Access point metro name + Access point metro name + type: string + region: + description: |- + (String) Access point region + Access point region + type: string + type: object + type: array + type: + description: |- + L2_PROFILE, L3_PROFILE, ECIA_PROFILE, ECMC_PROFILE + Virtual Device Type + type: string + uuid: + description: |- + (String) Equinix assigned service profile identifier + Virtual Device Uuid + type: string + type: object + type: array + visibility: + description: |- + PUBLIC, PRIVATE + Service profile visibility - PUBLIC, PRIVATE type: string type: object conditions: @@ -688,14 +1793,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -705,8 +1819,9 @@ spec: 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. + 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 @@ -715,6 +1830,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml b/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml index c467ba3..e49b2e5 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgpsessions.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: BGPSession is the Schema for the BGPSessions 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,134 +73,84 @@ spec: forProvider: properties: addressFamily: - description: ipv4 or ipv6. ipv4 or ipv6 + description: |- + ipv4 or ipv6. + ipv4 or ipv6 type: string defaultRoute: - description: Boolean flag to set the default route policy. False - by default. Boolean flag to set the default route policy. False - by default + description: |- + Boolean flag to set the default route policy. False by default. + Boolean flag to set the default route policy. False by default type: boolean deviceId: - description: ID of device. ID of device + description: |- + ID of device. + ID of device type: string - deviceIdRef: - description: Reference to a Device to populate deviceId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - deviceIdSelector: - description: Selector for a Device to populate deviceId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object - required: - - addressFamily 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + addressFamily: + description: |- + ipv4 or ipv6. + ipv4 or ipv6 + type: string + defaultRoute: + description: |- + Boolean flag to set the default route policy. False by default. + Boolean flag to set the default route policy. False by default + type: boolean + deviceId: + description: |- + ID of device. + ID of device type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -201,21 +160,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -225,17 +184,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -245,21 +206,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -274,21 +235,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -299,14 +261,15 @@ spec: - 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. + 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. @@ -321,15 +284,41 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.addressFamily is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.addressFamily) + || (has(self.initProvider) && has(self.initProvider.addressFamily))' + - message: spec.forProvider.deviceId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) + || (has(self.initProvider) && has(self.initProvider.deviceId))' status: description: BGPSessionStatus defines the observed state of BGPSession. properties: atProvider: properties: + addressFamily: + description: |- + ipv4 or ipv6. + ipv4 or ipv6 + type: string + defaultRoute: + description: |- + Boolean flag to set the default route policy. False by default. + Boolean flag to set the default route policy. False by default + type: boolean + deviceId: + description: |- + ID of device. + ID of device + type: string id: type: string status: - description: up or down Status of the session - up or down + description: |- + up or down + Status of the session - up or down type: string type: object conditions: @@ -338,14 +327,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -355,8 +353,9 @@ spec: 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. + 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 @@ -365,6 +364,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_connections.yaml b/package/crds/metal.equinix.jet.crossplane.io_connections.yaml index 1428e22..b8b9a3c 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_connections.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_connections.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: connections.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Connection is the Schema for the Connections 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,194 +73,49 @@ spec: forProvider: properties: contactEmail: - description: The preferred email used for communication and notifications - about the Equinix Fabric interconnection. Required when using - a Project API key. Optional and defaults to the primary user - email address when using a User API key. The preferred email - used for communication and notifications about the Equinix Fabric - interconnection + description: |- + The preferred email used for communication and notifications about the Equinix Fabric interconnection. Required when using a Project API key. Optional and defaults to the primary user email address when using a User API key. + The preferred email used for communication and notifications about the Equinix Fabric interconnection type: string description: - description: Description for the connection resource. Description - of the connection resource + description: |- + Description for the connection resource. + Description of the connection resource type: string facility: - description: (Deprecated) Facility where the connection will be - created. Use metro instead; read the facility to metro migration - guide Facility where the connection will be created + description: |- + (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide + Facility where the connection will be created type: string metro: - description: Metro where the connection will be created. Metro - where the connection will be created + description: |- + Metro where the connection will be created. + Metro where the connection will be created type: string mode: - description: Mode for connections in IBX facilities with the dedicated - type - standard or tunnel. Default is standard. Mode for connections - in IBX facilities with the dedicated type - standard or tunnel + description: |- + Mode for connections in IBX facilities with the dedicated type - standard or tunnel. Default is standard. + Mode for connections in IBX facilities with the dedicated type - standard or tunnel type: string name: - description: Name of the connection resource Name of the connection - resource + description: |- + Name of the connection resource + Name of the connection resource type: string organizationId: - description: ID of the organization where the connection is scoped - to. ID of the organization responsible for the connection. Applicable - with type "dedicated" + description: |- + ID of the organization where the connection is scoped to. + ID of the organization responsible for the connection. Applicable with type "dedicated" type: string - organizationIdRef: - description: Reference to a Organization to populate organizationId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - organizationIdSelector: - description: Selector for a Organization to populate organizationId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object projectId: - description: ID of the project where the connection is scoped - to, must be set for. ID of the project where the connection - is scoped to. Required with type "shared" + description: |- + ID of the project where the connection is scoped to, must be set for. + ID of the project where the connection is scoped to. Required with type "shared" type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object redundancy: - description: Connection redundancy - redundant or primary. Connection - redundancy - redundant or primary + description: |- + Connection redundancy - redundant or primary. + Connection redundancy - redundant or primary type: string serviceTokenType: description: Only used with shared connection. Type of service @@ -259,30 +123,26 @@ spec: token to use for the connection, a_side or z_side type: string speed: - description: Connection speed - Values must be in the format - 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual - supported values will depend on the connection type and whether - the connection uses VLANs or VRF. Connection speed - Values - must be in the format 'Mbps' or 'Gpbs', for - example '100Mbps' or '50Gbps'. Actual supported values will - depend on the connection type and whether the connection uses - VLANs or VRF. + description: |- + Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. type: string tags: - description: String list of tags. Tags attached to the connection + description: |- + String list of tags. + Tags attached to the connection items: type: string type: array type: - description: Connection type - dedicated or shared. Connection - type - dedicated, shared or shared_port_vlan + description: |- + Connection type - dedicated or shared. + Connection type - dedicated, shared or shared_port_vlan type: string vlans: - description: Only used with shared connection. Vlans to attach. - Pass one vlan for Primary/Single connection and two vlans for - Redundant connection. Only used with shared connection. VLANs - to attach. Pass one vlan for Primary/Single connection and two - vlans for Redundant connection + description: |- + Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection. + Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection items: type: number type: array @@ -293,53 +153,136 @@ spec: items: type: string type: array - required: - - name - - redundancy - - type 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + contactEmail: + description: |- + The preferred email used for communication and notifications about the Equinix Fabric interconnection. Required when using a Project API key. Optional and defaults to the primary user email address when using a User API key. + The preferred email used for communication and notifications about the Equinix Fabric interconnection + type: string + description: + description: |- + Description for the connection resource. + Description of the connection resource + type: string + facility: + description: |- + (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide + Facility where the connection will be created + type: string + metro: + description: |- + Metro where the connection will be created. + Metro where the connection will be created + type: string + mode: + description: |- + Mode for connections in IBX facilities with the dedicated type - standard or tunnel. Default is standard. + Mode for connections in IBX facilities with the dedicated type - standard or tunnel + type: string name: - description: Name of the referenced object. + description: |- + Name of the connection resource + Name of the connection resource type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + organizationId: + description: |- + ID of the organization where the connection is scoped to. + ID of the organization responsible for the connection. Applicable with type "dedicated" + type: string + projectId: + description: |- + ID of the project where the connection is scoped to, must be set for. + ID of the project where the connection is scoped to. Required with type "shared" + type: string + redundancy: + description: |- + Connection redundancy - redundant or primary. + Connection redundancy - redundant or primary + type: string + serviceTokenType: + description: Only used with shared connection. Type of service + token to use for the connection, a_side or z_side. Type of service + token to use for the connection, a_side or z_side + type: string + speed: + description: |- + Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + type: string + tags: + description: |- + String list of tags. + Tags attached to the connection + items: + type: string + type: array + type: + description: |- + Connection type - dedicated or shared. + Connection type - dedicated, shared or shared_port_vlan + type: string + vlans: + description: |- + Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection. + Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection + items: + type: number + type: array + vrfs: + description: Only used with shared connection. VRFs to attach. + Pass one VRF for Primary/Single connection and two VRFs for + Redundant connection + items: + type: string + type: array 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -349,21 +292,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -373,17 +316,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -393,21 +338,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -422,21 +367,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -447,14 +393,15 @@ spec: - 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. + 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. @@ -469,6 +416,19 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.redundancy is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.redundancy) + || (has(self.initProvider) && has(self.initProvider.redundancy))' + - message: spec.forProvider.type is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.type) + || (has(self.initProvider) && has(self.initProvider.type))' status: description: ConnectionStatus defines the observed state of Connection. properties: @@ -480,13 +440,47 @@ spec: the Metal end of the network, when viewing resources from within Fabric. type: string + contactEmail: + description: |- + The preferred email used for communication and notifications about the Equinix Fabric interconnection. Required when using a Project API key. Optional and defaults to the primary user email address when using a User API key. + The preferred email used for communication and notifications about the Equinix Fabric interconnection + type: string + description: + description: |- + Description for the connection resource. + Description of the connection resource + type: string + facility: + description: |- + (Deprecated) Facility where the connection will be created. Use metro instead; read the facility to metro migration guide + Facility where the connection will be created + type: string id: type: string + metro: + description: |- + Metro where the connection will be created. + Metro where the connection will be created + type: string + mode: + description: |- + Mode for connections in IBX facilities with the dedicated type - standard or tunnel. Default is standard. + Mode for connections in IBX facilities with the dedicated type - standard or tunnel + type: string + name: + description: |- + Name of the connection resource + Name of the connection resource + type: string + organizationId: + description: |- + ID of the organization where the connection is scoped to. + ID of the organization responsible for the connection. Applicable with type "dedicated" + type: string ports: - description: List of connection ports - primary (ports[0]) and - secondary (ports[1]). Schema of port is described in documentation - of the equinix_metal_connection datasource. List of connection - ports - primary (`ports[0]`) and secondary (`ports[1]`) + description: |- + List of connection ports - primary (ports[0]) and secondary (ports[1]). Schema of port is described in documentation of the equinix_metal_connection datasource. + List of connection ports - primary (`ports[0]`) and secondary (`ports[1]`) items: properties: id: @@ -500,8 +494,8 @@ spec: role: type: string speed: - description: Connection speed - Values must be in the format - 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual + description: Connection speed - Values must be in the format + 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. type: number @@ -514,15 +508,25 @@ spec: type: array type: object type: array + projectId: + description: |- + ID of the project where the connection is scoped to, must be set for. + ID of the project where the connection is scoped to. Required with type "shared" + type: string + redundancy: + description: |- + Connection redundancy - redundant or primary. + Connection redundancy - redundant or primary + type: string + serviceTokenType: + description: Only used with shared connection. Type of service + token to use for the connection, a_side or z_side. Type of service + token to use for the connection, a_side or z_side + type: string serviceTokens: - description: List of connection service tokens with attributes - required to configure the connection in Equinix Fabric with - the equinix_ecx_l2_connection resource or from the Equinix Fabric - Portal. Scehma of service_token is described in documentation - of the equinix_metal_connection datasource. Only used with shared - connection. List of service tokens required to continue the - setup process with [equinix_ecx_l2_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) - or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard) + description: |- + List of connection service tokens with attributes required to configure the connection in Equinix Fabric with the equinix_fabric_connection resource or from the Equinix Fabric Portal. Scehma of service_token is described in documentation of the equinix_metal_connection datasource. + Only used with shared connection. List of service tokens required to continue the setup process with [equinix_fabric_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard) items: properties: expiresAt: @@ -530,8 +534,8 @@ spec: id: type: string maxAllowedSpeed: - description: Connection speed - Values must be in the format - 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual + description: Connection speed - Values must be in the format + 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. type: string @@ -544,19 +548,47 @@ spec: type: string type: object type: array + speed: + description: |- + Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + Connection speed - Values must be in the format 'Mbps' or 'Gpbs', for example '100Mbps' or '50Gbps'. Actual supported values will depend on the connection type and whether the connection uses VLANs or VRF. + type: string status: - description: Status of the connection resource. Status of the - connection resource + description: |- + Status of the connection resource. + Status of the connection resource type: string + tags: + description: |- + String list of tags. + Tags attached to the connection + items: + type: string + type: array token: - description: (Deprecated) Fabric Token required to configure the - connection in Equinix Fabric with the equinix_ecx_l2_connection - resource or from the Equinix Fabric Portal. If your organization - already has connection service tokens enabled, use service_tokens - instead. Only used with shared connection. Fabric Token required - to continue the setup process with [equinix_ecx_l2_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/equinix_ecx_l2_connection) - or from the [Equinix Fabric Portal](https://ecxfabric.equinix.com/dashboard) + description: |- + (Deprecated) Fabric Token required to configure the connection in Equinix Fabric with the equinix_fabric_connection resource or from the Equinix Fabric Portal. If your organization already has connection service tokens enabled, use service_tokens instead. + Only used with shared connection. Fabric Token required to continue the setup process with [equinix_fabric_connection](https://registry.io/providers/equinix/equinix/latest/docs/resources/fabric_connection) or from the [Equinix Fabric Portal](https://fabric.equinix.com/dashboard) + type: string + type: + description: |- + Connection type - dedicated or shared. + Connection type - dedicated, shared or shared_port_vlan type: string + vlans: + description: |- + Only used with shared connection. Vlans to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection. + Only used with shared connection. VLANs to attach. Pass one vlan for Primary/Single connection and two vlans for Redundant connection + items: + type: number + type: array + vrfs: + description: Only used with shared connection. VRFs to attach. + Pass one VRF for Primary/Single connection and two VRFs for + Redundant connection + items: + type: string + type: array type: object conditions: description: Conditions of the resource. @@ -564,14 +596,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -581,8 +622,9 @@ spec: 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. + 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 @@ -591,6 +633,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml b/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml index 9d4f687..964b2da 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: devicenetworktypes.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -39,14 +38,19 @@ spec: 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' + 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' + 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 @@ -55,9 +59,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -68,128 +77,67 @@ spec: description: The ID of the device on which the network type should be set type: string - deviceIdRef: - description: Reference to a Device to populate deviceId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - deviceIdSelector: - description: Selector for a Device to populate deviceId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object type: description: Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded type: string - required: - - type 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + deviceId: + description: The ID of the device on which the network type should + be set + type: string + type: + description: Network type to set. Must be one of layer3, hybrid, + hybrid-bonded, layer2-individual, layer2-bonded type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -199,21 +147,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -223,17 +171,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -243,21 +193,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -272,21 +222,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -297,14 +248,15 @@ spec: - 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. + 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. @@ -319,13 +271,30 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.deviceId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) + || (has(self.initProvider) && has(self.initProvider.deviceId))' + - message: spec.forProvider.type is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.type) + || (has(self.initProvider) && has(self.initProvider.type))' status: description: DeviceNetworkTypeStatus defines the observed state of DeviceNetworkType. properties: atProvider: properties: + deviceId: + description: The ID of the device on which the network type should + be set + type: string id: type: string + type: + description: Network type to set. Must be one of layer3, hybrid, + hybrid-bonded, layer2-individual, layer2-bonded + type: string type: object conditions: description: Conditions of the resource. @@ -333,14 +302,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -350,8 +328,9 @@ spec: 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. + 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 @@ -360,6 +339,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_devices.yaml b/package/crds/metal.equinix.jet.crossplane.io_devices.yaml index e734072..4ee8156 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_devices.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_devices.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: devices.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Device is the Schema for the Devices 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,41 +73,32 @@ spec: forProvider: properties: alwaysPxe: - description: If true, a device with OS custom_ipxe will continue - to boot via iPXE on reboots. If true, a device with OS custom_ipxe - will + description: |- + (Boolean) If true, a device with OS custom_ipxe will + If true, a device with OS custom_ipxe will type: boolean behavior: - description: Behavioral overrides that change how the resource - handles certain attribute updates. See Behavior below for more - details. + description: '(Block List, Max: 1) (see below for nested schema)' items: properties: allowChanges: - description: 'List of attributes that are allowed to change - without recreating the instance. Supported attributes: - custom_data, user_data" List of attributes that are allowed - to change without recreating the instance. Supported attributes: - `custom_data`, `user_data`' + description: |- + (List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data + List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data` items: type: string type: array type: object type: array billingCycle: - description: monthly or hourly monthly or hourly + description: |- + (String) monthly or hourly + monthly or hourly type: string customDataSecretRef: - description: A string of the desired Custom Data for the device. By - default, changing this attribute will cause the provider to - destroy and recreate your device. If reinstall is specified - or behavior.allow_changes includes "custom_data", the device - will be updated in-place instead of recreated. A string of the - desired Custom Data for the device. By default, changing this - attribute will cause the provider to destroy and recreate your - device. If `reinstall` is specified or `behavior.allow_changes` - includes `"custom_data"`, the device will be updated in-place - instead of recreated. + description: |- + place instead of recreated. + A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"custom_data"`, the device will be updated in-place instead of recreated. properties: key: description: The key to select. @@ -115,279 +115,350 @@ spec: - namespace type: object description: - description: The device description. Description string for the - device + description: |- + (String) Description string for the device + Description string for the device type: string facilities: - description: (Deprecated) 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, set your API auth - token in the top of the page and see JSON from the API response. - Conflicts with metro. Use metro instead; read the facility - to metro migration guide 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: |- + (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro + 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 items: type: string type: array forceDetachVolumes: - description: Delete device even if it has volumes attached. Only - applies for destroy action. Delete device even if it has volumes - attached. Only applies for destroy action + description: |- + (Boolean) Delete device even if it has volumes attached. Only applies for destroy action + Delete device even if it has volumes attached. Only applies for destroy action type: boolean hardwareReservationId: - 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. Changing this - from a reservation UUID to next-available will re-create the - device in another reservation. Please be careful when using - hardware reservation UUID and next-available together for the - same pool of reservations. It might happen that the reservation - which Equinix Metal API will pick as next-available is the reservation - which you refer with UUID in another equinix_metal_device resource. - If that happens, and the equinix_metal_device with the UUID - is created later, resource creation will fail because the reservation - is already in use (by the resource created with next-available). - To workaround this, have the next-available resource explicitly - depend_on the resource with hardware reservation UUID, so that - the latter is created first. For more details, see issue #176. - 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: |- + available if you want to pick your next available reservation automatically + 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 type: string hostname: - description: The device hostname used in deployments taking advantage - of Layer3 DHCP or metadata service configuration. The device - hostname used in deployments taking advantage of Layer3 DHCP - or metadata service configuration. + description: |- + (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. type: string ipAddress: - description: A list of IP address types for the device. See IP - address below for more details. A list of IP address types for - the device (structure is documented below) + description: |- + (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) + A list of IP address types for the device (structure is documented below) items: properties: cidr: - description: CIDR suffix for IP address block to be assigned, - i.e. amount of addresses. CIDR suffix for IP block assigned - to this device + description: |- + (Number) CIDR suffix for IP block assigned to this device + CIDR suffix for IP block assigned to this device type: number reservationIds: - description: List of UUIDs of IP block reservations from - which the public IPv4 address should be taken. IDs of - reservations to pick the blocks from + description: |- + (List of String) IDs of reservations to pick the blocks from + IDs of reservations to pick the blocks from items: type: string type: array type: - description: One of private_ipv4, public_ipv4, public_ipv6. + description: |- + (String) one of public_ipv4,private_ipv4,public_ipv6 one of public_ipv4,private_ipv4,public_ipv6 type: string - required: - - type type: object type: array ipxeScriptUrl: - description: URL pointing to a hosted iPXE script. More information - is in the Custom iPXE doc. URL pointing to a hosted iPXE script. - More + description: |- + (String) URL pointing to a hosted iPXE script. More + URL pointing to a hosted iPXE script. More type: string locked: - description: Whether the device is locked or unlocked. Locking - a device prevents you from deleting or reinstalling the device - or performing a firmware update on the device, and it prevents - an instance with a termination time set from being reclaimed, - even if the termination time was reached Whether the device - is locked or unlocked. Locking a device prevents you from deleting - or reinstalling the device or performing a firmware update on - the device, and it prevents an instance with a termination time - set from being reclaimed, even if the termination time was reached + description: |- + (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached type: boolean metro: - description: Metro area for the new device. Conflicts with facilities. + description: |- + (String) Metro area for the new device. Conflicts with facilities Metro area for the new device. Conflicts with facilities type: string operatingSystem: - description: The operating system slug. To find the slug, or visit - Operating Systems API docs, set your API auth token in the top - of the page and see JSON from the API response. 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. By default, changing this attribute - will cause your device to be deleted and recreated. If `reinstall` - is enabled, the device will be updated in-place instead of recreated. + description: |- + place instead of recreated. + 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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated. type: string plan: - description: The device plan slug. To find the plan slug, visit - Device plans API docs, set your auth token in the top of the - page and see JSON from the API response. 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: |- + metal server and plan documentation + The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/) type: string projectId: - description: The ID of the project in which to create the device + description: |- + (String) The ID of the project in which to create the device The ID of the project in which to create the device type: string - projectIdRef: - description: Reference to a Project to populate projectId. + projectSshKeyIds: + description: |- + (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource + Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource + items: + type: string + type: array + reinstall: + description: '(Block List, Max: 1) (see below for nested schema)' + items: + properties: + deprovisionFast: + description: |- + (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall + Whether the OS disk should be filled with `00h` bytes before reinstall + type: boolean + enabled: + description: |- + (Boolean) Whether the device should be reinstalled instead of destroyed + Whether the device should be reinstalled instead of destroyed + type: boolean + preserveData: + description: |- + OS disks should be kept or wiped during reinstall + Whether the non-OS disks should be kept or wiped during reinstall + type: boolean + type: object + type: array + storage: + description: |- + (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc + 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 + type: string + tags: + description: |- + (List of String) Tags attached to the device + Tags attached to the device + items: + type: string + type: array + terminationTime: + description: |- + 09-03T16:32:00+03:00". If you don't supply timezone info, timestamp is assumed to be in UTC. + 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. + type: string + userDataSecretRef: + description: |- + place instead of recreated. + A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"user_data"`, the device will be updated in-place instead of recreated. properties: + key: + description: The key to select. + type: string name: - description: Name of the referenced object. + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object required: + - key - name + - namespace type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent + userSshKeyIds: + description: |- + (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource + Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource + items: + type: string + type: array + waitForReservationDeprovision: + description: |- + (Boolean) 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) + 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) + type: boolean + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + alwaysPxe: + description: |- + (Boolean) If true, a device with OS custom_ipxe will + If true, a device with OS custom_ipxe will + type: boolean + behavior: + description: '(Block List, Max: 1) (see below for nested schema)' + items: + properties: + allowChanges: + description: |- + (List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data + List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data` + items: type: string - type: object + type: array + type: object + type: array + billingCycle: + description: |- + (String) monthly or hourly + monthly or hourly + type: string + customDataSecretRef: + description: |- + place instead of recreated. + A string of the desired Custom Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"custom_data"`, the device will be updated in-place instead of recreated. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace type: object + description: + description: |- + (String) Description string for the device + Description string for the device + type: string + facilities: + description: |- + (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro + 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 + items: + type: string + type: array + forceDetachVolumes: + description: |- + (Boolean) Delete device even if it has volumes attached. Only applies for destroy action + Delete device even if it has volumes attached. Only applies for destroy action + type: boolean + hardwareReservationId: + description: |- + available if you want to pick your next available reservation automatically + 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 + type: string + hostname: + description: |- + (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + type: string + ipAddress: + description: |- + (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) + A list of IP address types for the device (structure is documented below) + items: + properties: + cidr: + description: |- + (Number) CIDR suffix for IP block assigned to this device + CIDR suffix for IP block assigned to this device + type: number + reservationIds: + description: |- + (List of String) IDs of reservations to pick the blocks from + IDs of reservations to pick the blocks from + items: + type: string + type: array + type: + description: |- + (String) one of public_ipv4,private_ipv4,public_ipv6 + one of public_ipv4,private_ipv4,public_ipv6 + type: string + type: object + type: array + ipxeScriptUrl: + description: |- + (String) URL pointing to a hosted iPXE script. More + URL pointing to a hosted iPXE script. More + type: string + locked: + description: |- + (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + type: boolean + metro: + description: |- + (String) Metro area for the new device. Conflicts with facilities + Metro area for the new device. Conflicts with facilities + type: string + operatingSystem: + description: |- + place instead of recreated. + 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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated. + type: string + plan: + description: |- + metal server and plan documentation + The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/) + type: string + projectId: + description: |- + (String) The ID of the project in which to create the device + The ID of the project in which to create the device + type: string projectSshKeyIds: - description: Array of IDs of the project SSH keys which should - be added to the device. If you specify this array, only the - listed project SSH keys (and any SSH keys for the users specified - in user_ssh_key_ids) will be added. If no SSH keys are specified - (both user_ssh_keys_ids and project_ssh_key_ids are empty lists - or omitted), all parent project keys, parent project members - keys and organization members keys will be included. Project - SSH keys can be created with the equinix_metal_project_ssh_key - resource. Array of IDs of the project SSH keys which should - be added to the device. If you specify this array, only the - listed project SSH keys (and any SSH keys for the users specified - in user_ssh_key_ids) will be added. If no SSH keys are specified - (both user_ssh_keys_ids and project_ssh_key_ids are empty lists - or omitted), all parent project keys, parent project members - keys and organization members keys will be included. Project - SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) - resource + description: |- + (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource + Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource items: type: string type: array reinstall: - description: Whether the device should be reinstalled instead - of destroyed when modifying user_data, custom_data, or operating - system. See Reinstall below for more details. + description: '(Block List, Max: 1) (see below for nested schema)' items: properties: deprovisionFast: - description: Whether the OS disk should be filled with 00h - bytes before reinstall. Defaults to false. Whether the - OS disk should be filled with `00h` bytes before reinstall + description: |- + (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall + Whether the OS disk should be filled with `00h` bytes before reinstall type: boolean enabled: - description: Whether the provider should favour reinstall - over destroy and create. Defaults to false. Whether the - device should be reinstalled instead of destroyed + description: |- + (Boolean) Whether the device should be reinstalled instead of destroyed + Whether the device should be reinstalled instead of destroyed type: boolean preserveData: - description: Whether the non-OS disks should be kept or - wiped during reinstall. Defaults to false. Whether the - non-OS disks should be kept or wiped during reinstall + description: |- + OS disks should be kept or wiped during reinstall + Whether the non-OS disks should be kept or wiped during reinstall type: boolean type: object type: array storage: - description: JSON for custom partitioning. Only usable on reserved - hardware. More information in in the Custom Partitioning and - RAID doc. Please note that the disks.partitions.size attribute - must be a string, not an integer. It can be a number string, - or size notation string, e.g. "4G" or "8M" (for gigabytes and - megabytes). 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: |- + (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc + 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 type: string tags: - description: Tags attached to the device. Tags attached to the - device + description: |- + (List of String) Tags attached to the device + Tags attached to the device items: type: string type: array terminationTime: - 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. 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: |- + 09-03T16:32:00+03:00". If you don't supply timezone info, timestamp is assumed to be in UTC. + 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. type: string userDataSecretRef: - description: A string of the desired User Data for the device. By - default, changing this attribute will cause the provider to - destroy and recreate your device. If reinstall is specified - or behavior.allow_changes includes "user_data", the device will - be updated in-place instead of recreated. A string of the desired - User Data for the device. By default, changing this attribute - will cause the provider to destroy and recreate your device. If - `reinstall` is specified or `behavior.allow_changes` includes - `"user_data"`, the device will be updated in-place instead of - recreated. + description: |- + place instead of recreated. + A string of the desired User Data for the device. By default, changing this attribute will cause the provider to destroy and recreate your device. If `reinstall` is specified or `behavior.allow_changes` includes `"user_data"`, the device will be updated in-place instead of recreated. properties: key: description: The key to select. @@ -404,79 +475,52 @@ spec: - namespace type: object userSshKeyIds: - description: Array of IDs of the users whose SSH keys should be - added to the device. If you specify this array, only the listed - users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) - will be added. If no SSH keys are specified (both user_ssh_keys_ids - and project_ssh_key_ids are empty lists or omitted), all parent - project keys, parent project members keys and organization members - keys will be included. User SSH keys can be created with the - equinix_metal_ssh_key resource. Array of IDs of the users whose - SSH keys should be added to the device. If you specify this - array, only the listed users' SSH keys (and any project SSH - keys specified in project_ssh_key_ids) will be added. If no - SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids - are empty lists or omitted), all parent project keys, parent - project members keys and organization members keys will be included. - User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) - resource + description: |- + (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource + Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource items: type: string type: array waitForReservationDeprovision: - 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). 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: |- + (Boolean) 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) + 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) type: boolean - required: - - operatingSystem - - plan type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array providerConfigRef: default: name: default - description: ProviderConfigReference specifies how the provider that - will be used to create, observe, update, and delete this managed - resource should be configured. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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`' + 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. @@ -486,21 +530,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -510,17 +554,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -530,21 +576,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -559,21 +605,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -584,14 +631,15 @@ spec: - 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. + 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. @@ -606,120 +654,293 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.operatingSystem is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.operatingSystem) + || (has(self.initProvider) && has(self.initProvider.operatingSystem))' + - message: spec.forProvider.plan is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.plan) + || (has(self.initProvider) && has(self.initProvider.plan))' + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: DeviceStatus defines the observed state of Device. properties: atProvider: properties: accessPrivateIpv4: - description: The ipv4 private IP assigned to the device. The ipv4 - private IP assigned to the device + description: |- + (String) The ipv4 private IP assigned to the device + The ipv4 private IP assigned to the device type: string accessPublicIpv4: - description: The ipv4 maintenance IP assigned to the device. The - ipv4 maintenance IP assigned to the device + description: |- + (String) The ipv4 maintenance IP assigned to the device + The ipv4 maintenance IP assigned to the device type: string accessPublicIpv6: - description: The ipv6 maintenance IP assigned to the device. The - ipv6 maintenance IP assigned to the device + description: |- + (String) The ipv6 maintenance IP assigned to the device + The ipv6 maintenance IP assigned to the device + type: string + alwaysPxe: + description: |- + (Boolean) If true, a device with OS custom_ipxe will + If true, a device with OS custom_ipxe will + type: boolean + behavior: + description: '(Block List, Max: 1) (see below for nested schema)' + items: + properties: + allowChanges: + description: |- + (List of String) List of attributes that are allowed to change without recreating the instance. Supported attributes: custom_data, user_data + List of attributes that are allowed to change without recreating the instance. Supported attributes: `custom_data`, `user_data` + items: + type: string + type: array + type: object + type: array + billingCycle: + description: |- + (String) monthly or hourly + monthly or hourly type: string created: - description: The timestamp for when the device was created. The - timestamp for when the device was created + description: |- + (String) The timestamp for when the device was created + The timestamp for when the device was created type: string deployedFacility: - description: (Deprecated) The facility where the device is deployed. - Use metro instead; read the facility to metro migration guide + description: |- + (String, Deprecated) The facility where the device is deployed The facility where the device is deployed type: string deployedHardwareReservationId: - description: ID of hardware reservation where this device was - deployed. It is useful when using the next-available hardware - reservation. ID of hardware reservation where this device was - deployed. It is useful when using the next-available hardware - reservation + description: |- + available hardware reservation + ID of hardware reservation where this device was deployed. It is useful when using the next-available hardware reservation + type: string + description: + description: |- + (String) Description string for the device + Description string for the device + type: string + facilities: + description: |- + (List of String, Deprecated) 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, set your API auth token in the top of the page and see JSON from the API response. Conflicts with metro + 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 + items: + type: string + type: array + forceDetachVolumes: + description: |- + (Boolean) Delete device even if it has volumes attached. Only applies for destroy action + Delete device even if it has volumes attached. Only applies for destroy action + type: boolean + hardwareReservationId: + description: |- + available if you want to pick your next available reservation automatically + 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 + type: string + hostname: + description: |- + (String) The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. + The device hostname used in deployments taking advantage of Layer3 DHCP or metadata service configuration. type: string id: - description: The ID of the device. + description: (String) The ID of this resource. + type: string + ipAddress: + description: |- + (Block List) A list of IP address types for the device (structure is documented below) (see below for nested schema) + A list of IP address types for the device (structure is documented below) + items: + properties: + cidr: + description: |- + (Number) CIDR suffix for IP block assigned to this device + CIDR suffix for IP block assigned to this device + type: number + reservationIds: + description: |- + (List of String) IDs of reservations to pick the blocks from + IDs of reservations to pick the blocks from + items: + type: string + type: array + type: + description: |- + (String) one of public_ipv4,private_ipv4,public_ipv6 + one of public_ipv4,private_ipv4,public_ipv6 + type: string + type: object + type: array + ipxeScriptUrl: + description: |- + (String) URL pointing to a hosted iPXE script. More + URL pointing to a hosted iPXE script. More + type: string + locked: + description: |- + (Boolean) Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + Whether the device is locked or unlocked. Locking a device prevents you from deleting or reinstalling the device or performing a firmware update on the device, and it prevents an instance with a termination time set from being reclaimed, even if the termination time was reached + type: boolean + metro: + description: |- + (String) Metro area for the new device. Conflicts with facilities + Metro area for the new device. Conflicts with facilities type: string network: - description: 'The device''s private and public IP (v4 and v6) - network details. See Network Attribute below for more details. - 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: |- + (List of Object) 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 (see below for nested schema) + 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 items: properties: address: - description: IPv4 or IPv6 address string. + description: (String) type: string cidr: - description: CIDR suffix for IP address block to be assigned, - i.e. amount of addresses. + description: (Number) CIDR suffix for IP block assigned + to this device type: number family: - description: IP version. One of 4, 6. + description: (Number) type: number gateway: - description: Address of router. + description: (String) type: string public: - description: Whether the address is routable from the Internet. + description: (Boolean) type: boolean type: object type: array networkType: - description: (Deprecated) Network type of a device, used in Layer - 2 networking. Since this attribute is deprecated you should - handle Network Type with one of equinix_metal_port, equinix_metal_device_network_type - resources or equinix_metal_port datasource. See network_types - guide for more info. 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: |- + bonded, layer2-individual, layer2-bonded + 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 + type: string + operatingSystem: + description: |- + place instead of recreated. + 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. By default, changing this attribute will cause your device to be deleted and recreated. If `reinstall` is enabled, the device will be updated in-place instead of recreated. + type: string + plan: + description: |- + metal server and plan documentation + The device plan slug. To find the plan slug, visit the [bare-metal server](https://deploy.equinix.com/product/bare-metal/servers/) and [plan documentation](https://deploy.equinix.com/developers/docs/metal/hardware/standard-servers/) type: string ports: - description: List of ports assigned to the device. See Ports Attribute - below for more details. Ports assigned to the device + description: |- + (List of Object) Ports assigned to the device (see below for nested schema) + Ports assigned to the device items: properties: bonded: - description: Whether this port is part of a bond in bonded - network setup. + description: (Boolean) type: boolean id: - description: The ID of the device. + description: (String) The ID of this resource. type: string mac: - description: MAC address assigned to the port. + description: (String) type: string name: - description: Name of the port (e.g. eth0, or bond0). + description: (String) type: string type: - description: Type of the port (e.g. NetworkPort or NetworkBondPort). + description: (String) one of public_ipv4,private_ipv4,public_ipv6 type: string type: object type: array + projectId: + description: |- + (String) The ID of the project in which to create the device + The ID of the project in which to create the device + type: string + projectSshKeyIds: + description: |- + (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource + Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource + items: + type: string + type: array + reinstall: + description: '(Block List, Max: 1) (see below for nested schema)' + items: + properties: + deprovisionFast: + description: |- + (Boolean) Whether the OS disk should be filled with 00h bytes before reinstall + Whether the OS disk should be filled with `00h` bytes before reinstall + type: boolean + enabled: + description: |- + (Boolean) Whether the device should be reinstalled instead of destroyed + Whether the device should be reinstalled instead of destroyed + type: boolean + preserveData: + description: |- + OS disks should be kept or wiped during reinstall + Whether the non-OS disks should be kept or wiped during reinstall + type: boolean + type: object + type: array sosHostname: - description: The hostname to use for Serial over SSH access to - the device The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) - access to the device + description: |- + (String) The hostname to use for Serial over SSH access to the device + The hostname to use for [Serial over SSH](https://deploy.equinix.com/developers/docs/metal/resilience-recovery/serial-over-ssh/) access to the device type: string sshKeyIds: - description: List of IDs of SSH keys deployed in the device, can - be both user and project SSH keys. List of IDs of SSH keys deployed - in the device, can be both user and project SSH keys + description: |- + (List of String) List of IDs of SSH keys deployed in the device, can be both user and project SSH keys + List of IDs of SSH keys deployed in the device, can be both user and project SSH keys items: type: string type: array state: - description: The status of the device. The status of the device + description: |- + (String) The status of the device + The status of the device + type: string + storage: + description: |- + (String) JSON for custom partitioning. Only usable on reserved hardware. More information in in the Custom Partitioning and RAID doc + 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 + type: string + tags: + description: |- + (List of String) Tags attached to the device + Tags attached to the device + items: + type: string + type: array + terminationTime: + description: |- + 09-03T16:32:00+03:00". If you don't supply timezone info, timestamp is assumed to be in UTC. + 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. type: string updated: - description: The timestamp for the last time the device was updated. + description: |- + (String) The timestamp for the last time the device was updated The timestamp for the last time the device was updated type: string + userSshKeyIds: + description: |- + (List of String) Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the equinix_metal_ssh_key resource + Array of IDs of the users whose SSH keys should be added to the device. If you specify this array, only the listed users' SSH keys (and any project SSH keys specified in project_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. User SSH keys can be created with the [equinix_metal_ssh_key](equinix_metal_ssh_key.md) resource + items: + type: string + type: array + waitForReservationDeprovision: + description: |- + (Boolean) 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) + 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) + type: boolean type: object conditions: description: Conditions of the resource. @@ -727,14 +948,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -744,8 +974,9 @@ spec: 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. + 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 @@ -754,6 +985,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml b/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml index 69013ad..a2bd682 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: gateways.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Gateway is the Schema for the Gateways 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,287 +73,94 @@ spec: forProvider: properties: ipReservationId: - description: UUID of Public or VRF IP Reservation to associate - with the gateway, the reservation must be in the same metro - as the VLAN, conflicts with private_ipv4_subnet_size. UUID of - the Public or VRF IP Reservation to associate + description: |- + UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. + UUID of the Public or VRF IP Reservation to associate type: string - ipReservationIdRef: - description: Reference to a ReservedIPBlock to populate ipReservationId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - ipReservationIdSelector: - description: Selector for a ReservedIPBlock to populate ipReservationId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object privateIpv4SubnetSize: - description: Size of the private IPv4 subnet to create for this - metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts - with ip_reservation_id. Size of the private IPv4 subnet to create - for this gateway + description: |- + Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + Size of the private IPv4 subnet to create for this gateway type: number projectId: - description: UUID of the project where the gateway is scoped to. + description: |- + UUID of the project where the gateway is scoped to. UUID of the Project where the Gateway is scoped to type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object vlanId: - description: UUID of the VLAN where the gateway is scoped to. + description: |- + UUID of the VLAN where the gateway is scoped to. UUID of the VLAN to associate type: string - vlanIdRef: - description: Reference to a Vlan to populate vlanId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - vlanIdSelector: - description: Selector for a Vlan to populate vlanId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object type: object - 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + ipReservationId: + description: |- + UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. + UUID of the Public or VRF IP Reservation to associate + type: string + privateIpv4SubnetSize: + description: |- + Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + Size of the private IPv4 subnet to create for this gateway + type: number + projectId: + description: |- + UUID of the project where the gateway is scoped to. + UUID of the Project where the Gateway is scoped to + type: string + vlanId: + description: |- + UUID of the VLAN where the gateway is scoped to. + UUID of the VLAN to associate type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -354,21 +170,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -378,17 +194,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -398,21 +216,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -427,21 +245,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -452,14 +271,15 @@ spec: - 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. + 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. @@ -474,6 +294,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' + - message: spec.forProvider.vlanId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.vlanId) + || (has(self.initProvider) && has(self.initProvider.vlanId))' status: description: GatewayStatus defines the observed state of Gateway. properties: @@ -481,12 +310,34 @@ spec: properties: id: type: string + ipReservationId: + description: |- + UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. + UUID of the Public or VRF IP Reservation to associate + type: string + privateIpv4SubnetSize: + description: |- + Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. + Size of the private IPv4 subnet to create for this gateway + type: number + projectId: + description: |- + UUID of the project where the gateway is scoped to. + UUID of the Project where the Gateway is scoped to + type: string state: - description: Status of the gateway resource. Status of the gateway - resource + description: |- + Status of the gateway resource. + Status of the gateway resource + type: string + vlanId: + description: |- + UUID of the VLAN where the gateway is scoped to. + UUID of the VLAN to associate type: string vrfId: - description: UUID of the VRF associated with the IP Reservation + description: |- + UUID of the VRF associated with the IP Reservation UUID of the VRF associated with the IP Reservation type: string type: object @@ -496,14 +347,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -513,8 +373,9 @@ spec: 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. + 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 @@ -523,6 +384,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml b/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml index 7f042da..f0b720a 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: ipattachments.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: IPAttachment is the Schema for the IPAttachments 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -70,124 +79,62 @@ spec: deviceId: description: ID of device to which to assign the subnet. type: string - deviceIdRef: - description: Reference to a Device to populate deviceId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - deviceIdSelector: - description: Selector for a Device to populate deviceId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object - required: - - cidrNotation 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + cidrNotation: + description: CIDR notation of subnet from block reserved in the + same project and metro as the device. + type: string + deviceId: + description: ID of device to which to assign the subnet. type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -197,21 +144,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -221,17 +168,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -241,21 +190,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -270,21 +219,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -295,14 +245,15 @@ spec: - 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. + 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. @@ -317,6 +268,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.cidrNotation is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.cidrNotation) + || (has(self.initProvider) && has(self.initProvider.cidrNotation))' + - message: spec.forProvider.deviceId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) + || (has(self.initProvider) && has(self.initProvider.deviceId))' status: description: IPAttachmentStatus defines the observed state of IPAttachment. properties: @@ -325,13 +285,22 @@ spec: address: type: string addressFamily: - description: Address family as integer. One of 4 or 6. Address - family as integer (4 or 6) + description: |- + Address family as integer. One of 4 or 6. + Address family as integer (4 or 6) type: number cidr: - description: Length of CIDR prefix of the subnet as integer. Length - of CIDR prefix of the block as integer + description: |- + Length of CIDR prefix of the subnet as integer. + Length of CIDR prefix of the block as integer type: number + cidrNotation: + description: CIDR notation of subnet from block reserved in the + same project and metro as the device. + type: string + deviceId: + description: ID of device to which to assign the subnet. + type: string gateway: description: IP address of gateway for the subnet. type: string @@ -347,17 +316,19 @@ spec: management: type: boolean netmask: - description: Subnet mask in decimal notation, e.g., 255.255.255.0. + description: |- + Subnet mask in decimal notation, e.g., 255.255.255.0. Mask in decimal notation, e.g. 255.255.255.0 type: string network: - description: Subnet network address. Network IP address portion - of the block specification + description: |- + Subnet network address. + Network IP address portion of the block specification type: string public: - description: Boolean flag whether subnet is reachable from the - Internet. Flag indicating whether IP block is addressable from - the Internet + description: |- + Boolean flag whether subnet is reachable from the Internet. + Flag indicating whether IP block is addressable from the Internet type: boolean vrfId: description: The unique ID of the assignment. @@ -369,14 +340,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -386,8 +366,9 @@ spec: 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. + 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 @@ -396,6 +377,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml index ca42ab0..f0e0615 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: organizationmembers.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -39,14 +38,19 @@ spec: 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' + 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' + 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 @@ -55,9 +59,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -65,152 +74,116 @@ spec: forProvider: properties: invitee: - description: The email address of the user to invite The email - address of the user to invite + description: |- + The email address of the user to invite + The email address of the user to invite type: string message: - description: A message to include in the emailed invitation. A - message to the invitee (only used during the invitation stage) + description: |- + A message to include in the emailed invitation. + A message to the invitee (only used during the invitation stage) type: string organizationId: - description: The organization to invite the user to The organization - to invite the user to + description: |- + The organization to invite the user to + The organization to invite the user to type: string - organizationIdRef: - description: Reference to a Organization to populate organizationId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - organizationIdSelector: - description: Selector for a Organization to populate organizationId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object projectsIds: - description: Project IDs the member has access to within the organization. - If the member is an 'admin', the projects list should be empty. - Project IDs the member has access to within the organization. - If the member is an 'owner', the projects list should be empty. + description: |- + Project IDs the member has access to within the organization. If the member is an 'admin', the projects list should be empty. + 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 + x-kubernetes-list-type: set roles: - description: Organization roles (admin, collaborator, limited_collaborator, - billing) Organization roles (owner, collaborator, limited_collaborator, - billing) + description: |- + Organization roles (admin, collaborator, limited_collaborator, billing) + Organization roles (owner, collaborator, limited_collaborator, billing) items: type: string type: array - required: - - invitee - - projectsIds - - roles + x-kubernetes-list-type: set 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + invitee: + description: |- + The email address of the user to invite + The email address of the user to invite type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + message: + description: |- + A message to include in the emailed invitation. + A message to the invitee (only used during the invitation stage) + type: string + organizationId: + description: |- + The organization to invite the user to + 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 'admin', the projects list should be empty. + 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 + x-kubernetes-list-type: set + roles: + description: |- + Organization roles (admin, collaborator, limited_collaborator, billing) + Organization roles (owner, collaborator, limited_collaborator, billing) + items: + type: string + type: array + x-kubernetes-list-type: set 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -220,21 +193,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -244,17 +217,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -264,21 +239,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -293,21 +268,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -318,14 +294,15 @@ spec: - 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. + 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. @@ -340,39 +317,86 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.invitee is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.invitee) + || (has(self.initProvider) && has(self.initProvider.invitee))' + - message: spec.forProvider.organizationId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.organizationId) + || (has(self.initProvider) && has(self.initProvider.organizationId))' + - message: spec.forProvider.projectsIds is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectsIds) + || (has(self.initProvider) && has(self.initProvider.projectsIds))' + - message: spec.forProvider.roles is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.roles) + || (has(self.initProvider) && has(self.initProvider.roles))' status: description: OrganizationMemberStatus defines the observed state of OrganizationMember. properties: atProvider: properties: created: - description: When the invitation was created (only known in the - invitation stage) When the invitation was created (only known - in the invitation stage) + description: |- + When the invitation was created (only known in the invitation stage) + When the invitation was created (only known in the invitation stage) type: string id: description: The unique ID of the membership. type: string invitedBy: - description: The user_id of the user that sent the invitation - (only known in the invitation stage) The user id of the user - that sent the invitation (only known in the invitation stage) + description: |- + The user_id of the user that sent the invitation (only known in the invitation stage) + The user id of the user that sent the invitation (only known in the invitation stage) + type: string + invitee: + description: |- + The email address of the user to invite + The email address of the user to invite + type: string + message: + description: |- + A message to include in the emailed invitation. + A message to the invitee (only used during the invitation stage) type: string nonce: - description: The nonce for the invitation (only known in the invitation - stage) The nonce for the invitation (only known in the invitation - stage) + description: |- + The nonce for the invitation (only known in the invitation stage) + The nonce for the invitation (only known in the invitation stage) + type: string + organizationId: + description: |- + The organization to invite the user to + 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 'admin', the projects list should be empty. + 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 + x-kubernetes-list-type: set + roles: + description: |- + Organization roles (admin, collaborator, limited_collaborator, billing) + Organization roles (owner, collaborator, limited_collaborator, billing) + items: + type: string + type: array + x-kubernetes-list-type: set state: - description: The state of the membership ('invited' when an invitation - is open, 'active' when the user is an organization member) The - state of the membership ('invited' when an invitation is open, - 'active' when the user is an organization member) + description: |- + The state of the membership ('invited' when an invitation is open, 'active' when the user is an organization member) + The state of the membership ('invited' when an invitation is open, 'active' when the user is an organization member) type: string updated: - description: When the invitation was updated (only known in the - invitation stage) When the invitation was updated (only known - in the invitation stage) + description: |- + When the invitation was updated (only known in the invitation stage) + When the invitation was updated (only known in the invitation stage) type: string type: object conditions: @@ -381,14 +405,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -398,8 +431,9 @@ spec: 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. + 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 @@ -408,6 +442,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_organizations.yaml b/package/crds/metal.equinix.jet.crossplane.io_organizations.yaml index 9c810c8..410a7b6 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_organizations.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_organizations.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: organizations.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Organization is the Schema for the Organizations 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,94 +73,170 @@ spec: forProvider: properties: address: - description: An object that has the address information. See Address - below for more details. Address information block + description: |- + An object that has the address information. See Address below for more details. + Address information block items: properties: address: - description: Postal address. Postal address + description: |- + Postal address. + Postal address type: string city: - description: City name. City name + description: |- + City name. + City name type: string country: - description: Two letter country code (ISO 3166-1 alpha-2), - e.g. US. Two letter country code (ISO 3166-1 alpha-2), - e.g. US + description: |- + Two letter country code (ISO 3166-1 alpha-2), e.g. US. + Two letter country code (ISO 3166-1 alpha-2), e.g. US type: string state: - description: State name. State name + description: |- + State name. + State name type: string zipCode: - description: Zip Code. Zip Code + description: |- + Zip Code. + Zip Code type: string - required: - - address - - city - - country - - zipCode type: object type: array description: - description: Description string. Description string + description: |- + Description string. + Description string type: string logo: - description: Logo URL. Logo URL + description: |- + Logo URL. + Logo URL type: string name: - description: The name of the Organization. The name of the Organization + description: |- + The name of the Organization. + The name of the Organization type: string twitter: - description: Twitter handle. Twitter handle + description: |- + Twitter handle. + Twitter handle type: string website: - description: Website link. Website link + description: |- + Website link. + Website link type: string - required: - - name 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + address: + description: |- + An object that has the address information. See Address below for more details. + Address information block + items: + properties: + address: + description: |- + Postal address. + Postal address + type: string + city: + description: |- + City name. + City name + type: string + country: + description: |- + Two letter country code (ISO 3166-1 alpha-2), e.g. US. + Two letter country code (ISO 3166-1 alpha-2), e.g. US + type: string + state: + description: |- + State name. + State name + type: string + zipCode: + description: |- + Zip Code. + Zip Code + type: string + type: object + type: array + description: + description: |- + Description string. + Description string + type: string + logo: + description: |- + Logo URL. + Logo URL + type: string name: - description: Name of the referenced object. + description: |- + The name of the Organization. + The name of the Organization + type: string + twitter: + description: |- + Twitter handle. + Twitter handle + type: string + website: + description: |- + Website link. + Website link type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -161,21 +246,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -185,17 +270,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -205,21 +292,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -234,21 +321,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -259,14 +347,15 @@ spec: - 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. + 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. @@ -281,21 +370,84 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' status: description: OrganizationStatus defines the observed state of Organization. properties: atProvider: properties: + address: + description: |- + An object that has the address information. See Address below for more details. + Address information block + items: + properties: + address: + description: |- + Postal address. + Postal address + type: string + city: + description: |- + City name. + City name + type: string + country: + description: |- + Two letter country code (ISO 3166-1 alpha-2), e.g. US. + Two letter country code (ISO 3166-1 alpha-2), e.g. US + type: string + state: + description: |- + State name. + State name + type: string + zipCode: + description: |- + Zip Code. + Zip Code + type: string + type: object + type: array created: description: The timestamp for when the organization was created. type: string + description: + description: |- + Description string. + Description string + type: string id: description: The unique ID of the organization. type: string + logo: + description: |- + Logo URL. + Logo URL + type: string + name: + description: |- + The name of the Organization. + The name of the Organization + type: string + twitter: + description: |- + Twitter handle. + Twitter handle + type: string updated: description: The timestamp for the last time the organization was updated. type: string + website: + description: |- + Website link. + Website link + type: string type: object conditions: description: Conditions of the resource. @@ -303,14 +455,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -320,8 +481,9 @@ spec: 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. + 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 @@ -330,6 +492,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_ports.yaml b/package/crds/metal.equinix.jet.crossplane.io_ports.yaml index 0e95d54..3800c0d 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_ports.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_ports.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: ports.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Port is the Schema for the Ports 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -73,79 +82,6 @@ spec: nativeVlanId: description: UUID of native VLAN of the port type: string - nativeVlanIdRef: - description: Reference to a Vlan to populate nativeVlanId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - nativeVlanIdSelector: - description: Selector for a Vlan to populate nativeVlanId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object portId: description: UUID of the port to lookup type: string @@ -159,57 +95,92 @@ spec: items: type: string type: array + x-kubernetes-list-type: set vxlanIds: description: 'VLAN VXLAN ids to attach (example: [1000])' items: type: number type: array - required: - - bonded - - portId + x-kubernetes-list-type: set 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + bonded: + description: Flag indicating whether the port should be bonded + type: boolean + layer2: + description: Flag indicating whether the port is in layer2 (or + layer3) mode. The `layer2` flag can be set only for bond ports. + type: boolean + nativeVlanId: + description: UUID of native VLAN of the port type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + portId: + description: UUID of the port to lookup + type: string + resetOnDelete: + description: Behavioral setting to reset the port to default settings + (layer3 bonded mode without any vlan attached) before delete/destroy + type: boolean + vlanIds: + description: UUIDs VLANs to attach. To avoid jitter, use the UUID + and not the VXLAN + items: + type: string + type: array + x-kubernetes-list-type: set + vxlanIds: + description: 'VLAN VXLAN ids to attach (example: [1000])' + items: + type: number + type: array + x-kubernetes-list-type: set 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -219,21 +190,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -243,17 +214,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -263,21 +236,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -292,21 +265,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -317,14 +291,15 @@ spec: - 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. + 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. @@ -339,6 +314,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.bonded is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.bonded) + || (has(self.initProvider) && has(self.initProvider.bonded))' + - message: spec.forProvider.portId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.portId) + || (has(self.initProvider) && has(self.initProvider.portId))' status: description: PortStatus defines the observed state of Port. properties: @@ -350,26 +334,56 @@ spec: bondName: description: Name of the bond port type: string + bonded: + description: Flag indicating whether the port should be bonded + type: boolean disbondSupported: description: Flag indicating whether the port can be removed from a bond type: boolean id: type: string + layer2: + description: Flag indicating whether the port is in layer2 (or + layer3) mode. The `layer2` flag can be set only for bond ports. + type: boolean mac: description: MAC address of the port type: string name: description: Name of the port to look up, e.g. bond0, eth1 type: string + nativeVlanId: + description: UUID of native VLAN of the port + type: string networkType: description: One of layer2-bonded, layer2-individual, layer3, hybrid and hybrid-bonded. This attribute is only set on bond ports. type: string + portId: + description: UUID of the port to lookup + type: string + resetOnDelete: + description: Behavioral setting to reset the port to default settings + (layer3 bonded mode without any vlan attached) before delete/destroy + type: boolean type: description: Port type type: string + vlanIds: + description: UUIDs VLANs to attach. To avoid jitter, use the UUID + and not the VXLAN + items: + type: string + type: array + x-kubernetes-list-type: set + vxlanIds: + description: 'VLAN VXLAN ids to attach (example: [1000])' + items: + type: number + type: array + x-kubernetes-list-type: set type: object conditions: description: Conditions of the resource. @@ -377,14 +391,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -394,8 +417,9 @@ spec: 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. + 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 @@ -404,6 +428,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml b/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml index 0f2aace..05ed851 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: portvlanattachments.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -39,14 +38,19 @@ spec: 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' + 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' + 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 @@ -55,9 +59,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -67,79 +76,6 @@ spec: deviceId: description: ID of device to be assigned to the VLAN type: string - deviceIdRef: - description: Reference to a Device to populate deviceId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - deviceIdSelector: - description: Selector for a Device to populate deviceId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object forceBond: description: Add port back to the bond when this resource is removed. Default is false @@ -157,52 +93,75 @@ spec: vlanVnid: description: VXLAN Network Identifier, integer type: number - required: - - portName - - vlanVnid 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + deviceId: + description: ID of device to be assigned to the VLAN type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + forceBond: + description: Add port back to the bond when this resource is removed. + Default is false + type: boolean + native: + 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 + type: boolean + portName: + description: Name of network port to be assigned to the VLAN + type: string + vlanVnid: + description: VXLAN Network Identifier, integer + type: number 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -212,21 +171,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -236,17 +195,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -256,21 +217,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -285,21 +246,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -310,14 +272,15 @@ spec: - 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. + 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. @@ -332,19 +295,52 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.deviceId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) + || (has(self.initProvider) && has(self.initProvider.deviceId))' + - message: spec.forProvider.portName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.portName) + || (has(self.initProvider) && has(self.initProvider.portName))' + - message: spec.forProvider.vlanVnid is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.vlanVnid) + || (has(self.initProvider) && has(self.initProvider.vlanVnid))' status: description: PortVlanAttachmentStatus defines the observed state of PortVlanAttachment. properties: atProvider: properties: + deviceId: + description: ID of device to be assigned to the VLAN + type: string + forceBond: + description: Add port back to the bond when this resource is removed. + Default is false + type: boolean id: type: string + native: + 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 + type: boolean portId: description: UUID of device port type: string + portName: + description: Name of network port to be assigned to the VLAN + type: string vlanId: description: UUID of VLAN API resource type: string + vlanVnid: + description: VXLAN Network Identifier, integer + type: number type: object conditions: description: Conditions of the resource. @@ -352,14 +348,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -369,8 +374,9 @@ spec: 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. + 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 @@ -379,6 +385,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml index 9bcd5d5..fa4f417 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: projectapikeys.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: ProjectAPIKey is the Schema for the ProjectAPIKeys 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,135 +73,80 @@ spec: forProvider: properties: description: - description: Description string for the Project API Key resource. + description: |- + Description string for the Project API Key resource. Description string for the API key type: string projectId: - description: UUID of the project where the API key is scoped to. + description: |- + UUID of the project where the API key is scoped to. UUID of project which the new API key is scoped to type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object readOnly: description: Flag indicating whether the API key shoud be read-only type: boolean - required: - - description - - readOnly 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + description: + description: |- + Description string for the Project API Key resource. + Description string for the API key type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + projectId: + description: |- + UUID of the project where the API key is scoped to. + UUID of project which the new API key is scoped to + type: string + readOnly: + description: Flag indicating whether the API key shoud be read-only + type: boolean 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -202,21 +156,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -226,17 +180,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -246,21 +202,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -275,21 +231,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -300,14 +257,15 @@ spec: - 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. + 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. @@ -322,13 +280,39 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.description is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.description) + || (has(self.initProvider) && has(self.initProvider.description))' + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' + - message: spec.forProvider.readOnly is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.readOnly) + || (has(self.initProvider) && has(self.initProvider.readOnly))' status: description: ProjectAPIKeyStatus defines the observed state of ProjectAPIKey. properties: atProvider: properties: + description: + description: |- + Description string for the Project API Key resource. + Description string for the API key + type: string id: type: string + projectId: + description: |- + UUID of the project where the API key is scoped to. + UUID of project which the new API key is scoped to + type: string + readOnly: + description: Flag indicating whether the API key shoud be read-only + type: boolean type: object conditions: description: Conditions of the resource. @@ -336,14 +320,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -353,8 +346,9 @@ spec: 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. + 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 @@ -363,6 +357,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_projects.yaml b/package/crds/metal.equinix.jet.crossplane.io_projects.yaml index 27eaa1f..a11f861 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projects.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projects.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: projects.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Project is the Schema for the Projects 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,31 +73,30 @@ spec: forProvider: properties: backendTransfer: - description: Enable or disable Backend Transfer, default is false. - Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), - default is false + description: |- + Enable or disable Backend Transfer, default is false. + Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false type: boolean bgpConfig: - description: Optional BGP settings. Refer to Equinix Metal guide - for BGP. Address information block + description: |- + Optional BGP settings. Refer to Equinix Metal guide for BGP. + Address information block items: properties: asn: - description: Autonomous System Number for local BGP deployment. + description: |- + Autonomous System Number for local BGP deployment. Autonomous System Number for local BGP deployment type: number deploymentType: - description: local or global, the local is likely to be - usable immediately, the global will need to be reviewed - by Equinix Metal engineers. The BGP deployment type, either - 'local' or 'global'. The local is likely to be usable - immediately, the global will need to be review by Equinix - Metal engineers + description: |- + local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers. + The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers type: string md5SecretRef: - description: Password for BGP session in plaintext (not - a checksum). Password for BGP session in plaintext (not - a checksum) + description: |- + Password for BGP session in plaintext (not a checksum). + Password for BGP session in plaintext (not a checksum) properties: key: description: The key to select. @@ -104,148 +112,129 @@ spec: - name - namespace type: object - required: - - asn - - deploymentType type: object type: array name: - description: The name of the project. The maximum length is 80 - characters The name of the project. The maximum length is 80 - characters + description: |- + The name of the project. The maximum length is 80 characters + The name of the project. The maximum length is 80 characters type: string organizationId: - description: The UUID of organization under which you want to - create the project. If you leave it out, the project will be - created under your the default organization of your account. + description: |- + The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. The UUID of organization under which the project is created type: string - organizationIdRef: - description: Reference to a Organization to populate organizationId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - organizationIdSelector: - description: Selector for a Organization to populate organizationId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object paymentMethodId: - 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). 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: |- + 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). + 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) type: string - required: - - name 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + backendTransfer: + description: |- + Enable or disable Backend Transfer, default is false. + Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false + type: boolean + bgpConfig: + description: |- + Optional BGP settings. Refer to Equinix Metal guide for BGP. + Address information block + items: + properties: + asn: + description: |- + Autonomous System Number for local BGP deployment. + Autonomous System Number for local BGP deployment + type: number + deploymentType: + description: |- + local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers. + The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers + type: string + md5SecretRef: + description: |- + Password for BGP session in plaintext (not a checksum). + Password for BGP session in plaintext (not a checksum) + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + type: object + type: array name: - description: Name of the referenced object. + description: |- + The name of the project. The maximum length is 80 characters + The name of the project. The maximum length is 80 characters + type: string + organizationId: + description: |- + The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. + The UUID of organization under which the project is created + type: string + paymentMethodId: + 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). + 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) type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -255,21 +244,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -279,17 +268,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -299,21 +290,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -328,21 +319,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -353,14 +345,15 @@ spec: - 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. + 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. @@ -375,36 +368,75 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' status: description: ProjectStatus defines the observed state of Project. properties: atProvider: properties: + backendTransfer: + description: |- + Enable or disable Backend Transfer, default is false. + Enable or disable [Backend Transfer](https://metal.equinix.com/developers/docs/networking/backend-transfer/), default is false + type: boolean bgpConfig: - description: Optional BGP settings. Refer to Equinix Metal guide - for BGP. Address information block + description: |- + Optional BGP settings. Refer to Equinix Metal guide for BGP. + Address information block items: properties: + asn: + description: |- + Autonomous System Number for local BGP deployment. + Autonomous System Number for local BGP deployment + type: number + deploymentType: + description: |- + local or global, the local is likely to be usable immediately, the global will need to be reviewed by Equinix Metal engineers. + The BGP deployment type, either 'local' or 'global'. The local is likely to be usable immediately, the global will need to be review by Equinix Metal engineers + type: string maxPrefix: - description: The maximum number of route filters allowed - per server. The maximum number of route filters allowed - per server + description: |- + The maximum number of route filters allowed per server. + The maximum number of route filters allowed per server type: number status: - description: status of BGP configuration in the project. + description: |- + status of BGP configuration in the project. Status of BGP configuration in the project type: string type: object type: array created: - description: The timestamp for when the project was created. The - timestamp for when the project was created + description: |- + The timestamp for when the project was created. + The timestamp for when the project was created type: string id: description: The unique ID of the project. type: string + name: + description: |- + The name of the project. The maximum length is 80 characters + The name of the project. The maximum length is 80 characters + type: string + organizationId: + description: |- + The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. + The UUID of organization under which the project is created + type: string + paymentMethodId: + 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). + 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) + type: string updated: - description: The timestamp for the last time the project was updated. + description: |- + The timestamp for the last time the project was updated. The timestamp for the last time the project was updated type: string type: object @@ -414,14 +446,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -431,8 +472,9 @@ spec: 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. + 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 @@ -441,6 +483,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml index 479282d..9c6c188 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: projectsshkeys.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: ProjectSSHKey is the Schema for the ProjectSSHKeys 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,135 +73,84 @@ spec: forProvider: properties: name: - description: The name of the SSH key for identification. The name - of the SSH key for identification + description: |- + The name of the SSH key for identification. + The name of the SSH key for identification type: string projectId: - description: The ID of parent project. The ID of parent project + description: |- + The ID of parent project. + The ID of parent project type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object publicKey: - description: The public key. If this is a file, it can be read - using the file interpolation function. The public key + description: |- + The public key. If this is a file, it can be read using the file interpolation function. + The public key type: string - required: - - name - - publicKey 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: name: - description: Name of the referenced object. + description: |- + The name of the SSH key for identification. + The name of the SSH key for identification + type: string + projectId: + description: |- + The ID of parent project. + The ID of parent project + type: string + publicKey: + description: |- + The public key. If this is a file, it can be read using the file interpolation function. + The public key type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -202,21 +160,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -226,17 +184,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -246,21 +206,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -275,21 +235,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -300,14 +261,15 @@ spec: - 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. + 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. @@ -322,28 +284,60 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' + - message: spec.forProvider.publicKey is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.publicKey) + || (has(self.initProvider) && has(self.initProvider.publicKey))' status: description: ProjectSSHKeyStatus defines the observed state of ProjectSSHKey. properties: atProvider: properties: created: - description: The timestamp for when the SSH key was created. The - timestamp for when the SSH key was created + description: |- + The timestamp for when the SSH key was created. + The timestamp for when the SSH key was created type: string fingerprint: - description: The fingerprint of the SSH key. The fingerprint of - the SSH key + description: |- + The fingerprint of the SSH key. + The fingerprint of the SSH key type: string id: description: The unique ID of the key. type: string + name: + description: |- + The name of the SSH key for identification. + The name of the SSH key for identification + type: string ownerId: - description: The ID of parent project (same as project_id). The - UUID of the Equinix Metal API User who owns this key + description: |- + The ID of parent project (same as project_id). + The UUID of the Equinix Metal API User who owns this key + type: string + projectId: + description: |- + The ID of parent project. + The ID of parent project + type: string + publicKey: + description: |- + The public key. If this is a file, it can be read using the file interpolation function. + The public key type: string updated: - description: The timestamp for the last time the SSH key was updated. + description: |- + The timestamp for the last time the SSH key was updated. The timestamp for the last time the SSH key was updated type: string type: object @@ -353,14 +347,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -370,8 +373,9 @@ spec: 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. + 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 @@ -380,6 +384,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml b/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml index ea4ea7c..b5dcd61 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: reservedipblocks.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: ReservedIPBlock is the Schema for the ReservedIPBlocks 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,14 +73,9 @@ spec: forProvider: properties: cidr: - description: Only valid as an argument and required when type - is vrf. The size of the network to reserve from an existing - VRF ip_range. cidr can only be specified with vrf_id. Range - is 22-31. Virtual Circuits require 30-31. Other VRF resources - must use a CIDR in the 22-29 range. 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: |- + Only valid as an argument and required when type is vrf. The size of the network to reserve from an existing VRF ip_range. cidr can only be specified with vrf_id. Range is 22-31. Virtual Circuits require 30-31. Other VRF resources must use a CIDR in the 22-29 range. + 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 type: number customData: description: This may be helpful for self-managed IPAM. The object @@ -79,255 +83,170 @@ spec: The object must be valid JSON. type: string description: - description: Arbitrary description. Arbitrary description + description: |- + Arbitrary description. + Arbitrary description type: string facility: - description: (Deprecated) Facility where to allocate the public - IP address block, makes sense only if type is public_ipv4 and - must be empty if type is global_ipv4. Conflicts with metro. - Use metro instead; read the facility to metro migration guide - 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: |- + (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide + 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 type: string metro: - description: Metro where to allocate the public IP address block, - makes sense only if type is public_ipv4 and must be empty if - type is global_ipv4. Conflicts with facility. 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: |- + Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + 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 type: string network: - description: Only valid as an argument and required when type - is vrf. An unreserved network address from an existing ip_range - in the specified VRF. an unreserved network address from an - existing vrf ip_range. `network` can only be specified with - vrf_id + description: |- + Only valid as an argument and required when type is vrf. An unreserved network address from an existing ip_range in the specified VRF. + an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id type: string projectId: - description: The metal project ID where to allocate the address - block. The metal project ID where to allocate the address block + description: |- + The metal project ID where to allocate the address block. + The metal project ID where to allocate the address block type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object quantity: - description: The number of allocated /32 addresses, a power of - 2. Required when type is not vrf. The number of allocated /32 - addresses, a power of 2 + description: |- + The number of allocated /32 addresses, a power of 2. Required when type is not vrf. + The number of allocated /32 addresses, a power of 2 type: number tags: - description: String list of tags. Tags attached to the reserved - block + description: |- + String list of tags. + Tags attached to the reserved block items: type: string type: array + x-kubernetes-list-type: set type: - description: One of global_ipv4, public_ipv4, or vrf. Defaults - to public_ipv4 for backward compatibility. Either global_ipv4, - public_ipv4, or vrf. Defaults to public_ipv4. + description: |- + One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility. + Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4. type: string vrfId: - description: Only valid and required when type is vrf. VRF ID - for type=vrf reservations. VRF ID for type=vrf reservations + description: |- + Only valid and required when type is vrf. VRF ID for type=vrf reservations. + VRF ID for type=vrf reservations type: string - vrfIdRef: - description: Reference to a Vrf to populate vrfId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - vrfIdSelector: - description: Selector for a Vrf to populate vrfId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object waitForState: - 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. 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: |- + 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. + 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. type: string 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + cidr: + description: |- + Only valid as an argument and required when type is vrf. The size of the network to reserve from an existing VRF ip_range. cidr can only be specified with vrf_id. Range is 22-31. Virtual Circuits require 30-31. Other VRF resources must use a CIDR in the 22-29 range. + 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 + type: number + customData: + description: This may be helpful for self-managed IPAM. The object + must be valid JSON. This may be helpful for self-managed IPAM. + The object must be valid JSON. + type: string + description: + description: |- + Arbitrary description. + Arbitrary description + type: string + facility: + description: |- + (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide + 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 + type: string + metro: + description: |- + Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + 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 + type: string + network: + description: |- + Only valid as an argument and required when type is vrf. An unreserved network address from an existing ip_range in the specified VRF. + an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id + type: string + projectId: + description: |- + The metal project ID where to allocate the address block. + The metal project ID where to allocate the address block + type: string + quantity: + description: |- + The number of allocated /32 addresses, a power of 2. Required when type is not vrf. + The number of allocated /32 addresses, a power of 2 + type: number + tags: + description: |- + String list of tags. + Tags attached to the reserved block + items: + type: string + type: array + x-kubernetes-list-type: set + type: + description: |- + One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility. + Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4. + type: string + vrfId: + description: |- + Only valid and required when type is vrf. VRF ID for type=vrf reservations. + VRF ID for type=vrf reservations + type: string + waitForState: + 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. + 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. type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -337,21 +256,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -361,17 +280,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -381,21 +302,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -410,21 +331,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -435,14 +357,15 @@ spec: - 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. + 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. @@ -457,6 +380,11 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: ReservedIPBlockStatus defines the observed state of ReservedIPBlock. properties: @@ -465,18 +393,39 @@ spec: address: type: string addressFamily: - description: Address family as integer. One of 4 or 6. Address - family as integer (4 or 6) + description: |- + Address family as integer. One of 4 or 6. + Address family as integer (4 or 6) + type: number + cidr: + description: |- + Only valid as an argument and required when type is vrf. The size of the network to reserve from an existing VRF ip_range. cidr can only be specified with vrf_id. Range is 22-31. Virtual Circuits require 30-31. Other VRF resources must use a CIDR in the 22-29 range. + 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 type: number cidrNotation: description: Address and mask in CIDR notation, e.g. 147.229.15.30/31. type: string + customData: + description: This may be helpful for self-managed IPAM. The object + must be valid JSON. This may be helpful for self-managed IPAM. + The object must be valid JSON. + type: string + description: + description: |- + Arbitrary description. + Arbitrary description + type: string + facility: + description: |- + (Deprecated) Facility where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with metro. Use metro instead; read the facility to metro migration guide + 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 + type: string gateway: type: string global: - description: Boolean flag whether addresses from a block are global - (i.e. can be assigned in any metro). Flag indicating whether - IP block is global, i.e. assignable in any location + description: |- + Boolean flag whether addresses from a block are global (i.e. can be assigned in any metro). + Flag indicating whether IP block is global, i.e. assignable in any location type: boolean id: description: The unique ID of the block. @@ -485,14 +434,59 @@ spec: type: boolean management: type: boolean + metro: + description: |- + Metro where to allocate the public IP address block, makes sense only if type is public_ipv4 and must be empty if type is global_ipv4. Conflicts with facility. + 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 + type: string netmask: - description: Mask in decimal notation, e.g. 255.255.255.0. Mask - in decimal notation, e.g. 255.255.255.0 + description: |- + Mask in decimal notation, e.g. 255.255.255.0. + Mask in decimal notation, e.g. 255.255.255.0 + type: string + network: + description: |- + Only valid as an argument and required when type is vrf. An unreserved network address from an existing ip_range in the specified VRF. + an unreserved network address from an existing vrf ip_range. `network` can only be specified with vrf_id + type: string + projectId: + description: |- + The metal project ID where to allocate the address block. + The metal project ID where to allocate the address block type: string public: - description: Boolean flag whether addresses from a block are public. + description: |- + Boolean flag whether addresses from a block are public. Flag indicating whether IP block is addressable from the Internet type: boolean + quantity: + description: |- + The number of allocated /32 addresses, a power of 2. Required when type is not vrf. + The number of allocated /32 addresses, a power of 2 + type: number + tags: + description: |- + String list of tags. + Tags attached to the reserved block + items: + type: string + type: array + x-kubernetes-list-type: set + type: + description: |- + One of global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4 for backward compatibility. + Either global_ipv4, public_ipv4, or vrf. Defaults to public_ipv4. + type: string + vrfId: + description: |- + Only valid and required when type is vrf. VRF ID for type=vrf reservations. + VRF ID for type=vrf reservations + type: string + waitForState: + 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. + 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. + type: string type: object conditions: description: Conditions of the resource. @@ -500,14 +494,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -517,8 +520,9 @@ spec: 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. + 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 @@ -527,6 +531,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml b/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml index 40afdb6..b3d4ae0 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: spotmarketrequests.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: SpotMarketRequest is the Schema for the SpotMarketRequests 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,29 +73,26 @@ spec: forProvider: properties: devicesMax: - description: Maximum number devices to be created. Maximum number - devices to be created + description: |- + Maximum number devices to be created. + Maximum number devices to be created type: number devicesMin: - description: Miniumum number devices to be created. Miniumum number - devices to be created + description: |- + Miniumum number devices to be created. + Miniumum number devices to be created type: number facilities: - description: (Deprecated) Facility IDs where devices should be - created. Use metro instead; read the facility to metro migration - guide Facility IDs where devices should be created + description: |- + (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide + Facility IDs where devices should be created items: type: string type: array instanceParameters: - description: 'Key/Value pairs of parameters for devices provisioned - from this request. Valid keys are: billing_cycle, plan, operating_system, - hostname, termination_time, always_pxe, description, features, - locked, project_ssh_keys, user_ssh_keys, userdata, customdata, - ipxe_script_url, tags. You can find each parameter description - in equinix_metal_device docs. Parameters for devices provisioned - from this request. You can find the parameter description from - the [equinix_metal_device doc](device.md)' + description: |- + Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs. + Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md) items: properties: alwaysPxe: @@ -127,115 +133,160 @@ spec: type: array userdata: type: string - required: - - billingCycle - - hostname - - operatingSystem - - plan type: object type: array maxBidPrice: - description: Maximum price user is willing to pay per hour per - device. Maximum price user is willing to pay per hour per device + description: |- + Maximum price user is willing to pay per hour per device. + Maximum price user is willing to pay per hour per device type: number metro: - description: Metro where devices should be created. Metro where - devices should be created + description: |- + Metro where devices should be created. + Metro where devices should be created type: string projectId: - description: Project ID. Project ID + description: |- + Project ID. + Project ID type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent + waitForDevices: + description: |- + On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. + On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed + type: boolean + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + devicesMax: + description: |- + Maximum number devices to be created. + Maximum number devices to be created + type: number + devicesMin: + description: |- + Miniumum number devices to be created. + Miniumum number devices to be created + type: number + facilities: + description: |- + (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide + Facility IDs where devices should be created + items: + type: string + type: array + instanceParameters: + description: |- + Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs. + Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md) + items: + properties: + alwaysPxe: + type: boolean + billingCycle: + type: string + customdata: + type: string + description: + type: string + features: + items: type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: + type: array + hostname: type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional + ipxeScriptUrl: + type: string + locked: + description: Blocks deletion of the SpotMarketRequest device + until the lock is disabled. + type: boolean + operatingSystem: + type: string + plan: + type: string + projectSshKeys: + items: type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent + type: array + tags: + items: type: string - type: object - type: object + type: array + userSshKeys: + items: + type: string + type: array + userdata: + type: string + type: object + type: array + maxBidPrice: + description: |- + Maximum price user is willing to pay per hour per device. + Maximum price user is willing to pay per hour per device + type: number + metro: + description: |- + Metro where devices should be created. + Metro where devices should be created + type: string + projectId: + description: |- + Project ID. + Project ID + type: string waitForDevices: - description: On resource creation wait until all desired devices - are active. On resource destruction wait until devices are removed. - On resource creation - wait until all desired devices are active, - on resource destruction - wait until devices are removed + description: |- + On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. + On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed type: boolean - required: - - devicesMax - - devicesMin - - instanceParameters - - maxBidPrice type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array providerConfigRef: default: name: default - description: ProviderConfigReference specifies how the provider that - will be used to create, observe, update, and delete this managed - resource should be configured. + 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. @@ -245,57 +296,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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 - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -305,17 +320,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -325,21 +342,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -354,21 +371,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -379,14 +397,15 @@ spec: - 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. + 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. @@ -401,31 +420,122 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.devicesMax is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.devicesMax) + || (has(self.initProvider) && has(self.initProvider.devicesMax))' + - message: spec.forProvider.devicesMin is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.devicesMin) + || (has(self.initProvider) && has(self.initProvider.devicesMin))' + - message: spec.forProvider.instanceParameters is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.instanceParameters) + || (has(self.initProvider) && has(self.initProvider.instanceParameters))' + - message: spec.forProvider.maxBidPrice is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.maxBidPrice) + || (has(self.initProvider) && has(self.initProvider.maxBidPrice))' + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: SpotMarketRequestStatus defines the observed state of SpotMarketRequest. properties: atProvider: properties: + devicesMax: + description: |- + Maximum number devices to be created. + Maximum number devices to be created + type: number + devicesMin: + description: |- + Miniumum number devices to be created. + Miniumum number devices to be created + type: number + facilities: + description: |- + (Deprecated) Facility IDs where devices should be created. Use metro instead; read the facility to metro migration guide + Facility IDs where devices should be created + items: + type: string + type: array id: description: The ID of the Spot Market Request. type: string instanceParameters: - description: 'Key/Value pairs of parameters for devices provisioned - from this request. Valid keys are: billing_cycle, plan, operating_system, - hostname, termination_time, always_pxe, description, features, - locked, project_ssh_keys, user_ssh_keys, userdata, customdata, - ipxe_script_url, tags. You can find each parameter description - in equinix_metal_device docs. Parameters for devices provisioned - from this request. You can find the parameter description from - the [equinix_metal_device doc](device.md)' + description: |- + Key/Value pairs of parameters for devices provisioned from this request. Valid keys are: billing_cycle, plan, operating_system, hostname, termination_time, always_pxe, description, features, locked, project_ssh_keys, user_ssh_keys, userdata, customdata, ipxe_script_url, tags. You can find each parameter description in equinix_metal_device docs. + Parameters for devices provisioned from this request. You can find the parameter description from the [equinix_metal_device doc](device.md) items: properties: + alwaysPxe: + type: boolean + billingCycle: + type: string + customdata: + type: string + description: + type: string + features: + items: + type: string + type: array + hostname: + type: string + ipxeScriptUrl: + type: string + locked: + description: Blocks deletion of the SpotMarketRequest device + until the lock is disabled. + type: boolean + operatingSystem: + type: string + plan: + type: string + projectSshKeys: + items: + type: string + type: array + tags: + items: + type: string + type: array terminationTime: type: string termintationTime: type: string + userSshKeys: + items: + type: string + type: array + userdata: + type: string type: object type: array + maxBidPrice: + description: |- + Maximum price user is willing to pay per hour per device. + Maximum price user is willing to pay per hour per device + type: number + metro: + description: |- + Metro where devices should be created. + Metro where devices should be created + type: string + projectId: + description: |- + Project ID. + Project ID + type: string + waitForDevices: + description: |- + On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. + On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed + type: boolean type: object conditions: description: Conditions of the resource. @@ -433,14 +543,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -450,8 +569,9 @@ spec: 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. + 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 @@ -460,6 +580,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_sshkeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_sshkeys.yaml index 803dfdc..5bf2b8f 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_sshkeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_sshkeys.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: sshkeys.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: SSHKey is the Schema for the SSHKeys 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,59 +73,74 @@ spec: forProvider: properties: name: - description: The name of the SSH key for identification The name - of the SSH key for identification + description: |- + The name of the SSH key for identification + The name of the SSH key for identification type: string publicKey: - description: The public key. If this is a file, it can be read - using the file interpolation function The public key + description: |- + The public key. If this is a file, it can be read using the file interpolation function + The public key type: string - required: - - name - - publicKey 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: name: - description: Name of the referenced object. + description: |- + The name of the SSH key for identification + The name of the SSH key for identification + type: string + publicKey: + description: |- + The public key. If this is a file, it can be read using the file interpolation function + The public key type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -126,21 +150,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -150,17 +174,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -170,21 +196,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -199,21 +225,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -224,14 +251,15 @@ spec: - 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. + 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. @@ -246,28 +274,51 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.publicKey is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.publicKey) + || (has(self.initProvider) && has(self.initProvider.publicKey))' status: description: SSHKeyStatus defines the observed state of SSHKey. properties: atProvider: properties: created: - description: The timestamp for when the SSH key was created. The - timestamp for when the SSH key was created + description: |- + The timestamp for when the SSH key was created. + The timestamp for when the SSH key was created type: string fingerprint: - description: The fingerprint of the SSH key. The fingerprint of - the SSH key + description: |- + The fingerprint of the SSH key. + The fingerprint of the SSH key type: string id: description: The unique ID of the key. type: string + name: + description: |- + The name of the SSH key for identification + The name of the SSH key for identification + type: string ownerId: - description: The UUID of the Equinix Metal API User who owns this - key. The UUID of the Equinix Metal API User who owns this key + description: |- + The UUID of the Equinix Metal API User who owns this key. + The UUID of the Equinix Metal API User who owns this key + type: string + publicKey: + description: |- + The public key. If this is a file, it can be read using the file interpolation function + The public key type: string updated: - description: The timestamp for the last time the SSH key was updated. + description: |- + The timestamp for the last time the SSH key was updated. The timestamp for the last time the SSH key was updated type: string type: object @@ -277,14 +328,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -294,8 +354,9 @@ spec: 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. + 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 @@ -304,6 +365,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_userapikeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_userapikeys.yaml index aed57bf..680263a 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_userapikeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_userapikeys.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: userapikeys.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: UserAPIKey is the Schema for the UserAPIKeys 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,58 +73,70 @@ spec: forProvider: properties: description: - description: Description string for the User API Key resource. + description: |- + Description string for the User API Key resource. Description string for the API key type: string readOnly: description: Flag indicating whether the API key shoud be read-only type: boolean - required: - - description - - readOnly 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + description: + description: |- + Description string for the User API Key resource. + Description string for the API key type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + readOnly: + description: Flag indicating whether the API key shoud be read-only + type: boolean 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -125,21 +146,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -149,17 +170,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -169,21 +192,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -198,21 +221,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -223,14 +247,15 @@ spec: - 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. + 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. @@ -245,16 +270,34 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.description is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.description) + || (has(self.initProvider) && has(self.initProvider.description))' + - message: spec.forProvider.readOnly is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.readOnly) + || (has(self.initProvider) && has(self.initProvider.readOnly))' status: description: UserAPIKeyStatus defines the observed state of UserAPIKey. properties: atProvider: properties: + description: + description: |- + Description string for the User API Key resource. + Description string for the API key + type: string id: type: string + readOnly: + description: Flag indicating whether the API key shoud be read-only + type: boolean userId: - description: UUID of the owner of the API key. UUID of user owning - this key + description: |- + UUID of the owner of the API key. + UUID of user owning this key type: string type: object conditions: @@ -263,14 +306,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -280,8 +332,9 @@ spec: 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. + 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 @@ -290,6 +343,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml b/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml index 5cf760a..bad0ba1 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: virtualcircuits.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: VirtualCircuit is the Schema for the VirtualCircuits 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,94 +73,28 @@ spec: forProvider: properties: connectionId: - description: UUID of Connection where the VC is scoped to. UUID - of Connection where the VC is scoped to + description: |- + (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + UUID of Connection where the VC is scoped to. Only used for dedicated connections type: string - connectionIdRef: - description: Reference to a Connection to populate connectionId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - connectionIdSelector: - description: Selector for a Connection to populate connectionId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object customerIp: - description: The Customer IP address which the CSR switch will - peer with. Will default to the other usable IP in the subnet. - The Customer IP address which the CSR switch will peer with. - Will default to the other usable IP in the subnet. + description: |- + (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + type: string + customerIpv6: + description: |- + (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. type: string description: - description: Description for the Virtual Circuit resource. Description - of the Virtual Circuit resource + description: |- + (String) Description of the Virtual Circuit resource + Description of the Virtual Circuit resource type: string md5SecretRef: - description: The password that can be set for the VRF BGP peer + description: |- + (String, Sensitive) The password that can be set for the VRF BGP peer The password that can be set for the VRF BGP peer properties: key: @@ -169,330 +112,253 @@ spec: - namespace type: object metalIp: - description: The Metal IP address for the SVI (Switch Virtual - Interface) of the VirtualCircuit. Will default to the first - usable IP in the subnet. The Metal IP address for the SVI (Switch - Virtual Interface) of the VirtualCircuit. Will default to the - first usable IP in the subnet. + description: |- + (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + type: string + metalIpv6: + description: |- + (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. type: string name: - description: Name of the Virtual Circuit resource. Name of the - Virtual Circuit resource + description: |- + (String) Name of the Virtual Circuit resource + Name of the Virtual Circuit resource type: string nniVlan: - description: Equinix Metal network-to-network VLAN ID. Equinix - Metal network-to-network VLAN ID (optional when the connection - has mode=tunnel) + description: |- + to-network VLAN ID + Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) type: number peerAsn: - 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. 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: |- + (Number) 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. + 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. type: number portId: - description: UUID of the Connection Port where the VC is scoped - to. UUID of the Connection Port where the VC is scoped to + description: |- + (String) UUID of the Connection Port where the VC is scoped to + UUID of the Connection Port where the VC is scoped to type: string projectId: - description: UUID of the Project where the VC is scoped to. UUID - of the Project where the VC is scoped to + description: |- + (String) UUID of the Project where the VC is scoped to + UUID of the Project where the VC is scoped to type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object speed: - description: Speed of the Virtual Circuit resource. Description - of the Virtual Circuit speed. This is for information purposes - and is computed when the connection type is shared. + description: |- + (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. type: string subnet: - 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. 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. * For a /31 block, it - will only have two IP addresses, which will be used for the - metal_ip and customer_ip. * 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: |- + (String) 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + type: string + subnetIpv6: + description: |- + (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. + A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. type: string tags: - description: Tags for the Virtual Circuit resource. Tags attached - to the virtual circuit + description: |- + (List of String) Tags attached to the virtual circuit + Tags attached to the virtual circuit items: type: string type: array + virtualCircuitId: + description: |- + (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + type: string vlanId: - description: UUID of the VLAN to associate. UUID of the VLAN to - associate + description: |- + (String) UUID of the VLAN to associate + UUID of the VLAN to associate type: string - vlanIdRef: - description: Reference to a Vlan to populate vlanId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - vlanIdSelector: - description: Selector for a Vlan to populate vlanId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object vrfId: - description: UUID of the VRF to associate. UUID of the VRF to - associate + description: |- + (String) UUID of the VRF to associate + UUID of the VRF to associate + type: string + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + connectionId: + description: |- + (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + UUID of Connection where the VC is scoped to. Only used for dedicated connections type: string - vrfIdRef: - description: Reference to a Vrf to populate vrfId. + customerIp: + description: |- + (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + type: string + customerIpv6: + description: |- + (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + type: string + description: + description: |- + (String) Description of the Virtual Circuit resource + Description of the Virtual Circuit resource + type: string + md5SecretRef: + description: |- + (String, Sensitive) The password that can be set for the VRF BGP peer + The password that can be set for the VRF BGP peer properties: + key: + description: The key to select. + type: string name: - description: Name of the referenced object. + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object required: + - key - name + - namespace type: object - vrfIdSelector: - description: Selector for a Vrf to populate vrfId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object - required: - - portId + metalIp: + description: |- + (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + type: string + metalIpv6: + description: |- + (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + type: string + name: + description: |- + (String) Name of the Virtual Circuit resource + Name of the Virtual Circuit resource + type: string + nniVlan: + description: |- + to-network VLAN ID + Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) + type: number + peerAsn: + description: |- + (Number) 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. + 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. + type: number + portId: + description: |- + (String) UUID of the Connection Port where the VC is scoped to + UUID of the Connection Port where the VC is scoped to + type: string + projectId: + description: |- + (String) UUID of the Project where the VC is scoped to + UUID of the Project where the VC is scoped to + type: string + speed: + description: |- + (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + type: string + subnet: + description: |- + (String) 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + type: string + subnetIpv6: + description: |- + (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. + A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. + type: string + tags: + description: |- + (List of String) Tags attached to the virtual circuit + Tags attached to the virtual circuit + items: + type: string + type: array + virtualCircuitId: + description: |- + (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + type: string + vlanId: + description: |- + (String) UUID of the VLAN to associate + UUID of the VLAN to associate + type: string + vrfId: + description: |- + (String) UUID of the VRF to associate + UUID of the VRF to associate + type: string type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array providerConfigRef: default: name: default - description: ProviderConfigReference specifies how the provider that - will be used to create, observe, update, and delete this managed - resource should be configured. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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`' + 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. @@ -502,21 +368,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -526,17 +392,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -546,21 +414,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -575,21 +443,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -600,14 +469,15 @@ spec: - 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. + 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. @@ -622,25 +492,138 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.portId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.portId) + || (has(self.initProvider) && has(self.initProvider.portId))' + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: VirtualCircuitStatus defines the observed state of VirtualCircuit. properties: atProvider: properties: + connectionId: + description: |- + (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections + UUID of Connection where the VC is scoped to. Only used for dedicated connections + type: string + customerIp: + description: |- + (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. + type: string + customerIpv6: + description: |- + (String) The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + The Customer IPv6 address which the CSR switch will peer with. Will default to the other usable IP in the IPv6 subnet. + type: string + description: + description: |- + (String) Description of the Virtual Circuit resource + Description of the Virtual Circuit resource + type: string id: + description: (String) The ID of this resource. + type: string + metalIp: + description: |- + (String) The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. + The Metal IP address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the subnet. type: string + metalIpv6: + description: |- + (String) The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + The Metal IPv6 address for the SVI (Switch Virtual Interface) of the VirtualCircuit. Will default to the first usable IP in the IPv6 subnet. + type: string + name: + description: |- + (String) Name of the Virtual Circuit resource + Name of the Virtual Circuit resource + type: string + nniVlan: + description: |- + to-network VLAN ID + Equinix Metal network-to-network VLAN ID (optional when the connection has mode=tunnel) + type: number nniVnid: - description: NNI VLAN parameters, see the documentation for Equinix - Fabric. Nni VLAN ID parameter, see https://metal.equinix.com/developers/docs/networking/fabric/ + description: |- + (Number) Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + Nni VLAN ID parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + type: number + peerAsn: + description: |- + (Number) 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. + 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. type: number + portId: + description: |- + (String) UUID of the Connection Port where the VC is scoped to + UUID of the Connection Port where the VC is scoped to + type: string + projectId: + description: |- + (String) UUID of the Project where the VC is scoped to + UUID of the Project where the VC is scoped to + type: string + speed: + description: |- + (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. + type: string status: - description: Status of the virtal circuit. Status of the virtual - circuit resource + description: |- + (String) Status of the virtual circuit resource + Status of the virtual circuit resource + type: string + subnet: + description: |- + (String) 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + 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. + * For a /31 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * 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. + type: string + subnetIpv6: + description: |- + (String) A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. + A subnet from one of the IPv6 blocks associated with the VRF that we will help create an IP reservation for. Can only be either a /126 or /127. + * For a /127 block, it will only have two IP addresses, which will be used for the metal_ip and customer_ip. + * For a /126 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. + type: string + tags: + description: |- + (List of String) Tags attached to the virtual circuit + Tags attached to the virtual circuit + items: + type: string + type: array + virtualCircuitId: + description: |- + (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + type: string + vlanId: + description: |- + (String) UUID of the VLAN to associate + UUID of the VLAN to associate type: string vnid: - description: VNID VLAN parameter, see the documentation for Equinix - Fabric. VNID VLAN parameter, see https://metal.equinix.com/developers/docs/networking/fabric/ + description: |- + (Number) VNID VLAN parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ + VNID VLAN parameter, see https://deploy.equinix.com/developers/docs/metal/interconnections/introduction/ type: number + vrfId: + description: |- + (String) UUID of the VRF to associate + UUID of the VRF to associate + type: string type: object conditions: description: Conditions of the resource. @@ -648,14 +631,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -665,8 +657,9 @@ spec: 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. + 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 @@ -675,6 +668,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml b/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml index 444072c..2cbfcc6 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: vlans.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Vlan is the Schema for the Vlans 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,140 +73,104 @@ spec: forProvider: properties: description: - description: Description string. Description string + description: |- + Description string. + Description string type: string facility: - description: (Deprecated) Facility where to create the VLAN. Use - metro instead; read the facility to metro migration guide Facility - where to create the VLAN + description: |- + (Deprecated) Facility where to create the VLAN. Use metro instead; read the facility to metro migration guide + Facility where to create the VLAN type: string metro: - description: Metro in which to create the VLAN Metro in which - to create the VLAN + description: |- + Metro in which to create the VLAN + Metro in which to create the VLAN type: string projectId: - description: ID of parent project. ID of parent project + description: |- + ID of parent project. + ID of parent project type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object vxlan: - description: VLAN ID, must be unique in metro. VLAN ID, must be - unique in metro + description: |- + VLAN ID, must be unique in metro. + VLAN ID, must be unique in metro type: number 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. + description: + description: |- + Description string. + Description string type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name + facility: + description: |- + (Deprecated) Facility where to create the VLAN. Use metro instead; read the facility to metro migration guide + Facility where to create the VLAN + type: string + metro: + description: |- + Metro in which to create the VLAN + Metro in which to create the VLAN + type: string + projectId: + description: |- + ID of parent project. + ID of parent project + type: string + vxlan: + description: |- + VLAN ID, must be unique in metro. + VLAN ID, must be unique in metro + type: number 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -207,21 +180,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -231,17 +204,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -251,21 +226,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -280,21 +255,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -305,14 +281,15 @@ spec: - 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. + 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. @@ -327,14 +304,44 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: VlanStatus defines the observed state of Vlan. properties: atProvider: properties: + description: + description: |- + Description string. + Description string + type: string + facility: + description: |- + (Deprecated) Facility where to create the VLAN. Use metro instead; read the facility to metro migration guide + Facility where to create the VLAN + type: string id: description: ID of the virtual network. type: string + metro: + description: |- + Metro in which to create the VLAN + Metro in which to create the VLAN + type: string + projectId: + description: |- + ID of parent project. + ID of parent project + type: string + vxlan: + description: |- + VLAN ID, must be unique in metro. + VLAN ID, must be unique in metro + type: number type: object conditions: description: Conditions of the resource. @@ -342,14 +349,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -359,8 +375,9 @@ spec: 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. + 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 @@ -369,6 +386,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml b/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml index e55a1c5..e125799 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: vrves.metal.equinix.jet.crossplane.io spec: group: metal.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Vrf is the Schema for the Vrfs 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,155 +73,120 @@ spec: forProvider: properties: description: - description: Description of the VRF. Description of the VRF + description: |- + Description of the VRF. + Description of the VRF type: string ipRanges: - 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. - 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: |- + 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. + 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. items: type: string type: array + x-kubernetes-list-type: set localAsn: - description: The 4-byte ASN set on the VRF. The 4-byte ASN set - on the VRF. + description: |- + The 4-byte ASN set on the VRF. + The 4-byte ASN set on the VRF. type: number metro: - description: Metro ID or Code where the VRF will be deployed. + description: |- + Metro ID or Code where the VRF will be deployed. Metro Code type: string name: - description: User-supplied name of the VRF, unique to the project + description: |- + User-supplied name of the VRF, unique to the project User-supplied name of the VRF, unique to the project type: string projectId: - description: Project ID where the VRF will be deployed. Project - ID + description: |- + Project ID where the VRF will be deployed. + Project ID type: string - projectIdRef: - description: Reference to a Project to populate projectId. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - projectIdSelector: - description: Selector for a Project to populate projectId. - properties: - matchControllerRef: - description: MatchControllerRef ensures an object with the - same controller reference as the selecting object is selected. - type: boolean - matchLabels: - additionalProperties: - type: string - description: MatchLabels ensures an object with matching labels - is selected. - type: object - policy: - description: Policies for selection. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - type: object - required: - - metro - - name 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + description: + description: |- + Description of the VRF. + Description of the VRF + type: string + ipRanges: + 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. + 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. + items: + type: string + type: array + x-kubernetes-list-type: set + localAsn: + description: |- + The 4-byte ASN set on the VRF. + The 4-byte ASN set on the VRF. + type: number + metro: + description: |- + Metro ID or Code where the VRF will be deployed. + Metro Code + type: string name: - description: Name of the referenced object. + description: |- + User-supplied name of the VRF, unique to the project + User-supplied name of the VRF, unique to the project + type: string + projectId: + description: |- + Project ID where the VRF will be deployed. + Project ID type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -222,21 +196,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -246,17 +220,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -266,21 +242,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -295,21 +271,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -320,14 +297,15 @@ spec: - 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. + 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. @@ -342,13 +320,59 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.metro is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.metro) + || (has(self.initProvider) && has(self.initProvider.metro))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.projectId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) + || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: VrfStatus defines the observed state of Vrf. properties: atProvider: properties: + description: + description: |- + Description of the VRF. + Description of the VRF + type: string id: type: string + ipRanges: + 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. + 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. + items: + type: string + type: array + x-kubernetes-list-type: set + localAsn: + description: |- + The 4-byte ASN set on the VRF. + The 4-byte ASN set on the VRF. + type: number + metro: + description: |- + Metro ID or Code where the VRF will be deployed. + Metro Code + type: string + name: + description: |- + User-supplied name of the VRF, unique to the project + User-supplied name of the VRF, unique to the project + type: string + projectId: + description: |- + Project ID where the VRF will be deployed. + Project ID + type: string type: object conditions: description: Conditions of the resource. @@ -356,14 +380,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -373,8 +406,9 @@ spec: 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. + 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 @@ -383,6 +417,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_acltemplates.yaml b/package/crds/network.equinix.jet.crossplane.io_acltemplates.yaml index f392626..5ff5c9f 100644 --- a/package/crds/network.equinix.jet.crossplane.io_acltemplates.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_acltemplates.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: acltemplates.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: ACLTemplate is the Schema for the ACLTemplates 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,116 +73,174 @@ spec: forProvider: properties: description: - description: ACL template description, up to 200 characters. ACL - template description, up to 200 characters + description: |- + ACL template description, up to 200 characters. + ACL template description, up to 200 characters type: string inboundRule: - description: One or more rules to specify allowed inbound traffic. - Rules are ordered, matching traffic rule stops processing subsequent - ones. One or more rules to specify allowed inbound traffic. - Rules are ordered, matching traffic rule stops processing subsequent - ones. + description: |- + One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. items: properties: description: - description: Inbound rule description, up to 200 characters. + description: |- + Inbound rule description, up to 200 characters. Inbound rule description, up to 200 characters type: string dstPort: - description: Inbound traffic destination ports. Allowed - values are a comma separated list of ports, e.g., 20,22,23, - port range, e.g., 1023-1040 or word any. Inbound traffic - destination ports. Either up to 10, comma separated ports - or port range or any word + description: |- + Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word type: string protocol: - description: 'Inbound traffic protocol. One of IP, TCP, - UDP. Inbound traffic protocol. One of: `IP`, `TCP`, `UDP`' + description: |- + Inbound traffic protocol. One of IP, TCP, UDP. + Inbound traffic protocol. One of: `IP`, `TCP`, `UDP` type: string srcPort: - description: Inbound traffic source ports. Allowed values - are a comma separated list of ports, e.g., 20,22,23, port - range, e.g., 1023-1040 or word any. Inbound traffic source - ports. Either up to 10, comma separated ports or port - range or any word + description: |- + Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word type: string subnet: - description: Inbound traffic source IP subnet in CIDR format. + description: |- + Inbound traffic source IP subnet in CIDR format. Inbound traffic source IP subnet in CIDR format type: string subnets: - description: (Deprecated) Inbound traffic source IP subnets - in CIDR format. Inbound traffic source IP subnets in CIDR - format + description: |- + (Deprecated) Inbound traffic source IP subnets in CIDR format. + Inbound traffic source IP subnets in CIDR format items: type: string type: array - required: - - dstPort - - protocol - - srcPort type: object type: array metroCode: - description: (Deprecated) ACL template location metro code. ACL - template location metro code + description: |- + (Deprecated) ACL template location metro code. + ACL template location metro code type: string name: - description: ACL template name. ACL template name + description: |- + ACL template name. + ACL template name type: string projectId: - description: Unique Identifier for the project resource where - the acl template is scoped to.If you leave it out, the ACL template - will be created under the default project id of your organization. - The unique identifier of Project Resource to which ACL template - is scoped to + description: |- + Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization. + The unique identifier of Project Resource to which ACL template is scoped to type: string - required: - - inboundRule - - name 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + description: + description: |- + ACL template description, up to 200 characters. + ACL template description, up to 200 characters + type: string + inboundRule: + description: |- + One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + items: + properties: + description: + description: |- + Inbound rule description, up to 200 characters. + Inbound rule description, up to 200 characters + type: string + dstPort: + description: |- + Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word + type: string + protocol: + description: |- + Inbound traffic protocol. One of IP, TCP, UDP. + Inbound traffic protocol. One of: `IP`, `TCP`, `UDP` + type: string + srcPort: + description: |- + Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word + type: string + subnet: + description: |- + Inbound traffic source IP subnet in CIDR format. + Inbound traffic source IP subnet in CIDR format + type: string + subnets: + description: |- + (Deprecated) Inbound traffic source IP subnets in CIDR format. + Inbound traffic source IP subnets in CIDR format + items: + type: string + type: array + type: object + type: array + metroCode: + description: |- + (Deprecated) ACL template location metro code. + ACL template location metro code + type: string name: - description: Name of the referenced object. + description: |- + ACL template name. + ACL template name + type: string + projectId: + description: |- + Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization. + The unique identifier of Project Resource to which ACL template is scoped to type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -183,21 +250,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -207,17 +274,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -227,21 +296,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -256,21 +325,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -281,14 +351,15 @@ spec: - 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. + 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. @@ -303,19 +374,33 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.inboundRule is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.inboundRule) + || (has(self.initProvider) && has(self.initProvider.inboundRule))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' status: description: ACLTemplateStatus defines the observed state of ACLTemplate. properties: atProvider: properties: + description: + description: |- + ACL template description, up to 200 characters. + ACL template description, up to 200 characters + type: string deviceAclStatus: - description: Status of ACL template provisioning process, where - template was applied. One of PROVISIONING, PROVISIONED. Status - of ACL template provisioning process on a device, where template - was applied + description: |- + Status of ACL template provisioning process, where template was applied. One of PROVISIONING, PROVISIONED. + Status of ACL template provisioning process on a device, where template was applied type: string deviceDetails: - description: List of the devices where the ACL template is applied. + description: |- + List of the devices where the ACL template is applied. Device Details to which ACL template is assigned to. items: properties: @@ -332,20 +417,33 @@ spec: type: object type: array deviceId: - description: (Deprecated) Identifier of a network device where - template was applied. Identifier of a network device where template - was applied + description: |- + (Deprecated) Identifier of a network device where template was applied. + Identifier of a network device where template was applied type: string id: type: string inboundRule: - description: One or more rules to specify allowed inbound traffic. - Rules are ordered, matching traffic rule stops processing subsequent - ones. One or more rules to specify allowed inbound traffic. - Rules are ordered, matching traffic rule stops processing subsequent - ones. + description: |- + One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. + One or more rules to specify allowed inbound traffic. Rules are ordered, matching traffic rule stops processing subsequent ones. items: properties: + description: + description: |- + Inbound rule description, up to 200 characters. + Inbound rule description, up to 200 characters + type: string + dstPort: + description: |- + Inbound traffic destination ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + Inbound traffic destination ports. Either up to 10, comma separated ports or port range or any word + type: string + protocol: + description: |- + Inbound traffic protocol. One of IP, TCP, UDP. + Inbound traffic protocol. One of: `IP`, `TCP`, `UDP` + type: string sequenceNumber: description: Inbound rule sequence number type: number @@ -353,11 +451,44 @@ spec: description: Type of traffic source used in a given inbound rule type: string + srcPort: + description: |- + Inbound traffic source ports. Allowed values are a comma separated list of ports, e.g., 20,22,23, port range, e.g., 1023-1040 or word any. + Inbound traffic source ports. Either up to 10, comma separated ports or port range or any word + type: string + subnet: + description: |- + Inbound traffic source IP subnet in CIDR format. + Inbound traffic source IP subnet in CIDR format + type: string + subnets: + description: |- + (Deprecated) Inbound traffic source IP subnets in CIDR format. + Inbound traffic source IP subnets in CIDR format + items: + type: string + type: array type: object type: array + metroCode: + description: |- + (Deprecated) ACL template location metro code. + ACL template location metro code + type: string + name: + description: |- + ACL template name. + ACL template name + type: string + projectId: + description: |- + Unique Identifier for the project resource where the acl template is scoped to.If you leave it out, the ACL template will be created under the default project id of your organization. + The unique identifier of Project Resource to which ACL template is scoped to + type: string uuid: - description: Unique identifier of ACL template resource. Unique - identifier of ACL template resource + description: |- + Unique identifier of ACL template resource. + Unique identifier of ACL template resource type: string type: object conditions: @@ -366,14 +497,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -383,8 +523,9 @@ spec: 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. + 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 @@ -393,6 +534,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_bgps.yaml b/package/crds/network.equinix.jet.crossplane.io_bgps.yaml index 23f650e..c42874b 100644 --- a/package/crds/network.equinix.jet.crossplane.io_bgps.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_bgps.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: bgps.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: BGP is the Schema for the BGPs 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,8 +73,9 @@ spec: forProvider: properties: authenticationKeySecretRef: - description: shared key used for BGP peer authentication. Shared - key used for BGP peer authentication + description: |- + shared key used for BGP peer authentication. + Shared key used for BGP peer authentication properties: key: description: The key to select. @@ -82,73 +92,123 @@ spec: - namespace type: object connectionId: - description: identifier of a connection established between. network - device and remote service provider that will be used for peering. - Identifier of a connection established between network device - and remote service provider that will be used for peering + description: |- + identifier of a connection established between. network device and remote service provider that will be used for peering. + Identifier of a connection established between network device and remote service provider that will be used for peering type: string localAsn: - description: Local ASN number. Local ASN number + description: |- + Local ASN number. + Local ASN number type: number localIpAddress: - description: IP address in CIDR format of a local device. IP address - in CIDR format of a local device + description: |- + IP address in CIDR format of a local device. + IP address in CIDR format of a local device type: string remoteAsn: - description: Remote ASN number. Remote ASN number + description: |- + Remote ASN number. + Remote ASN number type: number remoteIpAddress: - description: IP address of remote peer. IP address of remote peer + description: |- + IP address of remote peer. + IP address of remote peer type: string - required: - - connectionId - - localAsn - - localIpAddress - - remoteAsn - - remoteIpAddress 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. + authenticationKeySecretRef: + description: |- + shared key used for BGP peer authentication. + Shared key used for BGP peer authentication properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional + key: + description: The key to select. type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. type: string + required: + - key + - name + - namespace type: object - required: - - name + connectionId: + description: |- + identifier of a connection established between. network device and remote service provider that will be used for peering. + Identifier of a connection established between network device and remote service provider that will be used for peering + type: string + localAsn: + description: |- + Local ASN number. + Local ASN number + type: number + localIpAddress: + description: |- + IP address in CIDR format of a local device. + IP address in CIDR format of a local device + type: string + remoteAsn: + description: |- + Remote ASN number. + Remote ASN number + type: number + remoteIpAddress: + description: |- + IP address of remote peer. + IP address of remote peer + type: string 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -158,21 +218,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -182,17 +242,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -202,21 +264,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -231,21 +293,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -256,14 +319,15 @@ spec: - 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. + 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. @@ -278,31 +342,78 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.connectionId is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.connectionId) + || (has(self.initProvider) && has(self.initProvider.connectionId))' + - message: spec.forProvider.localAsn is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.localAsn) + || (has(self.initProvider) && has(self.initProvider.localAsn))' + - message: spec.forProvider.localIpAddress is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.localIpAddress) + || (has(self.initProvider) && has(self.initProvider.localIpAddress))' + - message: spec.forProvider.remoteAsn is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.remoteAsn) + || (has(self.initProvider) && has(self.initProvider.remoteAsn))' + - message: spec.forProvider.remoteIpAddress is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.remoteIpAddress) + || (has(self.initProvider) && has(self.initProvider.remoteIpAddress))' status: description: BGPStatus defines the observed state of BGP. properties: atProvider: properties: + connectionId: + description: |- + identifier of a connection established between. network device and remote service provider that will be used for peering. + Identifier of a connection established between network device and remote service provider that will be used for peering + type: string deviceId: - description: unique identifier of a network device that is a local - peer in a given BGP peering configuration. Unique identifier - of a network device that is a local peer in a given BGP peering - configuration + description: |- + unique identifier of a network device that is a local peer in a given BGP peering configuration. + Unique identifier of a network device that is a local peer in a given BGP peering configuration type: string id: type: string + localAsn: + description: |- + Local ASN number. + Local ASN number + type: number + localIpAddress: + description: |- + IP address in CIDR format of a local device. + IP address in CIDR format of a local device + type: string provisioningStatus: - description: BGP peering configuration provisioning status, one - of PROVISIONING, PENDING_UPDATE, PROVISIONED, FAILED. BGP peering - configuration provisioning status + description: |- + BGP peering configuration provisioning status, one of PROVISIONING, PENDING_UPDATE, PROVISIONED, FAILED. + BGP peering configuration provisioning status + type: string + remoteAsn: + description: |- + Remote ASN number. + Remote ASN number + type: number + remoteIpAddress: + description: |- + IP address of remote peer. + IP address of remote peer type: string state: - description: BGP peer state, one of Idle, Connect, Active, OpenSent, - OpenConfirm, Established. BGP peer state + description: |- + BGP peer state, one of Idle, Connect, Active, OpenSent, OpenConfirm, Established. + BGP peer state type: string uuid: - description: BGP peering configuration unique identifier. BGP - peering configuration unique identifier + description: |- + BGP peering configuration unique identifier. + BGP peering configuration unique identifier type: string type: object conditions: @@ -311,14 +422,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -328,8 +448,9 @@ spec: 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. + 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 @@ -338,6 +459,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_devicelinks.yaml b/package/crds/network.equinix.jet.crossplane.io_devicelinks.yaml index 9a8b83b..f61fda1 100644 --- a/package/crds/network.equinix.jet.crossplane.io_devicelinks.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_devicelinks.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: devicelinks.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: DeviceLink is the Schema for the DeviceLinks 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -69,159 +78,271 @@ spec: items: properties: asn: - description: Device ASN number. Not required for self configured - devices. Device ASN number + description: |- + Device ASN number. Not required for self configured devices. + Device ASN number type: number id: - description: Device identifier. Device identifier + description: |- + Device identifier. + Device identifier type: string interfaceId: - description: Device network interface identifier to use - for device link connection. Device network interface identifier - to use for device link connection + description: |- + Device network interface identifier to use for device link connection. + Device network interface identifier to use for device link connection type: number - required: - - id type: object type: array link: - description: (Deprecated) definition of one or more, inter metro, - connections belonging to the device link. See Link section below - for more details. Definition of one or more, inter metro connections - belonging to the device link + description: |- + (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details. + Definition of one or more, inter metro connections belonging to the device link items: properties: accountNumber: - description: billing account number to be used for connection - charges Billing account number to be used for connection - charges + description: |- + billing account number to be used for connection charges + Billing account number to be used for connection charges type: string dstMetroCode: - description: connection destination metro code. Connection - destination metro code + description: |- + connection destination metro code. + Connection destination metro code type: string dstZoneCode: - description: (Deprecated) connection destination zone code - is not required. Connection destination zone code + description: |- + (Deprecated) connection destination zone code is not required. + Connection destination zone code type: string srcMetroCode: - description: connection source metro code. Connection source - metro code + description: |- + connection source metro code. + Connection source metro code type: string srcZoneCode: - description: (Deprecated) connection source zone code is - not required. Connection source zone code + description: |- + (Deprecated) connection source zone code is not required. + Connection source zone code type: string throughput: - description: connection throughput. Connection throughput + description: |- + connection throughput. + Connection throughput type: string throughputUnit: - description: connection throughput unit (Mbps or Gbps). + description: |- + connection throughput unit (Mbps or Gbps). Connection throughput unit type: string - required: - - accountNumber - - dstMetroCode - - srcMetroCode - - throughput - - throughputUnit type: object type: array metroLink: - description: definition of one or more, inter metro, connections - belonging to the device link. See Metro Link section below for - more details. Definition of one or more, inter or intra metro - connections belonging to the device link + description: |- + definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details. + Definition of one or more, inter or intra metro connections belonging to the device link items: properties: accountNumber: - description: billing account number to be used for connection - charges Billing account number to be used for connection - charges + description: |- + billing account number to be used for connection charges + Billing account number to be used for connection charges type: string metroCode: description: connection metro code. type: string throughput: - description: connection throughput. Connection throughput + description: |- + connection throughput. + Connection throughput type: string throughputUnit: - description: connection throughput unit (Mbps or Gbps). + description: |- + connection throughput unit (Mbps or Gbps). Connection throughput unit type: string - required: - - accountNumber - - metroCode - - throughput - - throughputUnit type: object type: array name: - description: device link name. Device link name + description: |- + device link name. + Device link name type: string projectId: - description: Unique Identifier for the project resource where - the device link is scoped to.If you leave it out, the device - link will be created under the default project id of your organization. + description: |- + Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization. project_id type: string redundancyType: - description: 'Whether the connection should be created through - Fabric''s primary or secondary port. Supported values: PRIMARY - (Default), SECONDARY, HYBRID (Optional) Whether the connection - should be created through Fabric''s primary or secondary port. - Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID`' + description: |- + Whether the connection should be created through Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID + (Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID` type: string subnet: - description: device link subnet in CIDR format. Not required for - link between self configured devices. Device link subnet CIDR. + description: |- + device link subnet in CIDR format. Not required for link between self configured devices. + Device link subnet CIDR. type: string - required: - - device - - name 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: + device: + description: definition of one or more devices belonging to the + device link. See Device section below for more details. + items: + properties: + asn: + description: |- + Device ASN number. Not required for self configured devices. + Device ASN number + type: number + id: + description: |- + Device identifier. + Device identifier + type: string + interfaceId: + description: |- + Device network interface identifier to use for device link connection. + Device network interface identifier to use for device link connection + type: number + type: object + type: array + link: + description: |- + (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details. + Definition of one or more, inter metro connections belonging to the device link + items: + properties: + accountNumber: + description: |- + billing account number to be used for connection charges + Billing account number to be used for connection charges + type: string + dstMetroCode: + description: |- + connection destination metro code. + Connection destination metro code + type: string + dstZoneCode: + description: |- + (Deprecated) connection destination zone code is not required. + Connection destination zone code + type: string + srcMetroCode: + description: |- + connection source metro code. + Connection source metro code + type: string + srcZoneCode: + description: |- + (Deprecated) connection source zone code is not required. + Connection source zone code + type: string + throughput: + description: |- + connection throughput. + Connection throughput + type: string + throughputUnit: + description: |- + connection throughput unit (Mbps or Gbps). + Connection throughput unit + type: string + type: object + type: array + metroLink: + description: |- + definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details. + Definition of one or more, inter or intra metro connections belonging to the device link + items: + properties: + accountNumber: + description: |- + billing account number to be used for connection charges + Billing account number to be used for connection charges + type: string + metroCode: + description: connection metro code. + type: string + throughput: + description: |- + connection throughput. + Connection throughput + type: string + throughputUnit: + description: |- + connection throughput unit (Mbps or Gbps). + Connection throughput unit + type: string + type: object + type: array name: - description: Name of the referenced object. + description: |- + device link name. + Device link name + type: string + projectId: + description: |- + Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization. + project_id + type: string + redundancyType: + description: |- + Whether the connection should be created through Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID + (Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID` + type: string + subnet: + description: |- + device link subnet in CIDR format. Not required for link between self configured devices. + Device link subnet CIDR. type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -231,21 +352,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -255,17 +376,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -275,21 +398,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -304,21 +427,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -329,14 +453,15 @@ spec: - 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. + 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. @@ -351,6 +476,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.device is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.device) + || (has(self.initProvider) && has(self.initProvider.device))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' status: description: DeviceLinkStatus defines the observed state of DeviceLink. properties: @@ -361,30 +495,134 @@ spec: device link. See Device section below for more details. items: properties: + asn: + description: |- + Device ASN number. Not required for self configured devices. + Device ASN number + type: number + id: + description: |- + Device identifier. + Device identifier + type: string + interfaceId: + description: |- + Device network interface identifier to use for device link connection. + Device network interface identifier to use for device link connection + type: number ipAddress: - description: IP address from device link subnet that was - assigned to the device Assigned IP address from device - link subnet + description: |- + IP address from device link subnet that was assigned to the device + Assigned IP address from device link subnet type: string status: - description: device link provisioning status on a given - device. One of PROVISIONING, PROVISIONED, DEPROVISIONING, - DEPROVISIONED, FAILED. Device link connection provisioning - status + description: |- + device link provisioning status on a given device. One of PROVISIONING, PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. + Device link connection provisioning status type: string type: object type: array id: description: Device identifier. type: string + link: + description: |- + (Deprecated) definition of one or more, inter metro, connections belonging to the device link. See Link section below for more details. + Definition of one or more, inter metro connections belonging to the device link + items: + properties: + accountNumber: + description: |- + billing account number to be used for connection charges + Billing account number to be used for connection charges + type: string + dstMetroCode: + description: |- + connection destination metro code. + Connection destination metro code + type: string + dstZoneCode: + description: |- + (Deprecated) connection destination zone code is not required. + Connection destination zone code + type: string + srcMetroCode: + description: |- + connection source metro code. + Connection source metro code + type: string + srcZoneCode: + description: |- + (Deprecated) connection source zone code is not required. + Connection source zone code + type: string + throughput: + description: |- + connection throughput. + Connection throughput + type: string + throughputUnit: + description: |- + connection throughput unit (Mbps or Gbps). + Connection throughput unit + type: string + type: object + type: array + metroLink: + description: |- + definition of one or more, inter metro, connections belonging to the device link. See Metro Link section below for more details. + Definition of one or more, inter or intra metro connections belonging to the device link + items: + properties: + accountNumber: + description: |- + billing account number to be used for connection charges + Billing account number to be used for connection charges + type: string + metroCode: + description: connection metro code. + type: string + throughput: + description: |- + connection throughput. + Connection throughput + type: string + throughputUnit: + description: |- + connection throughput unit (Mbps or Gbps). + Connection throughput unit + type: string + type: object + type: array + name: + description: |- + device link name. + Device link name + type: string + projectId: + description: |- + Unique Identifier for the project resource where the device link is scoped to.If you leave it out, the device link will be created under the default project id of your organization. + project_id + type: string + redundancyType: + description: |- + Whether the connection should be created through Fabric's primary or secondary port. Supported values: PRIMARY (Default), SECONDARY, HYBRID + (Optional) Whether the connection should be created through Fabric's primary or secondary port. Supported values: `PRIMARY` (Default), `SECONDARY`, `HYBRID` + type: string status: - description: Device link provisioning status. One of PROVISIONING, - PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. Device link - provisioning status + description: |- + Device link provisioning status. One of PROVISIONING, PROVISIONED, DEPROVISIONING, DEPROVISIONED, FAILED. + Device link provisioning status + type: string + subnet: + description: |- + device link subnet in CIDR format. Not required for link between self configured devices. + Device link subnet CIDR. type: string uuid: - description: Device link unique identifier. Device link unique - identifier + description: |- + Device link unique identifier. + Device link unique identifier type: string type: object conditions: @@ -393,14 +631,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -410,8 +657,9 @@ spec: 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. + 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 @@ -420,6 +668,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_devices.yaml b/package/crds/network.equinix.jet.crossplane.io_devices.yaml index 9876878..7b60ff7 100644 --- a/package/crds/network.equinix.jet.crossplane.io_devices.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_devices.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: devices.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: Device is the Schema for the Devices 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,54 +73,728 @@ spec: forProvider: properties: accountNumber: - description: Billing account number for a device. Device billing - account number + description: |- + Billing account number for a device. + Device billing account number + type: string + aclTemplateId: + description: |- + Identifier of a WAN interface ACL template that will be applied on the device. + Unique identifier of applied ACL template + type: string + additionalBandwidth: + description: |- + Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps). + Additional Internet bandwidth, in Mbps, that will be allocated to the device + type: number + byol: + description: |- + Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default). + Boolean value that determines device licensing mode: bring your own license or subscription (default) + type: boolean + cloudInitFileId: + description: |- + Identifier of a cloud init file that will be applied on the device. + Unique identifier of applied cloud init file + type: string + clusterDetails: + description: |- + An object that has the cluster details. See Cluster Details below for more details. + An object that has the cluster details + items: + properties: + clusterName: + description: |- + The name of the cluster device + The name of the cluster device + type: string + node0: + description: |- + An object that has node0 configuration. See Cluster Details - Nodes below for more details. + An object that has node0 details + items: + properties: + licenseFileId: + description: |- + License file id. This is necessary for Fortinet and Juniper clusters. + License file id. This is necessary for Fortinet and Juniper clusters + type: string + licenseTokenSecretRef: + description: |- + License token. This is necessary for Palo Alto clusters. + License token. This is necessary for Palo Alto clusters + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + vendorConfiguration: + description: |- + An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details. + An object that has fields relevant to the vendor of the cluster device + items: + properties: + activationKeySecretRef: + description: |- + Activation key. This is required for Velocloud clusters. + Activation key. This is required for Velocloud clusters + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + adminPasswordSecretRef: + 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. + 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 + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + controller1: + description: |- + System IP Address. Mandatory for the Fortinet SDWAN cluster device. + System IP Address. Mandatory for the Fortinet SDWAN cluster device + type: string + controllerFqdn: + description: |- + Controller fqdn. This is required for Velocloud clusters. + Controller fqdn. This is required for Velocloud clusters + type: string + hostname: + description: |- + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters. + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + type: string + licenseIdSecretRef: + description: |- + interface identifier. + License id. This field is relevant only for the BlueCat DNS and DHCP Server + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + licenseKeySecretRef: + description: License key. This field is relevant + only for the BlueCat DNS and DHCP Server + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaAuthKeySecretRef: + description: |- + Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaIpAddress: + description: |- + Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + type: string + privateAddress: + description: Private address. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateCidrMask: + description: Private CIDR Mask. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateGateway: + description: Private gateway. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + rootPasswordSecretRef: + description: |- + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + type: object + type: array + type: object + type: array + node1: + description: |- + An object that has node1 configuration. See Cluster Details - Nodes below for more details. + An object that has node1 details + items: + properties: + licenseFileId: + description: |- + Identifier of a license file that will be applied on a secondary device. + License file id. This is necessary for Fortinet and Juniper clusters + type: string + licenseTokenSecretRef: + description: |- + License Token can be provided for some device types o the device. + License token. This is necessary for Palo Alto clusters + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + vendorConfiguration: + description: |- + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + An object that has fields relevant to the vendor of the cluster device + items: + properties: + activationKeySecretRef: + description: |- + Activation key. This is required for Velocloud clusters. + Activation key. This is required for Velocloud clusters + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + adminPasswordSecretRef: + 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. + 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 + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + controller1: + description: |- + System IP Address. Mandatory for the Fortinet SDWAN cluster device. + System IP Address. Mandatory for the Fortinet SDWAN cluster device + type: string + controllerFqdn: + description: |- + Controller fqdn. This is required for Velocloud clusters. + Controller fqdn. This is required for Velocloud clusters + type: string + hostname: + description: |- + Secondary device hostname. + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + type: string + licenseIdSecretRef: + description: |- + interface identifier. + License id. This field is relevant only for the BlueCat DNS and DHCP Server + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + licenseKeySecretRef: + description: License key. This field is relevant + only for the BlueCat DNS and DHCP Server + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaAuthKeySecretRef: + description: |- + Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaIpAddress: + description: |- + Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + type: string + privateAddress: + description: Private address. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateCidrMask: + description: Private CIDR Mask. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateGateway: + description: Private gateway. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + rootPasswordSecretRef: + description: |- + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + type: object + type: array + type: object + type: array + type: object + type: array + connectivity: + description: |- + Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS + Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT + type: string + coreCount: + description: |- + Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.) + Number of CPU cores used by device + type: number + diverseDeviceId: + description: |- + Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices. + Unique ID of an existing device + type: string + hostname: + description: |- + Device hostname prefix. + Device hostname prefix + type: string + interfaceCount: + description: |- + Number of network interfaces on a device. If not specified, default number for a given device type will be used. + Number of network interfaces on a device. If not specified, default number for a given device type will be used + type: number + licenseFile: + description: |- + Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode. + Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + type: string + licenseFileId: + description: |- + Identifier of a license file that will be applied on the device. + Unique identifier of applied license file + type: string + licenseToken: + description: |- + License Token applicable for some device types in BYOL licensing mode. + License Token applicable for some device types in BYOL licensing mode + type: string + metroCode: + description: |- + Device location metro code. + Device location metro code + type: string + mgmtAclTemplateUuid: + description: |- + Identifier of an MGMT interface ACL template that will be applied on the device. + Unique identifier of applied MGMT ACL template + type: string + name: + description: |- + Device name. + Device name + type: string + notifications: + description: |- + List of email addresses that will receive device status notifications. + List of email addresses that will receive device status notifications + items: + type: string + type: array + x-kubernetes-list-type: set + orderReference: + description: |- + Name/number used to identify device order on the invoice. + Name/number used to identify device order on the invoice + type: string + packageCode: + description: |- + Device software package code. + Device software package code + type: string + projectId: + description: |- + Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. + The unique identifier of Project Resource to which device is scoped to + type: string + purchaseOrderNumber: + description: |- + Purchase order number associated with a device order. + Purchase order number associated with a device order + type: string + secondaryDevice: + description: |- + Definition of secondary device for redundant device configurations. See Secondary Device below for more details. + Definition of secondary device applicable for HA setup + items: + properties: + accountNumber: + description: |- + Billing account number for secondary device. + Device billing account number + type: string + aclTemplateId: + description: |- + Identifier of a WAN interface ACL template that will be applied on a secondary device. + Unique identifier of applied ACL template + type: string + additionalBandwidth: + description: |- + Additional Internet bandwidth, in Mbps, for a secondary device. + Additional Internet bandwidth, in Mbps, that will be allocated to the device + type: number + cloudInitFileId: + description: |- + Identifier of a cloud init file that will be applied on a secondary device. + Unique identifier of applied cloud init file + type: string + hostname: + description: |- + Secondary device hostname. + Device hostname prefix + type: string + licenseFile: + description: |- + Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode. + Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + type: string + licenseFileId: + description: |- + Identifier of a license file that will be applied on a secondary device. + Unique identifier of applied license file + type: string + licenseToken: + description: |- + License Token can be provided for some device types o the device. + License Token applicable for some device types in BYOL licensing mode + type: string + metroCode: + description: |- + Metro location of a secondary device. + Device location metro code + type: string + mgmtAclTemplateUuid: + description: |- + Identifier of an MGMT interface ACL template that will be applied on a secondary device. + Unique identifier of applied MGMT ACL template + type: string + name: + description: |- + Secondary device name. + Device name + type: string + notifications: + description: |- + List of email addresses that will receive notifications about secondary device. + List of email addresses that will receive device status notifications + items: + type: string + type: array + x-kubernetes-list-type: set + sshKey: + description: Definition of SSH key that will be provisioned + on a device + items: + properties: + keyName: + description: |- + Device name. + Reference by name to previously provisioned public SSH key + type: string + username: + description: |- + username associated with given key. + Username associated with given key + type: string + type: object + type: array + vendorConfiguration: + additionalProperties: + type: string + description: |- + Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress. + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + type: object + x-kubernetes-map-type: granular + wanInterfaceId: + description: |- + interface identifier. + device interface id picked for WAN + type: string + type: object + type: array + selfManaged: + description: |- + Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default). + Boolean value that determines device management mode: self-managed or subscription (default) + type: boolean + sshKey: + description: Definition of SSH key that will be provisioned on + a device + items: + properties: + keyName: + description: |- + Device name. + Reference by name to previously provisioned public SSH key + type: string + username: + description: |- + username associated with given key. + Username associated with given key + type: string + type: object + type: array + termLength: + description: |- + Device term length. + Device term length + type: number + throughput: + description: |- + Device license throughput. + Device license throughput + type: number + throughputUnit: + description: |- + License throughput unit. One of Mbps or Gbps. + Device license throughput unit (Mbps or Gbps) + type: string + typeCode: + description: |- + Device type code. + Device type code + type: string + vendorConfiguration: + additionalProperties: + type: string + description: |- + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + type: object + x-kubernetes-map-type: granular + version: + description: |- + Device software software version. + Device software software version + type: string + wanInterfaceId: + description: |- + interface identifier. + device interface id picked for WAN + type: string + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + accountNumber: + description: |- + Billing account number for a device. + Device billing account number type: string aclTemplateId: - description: Identifier of a WAN interface ACL template that will - be applied on the device. Unique identifier of applied ACL template + description: |- + Identifier of a WAN interface ACL template that will be applied on the device. + Unique identifier of applied ACL template type: string additionalBandwidth: - description: Additional Internet bandwidth, in Mbps, that will - be allocated to the device (in addition to default 15Mbps). - Additional Internet bandwidth, in Mbps, that will be allocated - to the device + description: |- + Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps). + Additional Internet bandwidth, in Mbps, that will be allocated to the device type: number byol: - description: 'Boolean value that determines device licensing mode, - i.e., bring your own license or subscription (default). Boolean - value that determines device licensing mode: bring your own - license or subscription (default)' + description: |- + Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default). + Boolean value that determines device licensing mode: bring your own license or subscription (default) type: boolean cloudInitFileId: - description: Identifier of a cloud init file that will be applied - on the device. Unique identifier of applied cloud init file + description: |- + Identifier of a cloud init file that will be applied on the device. + Unique identifier of applied cloud init file type: string clusterDetails: - description: An object that has the cluster details. See Cluster - Details below for more details. An object that has the cluster - details + description: |- + An object that has the cluster details. See Cluster Details below for more details. + An object that has the cluster details items: properties: clusterName: - description: The name of the cluster device The name of - the cluster device + description: |- + The name of the cluster device + The name of the cluster device type: string node0: - description: An object that has node0 configuration. See - Cluster Details - Nodes below for more details. An object - that has node0 details + description: |- + An object that has node0 configuration. See Cluster Details - Nodes below for more details. + An object that has node0 details items: properties: licenseFileId: - description: License file id. This is necessary for - Fortinet and Juniper clusters. License file id. - This is necessary for Fortinet and Juniper clusters + description: |- + License file id. This is necessary for Fortinet and Juniper clusters. + License file id. This is necessary for Fortinet and Juniper clusters type: string licenseTokenSecretRef: - description: License token. This is necessary for - Palo Alto clusters. License token. This is necessary - for Palo Alto clusters + description: |- + License token. This is necessary for Palo Alto clusters. + License token. This is necessary for Palo Alto clusters properties: key: description: The key to select. @@ -128,17 +811,68 @@ spec: - namespace type: object vendorConfiguration: - description: An object that has fields relevant to - the vendor of the cluster device. See Cluster Details - - Nodes - Vendor Configuration below for more details. - An object that has fields relevant to the vendor - of the cluster device + description: |- + An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details. + An object that has fields relevant to the vendor of the cluster device items: properties: activationKeySecretRef: - description: Activation key. This is required - for Velocloud clusters. Activation key. This - is required for Velocloud clusters + description: |- + Activation key. This is required for Velocloud clusters. + Activation key. This is required for Velocloud clusters + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + adminPasswordSecretRef: + 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. + 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 + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + controller1: + description: |- + System IP Address. Mandatory for the Fortinet SDWAN cluster device. + System IP Address. Mandatory for the Fortinet SDWAN cluster device + type: string + controllerFqdn: + description: |- + Controller fqdn. This is required for Velocloud clusters. + Controller fqdn. This is required for Velocloud clusters + type: string + hostname: + description: |- + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters. + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + type: string + licenseIdSecretRef: + description: |- + interface identifier. + License id. This field is relevant only for the BlueCat DNS and DHCP Server properties: key: description: The key to select. @@ -154,14 +888,9 @@ spec: - name - namespace type: object - adminPasswordSecretRef: - 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. 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 + licenseKeySecretRef: + description: License key. This field is relevant + only for the BlueCat DNS and DHCP Server properties: key: description: The key to select. @@ -177,29 +906,49 @@ spec: - name - namespace type: object - controller1: - description: System IP Address. Mandatory for - the Fortinet SDWAN cluster device. System - IP Address. Mandatory for the Fortinet SDWAN - cluster device + panoramaAuthKeySecretRef: + description: |- + Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaIpAddress: + description: |- + Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices type: string - controllerFqdn: - description: Controller fqdn. This is required - for Velocloud clusters. Controller fqdn. This - is required for Velocloud clusters + privateAddress: + description: Private address. This field is + relevant only for the BlueCat DNS and DHCP + Server type: string - hostname: - description: Hostname. This is necessary for - Palo Alto, Juniper, and Fortinet clusters. - Hostname. This is necessary for Palo Alto, - Juniper, and Fortinet clusters + privateCidrMask: + description: Private CIDR Mask. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateGateway: + description: Private gateway. This field is + relevant only for the BlueCat DNS and DHCP + Server type: string rootPasswordSecretRef: - description: The CLI password of the device. - This field is relevant only for the Velocloud - SDWAN cluster. The CLI password of the device. - This field is relevant only for the Velocloud - SDWAN cluster + description: |- + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster properties: key: description: The key to select. @@ -220,20 +969,20 @@ spec: type: object type: array node1: - description: An object that has node1 configuration. See - Cluster Details - Nodes below for more details. An object - that has node1 details + description: |- + An object that has node1 configuration. See Cluster Details - Nodes below for more details. + An object that has node1 details items: properties: licenseFileId: - description: Identifier of a license file that will - be applied on a secondary device. License file id. - This is necessary for Fortinet and Juniper clusters + description: |- + Identifier of a license file that will be applied on a secondary device. + License file id. This is necessary for Fortinet and Juniper clusters type: string licenseTokenSecretRef: - description: License Token can be provided for some - device types o the device. License token. This is - necessary for Palo Alto clusters + description: |- + License Token can be provided for some device types o the device. + License token. This is necessary for Palo Alto clusters properties: key: description: The key to select. @@ -250,17 +999,15 @@ spec: - namespace type: object vendorConfiguration: - description: Map of vendor specific configuration - parameters for a device (controller1, activationKey, - managementType, siteId, systemIpAddress) An object - that has fields relevant to the vendor of the cluster - device + description: |- + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + An object that has fields relevant to the vendor of the cluster device items: properties: activationKeySecretRef: - description: Activation key. This is required - for Velocloud clusters. Activation key. This - is required for Velocloud clusters + description: |- + Activation key. This is required for Velocloud clusters. + Activation key. This is required for Velocloud clusters properties: key: description: The key to select. @@ -277,13 +1024,9 @@ spec: - namespace type: object adminPasswordSecretRef: - 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. 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: |- + 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. + 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 properties: key: description: The key to select. @@ -300,27 +1043,100 @@ spec: - namespace type: object controller1: - description: System IP Address. Mandatory for - the Fortinet SDWAN cluster device. System - IP Address. Mandatory for the Fortinet SDWAN - cluster device + description: |- + System IP Address. Mandatory for the Fortinet SDWAN cluster device. + System IP Address. Mandatory for the Fortinet SDWAN cluster device type: string controllerFqdn: - description: Controller fqdn. This is required - for Velocloud clusters. Controller fqdn. This - is required for Velocloud clusters + description: |- + Controller fqdn. This is required for Velocloud clusters. + Controller fqdn. This is required for Velocloud clusters type: string hostname: - description: Secondary device hostname. Hostname. - This is necessary for Palo Alto, Juniper, - and Fortinet clusters + description: |- + Secondary device hostname. + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + type: string + licenseIdSecretRef: + description: |- + interface identifier. + License id. This field is relevant only for the BlueCat DNS and DHCP Server + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + licenseKeySecretRef: + description: License key. This field is relevant + only for the BlueCat DNS and DHCP Server + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaAuthKeySecretRef: + description: |- + Panorama Server Auth Key. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server Auth Key. This field is relevant only for Palo Alto Networks Firewall devices + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + panoramaIpAddress: + description: |- + Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + type: string + privateAddress: + description: Private address. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateCidrMask: + description: Private CIDR Mask. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateGateway: + description: Private gateway. This field is + relevant only for the BlueCat DNS and DHCP + Server type: string rootPasswordSecretRef: - description: The CLI password of the device. - This field is relevant only for the Velocloud - SDWAN cluster. The CLI password of the device. - This field is relevant only for the Velocloud - SDWAN cluster + description: |- + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster. + The CLI password of the device. This field is relevant only for the Velocloud SDWAN cluster properties: key: description: The key to select. @@ -340,204 +1156,196 @@ spec: type: array type: object type: array - required: - - clusterName - - node0 - - node1 type: object type: array connectivity: - description: 'Device accessibility (INTERNET-ACCESS or PRIVATE - or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default - will be INTERNET-ACCESS Parameter to identify internet access - for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE - or INTERNET-ACCESS-WITH-PRVT-MGMT' + description: |- + Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS + Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT type: string coreCount: - description: 'Number of CPU cores used by device. (NOTE: Use this - field to resize your device. When resizing your HA devices, - primary device will be upgraded first. If the upgrade failed, - device will be automatically rolled back to the previous state - with original core number.) Number of CPU cores used by device' + description: |- + Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.) + Number of CPU cores used by device type: number diverseDeviceId: - description: Unique ID of an existing device. Use this field to - let Equinix know if you want your new device to be in a different - location from any existing virtual device. This field is only - meaningful for single devices. Unique ID of an existing device + description: |- + Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices. + Unique ID of an existing device type: string hostname: - description: Device hostname prefix. Device hostname prefix + description: |- + Device hostname prefix. + Device hostname prefix type: string interfaceCount: - description: Number of network interfaces on a device. If not - specified, default number for a given device type will be used. - Number of network interfaces on a device. If not specified, - default number for a given device type will be used + description: |- + Number of network interfaces on a device. If not specified, default number for a given device type will be used. + Number of network interfaces on a device. If not specified, default number for a given device type will be used type: number licenseFile: - description: Path to the license file that will be uploaded and - applied on a device. Applicable for some device types in BYOL - licensing mode. Path to the license file that will be uploaded - and applied on a device, applicable for some device types in - BYOL licensing mode + description: |- + Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode. + Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode type: string licenseFileId: - description: Identifier of a license file that will be applied - on the device. Unique identifier of applied license file + description: |- + Identifier of a license file that will be applied on the device. + Unique identifier of applied license file type: string licenseToken: - description: License Token applicable for some device types in - BYOL licensing mode. License Token applicable for some device - types in BYOL licensing mode + description: |- + License Token applicable for some device types in BYOL licensing mode. + License Token applicable for some device types in BYOL licensing mode type: string metroCode: - description: Device location metro code. Device location metro - code + description: |- + Device location metro code. + Device location metro code type: string mgmtAclTemplateUuid: - description: Identifier of an MGMT interface ACL template that - will be applied on the device. Unique identifier of applied - MGMT ACL template + description: |- + Identifier of an MGMT interface ACL template that will be applied on the device. + Unique identifier of applied MGMT ACL template type: string name: - description: Device name. Device name + description: |- + Device name. + Device name type: string notifications: - description: List of email addresses that will receive device - status notifications. List of email addresses that will receive - device status notifications + description: |- + List of email addresses that will receive device status notifications. + List of email addresses that will receive device status notifications items: type: string type: array + x-kubernetes-list-type: set orderReference: - description: Name/number used to identify device order on the - invoice. Name/number used to identify device order on the invoice + description: |- + Name/number used to identify device order on the invoice. + Name/number used to identify device order on the invoice type: string packageCode: - description: Device software package code. Device software package - code + description: |- + Device software package code. + Device software package code type: string projectId: - description: Unique Identifier for the project resource where - the device is scoped to.If you leave it out, the device will - be created under the default project id of your organization. - The unique identifier of Project Resource to which device is - scoped to + description: |- + Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. + The unique identifier of Project Resource to which device is scoped to type: string purchaseOrderNumber: - description: Purchase order number associated with a device order. + description: |- + Purchase order number associated with a device order. Purchase order number associated with a device order type: string secondaryDevice: - description: Definition of secondary device for redundant device - configurations. See Secondary Device below for more details. + description: |- + Definition of secondary device for redundant device configurations. See Secondary Device below for more details. Definition of secondary device applicable for HA setup items: properties: accountNumber: - description: Billing account number for secondary device. + description: |- + Billing account number for secondary device. Device billing account number type: string aclTemplateId: - description: Identifier of a WAN interface ACL template - that will be applied on a secondary device. Unique identifier - of applied ACL template + description: |- + Identifier of a WAN interface ACL template that will be applied on a secondary device. + Unique identifier of applied ACL template type: string additionalBandwidth: - description: Additional Internet bandwidth, in Mbps, for - a secondary device. Additional Internet bandwidth, in - Mbps, that will be allocated to the device + description: |- + Additional Internet bandwidth, in Mbps, for a secondary device. + Additional Internet bandwidth, in Mbps, that will be allocated to the device type: number cloudInitFileId: - description: Identifier of a cloud init file that will be - applied on a secondary device. Unique identifier of applied - cloud init file + description: |- + Identifier of a cloud init file that will be applied on a secondary device. + Unique identifier of applied cloud init file type: string hostname: - description: Secondary device hostname. Device hostname - prefix + description: |- + Secondary device hostname. + Device hostname prefix type: string licenseFile: - description: Path to the license file that will be uploaded - and applied on a secondary device. Applicable for some - device types in BYOL licensing mode. Path to the license - file that will be uploaded and applied on a device, applicable - for some device types in BYOL licensing mode + description: |- + Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode. + Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode type: string licenseFileId: - description: Identifier of a license file that will be applied - on a secondary device. Unique identifier of applied license - file + description: |- + Identifier of a license file that will be applied on a secondary device. + Unique identifier of applied license file type: string licenseToken: - description: License Token can be provided for some device - types o the device. License Token applicable for some - device types in BYOL licensing mode + description: |- + License Token can be provided for some device types o the device. + License Token applicable for some device types in BYOL licensing mode type: string metroCode: - description: Metro location of a secondary device. Device - location metro code + description: |- + Metro location of a secondary device. + Device location metro code type: string mgmtAclTemplateUuid: - description: Identifier of an MGMT interface ACL template - that will be applied on a secondary device. Unique identifier - of applied MGMT ACL template + description: |- + Identifier of an MGMT interface ACL template that will be applied on a secondary device. + Unique identifier of applied MGMT ACL template type: string name: - description: Secondary device name. Device name + description: |- + Secondary device name. + Device name type: string notifications: - description: List of email addresses that will receive notifications - about secondary device. List of email addresses that will - receive device status notifications + description: |- + List of email addresses that will receive notifications about secondary device. + List of email addresses that will receive device status notifications items: type: string type: array + x-kubernetes-list-type: set sshKey: description: Definition of SSH key that will be provisioned on a device items: properties: keyName: - description: Device name. Reference by name to previously - provisioned public SSH key + description: |- + Device name. + Reference by name to previously provisioned public SSH key type: string username: - description: username associated with given key. Username - associated with given key + description: |- + username associated with given key. + Username associated with given key type: string - required: - - keyName - - username type: object type: array vendorConfiguration: additionalProperties: type: string - description: Key/Value pairs of vendor specific configuration - parameters for a secondary device. Key values are controller1, - activationKey, managementType, siteId, systemIpAddress. - Map of vendor specific configuration parameters for a - device (controller1, activationKey, managementType, siteId, - systemIpAddress) + description: |- + Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress. + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) type: object + x-kubernetes-map-type: granular wanInterfaceId: - description: interface identifier. device interface id picked - for WAN + description: |- + interface identifier. + device interface id picked for WAN type: string - required: - - accountNumber - - metroCode - - name - - notifications type: object type: array selfManaged: - description: 'Boolean value that determines device management - mode, i.e., self-managed or Equinix-managed (default). Boolean - value that determines device management mode: self-managed or - subscription (default)' + description: |- + Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default). + Boolean value that determines device management mode: self-managed or subscription (default) type: boolean sshKey: description: Definition of SSH key that will be provisioned on @@ -545,101 +1353,90 @@ spec: items: properties: keyName: - description: Device name. Reference by name to previously - provisioned public SSH key + description: |- + Device name. + Reference by name to previously provisioned public SSH key type: string username: - description: username associated with given key. Username - associated with given key + description: |- + username associated with given key. + Username associated with given key type: string - required: - - keyName - - username type: object type: array termLength: - description: Device term length. Device term length + description: |- + Device term length. + Device term length type: number throughput: - description: Device license throughput. Device license throughput + description: |- + Device license throughput. + Device license throughput type: number throughputUnit: - description: License throughput unit. One of Mbps or Gbps. Device - license throughput unit (Mbps or Gbps) + description: |- + License throughput unit. One of Mbps or Gbps. + Device license throughput unit (Mbps or Gbps) type: string typeCode: - description: Device type code. Device type code + description: |- + Device type code. + Device type code type: string vendorConfiguration: additionalProperties: type: string - description: Map of vendor specific configuration parameters for - a device (controller1, activationKey, managementType, siteId, - systemIpAddress) Map of vendor specific configuration parameters - for a device (controller1, activationKey, managementType, siteId, - systemIpAddress) + description: |- + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) type: object + x-kubernetes-map-type: granular version: - description: Device software software version. Device software - software version + description: |- + Device software software version. + Device software software version type: string wanInterfaceId: - description: interface identifier. device interface id picked - for WAN + description: |- + interface identifier. + device interface id picked for WAN type: string - required: - - accountNumber - - coreCount - - metroCode - - name - - notifications - - packageCode - - termLength - - typeCode - - version type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array providerConfigRef: default: name: default - description: ProviderConfigReference specifies how the provider that - will be used to create, observe, update, and delete this managed - resource should be configured. - properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name - type: object - 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`' + 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. @@ -649,21 +1446,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -673,17 +1470,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -693,21 +1492,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -722,21 +1521,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -747,14 +1547,15 @@ spec: - 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. + 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. @@ -769,78 +1570,270 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.accountNumber is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.accountNumber) + || (has(self.initProvider) && has(self.initProvider.accountNumber))' + - message: spec.forProvider.coreCount is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.coreCount) + || (has(self.initProvider) && has(self.initProvider.coreCount))' + - message: spec.forProvider.metroCode is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.metroCode) + || (has(self.initProvider) && has(self.initProvider.metroCode))' + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.notifications is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.notifications) + || (has(self.initProvider) && has(self.initProvider.notifications))' + - message: spec.forProvider.packageCode is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.packageCode) + || (has(self.initProvider) && has(self.initProvider.packageCode))' + - message: spec.forProvider.termLength is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.termLength) + || (has(self.initProvider) && has(self.initProvider.termLength))' + - message: spec.forProvider.typeCode is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.typeCode) + || (has(self.initProvider) && has(self.initProvider.typeCode))' + - message: spec.forProvider.version is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.version) + || (has(self.initProvider) && has(self.initProvider.version))' status: description: DeviceStatus defines the observed state of Device. properties: atProvider: properties: + accountNumber: + description: |- + Billing account number for a device. + Device billing account number + type: string + aclTemplateId: + description: |- + Identifier of a WAN interface ACL template that will be applied on the device. + Unique identifier of applied ACL template + type: string + additionalBandwidth: + description: |- + Additional Internet bandwidth, in Mbps, that will be allocated to the device (in addition to default 15Mbps). + Additional Internet bandwidth, in Mbps, that will be allocated to the device + type: number asn: - description: (Autonomous System Number) Unique identifier for - a network on the internet. Autonomous system number + description: |- + (Autonomous System Number) Unique identifier for a network on the internet. + Autonomous system number type: number + byol: + description: |- + Boolean value that determines device licensing mode, i.e., bring your own license or subscription (default). + Boolean value that determines device licensing mode: bring your own license or subscription (default) + type: boolean + cloudInitFileId: + description: |- + Identifier of a cloud init file that will be applied on the device. + Unique identifier of applied cloud init file + type: string clusterDetails: - description: An object that has the cluster details. See Cluster - Details below for more details. An object that has the cluster - details + description: |- + An object that has the cluster details. See Cluster Details below for more details. + An object that has the cluster details items: properties: clusterId: - description: The ID of the cluster. The id of the cluster + description: |- + The ID of the cluster. + The id of the cluster + type: string + clusterName: + description: |- + The name of the cluster device + The name of the cluster device type: string node0: - description: An object that has node0 configuration. See - Cluster Details - Nodes below for more details. An object - that has node0 details + description: |- + An object that has node0 configuration. See Cluster Details - Nodes below for more details. + An object that has node0 details items: properties: + licenseFileId: + description: |- + License file id. This is necessary for Fortinet and Juniper clusters. + License file id. This is necessary for Fortinet and Juniper clusters + type: string name: - description: reference by name to previously provisioned - public SSH key. The name of the node + description: |- + reference by name to previously provisioned public SSH key. + The name of the node type: string uuid: - description: Device unique identifier. The unique - id of the node + description: |- + Device unique identifier. + The unique id of the node type: string + vendorConfiguration: + description: |- + An object that has fields relevant to the vendor of the cluster device. See Cluster Details - Nodes - Vendor Configuration below for more details. + An object that has fields relevant to the vendor of the cluster device + items: + properties: + controller1: + description: |- + System IP Address. Mandatory for the Fortinet SDWAN cluster device. + System IP Address. Mandatory for the Fortinet SDWAN cluster device + type: string + controllerFqdn: + description: |- + Controller fqdn. This is required for Velocloud clusters. + Controller fqdn. This is required for Velocloud clusters + type: string + hostname: + description: |- + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters. + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + type: string + panoramaIpAddress: + description: |- + Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + type: string + privateAddress: + description: Private address. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateCidrMask: + description: Private CIDR Mask. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateGateway: + description: Private gateway. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + type: object + type: array type: object type: array node1: - description: An object that has node1 configuration. See - Cluster Details - Nodes below for more details. An object - that has node1 details + description: |- + An object that has node1 configuration. See Cluster Details - Nodes below for more details. + An object that has node1 details items: properties: + licenseFileId: + description: |- + Identifier of a license file that will be applied on a secondary device. + License file id. This is necessary for Fortinet and Juniper clusters + type: string name: - description: reference by name to previously provisioned - public SSH key. The name of the node + description: |- + reference by name to previously provisioned public SSH key. + The name of the node type: string uuid: - description: Device unique identifier. The unique - id of the node + description: |- + Device unique identifier. + The unique id of the node type: string + vendorConfiguration: + description: |- + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + An object that has fields relevant to the vendor of the cluster device + items: + properties: + controller1: + description: |- + System IP Address. Mandatory for the Fortinet SDWAN cluster device. + System IP Address. Mandatory for the Fortinet SDWAN cluster device + type: string + controllerFqdn: + description: |- + Controller fqdn. This is required for Velocloud clusters. + Controller fqdn. This is required for Velocloud clusters + type: string + hostname: + description: |- + Secondary device hostname. + Hostname. This is necessary for Palo Alto, Juniper, and Fortinet clusters + type: string + panoramaIpAddress: + description: |- + Panorama Server IP Address. This field is relevant only for the PA-VM firewall devices to have integration with Panorama Server. + Panorama Server IP Address. This field is relevant only for Palo Alto Networks Firewall devices + type: string + privateAddress: + description: Private address. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateCidrMask: + description: Private CIDR Mask. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + privateGateway: + description: Private gateway. This field is + relevant only for the BlueCat DNS and DHCP + Server + type: string + type: object + type: array type: object type: array numOfNodes: - description: The number of nodes in the cluster. The number - of nodes in the cluster + description: |- + The number of nodes in the cluster. + The number of nodes in the cluster type: number type: object type: array + connectivity: + description: |- + Device accessibility (INTERNET-ACCESS or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT). If not specified, default will be INTERNET-ACCESS + Parameter to identify internet access for device. Supported Values: INTERNET-ACCESS(default) or PRIVATE or INTERNET-ACCESS-WITH-PRVT-MGMT + type: string + coreCount: + description: |- + Number of CPU cores used by device. (NOTE: Use this field to resize your device. When resizing your HA devices, primary device will be upgraded first. If the upgrade failed, device will be automatically rolled back to the previous state with original core number.) + Number of CPU cores used by device + type: number + diverseDeviceId: + description: |- + Unique ID of an existing device. Use this field to let Equinix know if you want your new device to be in a different location from any existing virtual device. This field is only meaningful for single devices. + Unique ID of an existing device + type: string diverseDeviceName: - description: Name of the device with diverse device UUID. This - field is returned in device details if the device is created - by passing diverse_device_id. Diverse Device Name of an existing - device + description: |- + Name of the device with diverse device UUID. This field is returned in device details if the device is created by passing diverse_device_id. + Diverse Device Name of an existing device + type: string + hostname: + description: |- + Device hostname prefix. + Device hostname prefix type: string ibx: - description: Device location Equinix Business Exchange name. Device - location Equinix Business Exchange name + description: |- + Device location Equinix Business Exchange name. + Device location Equinix Business Exchange name type: string id: description: interface identifier. type: string interface: - description: List of device interfaces. See Interface Attribute - below for more details. List of device interfaces + description: |- + List of device interfaces. See Interface Attribute below for more details. + List of device interfaces items: properties: assignedType: @@ -875,41 +1868,134 @@ spec: type: string type: object type: array + interfaceCount: + description: |- + Number of network interfaces on a device. If not specified, default number for a given device type will be used. + Number of network interfaces on a device. If not specified, default number for a given device type will be used + type: number + licenseFile: + description: |- + Path to the license file that will be uploaded and applied on a device. Applicable for some device types in BYOL licensing mode. + Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + type: string + licenseFileId: + description: |- + Identifier of a license file that will be applied on the device. + Unique identifier of applied license file + type: string licenseStatus: - description: Device license registration status. Possible values - are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, - REGISTRATION_FAILED. Device license registration status + description: |- + Device license registration status. Possible values are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. + Device license registration status + type: string + licenseToken: + description: |- + License Token applicable for some device types in BYOL licensing mode. + License Token applicable for some device types in BYOL licensing mode + type: string + metroCode: + description: |- + Device location metro code. + Device location metro code + type: string + mgmtAclTemplateUuid: + description: |- + Identifier of an MGMT interface ACL template that will be applied on the device. + Unique identifier of applied MGMT ACL template + type: string + name: + description: |- + Device name. + Device name + type: string + notifications: + description: |- + List of email addresses that will receive device status notifications. + List of email addresses that will receive device status notifications + items: + type: string + type: array + x-kubernetes-list-type: set + orderReference: + description: |- + Name/number used to identify device order on the invoice. + Name/number used to identify device order on the invoice + type: string + packageCode: + description: |- + Device software package code. + Device software package code + type: string + projectId: + description: |- + Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. + The unique identifier of Project Resource to which device is scoped to + type: string + purchaseOrderNumber: + description: |- + Purchase order number associated with a device order. + Purchase order number associated with a device order type: string redundancyType: - description: Device redundancy type applicable for HA devices, - either primary or secondary. Device redundancy type applicable - for HA devices, either primary or secondary + description: |- + Device redundancy type applicable for HA devices, either primary or secondary. + Device redundancy type applicable for HA devices, either primary or secondary type: string redundantId: - description: Unique identifier for a redundant device applicable - for HA devices. Unique identifier for a redundant device, applicable - for HA device + description: |- + Unique identifier for a redundant device applicable for HA devices. + Unique identifier for a redundant device, applicable for HA device type: string region: - description: Device location region. Device location region + description: |- + Device location region. + Device location region type: string secondaryDevice: - description: Definition of secondary device for redundant device - configurations. See Secondary Device below for more details. + description: |- + Definition of secondary device for redundant device configurations. See Secondary Device below for more details. Definition of secondary device applicable for HA setup items: properties: + accountNumber: + description: |- + Billing account number for secondary device. + Device billing account number + type: string + aclTemplateId: + description: |- + Identifier of a WAN interface ACL template that will be applied on a secondary device. + Unique identifier of applied ACL template + type: string + additionalBandwidth: + description: |- + Additional Internet bandwidth, in Mbps, for a secondary device. + Additional Internet bandwidth, in Mbps, that will be allocated to the device + type: number asn: - description: (Autonomous System Number) Unique identifier - for a network on the internet. Autonomous system number + description: |- + (Autonomous System Number) Unique identifier for a network on the internet. + Autonomous system number type: number + cloudInitFileId: + description: |- + Identifier of a cloud init file that will be applied on a secondary device. + Unique identifier of applied cloud init file + type: string + hostname: + description: |- + Secondary device hostname. + Device hostname prefix + type: string ibx: - description: Device location Equinix Business Exchange name. + description: |- + Device location Equinix Business Exchange name. Device location Equinix Business Exchange name type: string interface: - description: List of device interfaces. See Interface Attribute - below for more details. List of device interfaces + description: |- + List of device interfaces. See Interface Attribute below for more details. + List of device interfaces items: properties: assignedType: @@ -946,75 +2032,210 @@ spec: type: string type: object type: array + licenseFile: + description: |- + Path to the license file that will be uploaded and applied on a secondary device. Applicable for some device types in BYOL licensing mode. + Path to the license file that will be uploaded and applied on a device, applicable for some device types in BYOL licensing mode + type: string + licenseFileId: + description: |- + Identifier of a license file that will be applied on a secondary device. + Unique identifier of applied license file + type: string licenseStatus: - description: Device license registration status. Possible - values are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, - REGISTRATION_FAILED. Device license registration status + description: |- + Device license registration status. Possible values are APPLYING_LICENSE, REGISTERED, APPLIED, WAITING_FOR_CLUSTER_SETUP, REGISTRATION_FAILED. + Device license registration status + type: string + licenseToken: + description: |- + License Token can be provided for some device types o the device. + License Token applicable for some device types in BYOL licensing mode + type: string + metroCode: + description: |- + Metro location of a secondary device. + Device location metro code + type: string + mgmtAclTemplateUuid: + description: |- + Identifier of an MGMT interface ACL template that will be applied on a secondary device. + Unique identifier of applied MGMT ACL template type: string + name: + description: |- + Secondary device name. + Device name + type: string + notifications: + description: |- + List of email addresses that will receive notifications about secondary device. + List of email addresses that will receive device status notifications + items: + type: string + type: array + x-kubernetes-list-type: set projectId: - description: Unique Identifier for the project resource - where the device is scoped to.If you leave it out, the - device will be created under the default project id of - your organization. The unique identifier of Project Resource - to which device is scoped to + description: |- + Unique Identifier for the project resource where the device is scoped to.If you leave it out, the device will be created under the default project id of your organization. + The unique identifier of Project Resource to which device is scoped to type: string redundancyType: - description: Device redundancy type applicable for HA devices, - either primary or secondary. Device redundancy type applicable - for HA devices, either primary or secondary + description: |- + Device redundancy type applicable for HA devices, either primary or secondary. + Device redundancy type applicable for HA devices, either primary or secondary type: string redundantId: - description: Unique identifier for a redundant device applicable - for HA devices. Unique identifier for a redundant device, - applicable for HA device + description: |- + Unique identifier for a redundant device applicable for HA devices. + Unique identifier for a redundant device, applicable for HA device type: string region: - description: Device location region. Device location region + description: |- + Device location region. + Device location region type: string sshIpAddress: - description: IP address of SSH enabled interface on the - device. IP address of SSH enabled interface on the device + description: |- + IP address of SSH enabled interface on the device. + IP address of SSH enabled interface on the device type: string sshIpFqdn: - description: FQDN of SSH enabled interface on the device. + description: |- + FQDN of SSH enabled interface on the device. FQDN of SSH enabled interface on the device type: string + sshKey: + description: Definition of SSH key that will be provisioned + on a device + items: + properties: + keyName: + description: |- + Device name. + Reference by name to previously provisioned public SSH key + type: string + username: + description: |- + username associated with given key. + Username associated with given key + type: string + type: object + type: array status: - description: Device provisioning status. Possible values - are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, - WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, - FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, - RESOURCE_UPGRADE_FAILED. Device provisioning status + description: |- + Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + Device provisioning status type: string uuid: - description: Device unique identifier. Device unique identifier + description: |- + Device unique identifier. + Device unique identifier + type: string + vendorConfiguration: + additionalProperties: + type: string + description: |- + Key/Value pairs of vendor specific configuration parameters for a secondary device. Key values are controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress. + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + type: object + x-kubernetes-map-type: granular + wanInterfaceId: + description: |- + interface identifier. + device interface id picked for WAN type: string zoneCode: - description: Device location zone code. Device location - zone code + description: |- + Device location zone code. + Device location zone code type: string type: object type: array + selfManaged: + description: |- + Boolean value that determines device management mode, i.e., self-managed or Equinix-managed (default). + Boolean value that determines device management mode: self-managed or subscription (default) + type: boolean sshIpAddress: - description: IP address of SSH enabled interface on the device. + description: |- + IP address of SSH enabled interface on the device. IP address of SSH enabled interface on the device type: string sshIpFqdn: - description: FQDN of SSH enabled interface on the device. FQDN - of SSH enabled interface on the device + description: |- + FQDN of SSH enabled interface on the device. + FQDN of SSH enabled interface on the device type: string + sshKey: + description: Definition of SSH key that will be provisioned on + a device + items: + properties: + keyName: + description: |- + Device name. + Reference by name to previously provisioned public SSH key + type: string + username: + description: |- + username associated with given key. + Username associated with given key + type: string + type: object + type: array status: - description: Device provisioning status. Possible values are INITIALIZING, - PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, - CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, - DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. + description: |- + Device provisioning status. Possible values are INITIALIZING, PROVISIONING, WAITING_FOR_PRIMARY, WAITING_FOR_SECONDARY, WAITING_FOR_REPLICA_CLUSTER_NODES, CLUSTER_SETUP_IN_PROGRESS, FAILED, PROVISIONED, DEPROVISIONING, DEPROVISIONED, RESOURCE_UPGRADE_IN_PROGRESS, RESOURCE_UPGRADE_FAILED. Device provisioning status type: string + termLength: + description: |- + Device term length. + Device term length + type: number + throughput: + description: |- + Device license throughput. + Device license throughput + type: number + throughputUnit: + description: |- + License throughput unit. One of Mbps or Gbps. + Device license throughput unit (Mbps or Gbps) + type: string + typeCode: + description: |- + Device type code. + Device type code + type: string uuid: - description: Device unique identifier. Device unique identifier + description: |- + Device unique identifier. + Device unique identifier + type: string + vendorConfiguration: + additionalProperties: + type: string + description: |- + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress, privateAddress, privateCidrMask, privateGateway, licenseKey, licenseId, panoramaAuthKey, panoramaIpAddress) + Map of vendor specific configuration parameters for a device (controller1, activationKey, managementType, siteId, systemIpAddress) + type: object + x-kubernetes-map-type: granular + version: + description: |- + Device software software version. + Device software software version + type: string + wanInterfaceId: + description: |- + interface identifier. + device interface id picked for WAN type: string zoneCode: - description: Device location zone code. Device location zone code + description: |- + Device location zone code. + Device location zone code type: string type: object conditions: @@ -1023,14 +2244,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -1040,8 +2270,9 @@ spec: 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. + 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 @@ -1050,6 +2281,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_files.yaml b/package/crds/network.equinix.jet.crossplane.io_files.yaml index 2711d04..9bde168 100644 --- a/package/crds/network.equinix.jet.crossplane.io_files.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_files.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: files.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: File is the Schema for the Files 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,15 +73,14 @@ spec: forProvider: properties: byol: - description: 'Boolean value that determines device licensing mode, - i.e., bring your own license or subscription. Boolean value - that determines device licensing mode: bring your own license - or subscription' + description: |- + Boolean value that determines device licensing mode, i.e., bring your own license or subscription. + Boolean value that determines device licensing mode: bring your own license or subscription type: boolean contentSecretRef: - description: Uploaded file content, expected to be a UTF-8 encoded - string. Uploaded file content, expected to be a UTF-8 encoded - string + description: |- + Uploaded file content, expected to be a UTF-8 encoded string. + Uploaded file content, expected to be a UTF-8 encoded string properties: key: description: The key to select. @@ -89,75 +97,130 @@ spec: - namespace type: object deviceTypeCode: - description: Device type code. Device type code + description: |- + Device type code. + Device type code type: string fileName: - description: File name. File name + description: |- + File name. + File name type: string metroCode: - description: File upload location metro code. It should match - the device location metro code. File upload location metro code + description: |- + File upload location metro code. It should match the device location metro code. + File upload location metro code type: string processType: - description: File process type (LICENSE or CLOUD_INIT). File process - type (LICENSE or CLOUD_INIT) + description: |- + File process type (LICENSE or CLOUD_INIT). + File process type (LICENSE or CLOUD_INIT) type: string selfManaged: - description: 'Boolean value that determines device management - mode, i.e., self-managed or Equinix-managed. Boolean value that - determines device management mode: self-managed or equinix-managed' + description: |- + Boolean value that determines device management mode, i.e., self-managed or Equinix-managed. + Boolean value that determines device management mode: self-managed or equinix-managed type: boolean - required: - - byol - - contentSecretRef - - deviceTypeCode - - fileName - - metroCode - - processType - - selfManaged 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. + byol: + description: |- + Boolean value that determines device licensing mode, i.e., bring your own license or subscription. + Boolean value that determines device licensing mode: bring your own license or subscription + type: boolean + contentSecretRef: + description: |- + Uploaded file content, expected to be a UTF-8 encoded string. + Uploaded file content, expected to be a UTF-8 encoded string properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional + key: + description: The key to select. type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. type: string + required: + - key + - name + - namespace type: object + deviceTypeCode: + description: |- + Device type code. + Device type code + type: string + fileName: + description: |- + File name. + File name + type: string + metroCode: + description: |- + File upload location metro code. It should match the device location metro code. + File upload location metro code + type: string + processType: + description: |- + File process type (LICENSE or CLOUD_INIT). + File process type (LICENSE or CLOUD_INIT) + type: string + selfManaged: + description: |- + Boolean value that determines device management mode, i.e., self-managed or Equinix-managed. + Boolean value that determines device management mode: self-managed or equinix-managed + type: boolean required: - - name + - contentSecretRef 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -167,21 +230,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -191,17 +254,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -211,21 +276,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -240,21 +305,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -265,14 +331,15 @@ spec: - 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. + 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. @@ -287,19 +354,80 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.byol is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.byol) + || (has(self.initProvider) && has(self.initProvider.byol))' + - message: spec.forProvider.contentSecretRef is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.contentSecretRef)' + - message: spec.forProvider.deviceTypeCode is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceTypeCode) + || (has(self.initProvider) && has(self.initProvider.deviceTypeCode))' + - message: spec.forProvider.fileName is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.fileName) + || (has(self.initProvider) && has(self.initProvider.fileName))' + - message: spec.forProvider.metroCode is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.metroCode) + || (has(self.initProvider) && has(self.initProvider.metroCode))' + - message: spec.forProvider.processType is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.processType) + || (has(self.initProvider) && has(self.initProvider.processType))' + - message: spec.forProvider.selfManaged is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.selfManaged) + || (has(self.initProvider) && has(self.initProvider.selfManaged))' status: description: FileStatus defines the observed state of File. properties: atProvider: properties: + byol: + description: |- + Boolean value that determines device licensing mode, i.e., bring your own license or subscription. + Boolean value that determines device licensing mode: bring your own license or subscription + type: boolean + deviceTypeCode: + description: |- + Device type code. + Device type code + type: string + fileName: + description: |- + File name. + File name + type: string id: type: string + metroCode: + description: |- + File upload location metro code. It should match the device location metro code. + File upload location metro code + type: string + processType: + description: |- + File process type (LICENSE or CLOUD_INIT). + File process type (LICENSE or CLOUD_INIT) + type: string + selfManaged: + description: |- + Boolean value that determines device management mode, i.e., self-managed or Equinix-managed. + Boolean value that determines device management mode: self-managed or equinix-managed + type: boolean status: - description: File upload status. File upload status + description: |- + File upload status. + File upload status type: string uuid: - description: Unique identifier of file resource. Unique identifier - of file resource + description: |- + Unique identifier of file resource. + Unique identifier of file resource type: string type: object conditions: @@ -308,14 +436,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -325,8 +462,9 @@ spec: 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. + 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 @@ -335,6 +473,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_sshkeys.yaml b/package/crds/network.equinix.jet.crossplane.io_sshkeys.yaml index ecdc9ff..e6f1a65 100644 --- a/package/crds/network.equinix.jet.crossplane.io_sshkeys.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_sshkeys.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: sshkeys.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: SSHKey is the Schema for the SSHKeys 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,72 +73,94 @@ spec: forProvider: properties: name: - description: The name of SSH key used for identification. The - name of SSH key used for identification + description: |- + The name of SSH key used for identification. + The name of SSH key used for identification type: string projectId: - description: Unique Identifier for the project resource where - the SSH key is scoped to.If you leave it out, the ssh key will - be created under the default project id of your organization. - The unique identifier of Project Resource to which ssh key is - scoped to + description: |- + Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization. + The unique identifier of Project Resource to which ssh key is scoped to type: string publicKey: - description: The SSH public key. If this is a file, it can be - read using the file interpolation function. The SSH public key. - If this is a file, it can be read using the file interpolation - function + description: |- + The SSH public key. If this is a file, it can be read using the file interpolation function. + The SSH public key. If this is a file, it can be read using the file interpolation function type: string type: - description: 'The type of SSH key: RSA (default) or DSA. The type - of SSH key: RSA (default) or DSA' + description: |- + The type of SSH key: RSA (default) or DSA. + The type of SSH key: RSA (default) or DSA type: string - required: - - name - - publicKey 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: name: - description: Name of the referenced object. + description: |- + The name of SSH key used for identification. + The name of SSH key used for identification + type: string + projectId: + description: |- + Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization. + The unique identifier of Project Resource to which ssh key is scoped to + type: string + publicKey: + description: |- + The SSH public key. If this is a file, it can be read using the file interpolation function. + The SSH public key. If this is a file, it can be read using the file interpolation function + type: string + type: + description: |- + The type of SSH key: RSA (default) or DSA. + The type of SSH key: RSA (default) or DSA type: string - policy: - description: Policies for referencing. - properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional - type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent - type: string - type: object - required: - - name type: object - 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -139,21 +170,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -163,17 +194,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -183,21 +216,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -212,21 +245,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -237,14 +271,15 @@ spec: - 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. + 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. @@ -259,6 +294,15 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.publicKey is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.publicKey) + || (has(self.initProvider) && has(self.initProvider.publicKey))' status: description: SSHKeyStatus defines the observed state of SSHKey. properties: @@ -266,9 +310,30 @@ spec: properties: id: type: string + name: + description: |- + The name of SSH key used for identification. + The name of SSH key used for identification + type: string + projectId: + description: |- + Unique Identifier for the project resource where the SSH key is scoped to.If you leave it out, the ssh key will be created under the default project id of your organization. + The unique identifier of Project Resource to which ssh key is scoped to + type: string + publicKey: + description: |- + The SSH public key. If this is a file, it can be read using the file interpolation function. + The SSH public key. If this is a file, it can be read using the file interpolation function + type: string + type: + description: |- + The type of SSH key: RSA (default) or DSA. + The type of SSH key: RSA (default) or DSA + type: string uuid: - description: The unique identifier of the key The unique identifier - of the key + description: |- + The unique identifier of the key + The unique identifier of the key type: string type: object conditions: @@ -277,14 +342,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -294,8 +368,9 @@ spec: 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. + 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 @@ -304,6 +379,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec diff --git a/package/crds/network.equinix.jet.crossplane.io_sshusers.yaml b/package/crds/network.equinix.jet.crossplane.io_sshusers.yaml index 79fe51a..e6afe23 100644 --- a/package/crds/network.equinix.jet.crossplane.io_sshusers.yaml +++ b/package/crds/network.equinix.jet.crossplane.io_sshusers.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: sshusers.network.equinix.jet.crossplane.io spec: group: network.equinix.jet.crossplane.io @@ -20,12 +19,12 @@ spec: 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: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string - jsonPath: .metadata.annotations.crossplane\.io/external-name name: EXTERNAL-NAME type: string @@ -38,14 +37,19 @@ spec: description: SSHUser is the Schema for the SSHUsers 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' + 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' + 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 @@ -54,9 +58,14 @@ spec: 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. + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 enum: - Orphan - Delete @@ -64,13 +73,17 @@ spec: forProvider: properties: deviceIds: - description: list of device identifiers to which user will have - access. list of device identifiers to which user will have access + description: |- + list of device identifiers to which user will have access. + list of device identifiers to which user will have access items: type: string type: array + x-kubernetes-list-type: set passwordSecretRef: - description: SSH user password. SSH user password + description: |- + SSH user password. + SSH user password properties: key: description: The key to select. @@ -87,55 +100,93 @@ spec: - namespace type: object username: - description: SSH user login name. SSH user login name + description: |- + SSH user login name. + SSH user login name type: string - required: - - deviceIds - - passwordSecretRef - - username 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. + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. properties: - name: - description: Name of the referenced object. - type: string - policy: - description: Policies for referencing. + deviceIds: + description: |- + list of device identifiers to which user will have access. + list of device identifiers to which user will have access + items: + type: string + type: array + x-kubernetes-list-type: set + passwordSecretRef: + description: |- + SSH user password. + SSH user password properties: - resolution: - default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. - enum: - - Required - - Optional + key: + description: The key to select. type: string - resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. - enum: - - Always - - IfNotPresent + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. type: string + required: + - key + - name + - namespace type: object + username: + description: |- + SSH user login name. + SSH user login name + type: string required: - - name + - passwordSecretRef 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`' + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. properties: name: description: Name of the referenced object. @@ -145,21 +196,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of this - reference is required. The default is 'Required', which - means the reconcile will fail if the reference cannot be - resolved. 'Optional' means this reference will be a no-op - if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will attempt - to resolve the reference only when the corresponding field - is not present. Use 'Always' to resolve the reference on - every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -169,17 +220,19 @@ spec: - 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. + 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. + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. properties: name: description: Name of the referenced object. @@ -189,21 +242,21 @@ spec: properties: resolution: default: Required - description: Resolution specifies whether resolution of - this reference is required. The default is 'Required', - which means the reconcile will fail if the reference - cannot be resolved. 'Optional' means this reference - will be a no-op if it cannot be resolved. + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. enum: - Required - Optional type: string resolve: - description: Resolve specifies when this reference should - be resolved. The default is 'IfNotPresent', which will - attempt to resolve the reference only when the corresponding - field is not present. Use 'Always' to resolve the reference - on every reconcile. + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. enum: - Always - IfNotPresent @@ -218,21 +271,22 @@ spec: 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. + 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. + 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. + description: |- + Type is the SecretType for the connection secret. - Only valid for Kubernetes Secret Stores. type: string type: object @@ -243,14 +297,15 @@ spec: - 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. + 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. @@ -265,15 +320,42 @@ spec: required: - forProvider type: object + x-kubernetes-validations: + - message: spec.forProvider.deviceIds is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceIds) + || (has(self.initProvider) && has(self.initProvider.deviceIds))' + - message: spec.forProvider.passwordSecretRef is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.passwordSecretRef)' + - message: spec.forProvider.username is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.username) + || (has(self.initProvider) && has(self.initProvider.username))' status: description: SSHUserStatus defines the observed state of SSHUser. properties: atProvider: properties: + deviceIds: + description: |- + list of device identifiers to which user will have access. + list of device identifiers to which user will have access + items: + type: string + type: array + x-kubernetes-list-type: set id: type: string + username: + description: |- + SSH user login name. + SSH user login name + type: string uuid: - description: SSH user unique identifier. SSH user unique identifier + description: |- + SSH user unique identifier. + SSH user unique identifier type: string type: object conditions: @@ -282,14 +364,23 @@ spec: 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. + 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. + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer reason: description: A Reason for this condition's last transition from one status to another. @@ -299,8 +390,9 @@ spec: 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. + 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 @@ -309,6 +401,16 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer type: object required: - spec From 39c501fa23d942da13a83c2aeb73135e0bab24af Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 11:30:43 -0400 Subject: [PATCH 04/12] feat: add providerconfig spec.configuration for Terraform recognized config settings Signed-off-by: Marques Johansson --- apis/v1alpha1/types.go | 29 ++++++++++++++++++++++++++++- config/provider.go | 3 ++- internal/clients/equinix.go | 14 ++++++++++++-- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/apis/v1alpha1/types.go b/apis/v1alpha1/types.go index 87e4e66..5108c3a 100644 --- a/apis/v1alpha1/types.go +++ b/apis/v1alpha1/types.go @@ -26,6 +26,33 @@ import ( type ProviderConfigSpec struct { // Credentials required to authenticate to this provider. Credentials ProviderCredentials `json:"credentials"` + + // +kubebuilder:validation:Optional + Configuration ProviderConfiguration `json:"config"` +} + +// ProviderConfiguration for configuring the terraform provider +// see https://registry.terraform.io/providers/equinix/equinix/latest/docs#configuration-reference +type ProviderConfiguration struct { + // The Equinix API base URL to point out desired environment. This argument can also be specified with the EQUINIX_API_ENDPOINT shell environment variable. (Defaults to https://api.equinix.com) + // +kubebuilder:validation:Optional + Endpoint string `json:"endpoint"` + + // Maximum number of retries in case of network failure. + // +kubebuilder:validation:Optional + MaxRetries bool `json:"max_retries"` + + // Maximum number of seconds to wait before retrying a request. + // +kubebuilder:validation:Optional + MaxRetryWaitSeconds bool `json:"max_retry_wait_seconds"` + + // The duration of time, in seconds, that the Equinix Platform API Client should wait before canceling an API request. Canceled requests may still result in provisioned resources. (Defaults to 30) + // +kubebuilder:validation:Optional + RequestTimeout bool `json:"request_timeout"` + + // The maximum number of records in a single response for REST queries that produce paginated responses. (Default is client specific) + // +kubebuilder:validation:Optional + ResponseMaxPageSize bool `json:"response_max_page_size"` } // ProviderCredentials required to authenticate. @@ -49,7 +76,7 @@ type ProviderConfigStatus struct { // +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" // +kubebuilder:printcolumn:name="SECRET-NAME",type="string",JSONPath=".spec.credentials.secretRef.name",priority=1 // +kubebuilder:resource:scope=Cluster -// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,equinixjet} +// +kubebuilder:resource:scope=Cluster,categories={crossplane,providerconfig,equinixjet} type ProviderConfig struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/config/provider.go b/config/provider.go index 55ad5cb..6620788 100644 --- a/config/provider.go +++ b/config/provider.go @@ -21,7 +21,6 @@ import ( "context" _ "embed" - "github.com/crossplane-contrib/provider-jet-equinix/config/metal/device" upconfig "github.com/crossplane/upjet/pkg/config" conversiontfjson "github.com/crossplane/upjet/pkg/types/conversion/tfjson" "github.com/equinix/terraform-provider-equinix/equinix" @@ -30,6 +29,8 @@ import ( tfjson "github.com/hashicorp/terraform-json" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" + + "github.com/crossplane-contrib/provider-jet-equinix/config/metal/device" ) const ( diff --git a/internal/clients/equinix.go b/internal/clients/equinix.go index d65a6ac..bda40e0 100644 --- a/internal/clients/equinix.go +++ b/internal/clients/equinix.go @@ -45,6 +45,8 @@ const ( keyEndpoint = "endpoint" keyRequestTimeout = "request_timeout" keyResponseMaxPageSize = "response_max_page_size" + keyMaxRetries = "max_retries" + keyMaxRetryWaitSeconds = "max_retry_wait_seconds" ) type SetupConfig struct { @@ -56,8 +58,15 @@ type SetupConfig struct { TerraformProvider *schema.Provider } -func prepareTerraformProviderConfiguration(creds map[string]string, pc v1alpha1.ProviderConfig) map[string]any { +func prepareTerraformProviderConfiguration(creds map[string]string, pc v1alpha1.ProviderConfiguration) map[string]any { config := map[string]any{} + config[keyMaxRetries] = pc.MaxRetries + config[keyMaxRetryWaitSeconds] = pc.MaxRetryWaitSeconds + config[keyRequestTimeout] = pc.RequestTimeout + config[keyResponseMaxPageSize] = pc.ResponseMaxPageSize + config[keyEndpoint] = pc.Endpoint + + // TODO: should we deprecate config field setting via credentials for _, key := range []string{ keyEndpoint, keyRequestTimeout, @@ -70,6 +79,7 @@ func prepareTerraformProviderConfiguration(creds map[string]string, pc v1alpha1. config[key] = creds[key] } } + return config } @@ -102,7 +112,7 @@ func TerraformSetupBuilder(tfProvider *schema.Provider) terraform.SetupFn { return ps, errors.Wrap(err, errUnmarshalCredentials) } - ps.Configuration = prepareTerraformProviderConfiguration(equinixCreds, *pc) + ps.Configuration = prepareTerraformProviderConfiguration(equinixCreds, pc.Spec.Configuration) return ps, nil } } From 03b6c276d113a81f8b250fbe7e8dda54b0db255a Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 11:31:27 -0400 Subject: [PATCH 05/12] chore: regenerate for providerconfig spec.configuration Signed-off-by: Marques Johansson --- apis/v1alpha1/zz_generated.deepcopy.go | 16 ++++++++++ ...nix.jet.crossplane.io_providerconfigs.yaml | 31 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index 4cb3adc..4b5cc3f 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -87,6 +87,7 @@ func (in *ProviderConfigList) DeepCopyObject() runtime.Object { func (in *ProviderConfigSpec) DeepCopyInto(out *ProviderConfigSpec) { *out = *in in.Credentials.DeepCopyInto(&out.Credentials) + out.Configuration = in.Configuration } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigSpec. @@ -173,6 +174,21 @@ func (in *ProviderConfigUsageList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProviderConfiguration) DeepCopyInto(out *ProviderConfiguration) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfiguration. +func (in *ProviderConfiguration) DeepCopy() *ProviderConfiguration { + if in == nil { + return nil + } + out := new(ProviderConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProviderCredentials) DeepCopyInto(out *ProviderCredentials) { *out = *in diff --git a/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml b/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml index fc7835a..d1340e1 100644 --- a/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml +++ b/package/crds/equinix.jet.crossplane.io_providerconfigs.yaml @@ -10,7 +10,7 @@ spec: names: categories: - crossplane - - provider + - providerconfig - equinixjet kind: ProviderConfig listKind: ProviderConfigList @@ -51,6 +51,35 @@ spec: spec: description: A ProviderConfigSpec defines the desired state of a ProviderConfig. properties: + config: + description: |- + ProviderConfiguration for configuring the terraform provider + see https://registry.terraform.io/providers/equinix/equinix/latest/docs#configuration-reference + properties: + endpoint: + description: The Equinix API base URL to point out desired environment. + This argument can also be specified with the EQUINIX_API_ENDPOINT + shell environment variable. (Defaults to https://api.equinix.com) + type: string + max_retries: + description: Maximum number of retries in case of network failure. + type: boolean + max_retry_wait_seconds: + description: Maximum number of seconds to wait before retrying + a request. + type: boolean + request_timeout: + description: The duration of time, in seconds, that the Equinix + Platform API Client should wait before canceling an API request. + Canceled requests may still result in provisioned resources. + (Defaults to 30) + type: boolean + response_max_page_size: + description: The maximum number of records in a single response + for REST queries that produce paginated responses. (Default + is client specific) + type: boolean + type: object credentials: description: Credentials required to authenticate to this provider. properties: From 80a4d74966f151ec41bc7f606be80affcde3d1c4 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 12:01:46 -0400 Subject: [PATCH 06/12] fix: disable late initialization for all optional + computed + conflicting fields Signed-off-by: Marques Johansson --- config/overrides.go | 17 +++++++++++++++++ config/provider.go | 1 + 2 files changed, 18 insertions(+) diff --git a/config/overrides.go b/config/overrides.go index 454979a..552971f 100644 --- a/config/overrides.go +++ b/config/overrides.go @@ -43,6 +43,7 @@ func KnownReferencers() upconfig.ResourceOption { //nolint:gocyclo if (s.Computed && !s.Optional) || s.Sensitive { continue } + if r.ShortGroup == "metal" { switch { case strings.HasSuffix(k, "project_id"): @@ -80,3 +81,19 @@ func KnownReferencers() upconfig.ResourceOption { //nolint:gocyclo } } } + +// SkipOptCompLateIntialization generalize the LateInitializer rule above to apply to allow fields that are Optional + Computed + ConflictsWith another Computed + Optional field +func SkipOptCompLateInitialization() upconfig.ResourceOption { + return func(r *upconfig.Resource) { + for k, s := range r.TerraformResource.Schema { + if s.Computed && s.Optional { + for _, conflict := range s.ConflictsWith { + if cs := r.TerraformResource.Schema[conflict]; cs.Computed && cs.Optional { + r.LateInitializer.AddIgnoredCanonicalFields(conflict) + r.LateInitializer.AddIgnoredCanonicalFields(k) + } + } + } + } + } +} diff --git a/config/provider.go b/config/provider.go index 6620788..f85f0ac 100644 --- a/config/provider.go +++ b/config/provider.go @@ -85,6 +85,7 @@ func GetProvider(_ context.Context, generationProvider bool) (*upconfig.Provider upconfig.WithDefaultResourceOptions( // KnownReferencers(), IdentifierAssignedByEquinix(), + SkipOptCompLateInitialization(), ), upconfig.WithFeaturesPackage("internal/features"), upconfig.WithTerraformProvider(p), From fa9213f47c0e1635a40842a26d653b56014e4e4d Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 12:02:27 -0400 Subject: [PATCH 07/12] fix: reenable predictable referencers setup Signed-off-by: Marques Johansson --- config/provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/provider.go b/config/provider.go index f85f0ac..bd22dc2 100644 --- a/config/provider.go +++ b/config/provider.go @@ -83,7 +83,7 @@ func GetProvider(_ context.Context, generationProvider bool) (*upconfig.Provider upconfig.WithRootGroup("equinix.jet.crossplane.io"), // upconfig.WithReferenceInjectors([]config.ReferenceInjector{reference.NewInjector("github.com/crossplane-contrib/provider-jet-equinix")}), upconfig.WithDefaultResourceOptions( - // KnownReferencers(), + KnownReferencers(), IdentifierAssignedByEquinix(), SkipOptCompLateInitialization(), ), From f4b027f28a11e073db1a6356dd502b871c9c0fbe Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 12:03:36 -0400 Subject: [PATCH 08/12] chore: remove ecx configuration since the resource was removed in TF Signed-off-by: Marques Johansson --- config/ecx/l2connection/config.go | 30 ------------------------------ config/provider.go | 1 - 2 files changed, 31 deletions(-) delete mode 100644 config/ecx/l2connection/config.go diff --git a/config/ecx/l2connection/config.go b/config/ecx/l2connection/config.go deleted file mode 100644 index 303eb1f..0000000 --- a/config/ecx/l2connection/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 l2connection - -import ( - "github.com/crossplane/upjet/pkg/config" -) - -// Configure the device group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_ecx_l2_connection", func(r *config.Resource) { - r.References["profile_uuid"] = config.Reference{ - Type: "L2Serviceprofile", - } - }) -} diff --git a/config/provider.go b/config/provider.go index bd22dc2..1a60096 100644 --- a/config/provider.go +++ b/config/provider.go @@ -113,7 +113,6 @@ func GetProvider(_ context.Context, generationProvider bool) (*upconfig.Provider for _, configure := range []func(provider *upconfig.Provider){ // add custom config functions device.Configure, - // l2connection.Configure, } { configure(pc) } From 13be323ead112913d466d0babcb10d335cbab50b Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 12:05:00 -0400 Subject: [PATCH 09/12] chore: remove device configuration now generalized in overrides.go Signed-off-by: Marques Johansson --- config/metal/device/config.go | 35 ----------------------------------- config/provider.go | 3 --- 2 files changed, 38 deletions(-) delete mode 100644 config/metal/device/config.go diff --git a/config/metal/device/config.go b/config/metal/device/config.go deleted file mode 100644 index 275c671..0000000 --- a/config/metal/device/config.go +++ /dev/null @@ -1,35 +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 device - -import ( - "github.com/crossplane/upjet/pkg/config" -) - -// Configure the device group with references to other resources -func Configure(p *config.Provider) { - p.AddResourceConfigurator("equinix_metal_device", func(r *config.Resource) { - 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/upjet/issues/107 - IgnoredFields: []string{ - "metro", - "facilities", - }, - } - }) -} diff --git a/config/provider.go b/config/provider.go index 1a60096..57b35f7 100644 --- a/config/provider.go +++ b/config/provider.go @@ -29,8 +29,6 @@ import ( tfjson "github.com/hashicorp/terraform-json" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - - "github.com/crossplane-contrib/provider-jet-equinix/config/metal/device" ) const ( @@ -112,7 +110,6 @@ func GetProvider(_ context.Context, generationProvider bool) (*upconfig.Provider for _, configure := range []func(provider *upconfig.Provider){ // add custom config functions - device.Configure, } { configure(pc) } From 87073c566e8fae3a135d4bfd91f4b5ccad98e3af Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 12:11:25 -0400 Subject: [PATCH 10/12] feat: enable management policies by default Signed-off-by: Marques Johansson --- cmd/provider/main.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/cmd/provider/main.go b/cmd/provider/main.go index acbdccf..5cd3bb7 100644 --- a/cmd/provider/main.go +++ b/cmd/provider/main.go @@ -23,6 +23,7 @@ import ( "time" xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + "github.com/crossplane/crossplane-runtime/pkg/certificates" xpcontroller "github.com/crossplane/crossplane-runtime/pkg/controller" "github.com/crossplane/crossplane-runtime/pkg/feature" "github.com/crossplane/crossplane-runtime/pkg/logging" @@ -56,6 +57,8 @@ func main() { namespace = app.Flag("namespace", "Namespace used to set as default scope in default secret store config.").Default("crossplane-system").Envar("POD_NAMESPACE").String() enableExternalSecretStores = app.Flag("enable-external-secret-stores", "Enable support for ExternalSecretStores.").Default("false").Envar("ENABLE_EXTERNAL_SECRET_STORES").Bool() + essTLSCertsPath = app.Flag("ess-tls-cert-dir", "Path of ESS TLS certificates.").Envar("ESS_TLS_CERTS_DIR").String() + enableManagementPolicies = app.Flag("enable-management-policies", "Enable support for ManagementPolicies.").Default("true").Envar("ENABLE_MANAGEMENT_POLICIES").Bool() ) kingpin.MustParse(app.Parse(os.Args[1:])) @@ -105,12 +108,26 @@ func main() { OperationTrackerStore: upcontroller.NewOperationStore(log), } + if *enableManagementPolicies { + o.Features.Enable(features.EnableBetaManagementPolicies) + log.Info("Beta feature enabled", "flag", features.EnableBetaManagementPolicies) + } + if *enableExternalSecretStores { o.SecretStoreConfigGVK = &v1alpha1.StoreConfigGroupVersionKind log.Info("Alpha feature enabled", "flag", features.EnableAlphaExternalSecretStores) + o.ESSOptions = &upcontroller.ESSOptions{} + if *essTLSCertsPath != "" { + log.Info("ESS TLS certificates path is set. Loading mTLS configuration.") + tCfg, err := certificates.LoadMTLSConfig(filepath.Join(*essTLSCertsPath, "ca.crt"), filepath.Join(*essTLSCertsPath, "tls.crt"), filepath.Join(*essTLSCertsPath, "tls.key"), false) + kingpin.FatalIfError(err, "Cannot load ESS TLS config.") + + o.ESSOptions.TLSConfig = tCfg + } + // Ensure default store config exists. - kingpin.FatalIfError(resource.Ignore(kerrors.IsAlreadyExists, mgr.GetClient().Create(context.Background(), &v1alpha1.StoreConfig{ + kingpin.FatalIfError(resource.Ignore(kerrors.IsAlreadyExists, mgr.GetClient().Create(ctx, &v1alpha1.StoreConfig{ ObjectMeta: metav1.ObjectMeta{ Name: "default", }, @@ -121,6 +138,7 @@ func main() { DefaultScope: *namespace, }, }, + Status: v1alpha1.StoreConfigStatus{}, })), "cannot create default store config") } From 492c59e5a2aca23ce87d02a7688b8116dc15af35 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 13:29:17 -0400 Subject: [PATCH 11/12] chore: simplify known referencer definitions Signed-off-by: Marques Johansson --- config/overrides.go | 55 ++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/config/overrides.go b/config/overrides.go index 552971f..927e3c8 100644 --- a/config/overrides.go +++ b/config/overrides.go @@ -33,9 +33,23 @@ func IdentifierAssignedByEquinix() upconfig.ResourceOption { } } +var knownReferencerFields = map[string]map[string]string{ + "metal": { + "project_id": "Project", + "organization_id": "Organization", + "connection_id": "Connection", + "device_id": "Device", + "vlan_id": "Vlan", + "vrf_id": "Vrf", + "ip_reservation_id": "ReservedIPBlock", + "virtual_circuit_id": "VirtualCircuit", + "gateway_id": "Gateway", + }, +} + // KnownReferencers adds referencers for fields that are known and common among // more than a few resources. -func KnownReferencers() upconfig.ResourceOption { //nolint:gocyclo +func KnownReferencers() upconfig.ResourceOption { return func(r *upconfig.Resource) { for k, s := range r.TerraformResource.Schema { // We shouldn't add referencers for status fields and sensitive fields @@ -44,38 +58,13 @@ func KnownReferencers() upconfig.ResourceOption { //nolint:gocyclo continue } - if r.ShortGroup == "metal" { - switch { - case strings.HasSuffix(k, "project_id"): - r.References[k] = upconfig.Reference{ - // github.com/crossplane-contrib/provider-jet-equinix/apis/metal/v1alpha1.Project - Type: "Project", - } - case strings.HasSuffix(k, "organization_id"): - r.References[k] = upconfig.Reference{ - Type: "Organization", - } - case strings.HasSuffix(k, "connection_id"): - r.References[k] = upconfig.Reference{ - Type: "Connection", - } - case strings.HasSuffix(k, "device_id"): - r.References[k] = upconfig.Reference{ - Type: "Device", - } - case strings.HasSuffix(k, "vlan_id"): - // vlan_vnid is ignored because it is an int type - r.References[k] = upconfig.Reference{ - Type: "Vlan", - } - case strings.HasSuffix(k, "vrf_id"): - r.References[k] = upconfig.Reference{ - Type: "Vrf", - } - case strings.HasSuffix(k, "ip_reservation_id"): - r.References[k] = upconfig.Reference{ - Type: "ReservedIPBlock", - } + // Loop over knownReferencerFields and add references + for suffix, resource := range knownReferencerFields[r.ShortGroup] { + if !strings.HasSuffix(k, suffix) { + continue + } + r.References[k] = upconfig.Reference{ + Type: resource, } } } From 080f4d5ffaef60250efe7cf787509fd26ae6f4c1 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 20 Jul 2024 13:29:56 -0400 Subject: [PATCH 12/12] chore: regenerate with known referencers and providerconfig updates Signed-off-by: Marques Johansson --- apis/metal/v1alpha1/zz_bgpsession_types.go | 19 +- apis/metal/v1alpha1/zz_connection_types.go | 36 + apis/metal/v1alpha1/zz_device_terraformed.go | 2 - apis/metal/v1alpha1/zz_device_types.go | 19 +- .../v1alpha1/zz_devicenetworktype_types.go | 19 +- apis/metal/v1alpha1/zz_gateway_types.go | 60 +- apis/metal/v1alpha1/zz_generated.deepcopy.go | 500 +++++++++ apis/metal/v1alpha1/zz_generated.resolvers.go | 995 ++++++++++++++++++ apis/metal/v1alpha1/zz_ipattachment_types.go | 19 +- .../v1alpha1/zz_organizationmember_types.go | 19 +- apis/metal/v1alpha1/zz_port_types.go | 18 + .../v1alpha1/zz_portvlanattachment_types.go | 19 +- apis/metal/v1alpha1/zz_project_types.go | 18 + apis/metal/v1alpha1/zz_projectapikey_types.go | 19 +- apis/metal/v1alpha1/zz_projectsshkey_types.go | 19 +- .../v1alpha1/zz_reservedipblock_types.go | 41 +- .../v1alpha1/zz_spotmarketrequest_types.go | 19 +- .../metal/v1alpha1/zz_virtualcircuit_types.go | 91 +- apis/metal/v1alpha1/zz_vlan_types.go | 23 +- apis/metal/v1alpha1/zz_vrf_types.go | 19 +- .../metal/v1alpha1/bgpsession.yaml | 12 +- .../metal/v1alpha1/connection.yaml | 4 +- examples-generated/metal/v1alpha1/device.yaml | 4 +- .../metal/v1alpha1/gateway.yaml | 12 +- .../metal/v1alpha1/ipattachment.yaml | 8 +- .../metal/v1alpha1/organizationmember.yaml | 4 +- .../metal/v1alpha1/projectapikey.yaml | 4 +- .../metal/v1alpha1/projectsshkey.yaml | 8 +- .../metal/v1alpha1/reservedipblock.yaml | 4 +- .../metal/v1alpha1/spotmarketrequest.yaml | 4 +- examples-generated/metal/v1alpha1/sshkey.yaml | 4 +- .../metal/v1alpha1/virtualcircuit.yaml | 16 +- examples-generated/metal/v1alpha1/vlan.yaml | 4 +- examples-generated/metal/v1alpha1/vrf.yaml | 4 +- ...equinix.jet.crossplane.io_bgpsessions.yaml | 152 ++- ...equinix.jet.crossplane.io_connections.yaml | 296 ++++++ ....jet.crossplane.io_devicenetworktypes.yaml | 152 ++- ...tal.equinix.jet.crossplane.io_devices.yaml | 152 ++- ...al.equinix.jet.crossplane.io_gateways.yaml | 453 +++++++- ...uinix.jet.crossplane.io_ipattachments.yaml | 152 ++- ...jet.crossplane.io_organizationmembers.yaml | 152 ++- ...metal.equinix.jet.crossplane.io_ports.yaml | 148 +++ ...jet.crossplane.io_portvlanattachments.yaml | 152 ++- ...inix.jet.crossplane.io_projectapikeys.yaml | 152 ++- ...al.equinix.jet.crossplane.io_projects.yaml | 148 +++ ...inix.jet.crossplane.io_projectsshkeys.yaml | 152 ++- ...ix.jet.crossplane.io_reservedipblocks.yaml | 301 +++++- ....jet.crossplane.io_spotmarketrequests.yaml | 152 ++- ...nix.jet.crossplane.io_virtualcircuits.yaml | 744 ++++++++++++- ...metal.equinix.jet.crossplane.io_vlans.yaml | 153 ++- ...metal.equinix.jet.crossplane.io_vrves.yaml | 152 ++- 51 files changed, 5720 insertions(+), 109 deletions(-) create mode 100644 apis/metal/v1alpha1/zz_generated.resolvers.go diff --git a/apis/metal/v1alpha1/zz_bgpsession_types.go b/apis/metal/v1alpha1/zz_bgpsession_types.go index bb81982..99dc601 100755 --- a/apis/metal/v1alpha1/zz_bgpsession_types.go +++ b/apis/metal/v1alpha1/zz_bgpsession_types.go @@ -37,7 +37,16 @@ type BGPSessionInitParameters struct { // ID of device. // ID of device + // +crossplane:generate:reference:type=Device DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } type BGPSessionObservation struct { @@ -75,8 +84,17 @@ type BGPSessionParameters struct { // ID of device. // ID of device + // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } // BGPSessionSpec defines the desired state of BGPSession @@ -116,7 +134,6 @@ type BGPSession struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.addressFamily) || (has(self.initProvider) && has(self.initProvider.addressFamily))",message="spec.forProvider.addressFamily is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" Spec BGPSessionSpec `json:"spec"` Status BGPSessionStatus `json:"status,omitempty"` } diff --git a/apis/metal/v1alpha1/zz_connection_types.go b/apis/metal/v1alpha1/zz_connection_types.go index 773dc42..3b84e3c 100755 --- a/apis/metal/v1alpha1/zz_connection_types.go +++ b/apis/metal/v1alpha1/zz_connection_types.go @@ -53,12 +53,30 @@ type ConnectionInitParameters struct { // ID of the organization where the connection is scoped to. // ID of the organization responsible for the connection. Applicable with type "dedicated" + // +crossplane:generate:reference:type=Organization OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + // Reference to a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // Selector for a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` + // ID of the project where the connection is scoped to, must be set for. // ID of the project where the connection is scoped to. Required with type "shared" + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // Connection redundancy - redundant or primary. // Connection redundancy - redundant or primary Redundancy *string `json:"redundancy,omitempty" tf:"redundancy,omitempty"` @@ -202,14 +220,32 @@ type ConnectionParameters struct { // ID of the organization where the connection is scoped to. // ID of the organization responsible for the connection. Applicable with type "dedicated" + // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + // Reference to a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // Selector for a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` + // ID of the project where the connection is scoped to, must be set for. // ID of the project where the connection is scoped to. Required with type "shared" + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // Connection redundancy - redundant or primary. // Connection redundancy - redundant or primary // +kubebuilder:validation:Optional diff --git a/apis/metal/v1alpha1/zz_device_terraformed.go b/apis/metal/v1alpha1/zz_device_terraformed.go index edb5322..44a763a 100755 --- a/apis/metal/v1alpha1/zz_device_terraformed.go +++ b/apis/metal/v1alpha1/zz_device_terraformed.go @@ -130,8 +130,6 @@ func (tr *Device) LateInitialize(attrs []byte) (bool, error) { return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") } opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} - opts = append(opts, resource.WithNameFilter("Facilities")) - opts = append(opts, resource.WithNameFilter("Metro")) li := resource.NewGenericLateInitializer(opts...) return li.LateInitialize(&tr.Spec.ForProvider, params) diff --git a/apis/metal/v1alpha1/zz_device_types.go b/apis/metal/v1alpha1/zz_device_types.go index aa2437c..346094a 100755 --- a/apis/metal/v1alpha1/zz_device_types.go +++ b/apis/metal/v1alpha1/zz_device_types.go @@ -110,8 +110,17 @@ type DeviceInitParameters struct { // (String) The ID of the project in which to create the device // The ID of the project in which to create the device + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource // Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource ProjectSSHKeyIds []*string `json:"projectSshKeyIds,omitempty" tf:"project_ssh_key_ids,omitempty"` @@ -366,9 +375,18 @@ type DeviceParameters struct { // (String) The ID of the project in which to create the device // The ID of the project in which to create the device + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource // Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the [equinix_metal_project_ssh_key](equinix_metal_project_ssh_key.md) resource // +kubebuilder:validation:Optional @@ -591,7 +609,6 @@ type Device struct { metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.operatingSystem) || (has(self.initProvider) && has(self.initProvider.operatingSystem))",message="spec.forProvider.operatingSystem is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.plan) || (has(self.initProvider) && has(self.initProvider.plan))",message="spec.forProvider.plan is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" Spec DeviceSpec `json:"spec"` Status DeviceStatus `json:"status,omitempty"` } diff --git a/apis/metal/v1alpha1/zz_devicenetworktype_types.go b/apis/metal/v1alpha1/zz_devicenetworktype_types.go index c9ed080..9e7920c 100755 --- a/apis/metal/v1alpha1/zz_devicenetworktype_types.go +++ b/apis/metal/v1alpha1/zz_devicenetworktype_types.go @@ -28,8 +28,17 @@ import ( type DeviceNetworkTypeInitParameters struct { // The ID of the device on which the network type should be set + // +crossplane:generate:reference:type=Device DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +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 Type *string `json:"type,omitempty" tf:"type,omitempty"` } @@ -48,9 +57,18 @@ type DeviceNetworkTypeObservation struct { type DeviceNetworkTypeParameters struct { // The ID of the device on which the network type should be set + // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +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:Optional Type *string `json:"type,omitempty" tf:"type,omitempty"` @@ -92,7 +110,6 @@ type DeviceNetworkTypeStatus struct { type DeviceNetworkType struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.type) || (has(self.initProvider) && has(self.initProvider.type))",message="spec.forProvider.type is a required parameter" Spec DeviceNetworkTypeSpec `json:"spec"` Status DeviceNetworkTypeStatus `json:"status,omitempty"` diff --git a/apis/metal/v1alpha1/zz_gateway_types.go b/apis/metal/v1alpha1/zz_gateway_types.go index 4c8131b..4bd7f7f 100755 --- a/apis/metal/v1alpha1/zz_gateway_types.go +++ b/apis/metal/v1alpha1/zz_gateway_types.go @@ -29,19 +29,46 @@ type GatewayInitParameters struct { // UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. // UUID of the Public or VRF IP Reservation to associate + // +crossplane:generate:reference:type=ReservedIPBlock IPReservationID *string `json:"ipReservationId,omitempty" tf:"ip_reservation_id,omitempty"` + // Reference to a ReservedIPBlock to populate ipReservationId. + // +kubebuilder:validation:Optional + IPReservationIDRef *v1.Reference `json:"ipReservationIdRef,omitempty" tf:"-"` + + // Selector for a ReservedIPBlock to populate ipReservationId. + // +kubebuilder:validation:Optional + IPReservationIDSelector *v1.Selector `json:"ipReservationIdSelector,omitempty" tf:"-"` + // Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. // Size of the private IPv4 subnet to create for this gateway PrivateIPv4SubnetSize *float64 `json:"privateIpv4SubnetSize,omitempty" tf:"private_ipv4_subnet_size,omitempty"` // UUID of the project where the gateway is scoped to. // UUID of the Project where the Gateway is scoped to + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // UUID of the VLAN where the gateway is scoped to. // UUID of the VLAN to associate + // +crossplane:generate:reference:type=Vlan VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + + // Reference to a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + + // Selector for a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` } type GatewayObservation struct { @@ -76,9 +103,18 @@ type GatewayParameters struct { // UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. // UUID of the Public or VRF IP Reservation to associate + // +crossplane:generate:reference:type=ReservedIPBlock // +kubebuilder:validation:Optional IPReservationID *string `json:"ipReservationId,omitempty" tf:"ip_reservation_id,omitempty"` + // Reference to a ReservedIPBlock to populate ipReservationId. + // +kubebuilder:validation:Optional + IPReservationIDRef *v1.Reference `json:"ipReservationIdRef,omitempty" tf:"-"` + + // Selector for a ReservedIPBlock to populate ipReservationId. + // +kubebuilder:validation:Optional + IPReservationIDSelector *v1.Selector `json:"ipReservationIdSelector,omitempty" tf:"-"` + // Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. // Size of the private IPv4 subnet to create for this gateway // +kubebuilder:validation:Optional @@ -86,13 +122,31 @@ type GatewayParameters struct { // UUID of the project where the gateway is scoped to. // UUID of the Project where the Gateway is scoped to + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // UUID of the VLAN where the gateway is scoped to. // UUID of the VLAN to associate + // +crossplane:generate:reference:type=Vlan // +kubebuilder:validation:Optional VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + + // Reference to a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + + // Selector for a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` } // GatewaySpec defines the desired state of Gateway @@ -131,10 +185,8 @@ type GatewayStatus struct { type Gateway struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.vlanId) || (has(self.initProvider) && has(self.initProvider.vlanId))",message="spec.forProvider.vlanId is a required parameter" - Spec GatewaySpec `json:"spec"` - Status GatewayStatus `json:"status,omitempty"` + Spec GatewaySpec `json:"spec"` + Status GatewayStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_generated.deepcopy.go b/apis/metal/v1alpha1/zz_generated.deepcopy.go index 291833e..84edaec 100644 --- a/apis/metal/v1alpha1/zz_generated.deepcopy.go +++ b/apis/metal/v1alpha1/zz_generated.deepcopy.go @@ -285,6 +285,16 @@ func (in *BGPSessionInitParameters) DeepCopyInto(out *BGPSessionInitParameters) *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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 BGPSessionInitParameters. @@ -387,6 +397,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) + (*in).DeepCopyInto(*out) + } + 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. @@ -577,11 +597,31 @@ func (in *ConnectionInitParameters) DeepCopyInto(out *ConnectionInitParameters) *out = new(string) **out = **in } + if in.OrganizationIDRef != nil { + in, out := &in.OrganizationIDRef, &out.OrganizationIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.OrganizationIDSelector != nil { + in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ProjectID != nil { in, out := &in.ProjectID, &out.ProjectID *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.Redundancy != nil { in, out := &in.Redundancy, &out.Redundancy *out = new(string) @@ -859,11 +899,31 @@ func (in *ConnectionParameters) DeepCopyInto(out *ConnectionParameters) { *out = new(string) **out = **in } + if in.OrganizationIDRef != nil { + in, out := &in.OrganizationIDRef, &out.OrganizationIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.OrganizationIDSelector != nil { + in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ProjectID != nil { in, out := &in.ProjectID, &out.ProjectID *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.Redundancy != nil { in, out := &in.Redundancy, &out.Redundancy *out = new(string) @@ -1084,6 +1144,16 @@ func (in *DeviceInitParameters) DeepCopyInto(out *DeviceInitParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ProjectSSHKeyIds != nil { in, out := &in.ProjectSSHKeyIds, &out.ProjectSSHKeyIds *out = make([]*string, len(*in)) @@ -1223,6 +1293,16 @@ func (in *DeviceNetworkTypeInitParameters) DeepCopyInto(out *DeviceNetworkTypeIn *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -1310,6 +1390,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -1690,6 +1780,16 @@ func (in *DeviceParameters) DeepCopyInto(out *DeviceParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ProjectIDSelector != nil { + in, out := &in.ProjectIDSelector, &out.ProjectIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.ProjectSSHKeyIds != nil { in, out := &in.ProjectSSHKeyIds, &out.ProjectSSHKeyIds *out = make([]*string, len(*in)) @@ -1902,6 +2002,16 @@ func (in *GatewayInitParameters) DeepCopyInto(out *GatewayInitParameters) { *out = new(string) **out = **in } + if in.IPReservationIDRef != nil { + in, out := &in.IPReservationIDRef, &out.IPReservationIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -1912,11 +2022,31 @@ func (in *GatewayInitParameters) DeepCopyInto(out *GatewayInitParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) + (*in).DeepCopyInto(*out) + } + 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 GatewayInitParameters. @@ -2019,6 +2149,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -2029,11 +2169,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) + (*in).DeepCopyInto(*out) + } + 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) + (*in).DeepCopyInto(*out) + } + 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. @@ -2229,6 +2389,16 @@ func (in *IPAttachmentInitParameters) DeepCopyInto(out *IPAttachmentInitParamete *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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 IPAttachmentInitParameters. @@ -2371,6 +2541,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) + (*in).DeepCopyInto(*out) + } + 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. @@ -2976,6 +3156,16 @@ func (in *OrganizationMemberInitParameters) DeepCopyInto(out *OrganizationMember *out = new(string) **out = **in } + if in.OrganizationIDRef != nil { + in, out := &in.OrganizationIDRef, &out.OrganizationIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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)) @@ -3142,6 +3332,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) + (*in).DeepCopyInto(*out) + } + 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)) @@ -3400,6 +3600,16 @@ func (in *PortInitParameters) DeepCopyInto(out *PortInitParameters) { *out = new(string) **out = **in } + if in.NativeVlanIDRef != nil { + in, out := &in.NativeVlanIDRef, &out.NativeVlanIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -3596,6 +3806,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -3710,6 +3930,16 @@ func (in *PortVlanAttachmentInitParameters) DeepCopyInto(out *PortVlanAttachment *out = new(string) **out = **in } + if in.DeviceIDRef != nil { + in, out := &in.DeviceIDRef, &out.DeviceIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -3837,6 +4067,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -4057,6 +4297,16 @@ func (in *ProjectAPIKeyInitParameters) DeepCopyInto(out *ProjectAPIKeyInitParame *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -4154,6 +4404,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -4231,6 +4491,16 @@ func (in *ProjectInitParameters) DeepCopyInto(out *ProjectInitParameters) { *out = new(string) **out = **in } + if in.OrganizationIDRef != nil { + in, out := &in.OrganizationIDRef, &out.OrganizationIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.OrganizationIDSelector != nil { + in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.PaymentMethodID != nil { in, out := &in.PaymentMethodID, &out.PaymentMethodID *out = new(string) @@ -4362,6 +4632,16 @@ func (in *ProjectParameters) DeepCopyInto(out *ProjectParameters) { *out = new(string) **out = **in } + if in.OrganizationIDRef != nil { + in, out := &in.OrganizationIDRef, &out.OrganizationIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.OrganizationIDSelector != nil { + in, out := &in.OrganizationIDSelector, &out.OrganizationIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } if in.PaymentMethodID != nil { in, out := &in.PaymentMethodID, &out.PaymentMethodID *out = new(string) @@ -4419,6 +4699,16 @@ func (in *ProjectSSHKeyInitParameters) DeepCopyInto(out *ProjectSSHKeyInitParame *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -4536,6 +4826,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -4778,6 +5078,16 @@ func (in *ReservedIPBlockInitParameters) DeepCopyInto(out *ReservedIPBlockInitPa *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -4804,6 +5114,16 @@ func (in *ReservedIPBlockInitParameters) DeepCopyInto(out *ReservedIPBlockInitPa *out = new(string) **out = **in } + if in.VrfIDRef != nil { + in, out := &in.VrfIDRef, &out.VrfIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -5022,6 +5342,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -5048,6 +5378,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -5442,6 +5782,16 @@ func (in *SpotMarketRequestInitParameters) DeepCopyInto(out *SpotMarketRequestIn *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -5605,6 +5955,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -5871,6 +6231,16 @@ func (in *VirtualCircuitInitParameters) DeepCopyInto(out *VirtualCircuitInitPara *out = new(string) **out = **in } + if in.ConnectionIDRef != nil { + in, out := &in.ConnectionIDRef, &out.ConnectionIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -5926,6 +6296,16 @@ func (in *VirtualCircuitInitParameters) DeepCopyInto(out *VirtualCircuitInitPara *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -5957,16 +6337,46 @@ func (in *VirtualCircuitInitParameters) DeepCopyInto(out *VirtualCircuitInitPara *out = new(string) **out = **in } + if in.VirtualCircuitIDRef != nil { + in, out := &in.VirtualCircuitIDRef, &out.VirtualCircuitIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.VirtualCircuitIDSelector != nil { + in, out := &in.VirtualCircuitIDSelector, &out.VirtualCircuitIDSelector + *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) + (*in).DeepCopyInto(*out) + } + 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) + (*in).DeepCopyInto(*out) + } + 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 VirtualCircuitInitParameters. @@ -6150,6 +6560,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -6205,6 +6625,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -6236,16 +6666,46 @@ func (in *VirtualCircuitParameters) DeepCopyInto(out *VirtualCircuitParameters) *out = new(string) **out = **in } + if in.VirtualCircuitIDRef != nil { + in, out := &in.VirtualCircuitIDRef, &out.VirtualCircuitIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.VirtualCircuitIDSelector != nil { + in, out := &in.VirtualCircuitIDSelector, &out.VirtualCircuitIDSelector + *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) + (*in).DeepCopyInto(*out) + } + 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) + (*in).DeepCopyInto(*out) + } + 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. @@ -6343,6 +6803,16 @@ func (in *VlanInitParameters) DeepCopyInto(out *VlanInitParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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) @@ -6460,6 +6930,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) + (*in).DeepCopyInto(*out) + } + 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) @@ -6578,6 +7058,16 @@ func (in *VrfInitParameters) DeepCopyInto(out *VrfInitParameters) { *out = new(string) **out = **in } + if in.ProjectIDRef != nil { + in, out := &in.ProjectIDRef, &out.ProjectIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + 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 VrfInitParameters. @@ -6717,6 +7207,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) + (*in).DeepCopyInto(*out) + } + 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 new file mode 100644 index 0000000..4e59338 --- /dev/null +++ b/apis/metal/v1alpha1/zz_generated.resolvers.go @@ -0,0 +1,995 @@ +/* +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 angryjet. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + reference "github.com/crossplane/crossplane-runtime/pkg/reference" + errors "github.com/pkg/errors" + client "sigs.k8s.io/controller-runtime/pkg/client" +) + +// ResolveReferences of this 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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.DeviceIDRef, + Selector: mg.Spec.InitProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.DeviceID") + } + mg.Spec.InitProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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) + + 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 + + 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.InitProvider.OrganizationID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.OrganizationIDRef, + Selector: mg.Spec.InitProvider.OrganizationIDSelector, + To: reference.To{ + List: &OrganizationList{}, + Managed: &Organization{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.OrganizationID") + } + mg.Spec.InitProvider.OrganizationID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.OrganizationIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this Device. +func (mg *Device) 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.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ProjectIDRef = rsp.ResolvedReference + + 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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.DeviceIDRef, + Selector: mg.Spec.InitProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.DeviceID") + } + mg.Spec.InitProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.IPReservationID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.IPReservationIDRef, + Selector: mg.Spec.InitProvider.IPReservationIDSelector, + To: reference.To{ + List: &ReservedIPBlockList{}, + Managed: &ReservedIPBlock{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.IPReservationID") + } + mg.Spec.InitProvider.IPReservationID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.IPReservationIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ProjectIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.VlanID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.VlanIDRef, + Selector: mg.Spec.InitProvider.VlanIDSelector, + To: reference.To{ + List: &VlanList{}, + Managed: &Vlan{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.VlanID") + } + mg.Spec.InitProvider.VlanID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.DeviceIDRef, + Selector: mg.Spec.InitProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.DeviceID") + } + mg.Spec.InitProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.OrganizationID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.OrganizationIDRef, + Selector: mg.Spec.InitProvider.OrganizationIDSelector, + To: reference.To{ + List: &OrganizationList{}, + Managed: &Organization{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.OrganizationID") + } + mg.Spec.InitProvider.OrganizationID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.NativeVlanID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.NativeVlanIDRef, + Selector: mg.Spec.InitProvider.NativeVlanIDSelector, + To: reference.To{ + List: &VlanList{}, + Managed: &Vlan{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.NativeVlanID") + } + mg.Spec.InitProvider.NativeVlanID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.DeviceID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.DeviceIDRef, + Selector: mg.Spec.InitProvider.DeviceIDSelector, + To: reference.To{ + List: &DeviceList{}, + Managed: &Device{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.DeviceID") + } + mg.Spec.InitProvider.DeviceID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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) + + 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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.OrganizationID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.OrganizationIDRef, + Selector: mg.Spec.InitProvider.OrganizationIDSelector, + To: reference.To{ + List: &OrganizationList{}, + Managed: &Organization{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.OrganizationID") + } + mg.Spec.InitProvider.OrganizationID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.OrganizationIDRef = rsp.ResolvedReference + + 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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ProjectIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.VrfID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.VrfIDRef, + Selector: mg.Spec.InitProvider.VrfIDSelector, + To: reference.To{ + List: &VrfList{}, + Managed: &Vrf{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.VrfID") + } + mg.Spec.InitProvider.VrfID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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.VirtualCircuitID), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.VirtualCircuitIDRef, + Selector: mg.Spec.ForProvider.VirtualCircuitIDSelector, + To: reference.To{ + List: &VirtualCircuitList{}, + Managed: &VirtualCircuit{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.VirtualCircuitID") + } + mg.Spec.ForProvider.VirtualCircuitID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.VirtualCircuitIDRef = 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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ConnectionID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ConnectionIDRef, + Selector: mg.Spec.InitProvider.ConnectionIDSelector, + To: reference.To{ + List: &ConnectionList{}, + Managed: &Connection{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ConnectionID") + } + mg.Spec.InitProvider.ConnectionID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ConnectionIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ProjectIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.VirtualCircuitID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.VirtualCircuitIDRef, + Selector: mg.Spec.InitProvider.VirtualCircuitIDSelector, + To: reference.To{ + List: &VirtualCircuitList{}, + Managed: &VirtualCircuit{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.VirtualCircuitID") + } + mg.Spec.InitProvider.VirtualCircuitID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.VirtualCircuitIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.VlanID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.VlanIDRef, + Selector: mg.Spec.InitProvider.VlanIDSelector, + To: reference.To{ + List: &VlanList{}, + Managed: &Vlan{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.VlanID") + } + mg.Spec.InitProvider.VlanID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.VlanIDRef = rsp.ResolvedReference + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.VrfID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.VrfIDRef, + Selector: mg.Spec.InitProvider.VrfIDSelector, + To: reference.To{ + List: &VrfList{}, + Managed: &Vrf{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.VrfID") + } + mg.Spec.InitProvider.VrfID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.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 + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ProjectID), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.ProjectIDRef, + Selector: mg.Spec.InitProvider.ProjectIDSelector, + To: reference.To{ + List: &ProjectList{}, + Managed: &Project{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ProjectID") + } + mg.Spec.InitProvider.ProjectID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/metal/v1alpha1/zz_ipattachment_types.go b/apis/metal/v1alpha1/zz_ipattachment_types.go index 2897be1..4a5abe4 100755 --- a/apis/metal/v1alpha1/zz_ipattachment_types.go +++ b/apis/metal/v1alpha1/zz_ipattachment_types.go @@ -31,7 +31,16 @@ type IPAttachmentInitParameters struct { CidrNotation *string `json:"cidrNotation,omitempty" tf:"cidr_notation,omitempty"` // ID of device to which to assign the subnet. + // +crossplane:generate:reference:type=Device DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } type IPAttachmentObservation struct { @@ -87,8 +96,17 @@ type IPAttachmentParameters struct { CidrNotation *string `json:"cidrNotation,omitempty" tf:"cidr_notation,omitempty"` // ID of device to which to assign the subnet. + // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` } // IPAttachmentSpec defines the desired state of IPAttachment @@ -128,7 +146,6 @@ type IPAttachment struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.cidrNotation) || (has(self.initProvider) && has(self.initProvider.cidrNotation))",message="spec.forProvider.cidrNotation is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" Spec IPAttachmentSpec `json:"spec"` Status IPAttachmentStatus `json:"status,omitempty"` } diff --git a/apis/metal/v1alpha1/zz_organizationmember_types.go b/apis/metal/v1alpha1/zz_organizationmember_types.go index 1e173ac..958483c 100755 --- a/apis/metal/v1alpha1/zz_organizationmember_types.go +++ b/apis/metal/v1alpha1/zz_organizationmember_types.go @@ -37,8 +37,17 @@ type OrganizationMemberInitParameters struct { // The organization to invite the user to // The organization to invite the user to + // +crossplane:generate:reference:type=Organization OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + // Reference to a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // Selector for a Organization to populate organizationId. + // +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 'admin', the projects list should be empty. // Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. // +listType=set @@ -112,9 +121,18 @@ type OrganizationMemberParameters struct { // The organization to invite the user to // The organization to invite the user to + // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + // Reference to a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // Selector for a Organization to populate organizationId. + // +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 'admin', the projects list should be empty. // Project IDs the member has access to within the organization. If the member is an 'owner', the projects list should be empty. // +kubebuilder:validation:Optional @@ -165,7 +183,6 @@ type OrganizationMember struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.invitee) || (has(self.initProvider) && has(self.initProvider.invitee))",message="spec.forProvider.invitee is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.organizationId) || (has(self.initProvider) && has(self.initProvider.organizationId))",message="spec.forProvider.organizationId is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectsIds) || (has(self.initProvider) && has(self.initProvider.projectsIds))",message="spec.forProvider.projectsIds is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.roles) || (has(self.initProvider) && has(self.initProvider.roles))",message="spec.forProvider.roles is a required parameter" Spec OrganizationMemberSpec `json:"spec"` diff --git a/apis/metal/v1alpha1/zz_port_types.go b/apis/metal/v1alpha1/zz_port_types.go index 5d3e9e1..acd1ec5 100755 --- a/apis/metal/v1alpha1/zz_port_types.go +++ b/apis/metal/v1alpha1/zz_port_types.go @@ -34,8 +34,17 @@ type PortInitParameters struct { Layer2 *bool `json:"layer2,omitempty" tf:"layer2,omitempty"` // UUID of native VLAN of the port + // +crossplane:generate:reference:type=Vlan NativeVlanID *string `json:"nativeVlanId,omitempty" tf:"native_vlan_id,omitempty"` + // Reference to a Vlan to populate nativeVlanId. + // +kubebuilder:validation:Optional + NativeVlanIDRef *v1.Reference `json:"nativeVlanIdRef,omitempty" tf:"-"` + + // Selector for a Vlan to populate nativeVlanId. + // +kubebuilder:validation:Optional + NativeVlanIDSelector *v1.Selector `json:"nativeVlanIdSelector,omitempty" tf:"-"` + // UUID of the port to lookup PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` @@ -111,9 +120,18 @@ 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"` + // Reference to a Vlan to populate nativeVlanId. + // +kubebuilder:validation:Optional + NativeVlanIDRef *v1.Reference `json:"nativeVlanIdRef,omitempty" tf:"-"` + + // Selector for a Vlan to populate nativeVlanId. + // +kubebuilder:validation:Optional + NativeVlanIDSelector *v1.Selector `json:"nativeVlanIdSelector,omitempty" tf:"-"` + // UUID of the port to lookup // +kubebuilder:validation:Optional PortID *string `json:"portId,omitempty" tf:"port_id,omitempty"` diff --git a/apis/metal/v1alpha1/zz_portvlanattachment_types.go b/apis/metal/v1alpha1/zz_portvlanattachment_types.go index 47bf642..5beeda2 100755 --- a/apis/metal/v1alpha1/zz_portvlanattachment_types.go +++ b/apis/metal/v1alpha1/zz_portvlanattachment_types.go @@ -28,8 +28,17 @@ import ( type PortVlanAttachmentInitParameters struct { // ID of device to be assigned to the VLAN + // +crossplane:generate:reference:type=Device DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDSelector *v1.Selector `json:"deviceIdSelector,omitempty" tf:"-"` + // Add port back to the bond when this resource is removed. Default is false ForceBond *bool `json:"forceBond,omitempty" tf:"force_bond,omitempty"` @@ -72,9 +81,18 @@ type PortVlanAttachmentObservation struct { type PortVlanAttachmentParameters struct { // ID of device to be assigned to the VLAN + // +crossplane:generate:reference:type=Device // +kubebuilder:validation:Optional DeviceID *string `json:"deviceId,omitempty" tf:"device_id,omitempty"` + // Reference to a Device to populate deviceId. + // +kubebuilder:validation:Optional + DeviceIDRef *v1.Reference `json:"deviceIdRef,omitempty" tf:"-"` + + // Selector for a Device to populate deviceId. + // +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 ForceBond *bool `json:"forceBond,omitempty" tf:"force_bond,omitempty"` @@ -128,7 +146,6 @@ type PortVlanAttachmentStatus struct { type PortVlanAttachment struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.deviceId) || (has(self.initProvider) && has(self.initProvider.deviceId))",message="spec.forProvider.deviceId is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.portName) || (has(self.initProvider) && has(self.initProvider.portName))",message="spec.forProvider.portName is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.vlanVnid) || (has(self.initProvider) && has(self.initProvider.vlanVnid))",message="spec.forProvider.vlanVnid is a required parameter" Spec PortVlanAttachmentSpec `json:"spec"` diff --git a/apis/metal/v1alpha1/zz_project_types.go b/apis/metal/v1alpha1/zz_project_types.go index a0e88cb..798fb2c 100755 --- a/apis/metal/v1alpha1/zz_project_types.go +++ b/apis/metal/v1alpha1/zz_project_types.go @@ -93,8 +93,17 @@ type ProjectInitParameters struct { // The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. // The UUID of organization under which the project is created + // +crossplane:generate:reference:type=Organization OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + // Reference to a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // Selector for a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` + // 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). // 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) PaymentMethodID *string `json:"paymentMethodId,omitempty" tf:"payment_method_id,omitempty"` @@ -153,9 +162,18 @@ type ProjectParameters struct { // The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. // The UUID of organization under which the project is created + // +crossplane:generate:reference:type=Organization // +kubebuilder:validation:Optional OrganizationID *string `json:"organizationId,omitempty" tf:"organization_id,omitempty"` + // Reference to a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDRef *v1.Reference `json:"organizationIdRef,omitempty" tf:"-"` + + // Selector for a Organization to populate organizationId. + // +kubebuilder:validation:Optional + OrganizationIDSelector *v1.Selector `json:"organizationIdSelector,omitempty" tf:"-"` + // 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). // 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) // +kubebuilder:validation:Optional diff --git a/apis/metal/v1alpha1/zz_projectapikey_types.go b/apis/metal/v1alpha1/zz_projectapikey_types.go index e30c0db..b9886aa 100755 --- a/apis/metal/v1alpha1/zz_projectapikey_types.go +++ b/apis/metal/v1alpha1/zz_projectapikey_types.go @@ -33,8 +33,17 @@ type ProjectAPIKeyInitParameters struct { // UUID of the project where the API key is scoped to. // UUID of project which the new API key is scoped to + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // Flag indicating whether the API key shoud be read-only ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` } @@ -64,9 +73,18 @@ type ProjectAPIKeyParameters struct { // UUID of the project where the API key is scoped to. // UUID of project which the new API key is scoped to + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // Flag indicating whether the API key shoud be read-only // +kubebuilder:validation:Optional ReadOnly *bool `json:"readOnly,omitempty" tf:"read_only,omitempty"` @@ -109,7 +127,6 @@ type ProjectAPIKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.description) || (has(self.initProvider) && has(self.initProvider.description))",message="spec.forProvider.description is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.readOnly) || (has(self.initProvider) && has(self.initProvider.readOnly))",message="spec.forProvider.readOnly is a required parameter" Spec ProjectAPIKeySpec `json:"spec"` Status ProjectAPIKeyStatus `json:"status,omitempty"` diff --git a/apis/metal/v1alpha1/zz_projectsshkey_types.go b/apis/metal/v1alpha1/zz_projectsshkey_types.go index 87b2896..9a91f26 100755 --- a/apis/metal/v1alpha1/zz_projectsshkey_types.go +++ b/apis/metal/v1alpha1/zz_projectsshkey_types.go @@ -33,8 +33,17 @@ type ProjectSSHKeyInitParameters struct { // The ID of parent project. // The ID of parent project + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // The public key. If this is a file, it can be read using the file interpolation function. // The public key PublicKey *string `json:"publicKey,omitempty" tf:"public_key,omitempty"` @@ -83,9 +92,18 @@ type ProjectSSHKeyParameters struct { // The ID of parent project. // The ID of parent project + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // The public key. If this is a file, it can be read using the file interpolation function. // The public key // +kubebuilder:validation:Optional @@ -129,7 +147,6 @@ type ProjectSSHKey struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.publicKey) || (has(self.initProvider) && has(self.initProvider.publicKey))",message="spec.forProvider.publicKey is a required parameter" Spec ProjectSSHKeySpec `json:"spec"` Status ProjectSSHKeyStatus `json:"status,omitempty"` diff --git a/apis/metal/v1alpha1/zz_reservedipblock_types.go b/apis/metal/v1alpha1/zz_reservedipblock_types.go index 8bf7375..79ec9cb 100755 --- a/apis/metal/v1alpha1/zz_reservedipblock_types.go +++ b/apis/metal/v1alpha1/zz_reservedipblock_types.go @@ -52,8 +52,17 @@ type ReservedIPBlockInitParameters struct { // The metal project ID where to allocate the address block. // The metal project ID where to allocate the address block + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // The number of allocated /32 addresses, a power of 2. Required when type is not vrf. // The number of allocated /32 addresses, a power of 2 Quantity *float64 `json:"quantity,omitempty" tf:"quantity,omitempty"` @@ -69,8 +78,17 @@ type ReservedIPBlockInitParameters struct { // Only valid and required when type is vrf. VRF ID for type=vrf reservations. // VRF ID for type=vrf reservations + // +crossplane:generate:reference:type=Vrf VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + // Reference to a Vrf to populate vrfId. + // +kubebuilder:validation:Optional + VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` + + // Selector for a Vrf to populate vrfId. + // +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. // 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. WaitForState *string `json:"waitForState,omitempty" tf:"wait_for_state,omitempty"` @@ -189,9 +207,18 @@ type ReservedIPBlockParameters struct { // The metal project ID where to allocate the address block. // The metal project ID where to allocate the address block + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // The number of allocated /32 addresses, a power of 2. Required when type is not vrf. // The number of allocated /32 addresses, a power of 2 // +kubebuilder:validation:Optional @@ -210,9 +237,18 @@ type ReservedIPBlockParameters struct { // Only valid and required when type is vrf. VRF ID for type=vrf reservations. // VRF ID for type=vrf reservations + // +crossplane:generate:reference:type=Vrf // +kubebuilder:validation:Optional VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + // Reference to a Vrf to populate vrfId. + // +kubebuilder:validation:Optional + VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` + + // Selector for a Vrf to populate vrfId. + // +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. // 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 @@ -255,9 +291,8 @@ type ReservedIPBlockStatus struct { type ReservedIPBlock struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" - Spec ReservedIPBlockSpec `json:"spec"` - Status ReservedIPBlockStatus `json:"status,omitempty"` + Spec ReservedIPBlockSpec `json:"spec"` + Status ReservedIPBlockStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_spotmarketrequest_types.go b/apis/metal/v1alpha1/zz_spotmarketrequest_types.go index 09f4a74..bcec5bd 100755 --- a/apis/metal/v1alpha1/zz_spotmarketrequest_types.go +++ b/apis/metal/v1alpha1/zz_spotmarketrequest_types.go @@ -165,8 +165,17 @@ type SpotMarketRequestInitParameters struct { // Project ID. // Project ID + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +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. // On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed WaitForDevices *bool `json:"waitForDevices,omitempty" tf:"wait_for_devices,omitempty"` @@ -244,9 +253,18 @@ type SpotMarketRequestParameters struct { // Project ID. // Project ID + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +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. // On resource creation - wait until all desired devices are active, on resource destruction - wait until devices are removed // +kubebuilder:validation:Optional @@ -293,7 +311,6 @@ type SpotMarketRequest struct { // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.devicesMin) || (has(self.initProvider) && has(self.initProvider.devicesMin))",message="spec.forProvider.devicesMin is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.instanceParameters) || (has(self.initProvider) && has(self.initProvider.instanceParameters))",message="spec.forProvider.instanceParameters is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.maxBidPrice) || (has(self.initProvider) && has(self.initProvider.maxBidPrice))",message="spec.forProvider.maxBidPrice is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" Spec SpotMarketRequestSpec `json:"spec"` Status SpotMarketRequestStatus `json:"status,omitempty"` } diff --git a/apis/metal/v1alpha1/zz_virtualcircuit_types.go b/apis/metal/v1alpha1/zz_virtualcircuit_types.go index 98cb5c2..f72fc52 100755 --- a/apis/metal/v1alpha1/zz_virtualcircuit_types.go +++ b/apis/metal/v1alpha1/zz_virtualcircuit_types.go @@ -29,8 +29,17 @@ type VirtualCircuitInitParameters struct { // (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections // UUID of Connection where the VC is scoped to. Only used for dedicated connections + // +crossplane:generate:reference:type=Connection ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + // Reference to a Connection to populate connectionId. + // +kubebuilder:validation:Optional + ConnectionIDRef *v1.Reference `json:"connectionIdRef,omitempty" tf:"-"` + + // Selector for a Connection to populate connectionId. + // +kubebuilder:validation:Optional + ConnectionIDSelector *v1.Selector `json:"connectionIdSelector,omitempty" tf:"-"` + // (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. // The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. CustomerIP *string `json:"customerIp,omitempty" tf:"customer_ip,omitempty"` @@ -73,8 +82,17 @@ type VirtualCircuitInitParameters struct { // (String) UUID of the Project where the VC is scoped to // UUID of the Project where the VC is scoped to + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. // Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. Speed *string `json:"speed,omitempty" tf:"speed,omitempty"` @@ -101,15 +119,42 @@ type VirtualCircuitInitParameters struct { // (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. // UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + // +crossplane:generate:reference:type=VirtualCircuit VirtualCircuitID *string `json:"virtualCircuitId,omitempty" tf:"virtual_circuit_id,omitempty"` + // Reference to a VirtualCircuit to populate virtualCircuitId. + // +kubebuilder:validation:Optional + VirtualCircuitIDRef *v1.Reference `json:"virtualCircuitIdRef,omitempty" tf:"-"` + + // Selector for a VirtualCircuit to populate virtualCircuitId. + // +kubebuilder:validation:Optional + VirtualCircuitIDSelector *v1.Selector `json:"virtualCircuitIdSelector,omitempty" tf:"-"` + // (String) UUID of the VLAN to associate // UUID of the VLAN to associate + // +crossplane:generate:reference:type=Vlan VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + // Reference to a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + + // Selector for a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` + // (String) UUID of the VRF to associate // UUID of the VRF to associate + // +crossplane:generate:reference:type=Vrf VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + + // Reference to a Vrf to populate vrfId. + // +kubebuilder:validation:Optional + VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` + + // Selector for a Vrf to populate vrfId. + // +kubebuilder:validation:Optional + VrfIDSelector *v1.Selector `json:"vrfIdSelector,omitempty" tf:"-"` } type VirtualCircuitObservation struct { @@ -214,9 +259,18 @@ type VirtualCircuitParameters struct { // (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections // UUID of Connection where the VC is scoped to. Only used for dedicated connections + // +crossplane:generate:reference:type=Connection // +kubebuilder:validation:Optional ConnectionID *string `json:"connectionId,omitempty" tf:"connection_id,omitempty"` + // Reference to a Connection to populate connectionId. + // +kubebuilder:validation:Optional + ConnectionIDRef *v1.Reference `json:"connectionIdRef,omitempty" tf:"-"` + + // Selector for a Connection to populate connectionId. + // +kubebuilder:validation:Optional + ConnectionIDSelector *v1.Selector `json:"connectionIdSelector,omitempty" tf:"-"` + // (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. // The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. // +kubebuilder:validation:Optional @@ -269,9 +323,18 @@ type VirtualCircuitParameters struct { // (String) UUID of the Project where the VC is scoped to // UUID of the Project where the VC is scoped to + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. // Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. // +kubebuilder:validation:Optional @@ -302,18 +365,45 @@ type VirtualCircuitParameters struct { // (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. // UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. + // +crossplane:generate:reference:type=VirtualCircuit // +kubebuilder:validation:Optional VirtualCircuitID *string `json:"virtualCircuitId,omitempty" tf:"virtual_circuit_id,omitempty"` + // Reference to a VirtualCircuit to populate virtualCircuitId. + // +kubebuilder:validation:Optional + VirtualCircuitIDRef *v1.Reference `json:"virtualCircuitIdRef,omitempty" tf:"-"` + + // Selector for a VirtualCircuit to populate virtualCircuitId. + // +kubebuilder:validation:Optional + VirtualCircuitIDSelector *v1.Selector `json:"virtualCircuitIdSelector,omitempty" tf:"-"` + // (String) UUID of the VLAN to associate // UUID of the VLAN to associate + // +crossplane:generate:reference:type=Vlan // +kubebuilder:validation:Optional VlanID *string `json:"vlanId,omitempty" tf:"vlan_id,omitempty"` + // Reference to a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDRef *v1.Reference `json:"vlanIdRef,omitempty" tf:"-"` + + // Selector for a Vlan to populate vlanId. + // +kubebuilder:validation:Optional + VlanIDSelector *v1.Selector `json:"vlanIdSelector,omitempty" tf:"-"` + // (String) UUID of the VRF to associate // UUID of the VRF to associate + // +crossplane:generate:reference:type=Vrf // +kubebuilder:validation:Optional VrfID *string `json:"vrfId,omitempty" tf:"vrf_id,omitempty"` + + // Reference to a Vrf to populate vrfId. + // +kubebuilder:validation:Optional + VrfIDRef *v1.Reference `json:"vrfIdRef,omitempty" tf:"-"` + + // Selector for a Vrf to populate vrfId. + // +kubebuilder:validation:Optional + VrfIDSelector *v1.Selector `json:"vrfIdSelector,omitempty" tf:"-"` } // VirtualCircuitSpec defines the desired state of VirtualCircuit @@ -353,7 +443,6 @@ type VirtualCircuit struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.portId) || (has(self.initProvider) && has(self.initProvider.portId))",message="spec.forProvider.portId is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" Spec VirtualCircuitSpec `json:"spec"` Status VirtualCircuitStatus `json:"status,omitempty"` } diff --git a/apis/metal/v1alpha1/zz_vlan_types.go b/apis/metal/v1alpha1/zz_vlan_types.go index ec8f9dc..5175398 100755 --- a/apis/metal/v1alpha1/zz_vlan_types.go +++ b/apis/metal/v1alpha1/zz_vlan_types.go @@ -41,8 +41,17 @@ type VlanInitParameters struct { // ID of parent project. // ID of parent project + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // VLAN ID, must be unique in metro. // VLAN ID, must be unique in metro Vxlan *float64 `json:"vxlan,omitempty" tf:"vxlan,omitempty"` @@ -93,9 +102,18 @@ type VlanParameters struct { // ID of parent project. // ID of parent project + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` + // VLAN ID, must be unique in metro. // VLAN ID, must be unique in metro // +kubebuilder:validation:Optional @@ -138,9 +156,8 @@ type VlanStatus struct { type Vlan struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" - Spec VlanSpec `json:"spec"` - Status VlanStatus `json:"status,omitempty"` + Spec VlanSpec `json:"spec"` + Status VlanStatus `json:"status,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/metal/v1alpha1/zz_vrf_types.go b/apis/metal/v1alpha1/zz_vrf_types.go index 47ed42e..8da1e8b 100755 --- a/apis/metal/v1alpha1/zz_vrf_types.go +++ b/apis/metal/v1alpha1/zz_vrf_types.go @@ -50,7 +50,16 @@ type VrfInitParameters struct { // Project ID where the VRF will be deployed. // Project ID + // +crossplane:generate:reference:type=Project ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` } type VrfObservation struct { @@ -113,8 +122,17 @@ type VrfParameters struct { // Project ID where the VRF will be deployed. // Project ID + // +crossplane:generate:reference:type=Project // +kubebuilder:validation:Optional ProjectID *string `json:"projectId,omitempty" tf:"project_id,omitempty"` + + // Reference to a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDRef *v1.Reference `json:"projectIdRef,omitempty" tf:"-"` + + // Selector for a Project to populate projectId. + // +kubebuilder:validation:Optional + ProjectIDSelector *v1.Selector `json:"projectIdSelector,omitempty" tf:"-"` } // VrfSpec defines the desired state of Vrf @@ -155,7 +173,6 @@ type Vrf struct { metav1.ObjectMeta `json:"metadata,omitempty"` // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.metro) || (has(self.initProvider) && has(self.initProvider.metro))",message="spec.forProvider.metro is a required parameter" // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" - // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.projectId) || (has(self.initProvider) && has(self.initProvider.projectId))",message="spec.forProvider.projectId is a required parameter" Spec VrfSpec `json:"spec"` Status VrfStatus `json:"status,omitempty"` } diff --git a/examples-generated/metal/v1alpha1/bgpsession.yaml b/examples-generated/metal/v1alpha1/bgpsession.yaml index 55930f4..2c005a6 100644 --- a/examples-generated/metal/v1alpha1/bgpsession.yaml +++ b/examples-generated/metal/v1alpha1/bgpsession.yaml @@ -9,7 +9,9 @@ metadata: spec: forProvider: addressFamily: ipv4 - deviceId: ${equinix_metal_device.test.id} + deviceIdSelector: + matchLabels: + testing.upbound.io/example-name: test --- @@ -29,7 +31,9 @@ spec: - ny operatingSystem: ubuntu_20_04 plan: c3.small.x86 - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example --- @@ -44,5 +48,7 @@ metadata: spec: forProvider: metro: ny - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example quantity: 1 diff --git a/examples-generated/metal/v1alpha1/connection.yaml b/examples-generated/metal/v1alpha1/connection.yaml index 8e59fa6..3c36716 100644 --- a/examples-generated/metal/v1alpha1/connection.yaml +++ b/examples-generated/metal/v1alpha1/connection.yaml @@ -11,7 +11,9 @@ spec: contactEmail: username@example.com metro: sv name: tf-metal-to-azure - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example redundancy: redundant serviceTokenType: a_side speed: 1000Mbps diff --git a/examples-generated/metal/v1alpha1/device.yaml b/examples-generated/metal/v1alpha1/device.yaml index d12fa8f..ea53b4a 100644 --- a/examples-generated/metal/v1alpha1/device.yaml +++ b/examples-generated/metal/v1alpha1/device.yaml @@ -13,4 +13,6 @@ spec: metro: sv operatingSystem: ubuntu_20_04 plan: c3.small.x86 - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example diff --git a/examples-generated/metal/v1alpha1/gateway.yaml b/examples-generated/metal/v1alpha1/gateway.yaml index 8e7db82..02f016c 100644 --- a/examples-generated/metal/v1alpha1/gateway.yaml +++ b/examples-generated/metal/v1alpha1/gateway.yaml @@ -9,8 +9,12 @@ metadata: spec: forProvider: privateIpv4SubnetSize: 8 - projectId: ${local.project_id} - vlanId: ${equinix_metal_vlan.test.id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example + vlanIdSelector: + matchLabels: + testing.upbound.io/example-name: test --- @@ -26,4 +30,6 @@ spec: forProvider: description: test VLAN in SV metro: sv - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example diff --git a/examples-generated/metal/v1alpha1/ipattachment.yaml b/examples-generated/metal/v1alpha1/ipattachment.yaml index 4030504..bd55b91 100644 --- a/examples-generated/metal/v1alpha1/ipattachment.yaml +++ b/examples-generated/metal/v1alpha1/ipattachment.yaml @@ -10,7 +10,9 @@ spec: forProvider: cidrNotation: ${join("/", [cidrhost(metal_reserved_ip_block.myblock.cidr_notation, 0), "32"])} - deviceId: ${equinix_metal_device.mydevice.id} + deviceIdSelector: + matchLabels: + testing.upbound.io/example-name: mydevice --- @@ -25,5 +27,7 @@ metadata: spec: forProvider: metro: ny - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example quantity: 2 diff --git a/examples-generated/metal/v1alpha1/organizationmember.yaml b/examples-generated/metal/v1alpha1/organizationmember.yaml index bd55b6f..28e19b7 100644 --- a/examples-generated/metal/v1alpha1/organizationmember.yaml +++ b/examples-generated/metal/v1alpha1/organizationmember.yaml @@ -9,7 +9,9 @@ metadata: spec: forProvider: invitee: member@example.com - organizationId: ${var.organization_id} + organizationIdSelector: + matchLabels: + testing.upbound.io/example-name: example projectsIds: - ${var.project_id} roles: diff --git a/examples-generated/metal/v1alpha1/projectapikey.yaml b/examples-generated/metal/v1alpha1/projectapikey.yaml index 7035671..db9e48f 100644 --- a/examples-generated/metal/v1alpha1/projectapikey.yaml +++ b/examples-generated/metal/v1alpha1/projectapikey.yaml @@ -9,5 +9,7 @@ metadata: spec: forProvider: description: Read-only key scoped to a projct - projectId: ${local.existing_project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example readOnly: true diff --git a/examples-generated/metal/v1alpha1/projectsshkey.yaml b/examples-generated/metal/v1alpha1/projectsshkey.yaml index 0eadf0f..14f82b1 100644 --- a/examples-generated/metal/v1alpha1/projectsshkey.yaml +++ b/examples-generated/metal/v1alpha1/projectsshkey.yaml @@ -9,7 +9,9 @@ metadata: spec: forProvider: name: test - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example publicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDM/unxJeFqxsTJcu6mhqsMHSaVlpu+Jj/P+44zrm6X/MAoHSX3X9oLgujEjjZ74yLfdfe0bJrbL2YgJzNaEkIQQ1VPMHB5EhTKUBGnzlPP0hHTnxsjAm9qDHgUPgvgFDQSAMzdJRJ0Cexo16Ph9VxCoLh3dxiE7s2gaM2FdVg7P8aSxKypsxAhYV3D0AwqzoOyT6WWhBoQ0xZ85XevOTnJCpImSemEGs6nVGEsWcEc1d1YvdxFjAK4SdsKUMkj4Dsy/leKsdi/DEAf356vbMT1UHsXXvy5TlHu/Pa6qF53v32Enz+nhKy7/8W2Yt2yWx8HnQcT2rug9lvCXagJO6oauqRTO77C4QZn13ZLMZgLT66S/tNh2EX0gi6vmIs5dth8uF+K6nxIyKJXbcA4ASg7F1OJrHKFZdTc5v1cPeq6PcbqGgc+8SrPYQmzvQqLoMBuxyos2hUkYOmw3aeWJj9nFa8Wu5WaN89mUeOqSkU4S5cgUzWUOmKey56B/j/s1sVys9rMhZapVs0wL4L9GBBM48N5jAQZnnpo85A8KsZq5ME22bTLqnxsDXqDYZvS7PSI6Dxi7eleOFE/NYYDkrgDLHTQri8ucDMVeVWHgoMY2bPXdn7KKy5jW5jKsf8EPARXg77A4gRYmgKrcwIKqJEUPqyxJBe0CPoGTqgXPRsUiQ== tomk@hp2 @@ -30,6 +32,8 @@ spec: metro: ny operatingSystem: ubuntu_20_04 plan: c3.medium.x86 - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example projectSshKeyIds: - ${equinix_metal_project_ssh_key.test.id} diff --git a/examples-generated/metal/v1alpha1/reservedipblock.yaml b/examples-generated/metal/v1alpha1/reservedipblock.yaml index 07fa373..d097201 100644 --- a/examples-generated/metal/v1alpha1/reservedipblock.yaml +++ b/examples-generated/metal/v1alpha1/reservedipblock.yaml @@ -9,5 +9,7 @@ metadata: spec: forProvider: metro: sv - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example quantity: 2 diff --git a/examples-generated/metal/v1alpha1/spotmarketrequest.yaml b/examples-generated/metal/v1alpha1/spotmarketrequest.yaml index e6dba30..8aa046c 100644 --- a/examples-generated/metal/v1alpha1/spotmarketrequest.yaml +++ b/examples-generated/metal/v1alpha1/spotmarketrequest.yaml @@ -17,4 +17,6 @@ spec: plan: c3.small.x86 maxBidPrice: 0.03 metro: ny - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example diff --git a/examples-generated/metal/v1alpha1/sshkey.yaml b/examples-generated/metal/v1alpha1/sshkey.yaml index 1e4a424..af4abb1 100644 --- a/examples-generated/metal/v1alpha1/sshkey.yaml +++ b/examples-generated/metal/v1alpha1/sshkey.yaml @@ -28,4 +28,6 @@ spec: metro: sv operatingSystem: ubuntu_20_04 plan: c3.small.x86 - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example diff --git a/examples-generated/metal/v1alpha1/virtualcircuit.yaml b/examples-generated/metal/v1alpha1/virtualcircuit.yaml index 605d3bc..9861861 100644 --- a/examples-generated/metal/v1alpha1/virtualcircuit.yaml +++ b/examples-generated/metal/v1alpha1/virtualcircuit.yaml @@ -8,11 +8,17 @@ metadata: name: test spec: forProvider: - connectionId: ${local.conn_id} + connectionIdSelector: + matchLabels: + testing.upbound.io/example-name: example nniVlan: 1056 portId: ${data.equinix_metal_connection.test.ports[0].id} - projectId: ${local.project_id} - vlanId: ${equinix_metal_vlan.test.id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example + vlanIdSelector: + matchLabels: + testing.upbound.io/example-name: test --- @@ -27,4 +33,6 @@ metadata: spec: forProvider: metro: ${data.equinix_metal_connection.test.metro} - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example diff --git a/examples-generated/metal/v1alpha1/vlan.yaml b/examples-generated/metal/v1alpha1/vlan.yaml index d682292..a67138f 100644 --- a/examples-generated/metal/v1alpha1/vlan.yaml +++ b/examples-generated/metal/v1alpha1/vlan.yaml @@ -10,5 +10,7 @@ spec: forProvider: description: VLAN in New Jersey metro: sv - projectId: ${local.project_id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example vxlan: 1040 diff --git a/examples-generated/metal/v1alpha1/vrf.yaml b/examples-generated/metal/v1alpha1/vrf.yaml index 546f0b4..2bf59be 100644 --- a/examples-generated/metal/v1alpha1/vrf.yaml +++ b/examples-generated/metal/v1alpha1/vrf.yaml @@ -15,7 +15,9 @@ spec: localAsn: "65000" metro: da name: example-vrf - projectId: ${equinix_metal_project.example.id} + projectIdSelector: + matchLabels: + testing.upbound.io/example-name: example --- diff --git a/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml b/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml index e49b2e5..d5e2a74 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_bgpsessions.yaml @@ -87,6 +87,80 @@ spec: ID of device. ID of device type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object initProvider: description: |- @@ -116,6 +190,80 @@ spec: ID of device. ID of device type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object managementPolicies: default: @@ -289,10 +437,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.addressFamily) || (has(self.initProvider) && has(self.initProvider.addressFamily))' - - message: spec.forProvider.deviceId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) - || (has(self.initProvider) && has(self.initProvider.deviceId))' status: description: BGPSessionStatus defines the observed state of BGPSession. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_connections.yaml b/package/crds/metal.equinix.jet.crossplane.io_connections.yaml index b8b9a3c..c164b40 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_connections.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_connections.yaml @@ -107,11 +107,159 @@ spec: ID of the organization where the connection is scoped to. ID of the organization responsible for the connection. Applicable with type "dedicated" type: string + organizationIdRef: + description: Reference to a Organization to populate organizationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + organizationIdSelector: + description: Selector for a Organization to populate organizationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object projectId: description: |- ID of the project where the connection is scoped to, must be set for. ID of the project where the connection is scoped to. Required with type "shared" type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object redundancy: description: |- Connection redundancy - redundant or primary. @@ -202,11 +350,159 @@ spec: ID of the organization where the connection is scoped to. ID of the organization responsible for the connection. Applicable with type "dedicated" type: string + organizationIdRef: + description: Reference to a Organization to populate organizationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + organizationIdSelector: + description: Selector for a Organization to populate organizationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object projectId: description: |- ID of the project where the connection is scoped to, must be set for. ID of the project where the connection is scoped to. Required with type "shared" type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object redundancy: description: |- Connection redundancy - redundant or primary. diff --git a/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml b/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml index 964b2da..f68cc9e 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_devicenetworktypes.yaml @@ -77,6 +77,80 @@ spec: description: The ID of the device on which the network type should be set type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: description: Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded @@ -99,6 +173,80 @@ spec: description: The ID of the device on which the network type should be set type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: description: Network type to set. Must be one of layer3, hybrid, hybrid-bonded, layer2-individual, layer2-bonded @@ -272,10 +420,6 @@ spec: - forProvider type: object x-kubernetes-validations: - - message: spec.forProvider.deviceId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) - || (has(self.initProvider) && has(self.initProvider.deviceId))' - message: spec.forProvider.type is a required parameter rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.type) diff --git a/package/crds/metal.equinix.jet.crossplane.io_devices.yaml b/package/crds/metal.equinix.jet.crossplane.io_devices.yaml index 4ee8156..3f80121 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_devices.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_devices.yaml @@ -196,6 +196,80 @@ spec: (String) The ID of the project in which to create the device The ID of the project in which to create the device type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object projectSshKeyIds: description: |- (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource @@ -410,6 +484,80 @@ spec: (String) The ID of the project in which to create the device The ID of the project in which to create the device type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object projectSshKeyIds: description: |- (List of String) Array of IDs of the project SSH keys which should be added to the device. If you specify this array, only the listed project SSH keys (and any SSH keys for the users specified in user_ssh_key_ids) will be added. If no SSH keys are specified (both user_ssh_keys_ids and project_ssh_key_ids are empty lists or omitted), all parent project keys, parent project members keys and organization members keys will be included. Project SSH keys can be created with the equinix_metal_project_ssh_key resource @@ -663,10 +811,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.plan) || (has(self.initProvider) && has(self.initProvider.plan))' - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: DeviceStatus defines the observed state of Device. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml b/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml index a2bd682..e721c4c 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_gateways.yaml @@ -77,6 +77,80 @@ spec: UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. UUID of the Public or VRF IP Reservation to associate type: string + ipReservationIdRef: + description: Reference to a ReservedIPBlock to populate ipReservationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + ipReservationIdSelector: + description: Selector for a ReservedIPBlock to populate ipReservationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object privateIpv4SubnetSize: description: |- Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. @@ -87,11 +161,159 @@ spec: UUID of the project where the gateway is scoped to. UUID of the Project where the Gateway is scoped to type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vlanId: description: |- UUID of the VLAN where the gateway is scoped to. UUID of the VLAN to associate type: string + vlanIdRef: + description: Reference to a Vlan to populate vlanId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vlanIdSelector: + description: Selector for a Vlan to populate vlanId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object initProvider: description: |- @@ -111,6 +333,80 @@ spec: UUID of Public or VRF IP Reservation to associate with the gateway, the reservation must be in the same metro as the VLAN, conflicts with private_ipv4_subnet_size. UUID of the Public or VRF IP Reservation to associate type: string + ipReservationIdRef: + description: Reference to a ReservedIPBlock to populate ipReservationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + ipReservationIdSelector: + description: Selector for a ReservedIPBlock to populate ipReservationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object privateIpv4SubnetSize: description: |- Size of the private IPv4 subnet to create for this metal gateway, must be one of 8, 16, 32, 64, 128. Conflicts with ip_reservation_id. @@ -121,11 +417,159 @@ spec: UUID of the project where the gateway is scoped to. UUID of the Project where the Gateway is scoped to type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vlanId: description: |- UUID of the VLAN where the gateway is scoped to. UUID of the VLAN to associate type: string + vlanIdRef: + description: Reference to a Vlan to populate vlanId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vlanIdSelector: + description: Selector for a Vlan to populate vlanId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object managementPolicies: default: @@ -294,15 +738,6 @@ spec: required: - forProvider type: object - x-kubernetes-validations: - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' - - message: spec.forProvider.vlanId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.vlanId) - || (has(self.initProvider) && has(self.initProvider.vlanId))' status: description: GatewayStatus defines the observed state of Gateway. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml b/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml index f0b720a..339f114 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_ipattachments.yaml @@ -79,6 +79,80 @@ spec: deviceId: description: ID of device to which to assign the subnet. type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object initProvider: description: |- @@ -100,6 +174,80 @@ spec: deviceId: description: ID of device to which to assign the subnet. type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object managementPolicies: default: @@ -273,10 +421,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.cidrNotation) || (has(self.initProvider) && has(self.initProvider.cidrNotation))' - - message: spec.forProvider.deviceId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) - || (has(self.initProvider) && has(self.initProvider.deviceId))' status: description: IPAttachmentStatus defines the observed state of IPAttachment. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml index f0e0615..46b783f 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_organizationmembers.yaml @@ -88,6 +88,80 @@ spec: The organization to invite the user to The organization to invite the user to type: string + organizationIdRef: + description: Reference to a Organization to populate organizationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + organizationIdSelector: + description: Selector for a Organization to populate organizationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object projectsIds: description: |- Project IDs the member has access to within the organization. If the member is an 'admin', the projects list should be empty. @@ -133,6 +207,80 @@ spec: The organization to invite the user to The organization to invite the user to type: string + organizationIdRef: + description: Reference to a Organization to populate organizationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + organizationIdSelector: + description: Selector for a Organization to populate organizationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object projectsIds: description: |- Project IDs the member has access to within the organization. If the member is an 'admin', the projects list should be empty. @@ -322,10 +470,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.invitee) || (has(self.initProvider) && has(self.initProvider.invitee))' - - message: spec.forProvider.organizationId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.organizationId) - || (has(self.initProvider) && has(self.initProvider.organizationId))' - message: spec.forProvider.projectsIds is a required parameter rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.projectsIds) diff --git a/package/crds/metal.equinix.jet.crossplane.io_ports.yaml b/package/crds/metal.equinix.jet.crossplane.io_ports.yaml index 3800c0d..60609e1 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_ports.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_ports.yaml @@ -82,6 +82,80 @@ spec: nativeVlanId: description: UUID of native VLAN of the port type: string + nativeVlanIdRef: + description: Reference to a Vlan to populate nativeVlanId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + nativeVlanIdSelector: + description: Selector for a Vlan to populate nativeVlanId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object portId: description: UUID of the port to lookup type: string @@ -126,6 +200,80 @@ spec: nativeVlanId: description: UUID of native VLAN of the port type: string + nativeVlanIdRef: + description: Reference to a Vlan to populate nativeVlanId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + nativeVlanIdSelector: + description: Selector for a Vlan to populate nativeVlanId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object 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 05ed851..26506e4 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_portvlanattachments.yaml @@ -76,6 +76,80 @@ spec: deviceId: description: ID of device to be assigned to the VLAN type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object forceBond: description: Add port back to the bond when this resource is removed. Default is false @@ -110,6 +184,80 @@ spec: deviceId: description: ID of device to be assigned to the VLAN type: string + deviceIdRef: + description: Reference to a Device to populate deviceId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + deviceIdSelector: + description: Selector for a Device to populate deviceId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object forceBond: description: Add port back to the bond when this resource is removed. Default is false @@ -296,10 +444,6 @@ spec: - forProvider type: object x-kubernetes-validations: - - message: spec.forProvider.deviceId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.deviceId) - || (has(self.initProvider) && has(self.initProvider.deviceId))' - message: spec.forProvider.portName is a required parameter rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.portName) diff --git a/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml index fa4f417..0700925 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projectapikeys.yaml @@ -82,6 +82,80 @@ spec: UUID of the project where the API key is scoped to. UUID of project which the new API key is scoped to type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object readOnly: description: Flag indicating whether the API key shoud be read-only type: boolean @@ -109,6 +183,80 @@ spec: UUID of the project where the API key is scoped to. UUID of project which the new API key is scoped to type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object readOnly: description: Flag indicating whether the API key shoud be read-only type: boolean @@ -285,10 +433,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.description) || (has(self.initProvider) && has(self.initProvider.description))' - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' - message: spec.forProvider.readOnly is a required parameter rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.readOnly) diff --git a/package/crds/metal.equinix.jet.crossplane.io_projects.yaml b/package/crds/metal.equinix.jet.crossplane.io_projects.yaml index a11f861..c9ec1af 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projects.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projects.yaml @@ -124,6 +124,80 @@ spec: The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. The UUID of organization under which the project is created type: string + organizationIdRef: + description: Reference to a Organization to populate organizationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + organizationIdSelector: + description: Selector for a Organization to populate organizationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object paymentMethodId: 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). @@ -195,6 +269,80 @@ spec: The UUID of organization under which you want to create the project. If you leave it out, the project will be created under your the default organization of your account. The UUID of organization under which the project is created type: string + organizationIdRef: + description: Reference to a Organization to populate organizationId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + organizationIdSelector: + description: Selector for a Organization to populate organizationId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object paymentMethodId: 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). diff --git a/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml b/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml index 9c6c188..2d618e9 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_projectsshkeys.yaml @@ -82,6 +82,80 @@ spec: The ID of parent project. The ID of parent project type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object publicKey: description: |- The public key. If this is a file, it can be read using the file interpolation function. @@ -111,6 +185,80 @@ spec: The ID of parent project. The ID of parent project type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object publicKey: description: |- The public key. If this is a file, it can be read using the file interpolation function. @@ -289,10 +437,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))' - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' - message: spec.forProvider.publicKey is a required parameter rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.publicKey) diff --git a/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml b/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml index b5dcd61..ad34214 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_reservedipblocks.yaml @@ -107,6 +107,80 @@ spec: The metal project ID where to allocate the address block. The metal project ID where to allocate the address block type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object quantity: description: |- The number of allocated /32 addresses, a power of 2. Required when type is not vrf. @@ -130,6 +204,80 @@ spec: Only valid and required when type is vrf. VRF ID for type=vrf reservations. VRF ID for type=vrf reservations type: string + vrfIdRef: + description: Reference to a Vrf to populate vrfId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vrfIdSelector: + description: Selector for a Vrf to populate vrfId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object waitForState: 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. @@ -184,6 +332,80 @@ spec: The metal project ID where to allocate the address block. The metal project ID where to allocate the address block type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object quantity: description: |- The number of allocated /32 addresses, a power of 2. Required when type is not vrf. @@ -207,6 +429,80 @@ spec: Only valid and required when type is vrf. VRF ID for type=vrf reservations. VRF ID for type=vrf reservations type: string + vrfIdRef: + description: Reference to a Vrf to populate vrfId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vrfIdSelector: + description: Selector for a Vrf to populate vrfId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object waitForState: 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. @@ -380,11 +676,6 @@ spec: required: - forProvider type: object - x-kubernetes-validations: - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: ReservedIPBlockStatus defines the observed state of ReservedIPBlock. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml b/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml index b3d4ae0..f848338 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_spotmarketrequests.yaml @@ -150,6 +150,80 @@ spec: Project ID. Project ID type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object waitForDevices: description: |- On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. @@ -247,6 +321,80 @@ spec: Project ID. Project ID type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object waitForDevices: description: |- On resource creation wait until all desired devices are active. On resource destruction wait until devices are removed. @@ -437,10 +585,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.maxBidPrice) || (has(self.initProvider) && has(self.initProvider.maxBidPrice))' - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: SpotMarketRequestStatus defines the observed state of SpotMarketRequest. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml b/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml index bad0ba1..879c0df 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_virtualcircuits.yaml @@ -77,6 +77,80 @@ spec: (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections UUID of Connection where the VC is scoped to. Only used for dedicated connections type: string + connectionIdRef: + description: Reference to a Connection to populate connectionId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + connectionIdSelector: + description: Selector for a Connection to populate connectionId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object customerIp: description: |- (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. @@ -146,6 +220,80 @@ spec: (String) UUID of the Project where the VC is scoped to UUID of the Project where the VC is scoped to type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object speed: description: |- (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. @@ -181,16 +329,238 @@ spec: (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. type: string + virtualCircuitIdRef: + description: Reference to a VirtualCircuit to populate virtualCircuitId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + virtualCircuitIdSelector: + description: Selector for a VirtualCircuit to populate virtualCircuitId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vlanId: description: |- (String) UUID of the VLAN to associate UUID of the VLAN to associate type: string + vlanIdRef: + description: Reference to a Vlan to populate vlanId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vlanIdSelector: + description: Selector for a Vlan to populate vlanId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vrfId: description: |- (String) UUID of the VRF to associate UUID of the VRF to associate type: string + vrfIdRef: + description: Reference to a Vrf to populate vrfId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vrfIdSelector: + description: Selector for a Vrf to populate vrfId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object initProvider: description: |- @@ -210,6 +580,80 @@ spec: (String) UUID of Connection where the VC is scoped to. Only used for dedicated connections UUID of Connection where the VC is scoped to. Only used for dedicated connections type: string + connectionIdRef: + description: Reference to a Connection to populate connectionId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + connectionIdSelector: + description: Selector for a Connection to populate connectionId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object customerIp: description: |- (String) The Customer IP address which the CSR switch will peer with. Will default to the other usable IP in the subnet. @@ -279,6 +723,80 @@ spec: (String) UUID of the Project where the VC is scoped to UUID of the Project where the VC is scoped to type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object speed: description: |- (String) Description of the Virtual Circuit speed. This is for information purposes and is computed when the connection type is shared. @@ -314,16 +832,238 @@ spec: (String) UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. UUID of an existing VC to configure. Used in the case of shared interconnections where the VC has already been created. type: string + virtualCircuitIdRef: + description: Reference to a VirtualCircuit to populate virtualCircuitId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + virtualCircuitIdSelector: + description: Selector for a VirtualCircuit to populate virtualCircuitId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vlanId: description: |- (String) UUID of the VLAN to associate UUID of the VLAN to associate type: string + vlanIdRef: + description: Reference to a Vlan to populate vlanId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vlanIdSelector: + description: Selector for a Vlan to populate vlanId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vrfId: description: |- (String) UUID of the VRF to associate UUID of the VRF to associate type: string + vrfIdRef: + description: Reference to a Vrf to populate vrfId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + vrfIdSelector: + description: Selector for a Vrf to populate vrfId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object managementPolicies: default: @@ -497,10 +1237,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.portId) || (has(self.initProvider) && has(self.initProvider.portId))' - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: VirtualCircuitStatus defines the observed state of VirtualCircuit. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml b/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml index 2cbfcc6..6139bff 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_vlans.yaml @@ -92,6 +92,80 @@ spec: ID of parent project. ID of parent project type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vxlan: description: |- VLAN ID, must be unique in metro. @@ -131,6 +205,80 @@ spec: ID of parent project. ID of parent project type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object vxlan: description: |- VLAN ID, must be unique in metro. @@ -304,11 +452,6 @@ spec: required: - forProvider type: object - x-kubernetes-validations: - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: VlanStatus defines the observed state of Vlan. properties: diff --git a/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml b/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml index e125799..c0fb039 100644 --- a/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml +++ b/package/crds/metal.equinix.jet.crossplane.io_vrves.yaml @@ -105,6 +105,80 @@ spec: Project ID where the VRF will be deployed. Project ID type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object initProvider: description: |- @@ -152,6 +226,80 @@ spec: Project ID where the VRF will be deployed. Project ID type: string + projectIdRef: + description: Reference to a Project to populate projectId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + projectIdSelector: + description: Selector for a Project to populate projectId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object type: object managementPolicies: default: @@ -329,10 +477,6 @@ spec: rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies || ''Update'' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))' - - message: spec.forProvider.projectId is a required parameter - rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies - || ''Update'' in self.managementPolicies) || has(self.forProvider.projectId) - || (has(self.initProvider) && has(self.initProvider.projectId))' status: description: VrfStatus defines the observed state of Vrf. properties: