// GetUpdatePluginConfig returns the default values for the update plugin func GetUpdatePluginConfig(context context.T) UpdatePluginConfig { log := context.Log() region, err := platform.Region() if err != nil { log.Errorf("Error retrieving agent region in update plugin config. error: %v", err) } var manifestUrl string if region == "cn-north-1" { manifestUrl = "https://s3.cn-north-1.amazonaws.com.cn/amazon-ssm-cn-north-1/ssm-agent-manifest.json" } else { manifestUrl = "https://amazon-ssm-{Region}.s3.amazonaws.com/ssm-agent-manifest.json" } return UpdatePluginConfig{ ManifestLocation: manifestUrl, StdoutFileName: "stdout", StderrFileName: "stderr", MaxStdoutLength: 2500, MaxStderrLength: 2500, OutputTruncatedSuffix: "--output truncated--", } }
// NewProcessor initializes a new mds processor with the given parameters. func NewProcessor(context context.T) *Processor { messageContext := context.With("[" + name + "]") log := messageContext.Log() config := messageContext.AppConfig() instanceID, err := platform.InstanceID() if instanceID == "" { log.Errorf("no instanceID provided, %v", err) return nil } mdsService := newMdsService(config) agentInfo := contracts.AgentInfo{ Lang: config.Os.Lang, Name: config.Agent.Name, Version: config.Agent.Version, Os: config.Os.Name, OsVersion: config.Os.Version, } agentConfig := contracts.AgentConfiguration{ AgentInfo: agentInfo, InstanceID: instanceID, } // sendCommand and cancelCommand will be processed by separate worker pools // so we can define the number of workers per each cancelWaitDuration := 10000 * time.Millisecond clock := times.DefaultClock sendCommandTaskPool := task.NewPool(log, config.Mds.CommandWorkersLimit, cancelWaitDuration, clock) cancelCommandTaskPool := task.NewPool(log, CancelWorkersLimit, cancelWaitDuration, clock) // create new message processor orchestrationRootDir := path.Join(appconfig.DefaultDataStorePath, instanceID, appconfig.DefaultCommandRootDirName, config.Agent.OrchestrationRootDir) replyBuilder := func(pluginID string, results map[string]*contracts.PluginResult) messageContracts.SendReplyPayload { runtimeStatuses := parser.PrepareRuntimeStatuses(log, results) return parser.PrepareReplyPayload(pluginID, runtimeStatuses, clock.Now(), agentConfig.AgentInfo) } statusReplyBuilder := func(agentInfo contracts.AgentInfo, resultStatus contracts.ResultStatus, documentTraceOutput string) messageContracts.SendReplyPayload { return parser.PrepareReplyPayloadToUpdateDocumentStatus(agentInfo, resultStatus, documentTraceOutput) } // create a stop policy where we will stop after 10 consecutive errors and if time period expires. processorStopPolicy := newStopPolicy() // SendResponse is used to send response on plugin completion. // If pluginID is empty it will send responses of all plugins. // If pluginID is specified, response will be sent of that particular plugin. sendResponse := func(messageID string, pluginID string, results map[string]*contracts.PluginResult) { payloadDoc := replyBuilder(pluginID, results) processSendReply(log, messageID, mdsService, payloadDoc, processorStopPolicy) } // SendDocLevelResponse is used to send document level update // Specify a new status of the document sendDocLevelResponse := func(messageID string, resultStatus contracts.ResultStatus, documentTraceOutput string) { payloadDoc := statusReplyBuilder(agentInfo, resultStatus, documentTraceOutput) processSendReply(log, messageID, mdsService, payloadDoc, processorStopPolicy) } // PersistData is used to persist the data into a bookkeeping folder persistData := func(msg *ssmmds.Message, bookkeeping string) { commandStateHelper.PersistData(log, getCommandID(*msg.MessageId), *msg.Destination, bookkeeping, *msg) } return &Processor{ context: messageContext, stopSignal: make(chan bool), config: agentConfig, service: mdsService, pluginRunner: pluginRunner, sendCommandPool: sendCommandTaskPool, cancelCommandPool: cancelCommandTaskPool, buildReply: replyBuilder, sendResponse: sendResponse, sendDocLevelResponse: sendDocLevelResponse, orchestrationRootDir: orchestrationRootDir, persistData: persistData, processorStopPolicy: processorStopPolicy, } }