Refactor to reduce vfs -> terraformWriter dependency

This commit is contained in:
justinsb 2023-01-03 15:12:35 -05:00
parent aeca5f9b54
commit c2810a5c96
5 changed files with 19 additions and 54 deletions

View File

@ -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) {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {