mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-02-08 19:08:40 -05:00
remove Terraform targets (#1970)
This commit is contained in:
parent
0a36ce6171
commit
fe0b8c1e5b
@ -26,7 +26,7 @@ type imageFetcher interface {
|
|||||||
|
|
||||||
type terraformClient interface {
|
type terraformClient interface {
|
||||||
PrepareWorkspace(path string, input terraform.Variables) error
|
PrepareWorkspace(path string, input terraform.Variables) error
|
||||||
CreateCluster(ctx context.Context, logLevel terraform.LogLevel, targets ...string) (terraform.CreateOutput, error)
|
CreateCluster(ctx context.Context, logLevel terraform.LogLevel) (terraform.CreateOutput, error)
|
||||||
CreateIAMConfig(ctx context.Context, provider cloudprovider.Provider, logLevel terraform.LogLevel) (terraform.IAMOutput, error)
|
CreateIAMConfig(ctx context.Context, provider cloudprovider.Provider, logLevel terraform.LogLevel) (terraform.IAMOutput, error)
|
||||||
Destroy(ctx context.Context, logLevel terraform.LogLevel) error
|
Destroy(ctx context.Context, logLevel terraform.LogLevel) error
|
||||||
CleanUpWorkspace() error
|
CleanUpWorkspace() error
|
||||||
|
@ -45,7 +45,7 @@ type stubTerraformClient struct {
|
|||||||
showErr error
|
showErr error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *stubTerraformClient) CreateCluster(_ context.Context, _ terraform.LogLevel, _ ...string) (terraform.CreateOutput, error) {
|
func (c *stubTerraformClient) CreateCluster(_ context.Context, _ terraform.LogLevel) (terraform.CreateOutput, error) {
|
||||||
return terraform.CreateOutput{
|
return terraform.CreateOutput{
|
||||||
IP: c.ip,
|
IP: c.ip,
|
||||||
Secret: c.initSecret,
|
Secret: c.initSecret,
|
||||||
|
@ -153,22 +153,16 @@ func (u *upgradeApplyCmd) migrateTerraform(cmd *cobra.Command, file file.Handler
|
|||||||
return fmt.Errorf("checking workspace: %w", err)
|
return fmt.Errorf("checking workspace: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
targets, vars, err := parseTerraformUpgradeVars(cmd, conf, fetcher)
|
vars, err := parseTerraformUpgradeVars(cmd, conf, fetcher)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parsing upgrade variables: %w", err)
|
return fmt.Errorf("parsing upgrade variables: %w", err)
|
||||||
}
|
}
|
||||||
if len(targets) == 0 {
|
|
||||||
u.log.Debugf("No targets specified. Skipping Terraform migration")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
u.log.Debugf("Using migration targets:\n%v", targets)
|
|
||||||
u.log.Debugf("Using Terraform variables:\n%v", vars)
|
u.log.Debugf("Using Terraform variables:\n%v", vars)
|
||||||
|
|
||||||
opts := upgrade.TerraformUpgradeOptions{
|
opts := upgrade.TerraformUpgradeOptions{
|
||||||
LogLevel: flags.terraformLogLevel,
|
LogLevel: flags.terraformLogLevel,
|
||||||
CSP: conf.GetProvider(),
|
CSP: conf.GetProvider(),
|
||||||
Vars: vars,
|
Vars: vars,
|
||||||
Targets: targets,
|
|
||||||
OutputFile: constants.TerraformMigrationOutputFile,
|
OutputFile: constants.TerraformMigrationOutputFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,14 +204,14 @@ func (u *upgradeApplyCmd) migrateTerraform(cmd *cobra.Command, file file.Handler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parseTerraformUpgradeVars parses the variables required to execute the Terraform script with.
|
// parseTerraformUpgradeVars parses the variables required to execute the Terraform script with.
|
||||||
func parseTerraformUpgradeVars(cmd *cobra.Command, conf *config.Config, fetcher imageFetcher) ([]string, terraform.Variables, error) {
|
func parseTerraformUpgradeVars(cmd *cobra.Command, conf *config.Config, fetcher imageFetcher) (terraform.Variables, error) {
|
||||||
// Fetch variables to execute Terraform script with
|
// Fetch variables to execute Terraform script with
|
||||||
provider := conf.GetProvider()
|
provider := conf.GetProvider()
|
||||||
attestationVariant := conf.GetAttestationConfig().GetVariant()
|
attestationVariant := conf.GetAttestationConfig().GetVariant()
|
||||||
region := conf.GetRegion()
|
region := conf.GetRegion()
|
||||||
imageRef, err := fetcher.FetchReference(cmd.Context(), provider, attestationVariant, conf.Image, region)
|
imageRef, err := fetcher.FetchReference(cmd.Context(), provider, attestationVariant, conf.Image, region)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("fetching image reference: %w", err)
|
return nil, fmt.Errorf("fetching image reference: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
commonVariables := terraform.CommonVariables{
|
commonVariables := terraform.CommonVariables{
|
||||||
@ -229,8 +223,6 @@ func parseTerraformUpgradeVars(cmd *cobra.Command, conf *config.Config, fetcher
|
|||||||
|
|
||||||
switch conf.GetProvider() {
|
switch conf.GetProvider() {
|
||||||
case cloudprovider.AWS:
|
case cloudprovider.AWS:
|
||||||
targets := []string{}
|
|
||||||
|
|
||||||
vars := &terraform.AWSClusterVariables{
|
vars := &terraform.AWSClusterVariables{
|
||||||
CommonVariables: commonVariables,
|
CommonVariables: commonVariables,
|
||||||
StateDiskType: conf.Provider.AWS.StateDiskType,
|
StateDiskType: conf.Provider.AWS.StateDiskType,
|
||||||
@ -242,10 +234,8 @@ func parseTerraformUpgradeVars(cmd *cobra.Command, conf *config.Config, fetcher
|
|||||||
IAMProfileWorkerNodes: conf.Provider.AWS.IAMProfileWorkerNodes,
|
IAMProfileWorkerNodes: conf.Provider.AWS.IAMProfileWorkerNodes,
|
||||||
Debug: conf.IsDebugCluster(),
|
Debug: conf.IsDebugCluster(),
|
||||||
}
|
}
|
||||||
return targets, vars, nil
|
return vars, nil
|
||||||
case cloudprovider.Azure:
|
case cloudprovider.Azure:
|
||||||
targets := []string{"azurerm_attestation_provider.attestation_provider", "module.scale_set_group", "module.scale_set_control_plane", "module.scale_set_worker"}
|
|
||||||
|
|
||||||
// Azure Terraform provider is very strict about it's casing
|
// Azure Terraform provider is very strict about it's casing
|
||||||
imageRef = strings.Replace(imageRef, "CommunityGalleries", "communityGalleries", 1)
|
imageRef = strings.Replace(imageRef, "CommunityGalleries", "communityGalleries", 1)
|
||||||
imageRef = strings.Replace(imageRef, "Images", "images", 1)
|
imageRef = strings.Replace(imageRef, "Images", "images", 1)
|
||||||
@ -275,10 +265,8 @@ func parseTerraformUpgradeVars(cmd *cobra.Command, conf *config.Config, fetcher
|
|||||||
CreateMAA: toPtr(conf.GetAttestationConfig().GetVariant().Equal(variant.AzureSEVSNP{})),
|
CreateMAA: toPtr(conf.GetAttestationConfig().GetVariant().Equal(variant.AzureSEVSNP{})),
|
||||||
Debug: toPtr(conf.IsDebugCluster()),
|
Debug: toPtr(conf.IsDebugCluster()),
|
||||||
}
|
}
|
||||||
return targets, vars, nil
|
return vars, nil
|
||||||
case cloudprovider.GCP:
|
case cloudprovider.GCP:
|
||||||
targets := []string{}
|
|
||||||
|
|
||||||
vars := &terraform.GCPClusterVariables{
|
vars := &terraform.GCPClusterVariables{
|
||||||
Name: conf.Name,
|
Name: conf.Name,
|
||||||
NodeGroups: map[string]terraform.GCPNodeGroup{
|
NodeGroups: map[string]terraform.GCPNodeGroup{
|
||||||
@ -303,9 +291,9 @@ func parseTerraformUpgradeVars(cmd *cobra.Command, conf *config.Config, fetcher
|
|||||||
ImageID: imageRef,
|
ImageID: imageRef,
|
||||||
Debug: conf.IsDebugCluster(),
|
Debug: conf.IsDebugCluster(),
|
||||||
}
|
}
|
||||||
return targets, vars, nil
|
return vars, nil
|
||||||
default:
|
default:
|
||||||
return nil, nil, fmt.Errorf("unsupported provider: %s", conf.GetProvider())
|
return nil, fmt.Errorf("unsupported provider: %s", conf.GetProvider())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,18 +208,16 @@ func (u *upgradeCheckCmd) upgradeCheck(cmd *cobra.Command, fileHandler file.Hand
|
|||||||
return fmt.Errorf("checking workspace: %w", err)
|
return fmt.Errorf("checking workspace: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
targets, vars, err := parseTerraformUpgradeVars(cmd, conf, u.imagefetcher)
|
vars, err := parseTerraformUpgradeVars(cmd, conf, u.imagefetcher)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("parsing upgrade variables: %w", err)
|
return fmt.Errorf("parsing upgrade variables: %w", err)
|
||||||
}
|
}
|
||||||
u.log.Debugf("Using migration targets:\n%v", targets)
|
|
||||||
u.log.Debugf("Using Terraform variables:\n%v", vars)
|
u.log.Debugf("Using Terraform variables:\n%v", vars)
|
||||||
|
|
||||||
opts := upgrade.TerraformUpgradeOptions{
|
opts := upgrade.TerraformUpgradeOptions{
|
||||||
LogLevel: flags.terraformLogLevel,
|
LogLevel: flags.terraformLogLevel,
|
||||||
CSP: conf.GetProvider(),
|
CSP: conf.GetProvider(),
|
||||||
Vars: vars,
|
Vars: vars,
|
||||||
Targets: targets,
|
|
||||||
OutputFile: constants.TerraformMigrationOutputFile,
|
OutputFile: constants.TerraformMigrationOutputFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ func (c *Client) PrepareUpgradeWorkspace(path, oldWorkingDir, newWorkingDir, bac
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateCluster creates a Constellation cluster using Terraform.
|
// CreateCluster creates a Constellation cluster using Terraform.
|
||||||
func (c *Client) CreateCluster(ctx context.Context, logLevel LogLevel, targets ...string) (CreateOutput, error) {
|
func (c *Client) CreateCluster(ctx context.Context, logLevel LogLevel) (CreateOutput, error) {
|
||||||
if err := c.setLogLevel(logLevel); err != nil {
|
if err := c.setLogLevel(logLevel); err != nil {
|
||||||
return CreateOutput{}, fmt.Errorf("set terraform log level %s: %w", logLevel.String(), err)
|
return CreateOutput{}, fmt.Errorf("set terraform log level %s: %w", logLevel.String(), err)
|
||||||
}
|
}
|
||||||
@ -105,12 +105,7 @@ func (c *Client) CreateCluster(ctx context.Context, logLevel LogLevel, targets .
|
|||||||
return CreateOutput{}, fmt.Errorf("terraform init: %w", err)
|
return CreateOutput{}, fmt.Errorf("terraform init: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
opts := []tfexec.ApplyOption{}
|
if err := c.tf.Apply(ctx); err != nil {
|
||||||
for _, target := range targets {
|
|
||||||
opts = append(opts, tfexec.Target(target))
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := c.tf.Apply(ctx, opts...); err != nil {
|
|
||||||
return CreateOutput{}, fmt.Errorf("terraform apply: %w", err)
|
return CreateOutput{}, fmt.Errorf("terraform apply: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,7 +287,7 @@ func (c *Client) CreateIAMConfig(ctx context.Context, provider cloudprovider.Pro
|
|||||||
|
|
||||||
// Plan determines the diff that will be applied by Terraform. The plan output is written to the planFile.
|
// Plan determines the diff that will be applied by Terraform. The plan output is written to the planFile.
|
||||||
// If there is a diff, the returned bool is true. Otherwise, it is false.
|
// If there is a diff, the returned bool is true. Otherwise, it is false.
|
||||||
func (c *Client) Plan(ctx context.Context, logLevel LogLevel, planFile string, targets ...string) (bool, error) {
|
func (c *Client) Plan(ctx context.Context, logLevel LogLevel, planFile string) (bool, error) {
|
||||||
if err := c.setLogLevel(logLevel); err != nil {
|
if err := c.setLogLevel(logLevel); err != nil {
|
||||||
return false, fmt.Errorf("set terraform log level %s: %w", logLevel.String(), err)
|
return false, fmt.Errorf("set terraform log level %s: %w", logLevel.String(), err)
|
||||||
}
|
}
|
||||||
@ -304,9 +299,6 @@ func (c *Client) Plan(ctx context.Context, logLevel LogLevel, planFile string, t
|
|||||||
opts := []tfexec.PlanOption{
|
opts := []tfexec.PlanOption{
|
||||||
tfexec.Out(planFile),
|
tfexec.Out(planFile),
|
||||||
}
|
}
|
||||||
for _, target := range targets {
|
|
||||||
opts = append(opts, tfexec.Target(target))
|
|
||||||
}
|
|
||||||
return c.tf.Plan(ctx, opts...)
|
return c.tf.Plan(ctx, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,8 +46,6 @@ type TerraformUpgradeOptions struct {
|
|||||||
CSP cloudprovider.Provider
|
CSP cloudprovider.Provider
|
||||||
// Vars are the Terraform variables used for the upgrade.
|
// Vars are the Terraform variables used for the upgrade.
|
||||||
Vars terraform.Variables
|
Vars terraform.Variables
|
||||||
// Targets are the Terraform targets used for the upgrade.
|
|
||||||
Targets []string
|
|
||||||
// OutputFile is the file to write the Terraform output to.
|
// OutputFile is the file to write the Terraform output to.
|
||||||
OutputFile string
|
OutputFile string
|
||||||
}
|
}
|
||||||
@ -102,7 +100,7 @@ func (u *TerraformUpgrader) PlanTerraformMigrations(ctx context.Context, opts Te
|
|||||||
return false, fmt.Errorf("preparing terraform workspace: %w", err)
|
return false, fmt.Errorf("preparing terraform workspace: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
hasDiff, err := u.tf.Plan(ctx, opts.LogLevel, constants.TerraformUpgradePlanFile, opts.Targets...)
|
hasDiff, err := u.tf.Plan(ctx, opts.LogLevel, constants.TerraformUpgradePlanFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("terraform plan: %w", err)
|
return false, fmt.Errorf("terraform plan: %w", err)
|
||||||
}
|
}
|
||||||
@ -137,7 +135,7 @@ func (u *TerraformUpgrader) CleanUpTerraformMigrations(fileHandler file.Handler,
|
|||||||
// In case of a successful upgrade, the output will be written to the specified file and the old Terraform directory is replaced
|
// In case of a successful upgrade, the output will be written to the specified file and the old Terraform directory is replaced
|
||||||
// By the new one.
|
// By the new one.
|
||||||
func (u *TerraformUpgrader) ApplyTerraformMigrations(ctx context.Context, fileHandler file.Handler, opts TerraformUpgradeOptions, upgradeID string) error {
|
func (u *TerraformUpgrader) ApplyTerraformMigrations(ctx context.Context, fileHandler file.Handler, opts TerraformUpgradeOptions, upgradeID string) error {
|
||||||
tfOutput, err := u.tf.CreateCluster(ctx, opts.LogLevel, opts.Targets...)
|
tfOutput, err := u.tf.CreateCluster(ctx, opts.LogLevel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("terraform apply: %w", err)
|
return fmt.Errorf("terraform apply: %w", err)
|
||||||
}
|
}
|
||||||
@ -180,8 +178,8 @@ func (u *TerraformUpgrader) ApplyTerraformMigrations(ctx context.Context, fileHa
|
|||||||
type tfClient interface {
|
type tfClient interface {
|
||||||
PrepareUpgradeWorkspace(path, oldWorkingDir, newWorkingDir, upgradeID string, vars terraform.Variables) error
|
PrepareUpgradeWorkspace(path, oldWorkingDir, newWorkingDir, upgradeID string, vars terraform.Variables) error
|
||||||
ShowPlan(ctx context.Context, logLevel terraform.LogLevel, planFilePath string, output io.Writer) error
|
ShowPlan(ctx context.Context, logLevel terraform.LogLevel, planFilePath string, output io.Writer) error
|
||||||
Plan(ctx context.Context, logLevel terraform.LogLevel, planFile string, targets ...string) (bool, error)
|
Plan(ctx context.Context, logLevel terraform.LogLevel, planFile string) (bool, error)
|
||||||
CreateCluster(ctx context.Context, logLevel terraform.LogLevel, targets ...string) (terraform.CreateOutput, error)
|
CreateCluster(ctx context.Context, logLevel terraform.LogLevel) (terraform.CreateOutput, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// policyPatcher interacts with the CSP (currently only applies for Azure) to update the attestation policy.
|
// policyPatcher interacts with the CSP (currently only applies for Azure) to update the attestation policy.
|
||||||
|
@ -356,11 +356,11 @@ func (u *stubTerraformClient) ShowPlan(context.Context, terraform.LogLevel, stri
|
|||||||
return u.showErr
|
return u.showErr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *stubTerraformClient) Plan(context.Context, terraform.LogLevel, string, ...string) (bool, error) {
|
func (u *stubTerraformClient) Plan(context.Context, terraform.LogLevel, string) (bool, error) {
|
||||||
return u.hasDiff, u.planErr
|
return u.hasDiff, u.planErr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *stubTerraformClient) CreateCluster(context.Context, terraform.LogLevel, ...string) (terraform.CreateOutput, error) {
|
func (u *stubTerraformClient) CreateCluster(context.Context, terraform.LogLevel) (terraform.CreateOutput, error) {
|
||||||
return terraform.CreateOutput{}, u.CreateClusterErr
|
return terraform.CreateOutput{}, u.CreateClusterErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user