@@ -274,55 +274,56 @@ func (p *Provisioner) provision() error {
274274}
275275
276276func (p * Provisioner ) createKindConfig (env v1alpha1.Environment ) error {
277- // Specify the remote file path
278277 remoteFilePath := remoteKindConfig
279278
280- // Create a session
281- session , err := p .Client .NewSession ()
279+ // Session 1: create remote directory
280+ session1 , err := p .Client .NewSession ()
282281 if err != nil {
283282 return fmt .Errorf ("failed to create session: %w" , err )
284283 }
285- defer func () { _ = session .Close () }()
286-
287- // create remote directory if it does not exist
288- if err := session .Run ("sudo mkdir -p /etc/kubernetes" ); err != nil {
284+ if err := session1 .Run ("sudo mkdir -p /etc/kubernetes" ); err != nil {
285+ _ = session1 .Close ()
289286 return fmt .Errorf ("failed to create remote directory /etc/kubernetes: %w" , err )
290287 }
288+ _ = session1 .Close ()
291289
292- // Open a remote file for writing
293- remoteFile , err := session .StdinPipe ()
290+ // Session 2: write file to remote
291+ session2 , err := p .Client .NewSession ()
292+ if err != nil {
293+ return fmt .Errorf ("failed to create session: %w" , err )
294+ }
295+ defer func () { _ = session2 .Close () }()
296+
297+ remoteFile , err := session2 .StdinPipe ()
294298 if err != nil {
295299 return fmt .Errorf ("failed to open remote file %s: %w" , remoteFilePath , err )
296300 }
297- if err := session .Start ("cat > " + remoteFilePath ); err != nil {
301+ if err := session2 .Start ("cat > " + remoteFilePath ); err != nil {
298302 return fmt .Errorf ("failed to start session: %w" , err )
299303 }
300304
301- // open local file for reading
302- // first check if file path is relative or absolute
303- // if relative, then prepend the current working directory
304- if ! filepath .IsAbs (env .Spec .Kubernetes .KindConfig ) {
305+ // Resolve local file path
306+ kindConfigPath := env .Spec .Kubernetes .KindConfig
307+ if ! filepath .IsAbs (kindConfigPath ) {
305308 cwd , err := os .Getwd ()
306309 if err != nil {
307310 return fmt .Errorf ("failed to get current working directory: %w" , err )
308311 }
309-
310- env .Spec .Kubernetes .KindConfig = filepath .Join (cwd , strings .TrimPrefix (env .Spec .Kubernetes .KindConfig , "./" ))
312+ kindConfigPath = filepath .Join (cwd , strings .TrimPrefix (kindConfigPath , "./" ))
311313 }
312314
313- localFile , err := os .Open (env . Spec . Kubernetes . KindConfig )
315+ localFile , err := os .Open (kindConfigPath ) //nolint:gosec // path from user-provided config
314316 if err != nil {
315- return fmt .Errorf ("failed to open local file %s: %w" , env . Spec . Kubernetes . KindConfig , err )
317+ return fmt .Errorf ("failed to open local file %s: %w" , kindConfigPath , err )
316318 }
319+ defer func () { _ = localFile .Close () }()
317320
318- // copy local file to remote file
319321 if _ , err := io .Copy (remoteFile , localFile ); err != nil {
320- return fmt .Errorf ("failed to copy local file %s to remote file %s: %w" , env . Spec . Kubernetes . KindConfig , remoteFilePath , err )
322+ return fmt .Errorf ("failed to copy local file %s to remote file %s: %w" , kindConfigPath , remoteFilePath , err )
321323 }
322324
323- // Close the writing pipe and wait for the session to finish
324325 _ = remoteFile .Close ()
325- if err := session .Wait (); err != nil {
326+ if err := session2 .Wait (); err != nil {
326327 return fmt .Errorf ("failed to wait for command to complete: %w" , err )
327328 }
328329
0 commit comments