mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-09-17 19:44:35 -04:00
cli: write Terraform migration output directly to constellation-id.json
(#2107)
* backup `constellation-id.json` before upgrade * remove superfluous `file.Handler` arguments * merge `constellation-id.json` on upgrade * fix typo
This commit is contained in:
parent
5cbdb3a519
commit
5f71934f56
11 changed files with 255 additions and 120 deletions
|
@ -1,4 +1,5 @@
|
|||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
||||
load("//bazel/go:go_test.bzl", "go_test")
|
||||
|
||||
go_library(
|
||||
name = "clusterid",
|
||||
|
@ -7,3 +8,10 @@ go_library(
|
|||
visibility = ["//cli:__subpackages__"],
|
||||
deps = ["//internal/cloud/cloudprovider"],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "clusterid_test",
|
||||
srcs = ["id_test.go"],
|
||||
embed = [":clusterid"],
|
||||
deps = ["@com_github_stretchr_testify//require"],
|
||||
)
|
||||
|
|
|
@ -28,3 +28,38 @@ type File struct {
|
|||
// It is only set if the cluster is created on Azure.
|
||||
AttestationURL string `json:"attestationURL,omitempty"`
|
||||
}
|
||||
|
||||
// Merge merges the other file into the current file and returns the result.
|
||||
// If a field is set in both files, the value of the other file is used.
|
||||
// This does in-place changes on the current file.
|
||||
func (f *File) Merge(other File) *File {
|
||||
if other.ClusterID != "" {
|
||||
f.ClusterID = other.ClusterID
|
||||
}
|
||||
|
||||
if other.OwnerID != "" {
|
||||
f.OwnerID = other.OwnerID
|
||||
}
|
||||
|
||||
if other.UID != "" {
|
||||
f.UID = other.UID
|
||||
}
|
||||
|
||||
if other.CloudProvider != cloudprovider.Unknown {
|
||||
f.CloudProvider = other.CloudProvider
|
||||
}
|
||||
|
||||
if other.IP != "" {
|
||||
f.IP = other.IP
|
||||
}
|
||||
|
||||
if other.InitSecret != nil {
|
||||
f.InitSecret = other.InitSecret
|
||||
}
|
||||
|
||||
if other.AttestationURL != "" {
|
||||
f.AttestationURL = other.AttestationURL
|
||||
}
|
||||
|
||||
return f
|
||||
}
|
||||
|
|
63
cli/internal/clusterid/id_test.go
Normal file
63
cli/internal/clusterid/id_test.go
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
Copyright (c) Edgeless Systems GmbH
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package clusterid
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestMerge(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
current File
|
||||
other File
|
||||
want File
|
||||
}{
|
||||
"empty": {
|
||||
current: File{},
|
||||
other: File{},
|
||||
want: File{},
|
||||
},
|
||||
"current empty": {
|
||||
current: File{},
|
||||
other: File{
|
||||
ClusterID: "clusterID",
|
||||
},
|
||||
want: File{
|
||||
ClusterID: "clusterID",
|
||||
},
|
||||
},
|
||||
"other empty": {
|
||||
current: File{
|
||||
ClusterID: "clusterID",
|
||||
},
|
||||
other: File{},
|
||||
want: File{
|
||||
ClusterID: "clusterID",
|
||||
},
|
||||
},
|
||||
"both set": {
|
||||
current: File{
|
||||
ClusterID: "clusterID",
|
||||
},
|
||||
other: File{
|
||||
ClusterID: "otherClusterID",
|
||||
},
|
||||
want: File{
|
||||
ClusterID: "otherClusterID",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
require := require.New(t)
|
||||
|
||||
ret := tc.current.Merge(tc.other)
|
||||
require.Equal(tc.want, *ret)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue