mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-07-24 07:50:40 -04:00
cli: Terraform upgrades maa patching (#1821)
* patch maa after upgrade * buildfiles * reword comment * remove whitespace * temp: log measurements URL * temp: update import * ignore changes to attestation policies * add issue URL * separate output in e2e upgrade test * use enterprise CLI for e2e test * remove measurements print * add license headers
This commit is contained in:
parent
7ef7f09dda
commit
8c3b963a3f
10 changed files with 236 additions and 109 deletions
|
@ -13,6 +13,7 @@ import (
|
|||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
@ -74,9 +75,9 @@ func TestUpgrade(t *testing.T) {
|
|||
|
||||
// Migrate config if necessary.
|
||||
cmd := exec.CommandContext(context.Background(), cli, "config", "migrate", "--config", constants.ConfigFilename, "--force", "--debug")
|
||||
msg, err := cmd.CombinedOutput()
|
||||
require.NoError(err, string(msg))
|
||||
log.Println(string(msg))
|
||||
stdout, stderr, err := runCommandWithSeparateOutputs(cmd)
|
||||
require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr))
|
||||
log.Println(string(stdout))
|
||||
|
||||
targetVersions := writeUpgradeConfig(require, *targetImage, *targetKubernetes, *targetMicroservices)
|
||||
|
||||
|
@ -94,9 +95,9 @@ func TestUpgrade(t *testing.T) {
|
|||
// The string after "Cluster status:" in the output might not be updated yet.
|
||||
// This is only updated after the operator finishes one reconcile loop.
|
||||
cmd = exec.CommandContext(context.Background(), cli, "status")
|
||||
msg, err = cmd.CombinedOutput()
|
||||
require.NoError(err, string(msg))
|
||||
log.Println(string(msg))
|
||||
stdout, stderr, err = runCommandWithSeparateOutputs(cmd)
|
||||
require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr))
|
||||
log.Println(string(stdout))
|
||||
|
||||
testMicroservicesEventuallyHaveVersion(t, targetVersions.microservices, *timeout)
|
||||
testNodesEventuallyHaveVersion(t, k, targetVersions, *wantControl+*wantWorker, *timeout)
|
||||
|
@ -287,27 +288,27 @@ func writeUpgradeConfig(require *require.Assertions, image string, kubernetes st
|
|||
// We can not check images upgrades because we might use unpublished images. CLI uses public CDN to check for available images.
|
||||
func runUpgradeCheck(require *require.Assertions, cli, targetKubernetes string) {
|
||||
cmd := exec.CommandContext(context.Background(), cli, "upgrade", "check")
|
||||
msg, err := cmd.Output()
|
||||
require.NoError(err, "%s", string(msg))
|
||||
stdout, stderr, err := runCommandWithSeparateOutputs(cmd)
|
||||
require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr))
|
||||
|
||||
require.Contains(string(msg), "The following updates are available with this CLI:")
|
||||
require.Contains(string(msg), "Kubernetes:")
|
||||
require.Contains(string(stdout), "The following updates are available with this CLI:")
|
||||
require.Contains(string(stdout), "Kubernetes:")
|
||||
log.Printf("targetKubernetes: %s\n", targetKubernetes)
|
||||
|
||||
if targetKubernetes == "" {
|
||||
log.Printf("true\n")
|
||||
require.True(containsAny(string(msg), versions.SupportedK8sVersions()))
|
||||
require.True(containsAny(string(stdout), versions.SupportedK8sVersions()))
|
||||
} else {
|
||||
log.Printf("false. targetKubernetes: %s\n", targetKubernetes)
|
||||
require.Contains(string(msg), targetKubernetes, fmt.Sprintf("Expected Kubernetes version %s in output.", targetKubernetes))
|
||||
require.Contains(string(stdout), targetKubernetes, fmt.Sprintf("Expected Kubernetes version %s in output.", targetKubernetes))
|
||||
}
|
||||
|
||||
cliVersion, err := semver.New(constants.VersionInfo())
|
||||
require.NoError(err)
|
||||
require.Contains(string(msg), "Services:")
|
||||
require.Contains(string(msg), fmt.Sprintf("--> %s", cliVersion.String()))
|
||||
require.Contains(string(stdout), "Services:")
|
||||
require.Contains(string(stdout), fmt.Sprintf("--> %s", cliVersion.String()))
|
||||
|
||||
log.Println(string(msg))
|
||||
log.Println(string(stdout))
|
||||
}
|
||||
|
||||
func containsAny(text string, substrs []string) bool {
|
||||
|
@ -322,17 +323,17 @@ func containsAny(text string, substrs []string) bool {
|
|||
func runUpgradeApply(require *require.Assertions, cli string) {
|
||||
tfLogFlag := ""
|
||||
cmd := exec.CommandContext(context.Background(), cli, "--help")
|
||||
msg, err := cmd.CombinedOutput()
|
||||
require.NoErrorf(err, "%s", string(msg))
|
||||
if strings.Contains(string(msg), "--tf-log") {
|
||||
stdout, stderr, err := runCommandWithSeparateOutputs(cmd)
|
||||
require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr))
|
||||
if strings.Contains(string(stdout), "--tf-log") {
|
||||
tfLogFlag = "--tf-log=DEBUG"
|
||||
}
|
||||
|
||||
cmd = exec.CommandContext(context.Background(), cli, "upgrade", "apply", "--force", "--debug", "--yes", tfLogFlag)
|
||||
msg, err = cmd.CombinedOutput()
|
||||
require.NoErrorf(err, "%s", string(msg))
|
||||
require.NoError(containsUnexepectedMsg(string(msg)))
|
||||
log.Println(string(msg))
|
||||
stdout, stderr, err = runCommandWithSeparateOutputs(cmd)
|
||||
require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr))
|
||||
require.NoError(containsUnexepectedMsg(string(stdout)))
|
||||
log.Println(string(stdout))
|
||||
}
|
||||
|
||||
// containsUnexepectedMsg checks if the given input contains any unexpected messages.
|
||||
|
@ -404,3 +405,42 @@ type versionContainer struct {
|
|||
kubernetes semver.Semver
|
||||
microservices string
|
||||
}
|
||||
|
||||
// runCommandWithSeparateOutputs runs the given command while separating buffers for
|
||||
// stdout and stderr.
|
||||
func runCommandWithSeparateOutputs(cmd *exec.Cmd) (stdout, stderr []byte, err error) {
|
||||
stdoutIn, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("create stdout pipe: %w", err)
|
||||
return
|
||||
}
|
||||
stderrIn, err := cmd.StderrPipe()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("create stderr pipe: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = cmd.Start()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("start command: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
stdout, err = io.ReadAll(stdoutIn)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("start command: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
stderr, err = io.ReadAll(stderrIn)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("start command: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err = cmd.Wait(); err != nil {
|
||||
err = fmt.Errorf("wait for command to finish: %w", err)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue