@@ -21,7 +21,6 @@ import (
2121 "io/fs"
2222 "net"
2323 "os"
24- "path/filepath"
2524
2625 goruntime "runtime"
2726
@@ -36,14 +35,20 @@ import (
3635 "google.golang.org/grpc/status"
3736)
3837
38+ type ModuleDirectory struct {
39+ ParentDir string
40+ Modules fs.FS
41+ }
42+
3943type NitricTerraformProvider interface {
4044 // Init - Initialize the provider with the given attributes, prior to any resource creation or Pulumi Context creation
4145 Init (attributes map [string ]interface {}) error
4246 // Pre - Called prior to any resource creation, after the Pulumi Context has been established
4347 Pre (stack cdktf.TerraformStack , resources []* deploymentspb.Resource ) error
4448
4549 // CdkTfModules - Return the relative parent directory (root golang packed) and embedded modules directory
46- CdkTfModules () (string , fs.FS , error )
50+ // CdkTfModules() (string, fs.FS, error)
51+ CdkTfModules () ([]ModuleDirectory , error )
4752
4853 // RequiredProviders - Return a list of required providers for this provider
4954 RequiredProviders () map [string ]interface {}
@@ -127,53 +132,63 @@ func createTerraformStackForNitricProvider(req *deploymentspb.DeploymentUpReques
127132
128133 fullStackName := fmt .Sprintf ("%s-%s" , projectName , stackName )
129134
130- parentDir , modules , err := nitricProvider .CdkTfModules ()
135+ modules , err := nitricProvider .CdkTfModules ()
131136 if err != nil {
132137 return err
133138 }
134139
135- // modules dir
136- modulesDir := filepath .Join (parentDir )
137-
138- err = os .MkdirAll (modulesDir , 0o750 )
139- if err != nil {
140- return err
141- }
142- // cleanup the modules when we're done
143- // NOTE: Its importent to ensure that the modules are written to a temporary directory like .nitric
144- defer os .RemoveAll (modulesDir )
145-
146- err = fs .WalkDir (modules , "." , func (path string , d fs.DirEntry , err error ) error {
140+ fses := []fs.FS {}
141+ relativeModules := []string {}
142+ for _ , module := range modules {
143+ relativeModules = append (relativeModules , module .ParentDir )
144+ err = os .MkdirAll (module .ParentDir , 0o750 )
147145 if err != nil {
148146 return err
149147 }
150148
151- if ! d .IsDir () {
152- data , err := modules .Open (path )
149+ defer os .RemoveAll (module .ParentDir )
150+ fses = append (fses , module .Modules )
151+ }
152+
153+ // modules dir
154+
155+ // cleanup the modules when we're done
156+ // NOTE: Its important to ensure that the modules are written to a temporary directory like .nitric
157+
158+ for _ , fsx := range fses {
159+ err = fs .WalkDir (fsx , "." , func (path string , d fs.DirEntry , err error ) error {
153160 if err != nil {
154161 return err
155162 }
156- defer data .Close ()
157163
158- //#nosec G304 -- path unpacking known modules embedded fs
159- out , err := os .Create (path )
160- if err != nil {
164+ if ! d .IsDir () {
165+ data , err := fsx .Open (path )
166+ if err != nil {
167+ return err
168+ }
169+ defer data .Close ()
170+
171+ //#nosec G304 -- path unpacking known modules embedded fs
172+ out , err := os .Create (path )
173+ if err != nil {
174+ return err
175+ }
176+ defer out .Close ()
177+
178+ fmt .Println ("Writing module to" , path )
179+ _ , err = io .Copy (out , data )
161180 return err
162181 }
163- defer out .Close ()
164182
165- _ , err = io .Copy (out , data )
183+ return os .MkdirAll (path , 0o750 )
184+ })
185+ if err != nil {
166186 return err
167187 }
168-
169- return os .MkdirAll (path , 0o750 )
170- })
171- if err != nil {
172- return err
173188 }
174189
175190 appCtx := map [string ]interface {}{
176- "cdktfRelativeModules" : [] string { filepath . Join ( modulesDir )} ,
191+ "cdktfRelativeModules" : relativeModules ,
177192 // Ensure static output
178193 "cdktfStaticModuleAssetHash" : "nitric_modules" ,
179194 }
0 commit comments