func()

in src/ssmclicommands/startsession.go [145:203]


func (s *StartSessionCommand) Execute(parameters map[string][]string) (error, string) {
	var (
		err        error
		region     string
		profile    string
		endpoint   string
		instanceId string
	)
	validation := s.validateStartSessionInput(parameters)
	if len(validation) > 0 {
		return errors.New(strings.Join(validation, "\n")), ""
	}

	log := log.Logger(true, "ssmcli")

	if parameters[REGION] != nil {
		region = parameters[REGION][0]
	}

	if parameters[PROFILE] != nil {
		profile = parameters[PROFILE][0]
	}
	if parameters[ENDPOINT] != nil {
		endpoint = parameters[ENDPOINT][0]
	}
	if parameters[INSTANCE_ID] != nil {
		instanceId = parameters[INSTANCE_ID][0]
	}

	if s.sdk, err = getSSMClient(log, region, profile, endpoint); err != nil {
		return err, "StartSession failed"
	}

	log.Infof("Calling StartSession API with parameters: %v", parameters)
	sessionId, tokenValue, streamUrl, err := s.getStartSessionParams(log, parameters)
	if err != nil {
		log.Errorf("Error in getting start awsSession params: %v", err)
		return err, "StartSession failed"
	}
	log.Infof("For SessionId: %s, StartSession returned streamUrl: %s", sessionId, streamUrl)
	clientId := uuid.NewV4().String()

	session := session.Session{
		SessionId:   sessionId,
		StreamUrl:   streamUrl,
		TokenValue:  tokenValue,
		Endpoint:    endpoint,
		ClientId:    clientId,
		TargetId:    instanceId,
		DataChannel: &datachannel.DataChannel{},
	}

	if err = executeSession(log, &session); err != nil {
		log.Errorf("Cannot perform start session: %v", err)
		return err, "StartSession failed"
	}

	return err, "StartSession executed successfully"
}