in cmd/resource/lambda.go [210:255]
func invokeLambda(session *session.Session, svc lambdaiface.LambdaAPI, clusterName *string, iamAuthMap *IamAuthMap, action Action) (*IamAuthMap, error) {
endpoint, caData, err := GetClusterDetails(eks.New(session), clusterName)
if err != nil {
return nil, err
}
event := Event{
ClusterName: clusterName,
Endpoint: endpoint,
CaData: caData,
AwsAuth: iamAuthMap,
Action: action,
}
eventJson, err := json.Marshal(event)
if err != nil {
return nil, err
}
input := &lambda.InvokeInput{
FunctionName: aws.String(FunctionNamePrefix + *clusterName),
Payload: eventJson,
}
result, err := svc.Invoke(input)
if err != nil {
return nil, err
}
if result.FunctionError != nil {
log.Printf("Remote execution error: %v\n", *result.FunctionError)
errorDetails := make(map[string]string)
err := json.Unmarshal(result.Payload, &errorDetails)
errMsg := ""
if err != nil {
log.Println(err.Error())
errMsg = fmt.Sprintf("[%v] %v", *result.FunctionError, string(result.Payload))
} else {
errMsg = fmt.Sprintf("[%v] %v", errorDetails["errorType"], errorDetails["errorMessage"])
}
return nil, errors.New(errMsg)
}
resp := &IamAuthMap{}
err = json.Unmarshal(result.Payload, resp)
if err != nil {
return nil, err
}
return resp, nil
}