func()

in src/ssmclicommands/startsession.go [236:289]


func (s *StartSessionCommand) getStartSessionParams(log log.T, parameters map[string][]string) (string, string, string, error) {
	//Fetch command token
	uuid.SwitchFormat(uuid.CleanHyphen)

	startSessionInput := ssm.StartSessionInput{
		Target: &parameters[INSTANCE_ID][0],
	}

	if parameters[DOCUMENT_NAME] != nil {
		startSessionInput.DocumentName = &parameters[DOCUMENT_NAME][0]
	}

	delete(parameters, INSTANCE_ID)
	delete(parameters, DOCUMENT_NAME)
	delete(parameters, REGION)

	if parameters["parameters"] != nil && len(parameters["parameters"]) == 1 {

		userParameters := make(map[string][]*string)
		params := make(map[string][]string)

		if err := jsonutil.Unmarshal(parameters[PARAMETERS][0], &params); err != nil {
			return "", "", "", fmt.Errorf("%v not valid input, get error: %v", PARAMETERS, err)
		}

		for k, v := range params {
			values := make([]*string, len(v))
			for index, element := range v {
				value := element
				values[index] = &value
			}
			userParameters[k] = values
		}

		startSessionInput.Parameters = userParameters
	}

	log.Infof("StartSession input parameters: %v", startSessionInput)
	startSessionOutput, err := startSession(s, &startSessionInput)
	if err != nil {
		log.Errorf("StartSession Failed: %v", err)
		return "", "", "", fmt.Errorf("start session failed with error: %v", err)
	}

	sessionId := startSessionOutput.SessionId
	tokenValue := startSessionOutput.TokenValue
	streamUrl := startSessionOutput.StreamUrl

	if tokenValue == nil || sessionId == nil || streamUrl == nil {
		return "", "", "", fmt.Errorf("token value or sessionId or streamUrl should not be empty. \n")
	}

	return *sessionId, *tokenValue, *streamUrl, err
}