func NewSSHEnabler()

in fast-build-update-tool/internal/tools/ssh_enabler.go [34:70]


func NewSSHEnabler(logger *slog.Logger, instance *gamelift.Instance, instanceAccessGetter GameLiftInstanceAccessGetter, localPublicKey ssh.PublicKey, sshPort int32) (*SSHEnabler, error) {
	localPublicKeyStr := convertPublicKeyToString(localPublicKey)

	pty, err := newPtyCommandRunner()
	if err != nil {
		return nil, err
	}

	var updateCommands []string
	var isNewCommandOutput func(output string) bool

	switch instance.OperatingSystem {

	case config.OperatingSystemWindows:
		updateCommands = windowsSSHEnableCommands(localPublicKeyStr, sshPort)
		isNewCommandOutput = IsNewCommandOutputWindows

	case config.OperatingSystemLinux:
		updateCommands = linuxSSHEnableCommands(localPublicKeyStr)
		isNewCommandOutput = IsNewCommandOutputLinux

	default:
		return nil, config.UnknownOperatingSystemError(fmt.Sprint(instance.OperatingSystem))
	}

	enabler := &SSHEnabler{
		logger:               logger.With("context", "SSHEnabler"),
		pty:                  pty,
		instance:             instance,
		instanceAccessGetter: instanceAccessGetter,
		clientPublicKey:      localPublicKeyStr,
		isNewCommandOutput:   isNewCommandOutput,
		commandsToRun:        updateCommands,
	}

	return enabler, enabler.Validate()
}