cli: remove unnecessary check from QEMU rollbacker (#2489)

Signed-off-by: Daniel Weiße <dw@edgeless.systems>
This commit is contained in:
Daniel Weiße 2023-10-23 10:20:25 +02:00 committed by GitHub
parent 9c89b75a53
commit d154703c9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 29 deletions

View file

@ -232,7 +232,7 @@ type qemuCreateOptions struct {
} }
func (c *Creator) createQEMU(ctx context.Context, cl tfResourceClient, lv libvirtRunner, opts qemuCreateOptions) (tfOutput state.Infrastructure, retErr error) { func (c *Creator) createQEMU(ctx context.Context, cl tfResourceClient, lv libvirtRunner, opts qemuCreateOptions) (tfOutput state.Infrastructure, retErr error) {
qemuRollbacker := &rollbackerQEMU{client: cl, libvirt: lv, createdWorkspace: false} qemuRollbacker := &rollbackerQEMU{client: cl, libvirt: lv}
defer rollbackOnError(c.out, &retErr, qemuRollbacker, opts.TFLogLevel) defer rollbackOnError(c.out, &retErr, qemuRollbacker, opts.TFLogLevel)
// TODO(malt3): render progress bar // TODO(malt3): render progress bar
@ -288,9 +288,6 @@ func (c *Creator) createQEMU(ctx context.Context, cl tfResourceClient, lv libvir
return state.Infrastructure{}, fmt.Errorf("prepare workspace: %w", err) return state.Infrastructure{}, fmt.Errorf("prepare workspace: %w", err)
} }
// Allow rollback of QEMU Terraform workspace from this point on
qemuRollbacker.createdWorkspace = true
tfOutput, err = cl.ApplyCluster(ctx, opts.Provider, opts.TFLogLevel) tfOutput, err = cl.ApplyCluster(ctx, opts.Provider, opts.TFLogLevel)
if err != nil { if err != nil {
return state.Infrastructure{}, fmt.Errorf("create cluster: %w", err) return state.Infrastructure{}, fmt.Errorf("create cluster: %w", err)

View file

@ -52,17 +52,15 @@ func (r *rollbackerTerraform) rollback(ctx context.Context, w io.Writer, logLeve
type rollbackerQEMU struct { type rollbackerQEMU struct {
client tfResourceClient client tfResourceClient
libvirt libvirtRunner libvirt libvirtRunner
createdWorkspace bool
} }
func (r *rollbackerQEMU) rollback(ctx context.Context, w io.Writer, logLevel terraform.LogLevel) (retErr error) { func (r *rollbackerQEMU) rollback(ctx context.Context, w io.Writer, logLevel terraform.LogLevel) error {
if r.createdWorkspace { tfErr := r.client.Destroy(ctx, logLevel)
retErr = r.client.Destroy(ctx, logLevel) libvirtErr := r.libvirt.Stop(ctx)
} if err := errors.Join(tfErr, libvirtErr); err != nil {
if retErr := errors.Join(retErr, r.libvirt.Stop(ctx)); retErr != nil {
fmt.Fprintf(w, "Could not destroy the resources. Please delete the %q directory manually if no resources were created\n", fmt.Fprintf(w, "Could not destroy the resources. Please delete the %q directory manually if no resources were created\n",
constants.TerraformWorkingDir) constants.TerraformWorkingDir)
return retErr return err
} }
return r.client.CleanUpWorkspace() return r.client.CleanUpWorkspace()
} }

View file

@ -72,14 +72,12 @@ func TestRollbackQEMU(t *testing.T) {
testCases := map[string]struct { testCases := map[string]struct {
libvirt *stubLibvirtRunner libvirt *stubLibvirtRunner
tfClient *stubTerraformClient tfClient *stubTerraformClient
createdWorkspace bool
wantDestroyErr bool wantDestroyErr bool
wantErr bool wantErr bool
}{ }{
"success": { "success": {
libvirt: &stubLibvirtRunner{}, libvirt: &stubLibvirtRunner{},
tfClient: &stubTerraformClient{}, tfClient: &stubTerraformClient{},
createdWorkspace: true,
}, },
"stop libvirt error": { "stop libvirt error": {
libvirt: &stubLibvirtRunner{stopErr: someErr}, libvirt: &stubLibvirtRunner{stopErr: someErr},
@ -105,7 +103,6 @@ func TestRollbackQEMU(t *testing.T) {
rollbacker := &rollbackerQEMU{ rollbacker := &rollbackerQEMU{
libvirt: tc.libvirt, libvirt: tc.libvirt,
client: tc.tfClient, client: tc.tfClient,
createdWorkspace: tc.createdWorkspace,
} }
destroyClusterErrOutput := &bytes.Buffer{} destroyClusterErrOutput := &bytes.Buffer{}
@ -125,11 +122,7 @@ func TestRollbackQEMU(t *testing.T) {
} }
assert.NoError(err) assert.NoError(err)
assert.True(tc.libvirt.stopCalled) assert.True(tc.libvirt.stopCalled)
if tc.createdWorkspace {
assert.True(tc.tfClient.destroyCalled) assert.True(tc.tfClient.destroyCalled)
} else {
assert.False(tc.tfClient.destroyCalled)
}
assert.True(tc.tfClient.cleanUpWorkspaceCalled) assert.True(tc.tfClient.cleanUpWorkspaceCalled)
}) })
} }