diff --git a/examples/aws_ssm/aem.tf b/examples/aws_ssm/aem.tf index 629bda9..c4fea01 100644 --- a/examples/aws_ssm/aem.tf +++ b/examples/aws_ssm/aem.tf @@ -40,7 +40,6 @@ resource "aem_instance" "single" { "sh aemw osgi config save --pid 'org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet' --input-string 'alias: /crx/server'", "sh aemw repl agent setup -A --location 'author' --name 'publish' --input-string '{enabled: true, transportUri: \"http://localhost:4503/bin/receive?sling:authRequestLogin=1\", transportUser: admin, transportPassword: admin, userId: admin}'", "sh aemw package deploy --file 'aem/home/lib/aem-service-pkg-6.5.*.0.zip'", - "invalid-command" ] } } diff --git a/internal/client/client_manager.go b/internal/client/client_manager.go index 3cae017..2327db8 100644 --- a/internal/client/client_manager.go +++ b/internal/client/client_manager.go @@ -44,6 +44,8 @@ func (c ClientManager) connection(typeName string, settings map[string]string) ( instanceID: settings["instance_id"], region: settings["region"], outputTimeout: cast.ToDuration(settings["output_timeout"]), + minWaitDelay: cast.ToDuration(settings["min_wait_delay"]), + maxWaitDelay: cast.ToDuration(settings["max_wait_delay"]), context: context.Background(), }, nil } diff --git a/internal/client/connection_aws_ssm.go b/internal/client/connection_aws_ssm.go index 609a781..5fc5824 100644 --- a/internal/client/connection_aws_ssm.go +++ b/internal/client/connection_aws_ssm.go @@ -16,6 +16,8 @@ type AWSSSMConnection struct { instanceID string region string outputTimeout time.Duration + minWaitDelay time.Duration + maxWaitDelay time.Duration client *ssm.Client sessionId *string context context.Context @@ -39,7 +41,13 @@ func (a *AWSSSMConnection) User() string { func (a *AWSSSMConnection) Connect() error { if a.outputTimeout == 0 { - a.outputTimeout = time.Hour + a.outputTimeout = 5 * time.Hour + } + if a.minWaitDelay == 0 { + a.minWaitDelay = 5 * time.Millisecond + } + if a.maxWaitDelay == 0 { + a.maxWaitDelay = 5 * time.Second } var optFns []func(*config.LoadOptions) error @@ -97,15 +105,19 @@ func (a *AWSSSMConnection) Command(cmdLine []string) ([]byte, error) { CommandId: commandId, InstanceId: aws.String(a.instanceID), } - waiter := ssm.NewCommandExecutedWaiter(a.client) - _, err = waiter.WaitForOutput(a.context, invocationIn, a.outputTimeout) + optFns := []func(opt *ssm.CommandExecutedWaiterOptions){func(opt *ssm.CommandExecutedWaiterOptions) { + opt.MinDelay = a.minWaitDelay + opt.MaxDelay = a.maxWaitDelay + }} + waiter := ssm.NewCommandExecutedWaiter(a.client, optFns...) + invocationOut, err := waiter.WaitForOutput(a.context, invocationIn, a.outputTimeout) if err != nil { - return nil, fmt.Errorf("ssm: error executing command: %v", err) - } - - invocationOut, err := a.client.GetCommandInvocation(a.context, invocationIn) - if err != nil { - return nil, fmt.Errorf("ssm: error executing command: %v", err) + invocationOut, err = a.client.GetCommandInvocation(a.context, invocationIn) + if invocationOut != nil { + return nil, fmt.Errorf("ssm: error executing command: %v", *invocationOut.StandardErrorContent) + } else if err != nil { + return nil, fmt.Errorf("ssm: error executing command: %v", err) + } } return []byte(*invocationOut.StandardOutputContent), nil