mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-10-01 01:36:09 -04:00
4c8ce55e5a
* Allow creation of Constellation clusters using `apply` command * Add auto-completion for `--skip-phases` flag * Deprecate create command * Replace all doc references to create command with apply --------- Signed-off-by: Daniel Weiße <dw@edgeless.systems>
67 lines
2.2 KiB
Go
67 lines
2.2 KiB
Go
/*
|
|
Copyright (c) Edgeless Systems GmbH
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/edgelesssys/constellation/v2/internal/api/versionsapi"
|
|
"github.com/edgelesssys/constellation/v2/internal/semver"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// NewCreateCmd returns a new cobra.Command for the create command.
|
|
func NewCreateCmd() *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "create",
|
|
Short: "Create instances on a cloud platform for your Constellation cluster",
|
|
Long: "Create instances on a cloud platform for your Constellation cluster.",
|
|
Args: cobra.ExactArgs(0),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
cmd.Flags().Bool("conformance", false, "")
|
|
cmd.Flags().Bool("skip-helm-wait", false, "")
|
|
cmd.Flags().Bool("merge-kubeconfig", false, "")
|
|
cmd.Flags().Duration("timeout", 5*time.Minute, "")
|
|
// Skip all phases but the infrastructure phase.
|
|
cmd.Flags().StringSlice("skip-phases", allPhases(skipInfrastructurePhase), "")
|
|
return runApply(cmd, args)
|
|
},
|
|
Deprecated: "use 'constellation apply' instead.",
|
|
}
|
|
cmd.Flags().BoolP("yes", "y", false, "create the cluster without further confirmation")
|
|
return cmd
|
|
}
|
|
|
|
func isPlural(count int) string {
|
|
if count == 1 {
|
|
return ""
|
|
}
|
|
return "s"
|
|
}
|
|
|
|
// validateCLIandConstellationVersionAreEqual checks if the image and microservice version are equal (down to patch level) to the CLI version.
|
|
func validateCLIandConstellationVersionAreEqual(cliVersion semver.Semver, imageVersion string, microserviceVersion semver.Semver) error {
|
|
parsedImageVersion, err := versionsapi.NewVersionFromShortPath(imageVersion, versionsapi.VersionKindImage)
|
|
if err != nil {
|
|
return fmt.Errorf("parsing image version: %w", err)
|
|
}
|
|
|
|
semImage, err := semver.New(parsedImageVersion.Version())
|
|
if err != nil {
|
|
return fmt.Errorf("parsing image semantical version: %w", err)
|
|
}
|
|
|
|
if !cliVersion.MajorMinorEqual(semImage) {
|
|
return fmt.Errorf("image version %q does not match the major and minor version of the cli version %q", semImage.String(), cliVersion.String())
|
|
}
|
|
if cliVersion.Compare(microserviceVersion) != 0 {
|
|
return fmt.Errorf("cli version %q does not match microservice version %q", cliVersion.String(), microserviceVersion.String())
|
|
}
|
|
return nil
|
|
}
|