@@ -270,55 +270,56 @@ func (p *Provisioner) provision() error {
270270}
271271
272272func (p * Provisioner ) createKindConfig (env v1alpha1.Environment ) error {
273- // Specify the remote file path
274273 remoteFilePath := remoteKindConfig
275274
276- // Create a session
277- session , err := p .Client .NewSession ()
275+ // Session 1: create remote directory
276+ session1 , err := p .Client .NewSession ()
278277 if err != nil {
279278 return fmt .Errorf ("failed to create session: %w" , err )
280279 }
281- defer func () { _ = session .Close () }()
282-
283- // create remote directory if it does not exist
284- if err := session .Run ("sudo mkdir -p /etc/kubernetes" ); err != nil {
280+ if err := session1 .Run ("sudo mkdir -p /etc/kubernetes" ); err != nil {
281+ _ = session1 .Close ()
285282 return fmt .Errorf ("failed to create remote directory /etc/kubernetes: %w" , err )
286283 }
284+ _ = session1 .Close ()
287285
288- // Open a remote file for writing
289- remoteFile , err := session .StdinPipe ()
286+ // Session 2: write file to remote
287+ session2 , err := p .Client .NewSession ()
288+ if err != nil {
289+ return fmt .Errorf ("failed to create session: %w" , err )
290+ }
291+ defer func () { _ = session2 .Close () }()
292+
293+ remoteFile , err := session2 .StdinPipe ()
290294 if err != nil {
291295 return fmt .Errorf ("failed to open remote file %s: %w" , remoteFilePath , err )
292296 }
293- if err := session .Start ("cat > " + remoteFilePath ); err != nil {
297+ if err := session2 .Start ("cat > " + remoteFilePath ); err != nil {
294298 return fmt .Errorf ("failed to start session: %w" , err )
295299 }
296300
297- // open local file for reading
298- // first check if file path is relative or absolute
299- // if relative, then prepend the current working directory
300- if ! filepath .IsAbs (env .Spec .Kubernetes .KindConfig ) {
301+ // Resolve local file path
302+ kindConfigPath := env .Spec .Kubernetes .KindConfig
303+ if ! filepath .IsAbs (kindConfigPath ) {
301304 cwd , err := os .Getwd ()
302305 if err != nil {
303306 return fmt .Errorf ("failed to get current working directory: %w" , err )
304307 }
305-
306- env .Spec .Kubernetes .KindConfig = filepath .Join (cwd , strings .TrimPrefix (env .Spec .Kubernetes .KindConfig , "./" ))
308+ kindConfigPath = filepath .Join (cwd , strings .TrimPrefix (kindConfigPath , "./" ))
307309 }
308310
309- localFile , err := os .Open (env . Spec . Kubernetes . KindConfig )
311+ localFile , err := os .Open (kindConfigPath )
310312 if err != nil {
311- return fmt .Errorf ("failed to open local file %s: %w" , env . Spec . Kubernetes . KindConfig , err )
313+ return fmt .Errorf ("failed to open local file %s: %w" , kindConfigPath , err )
312314 }
315+ defer func () { _ = localFile .Close () }()
313316
314- // copy local file to remote file
315317 if _ , err := io .Copy (remoteFile , localFile ); err != nil {
316- return fmt .Errorf ("failed to copy local file %s to remote file %s: %w" , env . Spec . Kubernetes . KindConfig , remoteFilePath , err )
318+ return fmt .Errorf ("failed to copy local file %s to remote file %s: %w" , kindConfigPath , remoteFilePath , err )
317319 }
318320
319- // Close the writing pipe and wait for the session to finish
320321 _ = remoteFile .Close ()
321- if err := session .Wait (); err != nil {
322+ if err := session2 .Wait (); err != nil {
322323 return fmt .Errorf ("failed to wait for command to complete: %w" , err )
323324 }
324325
0 commit comments