Skip to content

Commit 336829b

Browse files
artbinArtem Kulyabinmaxinsky
authored
[vcd] Add support for legacy API (#12361)
Signed-off-by: Artem Kulyabin <[email protected]> Signed-off-by: Max Chervov <[email protected]> Co-authored-by: Artem Kulyabin <[email protected]> Co-authored-by: Max Chervov <[email protected]>
1 parent cdf2ce6 commit 336829b

File tree

32 files changed

+1240
-638
lines changed

32 files changed

+1240
-638
lines changed

.github/dependabot.yml

+9
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ updates:
9696
interval: "daily"
9797
open-pull-requests-limit: 0
9898

99+
- package-ecosystem: "gomod"
100+
directory: "/ee/modules/030-cloud-provider-vcd/images/cloud-data-discoverer-legacy/src"
101+
labels:
102+
- "type/dependencies"
103+
- "status/ok-to-test"
104+
schedule:
105+
interval: "daily"
106+
open-pull-requests-limit: 0
107+
99108
- package-ecosystem: "gomod"
100109
directory: "/ee/modules/110-istio/images/api-proxy/src"
101110
labels:

.werf/defines/installer.tmpl

+9
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,19 @@
7373
{{- if $edition.terraformProviders }}
7474
{{- range $_, $tfProvider := $edition.terraformProviders }}
7575
{{- $tf := index $context.TF $tfProvider }}
76+
{{- if eq $tf.type "vcd" }}
77+
{{- range $version := $tf.versions }}
78+
- image: {{ $tf.artifact }} # from modules/040-terraform-manager/images/terraform-manager-{PROVIDER}/werf.inc.yaml
79+
add: /{{ $tf.artifactBinary }}-v{{ $version }}
80+
to: /plugins/registry.terraform.io/{{ $tf.namespace }}/{{ $tf.type }}/{{ $version }}/linux_amd64/{{ $tf.destinationBinary }}
81+
before: setup
82+
{{- end }}
83+
{{- else }}
7684
- image: {{ $tf.artifact }} # from modules/040-terraform-manager/images/terraform-manager-{PROVIDER}/werf.inc.yaml
7785
add: /{{ $tf.artifactBinary }}
7886
to: /plugins/registry.terraform.io/{{ $tf.namespace }}/{{ $tf.type }}/{{ $tf.version }}/linux_amd64/{{ $tf.destinationBinary }}
7987
before: setup
88+
{{- end }}
8089
{{- end }}
8190
{{- end }}
8291
{{- if eq $.Env $edition.name }}

.werf/werf-terraform.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,19 @@ import:
1919
{{- if $edition.terraformProviders }}
2020
{{- range $_, $tfProvider := $edition.terraformProviders }}
2121
{{- $tf := index $.TF $tfProvider }}
22+
{{- if eq $tf.type "vcd" }}
23+
{{- range $version := $tf.versions }}
24+
- image: {{ $tf.artifact }} # from modules/040-terraform-manager/images/terraform-manager-{PROVIDER}/werf.inc.yaml
25+
add: /{{ $tf.artifactBinary }}-v{{ $version }}
26+
to: /usr/local/share/terraform/plugins/registry.terraform.io/{{ $tf.namespace }}/{{ $tf.type }}/{{ $version }}//linux_amd64/{{ $tf.destinationBinary }}
27+
before: setup
28+
{{- end }}
29+
{{- else }}
2230
- image: {{ $tf.artifact }} # from modules/040-terraform-manager/images/terraform-manager-{PROVIDER}/werf.inc.yaml
2331
add: /{{ $tf.artifactBinary }}
2432
to: /usr/local/share/terraform/plugins/registry.terraform.io/{{ $tf.namespace }}/{{ $tf.type }}/{{ $tf.version }}//linux_amd64/{{ $tf.destinationBinary }}
2533
before: setup
34+
{{- end }}
2635
{{- end }}
2736
{{- end }}
2837
{{- if eq $.Env $edition.name }}

candi/terraform_versions.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ vsphere:
5757
vcd:
5858
namespace: vmware
5959
type: vcd
60-
version: 3.10.0
60+
versions: ["3.10.0", "3.14.1"]
6161
artifact: terraform-provider-vcd-artifact
6262
artifactBinary: terraform-provider-vcd
6363
destinationBinary: terraform-provider-vcd

dhctl/pkg/config/base.go

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"errors"
2121
"fmt"
2222
"os"
23+
"path/filepath"
2324
"strings"
2425
"time"
2526

@@ -318,3 +319,7 @@ func InitGlobalVars(pwd string) {
318319
versionMap = candiDir + "/version_map.yml"
319320
imagesDigestsJSON = candiDir + "/images_digests.json"
320321
}
322+
323+
func getTerraformModulesDir(provider string) string {
324+
return filepath.Join(candiDir, "cloud-providers", provider, "terraform-modules")
325+
}

dhctl/pkg/config/meta.go

+37
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"net"
2222
"os"
23+
"path/filepath"
2324
"regexp"
2425
"strconv"
2526
"strings"
@@ -161,6 +162,42 @@ func (m *MetaConfig) Prepare() (*MetaConfig, error) {
161162
}
162163
}
163164

165+
if cloud.Provider == "VCD" {
166+
// Set default version for terraform-provider-vcd to 3.10.0 if legacyMode is true
167+
// This is a temporary solution to avoid breaking changes in the VCD API
168+
169+
var legacyMode bool
170+
171+
_, ok := m.ProviderClusterConfig["legacyMode"]
172+
if ok {
173+
err := json.Unmarshal(m.ProviderClusterConfig["legacyMode"], &legacyMode)
174+
if err != nil {
175+
return nil, fmt.Errorf("failed to unmarshal legacyMode from provider cluster configuration: %v", err)
176+
}
177+
}
178+
179+
terraformModulesDir := getTerraformModulesDir("vcd")
180+
181+
versionsFilePath := filepath.Join(terraformModulesDir, "versions.tf")
182+
183+
err := os.Remove(versionsFilePath)
184+
if err != nil && !os.IsNotExist(err) {
185+
return nil, fmt.Errorf("failed to remove versions.tf: %v", err)
186+
}
187+
188+
if legacyMode {
189+
err := os.Symlink(filepath.Join(terraformModulesDir, "versions-legacy.tf"), versionsFilePath)
190+
if err != nil {
191+
return nil, fmt.Errorf("failed to create symlink to versions-legacy.tf: %v", err)
192+
}
193+
} else {
194+
err := os.Symlink(filepath.Join(terraformModulesDir, "versions-new.tf"), versionsFilePath)
195+
if err != nil {
196+
return nil, fmt.Errorf("failed to create symlink to versions-new.tf: %v", err)
197+
}
198+
}
199+
}
200+
164201
m.TerraNodeGroupSpecs = []TerraNodeGroupSpec{}
165202
nodeGroups, ok := m.ProviderClusterConfig["nodeGroups"]
166203
if ok {

ee/candi/cloud-providers/vcd/openapi/cloud_discovery_data.yaml

-4
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ apiVersions:
4747
vcdInstallationVersion:
4848
type: string
4949
description: VCD installation version.
50-
default: "10.3.3.4"
51-
minLength: 1
5250
vcdAPIVersion:
5351
type: string
5452
description: VCD API version.
55-
default: "36.0"
56-
minLength: 1

ee/candi/cloud-providers/vcd/openapi/cluster_configuration.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,11 @@ apiVersions:
318318
x-doc-default: false
319319
required:
320320
- server
321+
legacyMode:
322+
type: boolean
323+
description: |
324+
If set to `true`, an API version below `37.2` will be used.
325+
x-doc-default: false
321326
allOf:
322327
- oneOf:
323328
- required: [layout]

ee/candi/cloud-providers/vcd/openapi/doc-ru-cluster_configuration.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,6 @@ apiVersions:
168168
> **Внимание!** При использовании `apiToken` необходимо оставить `username` и `password` пустыми.
169169
insecure:
170170
description: Устанавливается в `true`, VCD имеет self-signed-сертификат.
171+
legacyMode:
172+
description: |
173+
Если задано значение `true`, будет использоваться версия API ниже `37.2`.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright 2025 Flant JSC
2+
# Licensed under the Deckhouse Platform Enterprise Edition (EE) license. See https://github.com/deckhouse/deckhouse/blob/main/ee/LICENSE
3+
4+
terraform {
5+
required_providers {
6+
vcd = {
7+
source = "vmware/vcd"
8+
version = "3.10.0"
9+
}
10+
}
11+
required_version = ">= 0.13"
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright 2023 Flant JSC
2+
# Licensed under the Deckhouse Platform Enterprise Edition (EE) license. See https://github.com/deckhouse/deckhouse/blob/main/ee/LICENSE
3+
4+
terraform {
5+
required_providers {
6+
vcd = {
7+
source = "vmware/vcd"
8+
version = "3.14.1"
9+
}
10+
}
11+
required_version = ">= 0.13"
12+
}

ee/candi/cloud-providers/vcd/terraform-modules/versions.tf

-12
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
versions-new.tf
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
module discoverer
2+
3+
go 1.19
4+
5+
require (
6+
github.com/alecthomas/kingpin v2.2.6+incompatible
7+
github.com/deckhouse/deckhouse/go_lib/cloud-data v0.0.0-00010101000000-000000000000
8+
github.com/sirupsen/logrus v1.9.0
9+
github.com/vmware/go-vcloud-director/v2 v2.21.0
10+
)
11+
12+
require (
13+
github.com/PuerkitoBio/purell v1.1.1 // indirect
14+
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
15+
github.com/araddon/dateparse v0.0.0-20190622164848-0fb0a474d195 // indirect
16+
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
17+
github.com/go-openapi/jsonpointer v0.19.5 // indirect
18+
github.com/go-openapi/jsonreference v0.19.6 // indirect
19+
github.com/go-openapi/swag v0.21.1 // indirect
20+
github.com/google/gnostic v0.5.7-v3refs // indirect
21+
github.com/google/go-cmp v0.5.9 // indirect
22+
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect
23+
github.com/hashicorp/go-version v1.2.0 // indirect
24+
github.com/josharian/intern v1.0.0 // indirect
25+
github.com/kr/pretty v0.2.1 // indirect
26+
github.com/kr/text v0.2.0 // indirect
27+
github.com/mailru/easyjson v0.7.7 // indirect
28+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
29+
github.com/onsi/ginkgo/v2 v2.9.2 // indirect
30+
github.com/onsi/gomega v1.27.6 // indirect
31+
github.com/peterhellberg/link v1.1.0 // indirect
32+
github.com/prometheus/client_golang v1.13.0 // indirect
33+
gopkg.in/yaml.v3 v3.0.1 // indirect
34+
k8s.io/api v0.25.5 // indirect
35+
k8s.io/apimachinery v0.25.5
36+
k8s.io/client-go v0.25.5 // indirect
37+
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect
38+
)
39+
40+
require (
41+
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
42+
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
43+
github.com/beorn7/perks v1.0.1 // indirect
44+
github.com/cespare/xxhash/v2 v2.1.2 // indirect
45+
github.com/davecgh/go-spew v1.1.1 // indirect
46+
github.com/go-logr/logr v1.2.3 // indirect
47+
github.com/gogo/protobuf v1.3.2 // indirect
48+
github.com/golang/protobuf v1.5.3 // indirect
49+
github.com/google/gofuzz v1.2.0 // indirect
50+
github.com/imdario/mergo v0.3.15 // indirect
51+
github.com/json-iterator/go v1.1.12 // indirect
52+
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
53+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
54+
github.com/modern-go/reflect2 v1.0.2 // indirect
55+
github.com/prometheus/client_model v0.2.0 // indirect
56+
github.com/prometheus/common v0.37.0 // indirect
57+
github.com/prometheus/procfs v0.8.0 // indirect
58+
github.com/spf13/pflag v1.0.5 // indirect
59+
golang.org/x/net v0.33.0 // indirect
60+
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
61+
golang.org/x/sys v0.28.0 // indirect
62+
golang.org/x/term v0.27.0 // indirect
63+
golang.org/x/text v0.21.0 // indirect
64+
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
65+
google.golang.org/appengine v1.6.7 // indirect
66+
google.golang.org/protobuf v1.33.0 // indirect
67+
gopkg.in/inf.v0 v0.9.1 // indirect
68+
gopkg.in/yaml.v2 v2.4.0 // indirect
69+
k8s.io/klog/v2 v2.80.1 // indirect
70+
k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect
71+
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
72+
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
73+
sigs.k8s.io/yaml v1.3.0 // indirect
74+
)
75+
76+
replace github.com/deckhouse/deckhouse/go_lib/cloud-data => /deckhouse/go_lib/cloud-data/

0 commit comments

Comments
 (0)