func (payloadHandler *payloadRequestHandler) addPayloadTasks(payload *ecsacs.PayloadMessage) ([]*ecsacs.IAMRoleCredentialsAckRequest, bool) {
	// verify that we were able to work with all tasks in this payload so we know whether to ack the whole thing or not
	allTasksOK := true

	validTasks := make([]*apitask.Task, 0, len(payload.Tasks))
	for _, task := range payload.Tasks {
		if task == nil {
			seelog.Criticalf("Received nil task for messageId: %s", aws.StringValue(payload.MessageId))
			allTasksOK = false
			continue
		}
		apiTask, err := apitask.TaskFromACS(task, payload)
		if err != nil {
			payloadHandler.handleUnrecognizedTask(task, err, payload)
			allTasksOK = false
			continue
		}
		if task.RoleCredentials != nil {
			// The payload from ACS for the task has credentials for the
			// task. Add those to the credentials manager and set the
			// credentials id for the task as well
			taskIAMRoleCredentials := credentials.IAMRoleCredentialsFromACS(task.RoleCredentials, credentials.ApplicationRoleType)
			err = payloadHandler.credentialsManager.SetTaskCredentials(
				&(credentials.TaskIAMRoleCredentials{
					ARN:                aws.StringValue(task.Arn),
					IAMRoleCredentials: taskIAMRoleCredentials,
				}))
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}
			apiTask.SetCredentialsID(taskIAMRoleCredentials.CredentialsID)
		}

		// Adding the eni information to the task struct
		if len(task.ElasticNetworkInterfaces) != 0 {
			eni, err := apieni.ENIFromACS(task.ElasticNetworkInterfaces)
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}

			apiTask.SetTaskENI(eni)
		}
		// Add the app mesh information to task struct
		if task.ProxyConfiguration != nil {
			appmesh, err := apiappmesh.AppMeshFromACS(task.ProxyConfiguration)
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}
			apiTask.SetAppMesh(appmesh)
		}
		if task.ExecutionRoleCredentials != nil {
			// The payload message contains execution credentials for the task.
			// Add the credentials to the credentials manager and set the
			// task executionCredentials id.
			taskExecutionIAMRoleCredentials := credentials.IAMRoleCredentialsFromACS(task.ExecutionRoleCredentials, credentials.ExecutionRoleType)
			err = payloadHandler.credentialsManager.SetTaskCredentials(
				&(credentials.TaskIAMRoleCredentials{
					ARN:                aws.StringValue(task.Arn),
					IAMRoleCredentials: taskExecutionIAMRoleCredentials,
				}))
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}
			apiTask.SetExecutionRoleCredentialsID(taskExecutionIAMRoleCredentials.CredentialsID)
		}

		validTasks = append(validTasks, apiTask)
	}
	// Add 'stop' transitions first to allow seqnum ordering to work out
	// Because a 'start' sequence number should only be proceeded if all 'stop's
	// of the same sequence number have completed, the 'start' events need to be
	// added after the 'stop' events are there to block them.
	stoppedTasksCredentialsAcks, stoppedTasksAddedOK := payloadHandler.addTasks(payload, validTasks, isTaskStatusNotStopped)
	newTasksCredentialsAcks, newTasksAddedOK := payloadHandler.addTasks(payload, validTasks, isTaskStatusStopped)
	if !stoppedTasksAddedOK || !newTasksAddedOK {
		allTasksOK = false
	}

	// Construct a slice with credentials acks from all tasks
	var credentialsAcks []*ecsacs.IAMRoleCredentialsAckRequest
	credentialsAcks = append(stoppedTasksCredentialsAcks, newTasksCredentialsAcks...)
	return credentialsAcks, allTasksOK
}
func (payloadHandler *payloadRequestHandler) addPayloadTasks(payload *ecsacs.PayloadMessage) ([]*ecsacs.IAMRoleCredentialsAckRequest, bool) {
	
	allTasksOK := true

	validTasks := make([]*apitask.Task, 0, len(payload.Tasks))
	for _, task := range payload.Tasks {
		if task == nil {
			seelog.Criticalf("Received nil task for messageId: %s", aws.StringValue(payload.MessageId))
			allTasksOK = false
			continue
		}
		apiTask, err := apitask.TaskFromACS(task, payload)
		if err != nil {
			payloadHandler.handleUnrecognizedTask(task, err, payload)
			allTasksOK = false
			continue
		}
		if task.RoleCredentials != nil {
			
			
			
			taskIAMRoleCredentials := credentials.IAMRoleCredentialsFromACS(task.RoleCredentials, credentials.ApplicationRoleType)
			err = payloadHandler.credentialsManager.SetTaskCredentials(
				&(credentials.TaskIAMRoleCredentials{
					ARN:                aws.StringValue(task.Arn),
					IAMRoleCredentials: taskIAMRoleCredentials,
				}))
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}
			apiTask.SetCredentialsID(taskIAMRoleCredentials.CredentialsID)
		}

		
		if len(task.ElasticNetworkInterfaces) != 0 {
			eni, err := apieni.ENIFromACS(task.ElasticNetworkInterfaces)
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}

			apiTask.SetTaskENI(eni)
		}
		
		if task.ProxyConfiguration != nil {
			appmesh, err := apiappmesh.AppMeshFromACS(task.ProxyConfiguration)
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}
			apiTask.SetAppMesh(appmesh)
		}
		if task.ExecutionRoleCredentials != nil {
			
			
			
			taskExecutionIAMRoleCredentials := credentials.IAMRoleCredentialsFromACS(task.ExecutionRoleCredentials, credentials.ExecutionRoleType)
			err = payloadHandler.credentialsManager.SetTaskCredentials(
				&(credentials.TaskIAMRoleCredentials{
					ARN:                aws.StringValue(task.Arn),
					IAMRoleCredentials: taskExecutionIAMRoleCredentials,
				}))
			if err != nil {
				payloadHandler.handleUnrecognizedTask(task, err, payload)
				allTasksOK = false
				continue
			}
			apiTask.SetExecutionRoleCredentialsID(taskExecutionIAMRoleCredentials.CredentialsID)
		}

		validTasks = append(validTasks, apiTask)
	}
	
	
	
	
	stoppedTasksCredentialsAcks, stoppedTasksAddedOK := payloadHandler.addTasks(payload, validTasks, isTaskStatusNotStopped)
	newTasksCredentialsAcks, newTasksAddedOK := payloadHandler.addTasks(payload, validTasks, isTaskStatusStopped)
	if !stoppedTasksAddedOK || !newTasksAddedOK {
		allTasksOK = false
	}

	
	var credentialsAcks []*ecsacs.IAMRoleCredentialsAckRequest
	credentialsAcks = append(stoppedTasksCredentialsAcks, newTasksCredentialsAcks...)
	return credentialsAcks, allTasksOK
}
func ( payloadHandler * payloadRequestHandler ) addPayloadTasks ( payload * ecsacs . PayloadMessage ) ( [ ] * ecsacs . IAMRoleCredentialsAckRequest , bool ) { // verify that we were able to work with all tasks in this payload so we know whether to ack the whole thing or not allTasksOK := true validTasks := make ( [ ] * apitask . Task , 0 , len ( payload . Tasks ) ) for _ , task := range payload . Tasks { if task == nil { seelog . Criticalf ( " " , aws . StringValue ( payload . MessageId ) ) allTasksOK = false continue } apiTask , err := apitask . TaskFromACS ( task , payload ) if err != nil { payloadHandler . handleUnrecognizedTask ( task , err , payload ) allTasksOK = false continue } if task . RoleCredentials != nil { // The payload from ACS for the task has credentials for the // task. Add those to the credentials manager and set the // credentials id for the task as well taskIAMRoleCredentials := credentials . IAMRoleCredentialsFromACS ( task . RoleCredentials , credentials . ApplicationRoleType ) err = payloadHandler . credentialsManager . SetTaskCredentials ( & ( credentials . TaskIAMRoleCredentials { ARN : aws . StringValue ( task . Arn ) , IAMRoleCredentials : taskIAMRoleCredentials , } ) ) if err != nil { payloadHandler . handleUnrecognizedTask ( task , err , payload ) allTasksOK = false continue } apiTask . SetCredentialsID ( taskIAMRoleCredentials . CredentialsID ) } // Adding the eni information to the task struct if len ( task . ElasticNetworkInterfaces ) != 0 { eni , err := apieni . ENIFromACS ( task . ElasticNetworkInterfaces ) if err != nil { payloadHandler . handleUnrecognizedTask ( task , err , payload ) allTasksOK = false continue } apiTask . SetTaskENI ( eni ) } // Add the app mesh information to task struct if task . ProxyConfiguration != nil { appmesh , err := apiappmesh . AppMeshFromACS ( task . ProxyConfiguration ) if err != nil { payloadHandler . handleUnrecognizedTask ( task , err , payload ) allTasksOK = false continue } apiTask . SetAppMesh ( appmesh ) } if task . ExecutionRoleCredentials != nil { // The payload message contains execution credentials for the task. // Add the credentials to the credentials manager and set the // task executionCredentials id. taskExecutionIAMRoleCredentials := credentials . IAMRoleCredentialsFromACS ( task . ExecutionRoleCredentials , credentials . ExecutionRoleType ) err = payloadHandler . credentialsManager . SetTaskCredentials ( & ( credentials . TaskIAMRoleCredentials { ARN : aws . StringValue ( task . Arn ) , IAMRoleCredentials : taskExecutionIAMRoleCredentials , } ) ) if err != nil { payloadHandler . handleUnrecognizedTask ( task , err , payload ) allTasksOK = false continue } apiTask . SetExecutionRoleCredentialsID ( taskExecutionIAMRoleCredentials . CredentialsID ) } validTasks = append ( validTasks , apiTask ) } // Add 'stop' transitions first to allow seqnum ordering to work out // Because a 'start' sequence number should only be proceeded if all 'stop's // of the same sequence number have completed, the 'start' events need to be // added after the 'stop' events are there to block them. stoppedTasksCredentialsAcks , stoppedTasksAddedOK := payloadHandler . addTasks ( payload , validTasks , isTaskStatusNotStopped ) newTasksCredentialsAcks , newTasksAddedOK := payloadHandler . addTasks ( payload , validTasks , isTaskStatusStopped ) if ! stoppedTasksAddedOK || ! newTasksAddedOK { allTasksOK = false } // Construct a slice with credentials acks from all tasks var credentialsAcks [ ] * ecsacs . IAMRoleCredentialsAckRequest credentialsAcks = append ( stoppedTasksCredentialsAcks , newTasksCredentialsAcks ... ) return credentialsAcks , allTasksOK }
// addPayloadTasks does validation on each task and, for all valid ones, adds
// it to the task engine. It returns a bool indicating if it could add every
// task to the taskEngine and a slice of credential ack requests
addPayloadTasks does validation on each task and for all valid ones adds it to the task engine . It returns a bool indicating if it could add every task to the taskEngine and a slice of credential ack requests