AB#2532 Dont clean up workspace if rollback fails (#360)

* Dont clean up workspace if rollback fails

* Remove dependency on CSP from terminate

Signed-off-by: Daniel Weiße <dw@edgeless.systems>
This commit is contained in:
Daniel Weiße 2022-10-26 15:57:00 +02:00 committed by GitHub
parent 1f8eba37c8
commit e66cb84d6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 190 additions and 111 deletions

View file

@ -45,15 +45,21 @@ func prepareWorkspace(fileHandler file.Handler, provider cloudprovider.Provider)
}
// cleanUpWorkspace removes files that were loaded into the workspace.
func cleanUpWorkspace(fileHandler file.Handler, provider cloudprovider.Provider) error {
rootDir := path.Join("terraform", strings.ToLower(provider.String()))
return fs.WalkDir(terraformFS, rootDir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
func cleanUpWorkspace(fileHandler file.Handler) error {
// try to remove any terraform files in the workspace
for _, csp := range []string{"aws", "azure", "gcp", "qemu"} {
rootDir := path.Join("terraform", csp)
if err := fs.WalkDir(terraformFS, rootDir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
fileName := strings.TrimPrefix(path, rootDir+"/")
return ignoreFileNotFoundErr(fileHandler.RemoveAll(fileName))
}); err != nil {
return err
}
fileName := strings.TrimPrefix(path, rootDir+"/")
return ignoreFileNotFoundErr(fileHandler.RemoveAll(fileName))
})
}
return nil
}
// ignoreFileNotFoundErr ignores the error if it is a file not found error.

View file

@ -63,7 +63,7 @@ func TestLoader(t *testing.T) {
checkFiles(t, file, func(err error) { assert.NoError(err) }, tc.fileList)
err = cleanUpWorkspace(file, tc.provider)
err = cleanUpWorkspace(file)
require.NoError(err)
checkFiles(t, file, func(err error) { assert.ErrorIs(err, fs.ErrNotExist) }, tc.fileList)

View file

@ -32,14 +32,12 @@ const (
type Client struct {
tf tfInterface
provider cloudprovider.Provider
file file.Handler
remove func()
}
// New sets up a new Client for Terraform.
func New(ctx context.Context, provider cloudprovider.Provider) (*Client, error) {
func New(ctx context.Context) (*Client, error) {
tf, remove, err := GetExecutable(ctx, ".")
if err != nil {
return nil, err
@ -48,16 +46,17 @@ func New(ctx context.Context, provider cloudprovider.Provider) (*Client, error)
file := file.NewHandler(afero.NewOsFs())
return &Client{
tf: tf,
provider: provider,
remove: remove,
file: file,
tf: tf,
remove: remove,
file: file,
}, nil
}
// CreateCluster creates a Constellation cluster using Terraform.
func (c *Client) CreateCluster(ctx context.Context, name string, vars Variables) (string, error) {
if err := prepareWorkspace(c.file, c.provider); err != nil {
func (c *Client) CreateCluster(
ctx context.Context, provider cloudprovider.Provider, name string, vars Variables,
) (string, error) {
if err := prepareWorkspace(c.file, provider); err != nil {
return "", err
}
@ -102,7 +101,7 @@ func (c *Client) RemoveInstaller() {
// CleanUpWorkspace removes terraform files from the current directory.
func (c *Client) CleanUpWorkspace() error {
if err := cleanUpWorkspace(c.file, c.provider); err != nil {
if err := cleanUpWorkspace(c.file); err != nil {
return err
}

View file

@ -122,12 +122,11 @@ func TestCreateCluster(t *testing.T) {
assert := assert.New(t)
c := &Client{
provider: tc.provider,
tf: tc.tf,
file: file.NewHandler(tc.fs),
tf: tc.tf,
file: file.NewHandler(tc.fs),
}
ip, err := c.CreateCluster(context.Background(), "test", tc.vars)
ip, err := c.CreateCluster(context.Background(), tc.provider, "test", tc.vars)
if tc.wantErr {
assert.Error(err)
@ -160,8 +159,7 @@ func TestDestroyInstances(t *testing.T) {
assert := assert.New(t)
c := &Client{
provider: cloudprovider.QEMU,
tf: tc.tf,
tf: tc.tf,
}
err := c.DestroyCluster(context.Background())
@ -207,9 +205,8 @@ func TestCleanupWorkspace(t *testing.T) {
require.NoError(tc.prepareFS(file))
c := &Client{
provider: tc.provider,
file: file,
tf: &stubTerraform{},
file: file,
tf: &stubTerraform{},
}
err := c.CleanUpWorkspace()