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"
}