// Execute runs multiple sets of commands and returns their outputs. // res.Output will contain a slice of RunCommandPluginOutput. func (p *Plugin) Execute(context context.T, config contracts.Configuration, cancelFlag task.CancelFlag) (res contracts.PluginResult) { log := context.Log() log.Info("RunCommand started with configuration ", config) util := new(updateutil.Utility) manager := new(updateManager) res.StartDateTime = time.Now() defer func() { res.EndDateTime = time.Now() }() //loading Properties as list since aws:updateSsmAgent uses properties as list var properties []interface{} if properties, res = pluginutil.LoadParametersAsList(log, config.Properties); res.Code != 0 { return res } out := make([]UpdatePluginOutput, len(properties)) for i, prop := range properties { // check if a reboot has been requested if rebooter.RebootRequested() { log.Info("A plugin has requested a reboot.") break } if cancelFlag.ShutDown() { out[i] = UpdatePluginOutput{} out[i].Errors = []string{"Execution canceled due to ShutDown"} break } else if cancelFlag.Canceled() { out[i] = UpdatePluginOutput{} out[i].Errors = []string{"Execution canceled"} break } out[i] = updateAgent(p, config, log, manager, util, prop, cancelFlag, config.OutputS3BucketName, config.OutputS3KeyPrefix, res.StartDateTime) res.Code = out[i].ExitCode res.Status = out[i].Status res.Output = fmt.Sprintf("%v", out[i].String()) } return }
// Execute runs multiple sets of commands and returns their outputs. // res.Output will contain a slice of RunCommandPluginOutput. func (p *Plugin) Execute(context context.T, config contracts.Configuration, cancelFlag task.CancelFlag) (res contracts.PluginResult) { log := context.Log() log.Infof("%v started with configuration %v", Name(), config) res.StartDateTime = time.Now() defer func() { res.EndDateTime = time.Now() }() //loading Properties as list since aws:runPowershellScript & aws:runShellScript uses properties as list var properties []interface{} if properties, res = pluginutil.LoadParametersAsList(log, config.Properties); res.Code != 0 { pluginutil.PersistPluginInformationToCurrent(log, Name(), config, res) return res } out := make([]contracts.PluginOutput, len(properties)) for i, prop := range properties { // check if a reboot has been requested if rebooter.RebootRequested() { log.Info("A plugin has requested a reboot.") return } if cancelFlag.ShutDown() { out[i] = contracts.PluginOutput{Errors: []string{"Execution canceled due to ShutDown"}} out[i].ExitCode = 1 out[i].Status = contracts.ResultStatusFailed break } if cancelFlag.Canceled() { out[i] = contracts.PluginOutput{Errors: []string{"Execution canceled"}} out[i].ExitCode = 1 out[i].Status = contracts.ResultStatusCancelled break } out[i] = p.runCommandsRawInput(log, prop, config.OrchestrationDirectory, cancelFlag, config.OutputS3BucketName, config.OutputS3KeyPrefix) } // TODO: instance here we have to do more result processing, where individual sub properties results are merged smartly into plugin response. // Currently assuming we have only one work. if len(properties) > 0 { res.Code = out[0].ExitCode res.Status = out[0].Status res.Output = out[0].String() } pluginutil.PersistPluginInformationToCurrent(log, Name(), config, res) return res }