mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 10:00:01 +08:00 
			
		
		
		
	 f218f8430a
			
		
	
	f218f8430a
	
	
	
		
			
			Copy all proxy envs into the VM on each start, this allows for updates without having to recrate the VM. This is implemented via shell script that is passed via ssh to the VM after it is started. With that we now use the same logic for all providers the old fw_cfg logic for qemu has been removed and the WSL code as well which keeps the behavior the same. There is a small risk now because we only update the env via ssh that processes started before will have the old incorrect env but it should really only effect core system processes which likely do not need them anyway. The podman system service should not be started at this point so it should be good enough. It also fixes the broken behavior with SSL_CERT_FILE/SSL_CERT_DIR which were updated on each start which is not correct as the files are only copied with ignition so these should not be updated and just set statically when the VM was created. e2e test has been added to ensure the behavior works as expected. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package machine
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"io"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 	"strconv"
 | |
| 
 | |
| 	"github.com/sirupsen/logrus"
 | |
| )
 | |
| 
 | |
| // CommonSSH is a common function for ssh'ing to a podman machine using system-connections
 | |
| // and a port
 | |
| // TODO This should probably be taught about an machineconfig to reduce input
 | |
| func CommonSSH(username, identityPath, name string, sshPort int, inputArgs []string) error {
 | |
| 	return commonSSH(username, identityPath, name, sshPort, inputArgs, false, os.Stdin)
 | |
| }
 | |
| 
 | |
| func CommonSSHSilent(username, identityPath, name string, sshPort int, inputArgs []string) error {
 | |
| 	return commonSSH(username, identityPath, name, sshPort, inputArgs, true, os.Stdin)
 | |
| }
 | |
| 
 | |
| func CommonSSHWithStdin(username, identityPath, name string, sshPort int, inputArgs []string, stdin io.Reader) error {
 | |
| 	return commonSSH(username, identityPath, name, sshPort, inputArgs, false, stdin)
 | |
| }
 | |
| 
 | |
| func commonSSH(username, identityPath, name string, sshPort int, inputArgs []string, silent bool, stdin io.Reader) error {
 | |
| 	sshDestination := username + "@localhost"
 | |
| 	port := strconv.Itoa(sshPort)
 | |
| 	interactive := true
 | |
| 
 | |
| 	args := []string{"-i", identityPath, "-p", port, sshDestination,
 | |
| 		"-o", "IdentitiesOnly=yes",
 | |
| 		"-o", "StrictHostKeyChecking=no", "-o", "LogLevel=ERROR", "-o", "SetEnv=LC_ALL="}
 | |
| 	if len(inputArgs) > 0 {
 | |
| 		interactive = false
 | |
| 		args = append(args, inputArgs...)
 | |
| 	} else {
 | |
| 		// ensure we have a tty
 | |
| 		args = append(args, "-t")
 | |
| 		fmt.Printf("Connecting to vm %s. To close connection, use `~.` or `exit`\n", name)
 | |
| 	}
 | |
| 
 | |
| 	cmd := exec.Command("ssh", args...)
 | |
| 	logrus.Debugf("Executing: ssh %v\n", args)
 | |
| 
 | |
| 	if !silent {
 | |
| 		if err := setupIOPassthrough(cmd, interactive, stdin); err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return cmd.Run()
 | |
| }
 |