From c2810a5c9649bfae559cd0de7d30030007cfc27b Mon Sep 17 00:00:00 2001 From: justinsb Date: Tue, 3 Jan 2023 15:12:35 -0500 Subject: [PATCH] Refactor to reduce vfs -> terraformWriter dependency --- upup/pkg/fi/cloudup/terraformWriter/writer.go | 10 +++++-- util/pkg/vfs/gsfs.go | 16 ++---------- util/pkg/vfs/memfs.go | 18 +++---------- util/pkg/vfs/s3fs.go | 26 +++++-------------- util/pkg/vfs/vfs.go | 3 --- 5 files changed, 19 insertions(+), 54 deletions(-) diff --git a/upup/pkg/fi/cloudup/terraformWriter/writer.go b/upup/pkg/fi/cloudup/terraformWriter/writer.go index eb3aca6f75..15e7f6b8e1 100644 --- a/upup/pkg/fi/cloudup/terraformWriter/writer.go +++ b/upup/pkg/fi/cloudup/terraformWriter/writer.go @@ -94,7 +94,7 @@ func (t *TerraformWriter) AddFileBytes(resourceType string, resourceName string, return LiteralFunctionExpression(fn, path), nil } -func (t *TerraformWriter) EnsureTerraformProvider(tfProvider *TerraformProvider) { +func (t *TerraformWriter) EnsureTerraformProvider(name string, arguments map[string]string) *TerraformProvider { t.mutex.Lock() defer t.mutex.Unlock() @@ -102,17 +102,23 @@ func (t *TerraformWriter) EnsureTerraformProvider(tfProvider *TerraformProvider) t.Providers = make(map[string]*TerraformProvider) } + tfProvider := &TerraformProvider{ + Name: name, + Arguments: arguments, + } + key := tfProvider.Name existing := t.Providers[key] if existing != nil { if reflect.DeepEqual(tfProvider, existing) { // already exists and matches - return + return existing } klog.Fatalf("attempt to add different tfProvider with key %q", key) } t.Providers[key] = tfProvider + return tfProvider } func (t *TerraformWriter) AddFilePath(resourceType string, resourceName string, key string, data []byte, base64 bool) (*Literal, error) { diff --git a/util/pkg/vfs/gsfs.go b/util/pkg/vfs/gsfs.go index c366bbc925..45c01433d4 100644 --- a/util/pkg/vfs/gsfs.go +++ b/util/pkg/vfs/gsfs.go @@ -119,15 +119,6 @@ func (p *GSPath) String() string { return p.Path() } -// TerraformProvider returns the provider name and necessary arguments -func (p *GSPath) TerraformProvider() (*terraformWriter.TerraformProvider, error) { - provider := &terraformWriter.TerraformProvider{ - Name: "google", - Arguments: map[string]string{}, // GCS doesn't need the project and region specified - } - return provider, nil -} - func (p *GSPath) Remove() error { ctx := context.TODO() done, err := RetryWithBackoff(gcsWriteBackoff, func() (bool, error) { @@ -434,11 +425,8 @@ func (p *GSPath) RenderTerraform(w *terraformWriter.TerraformWriter, name string return fmt.Errorf("reading data: %v", err) } - tfProvider, err := p.TerraformProvider() - if err != nil { - return err - } - w.EnsureTerraformProvider(tfProvider) + tfProviderArguments := map[string]string{} // GCS doesn't need the project and region specified + w.EnsureTerraformProvider("google", tfProviderArguments) content, err := w.AddFilePath("google_storage_bucket_object", name, "content", bytes, false) if err != nil { diff --git a/util/pkg/vfs/memfs.go b/util/pkg/vfs/memfs.go index aec41362c0..b73eeb35e7 100644 --- a/util/pkg/vfs/memfs.go +++ b/util/pkg/vfs/memfs.go @@ -211,17 +211,6 @@ func (p *MemFSPath) IsPublic() (bool, error) { return isPublic, nil } -// Terraform support for integration tests. - -func (p *MemFSPath) TerraformProvider() (*terraformWriter.TerraformProvider, error) { - return &terraformWriter.TerraformProvider{ - Name: "aws", - Arguments: map[string]string{ - "region": "us-test-1", - }, - }, nil -} - type terraformMemFSFile struct { Bucket string `json:"bucket" cty:"bucket"` Key string `json:"key" cty:"key"` @@ -237,11 +226,10 @@ func (p *MemFSPath) RenderTerraform(w *terraformWriter.TerraformWriter, name str return fmt.Errorf("reading data: %v", err) } - tfProvider, err := p.TerraformProvider() - if err != nil { - return err + tfProviderArguments := map[string]string{ + "region": "us-test-1", } - w.EnsureTerraformProvider(tfProvider) + w.EnsureTerraformProvider("aws", tfProviderArguments) content, err := w.AddFileBytes("aws_s3_object", name, "content", bytes, false) if err != nil { diff --git a/util/pkg/vfs/s3fs.go b/util/pkg/vfs/s3fs.go index cb107f2e6c..5874d2b6cc 100644 --- a/util/pkg/vfs/s3fs.go +++ b/util/pkg/vfs/s3fs.go @@ -89,24 +89,6 @@ func (p *S3Path) String() string { return p.Path() } -// TerraformProvider returns the provider name and necessary arguments -func (p *S3Path) TerraformProvider() (*terraformWriter.TerraformProvider, error) { - ctx := context.TODO() - - bucketDetails, err := p.getBucketDetails(ctx) - if err != nil { - return nil, err - } - - provider := &terraformWriter.TerraformProvider{ - Name: "aws", - Arguments: map[string]string{ - "region": bucketDetails.region, - }, - } - return provider, nil -} - func (p *S3Path) Remove() error { ctx := context.TODO() @@ -605,11 +587,15 @@ func (p *S3Path) RenderTerraform(w *terraformWriter.TerraformWriter, name string return fmt.Errorf("reading data: %v", err) } - tfProvider, err := p.TerraformProvider() + bucketDetails, err := p.getBucketDetails(ctx) if err != nil { return err } - w.EnsureTerraformProvider(tfProvider) + + tfProviderArguments := map[string]string{ + "region": bucketDetails.region, + } + w.EnsureTerraformProvider("aws", tfProviderArguments) content, err := w.AddFileBytes("aws_s3_object", name, "content", bytes, false) if err != nil { diff --git a/util/pkg/vfs/vfs.go b/util/pkg/vfs/vfs.go index 27bfd33cc2..834f2cb324 100644 --- a/util/pkg/vfs/vfs.go +++ b/util/pkg/vfs/vfs.go @@ -79,9 +79,6 @@ type TerraformPath interface { Path // RenderTerraform renders the file to a TerraformWriter. RenderTerraform(writer *terraformWriter.TerraformWriter, name string, data io.Reader, acl ACL) error - - // TerraformProvider returns provider information - TerraformProvider() (*terraformWriter.TerraformProvider, error) } type HasHash interface {