tests/builder/amazon: Enhance the test coverage for SSM Tunnel related steps (#9213)
* test/builder/amazon: Update mocks to properly test SSM tunnel and driver code base * Update mod files
This commit is contained in:
parent
57395b8812
commit
b5639d4697
|
@ -6,39 +6,81 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/ssm"
|
"github.com/aws/aws-sdk-go/service/ssm"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
|
||||||
|
"github.com/hashicorp/packer/common/retry"
|
||||||
"github.com/mitchellh/iochan"
|
"github.com/mitchellh/iochan"
|
||||||
)
|
)
|
||||||
|
|
||||||
const sessionManagerPluginName string = "session-manager-plugin"
|
const (
|
||||||
|
sessionManagerPluginName string = "session-manager-plugin"
|
||||||
|
|
||||||
//sessionCommand is the AWS-SDK equivalent to the command you would specify to `aws ssm ...`
|
//sessionCommand is the AWS-SDK equivalent to the command you would specify to `aws ssm ...`
|
||||||
const sessionCommand string = "StartSession"
|
sessionCommand string = "StartSession"
|
||||||
|
)
|
||||||
|
|
||||||
type SSMDriver struct {
|
type SSMDriverConfig struct {
|
||||||
|
SvcClient ssmiface.SSMAPI
|
||||||
Region string
|
Region string
|
||||||
ProfileName string
|
ProfileName string
|
||||||
Session *ssm.StartSessionOutput
|
SvcEndpoint string
|
||||||
SessionParams ssm.StartSessionInput
|
}
|
||||||
SessionEndpoint string
|
|
||||||
PluginName string
|
type SSMDriver struct {
|
||||||
|
SSMDriverConfig
|
||||||
|
session *ssm.StartSessionOutput
|
||||||
|
sessionParams ssm.StartSessionInput
|
||||||
|
pluginCmdFunc func(context.Context) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSSMDriver(config SSMDriverConfig) *SSMDriver {
|
||||||
|
d := SSMDriver{SSMDriverConfig: config}
|
||||||
|
return &d
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartSession starts an interactive Systems Manager session with a remote instance via the AWS session-manager-plugin
|
// StartSession starts an interactive Systems Manager session with a remote instance via the AWS session-manager-plugin
|
||||||
func (d *SSMDriver) StartSession(ctx context.Context) error {
|
// This ssm.StartSessionOutput returned by this function can be used for terminating the session manually. If you do
|
||||||
if d.PluginName == "" {
|
// not wish to manage the session manually calling StopSession on a instance of this driver will terminate the active session
|
||||||
d.PluginName = sessionManagerPluginName
|
// created from calling StartSession.
|
||||||
|
func (d *SSMDriver) StartSession(ctx context.Context, input ssm.StartSessionInput) (*ssm.StartSessionOutput, error) {
|
||||||
|
log.Printf("Starting PortForwarding session to instance %q with following params %v", aws.StringValue(input.Target), input.Parameters)
|
||||||
|
|
||||||
|
var output *ssm.StartSessionOutput
|
||||||
|
err := retry.Config{
|
||||||
|
ShouldRetry: func(err error) bool { return isAWSErr(err, "TargetNotConnected", "") },
|
||||||
|
RetryDelay: (&retry.Backoff{InitialBackoff: 200 * time.Millisecond, MaxBackoff: 60 * time.Second, Multiplier: 2}).Linear,
|
||||||
|
}.Run(ctx, func(ctx context.Context) (err error) {
|
||||||
|
output, err = d.SvcClient.StartSessionWithContext(ctx, &input)
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error encountered in starting session for instance %q: %s", aws.StringValue(input.Target), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d.session = output
|
||||||
|
d.sessionParams = input
|
||||||
|
|
||||||
|
if d.pluginCmdFunc == nil {
|
||||||
|
d.pluginCmdFunc = d.openTunnelForSession
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.pluginCmdFunc(ctx); err != nil {
|
||||||
|
return nil, fmt.Errorf("error encountered in starting session for instance %q: %s", aws.StringValue(input.Target), err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return d.session, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *SSMDriver) openTunnelForSession(ctx context.Context) error {
|
||||||
args, err := d.Args()
|
args, err := d.Args()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("error encountered validating session details: %s", err)
|
return fmt.Errorf("error encountered validating session details: %s", err)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.CommandContext(ctx, d.PluginName, args...)
|
cmd := exec.CommandContext(ctx, sessionManagerPluginName, args...)
|
||||||
|
|
||||||
// Let's build up our logging
|
// Let's build up our logging
|
||||||
stdout, err := cmd.StdoutPipe()
|
stdout, err := cmd.StdoutPipe()
|
||||||
|
@ -78,31 +120,50 @@ func (d *SSMDriver) StartSession(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}(ctx, d.PluginName)
|
}(ctx, sessionManagerPluginName)
|
||||||
|
|
||||||
|
log.Printf("[DEBUG %s] opening session tunnel to instance %q for session %q", sessionManagerPluginName,
|
||||||
|
aws.StringValue(d.sessionParams.Target),
|
||||||
|
aws.StringValue(d.session.SessionId),
|
||||||
|
)
|
||||||
|
|
||||||
log.Printf("[DEBUG %s] opening session tunnel to instance %q for session %q", d.PluginName, aws.StringValue(d.SessionParams.Target), aws.StringValue(d.Session.SessionId))
|
|
||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
err = fmt.Errorf("error encountered when calling %s: %s\n", d.PluginName, err)
|
err = fmt.Errorf("error encountered when calling %s: %s\n", sessionManagerPluginName, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StopSession terminates an active Session Manager session
|
||||||
|
func (d *SSMDriver) StopSession() error {
|
||||||
|
|
||||||
|
if d.session == nil || d.session.SessionId == nil {
|
||||||
|
return fmt.Errorf("Unable to find a valid session to instance %q; skipping the termination step",
|
||||||
|
aws.StringValue(d.sessionParams.Target))
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := d.SvcClient.TerminateSession(&ssm.TerminateSessionInput{SessionId: d.session.SessionId})
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("Error terminating SSM Session %q. Please terminate the session manually: %s", aws.StringValue(d.session.SessionId), err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Args validates the driver inputs before returning an ordered set of arguments to pass to the driver command.
|
// Args validates the driver inputs before returning an ordered set of arguments to pass to the driver command.
|
||||||
func (d *SSMDriver) Args() ([]string, error) {
|
func (d *SSMDriver) Args() ([]string, error) {
|
||||||
if d.Session == nil {
|
if d.session == nil {
|
||||||
return nil, fmt.Errorf("an active Amazon SSM Session is required before trying to open a session tunnel")
|
return nil, fmt.Errorf("an active Amazon SSM Session is required before trying to open a session tunnel")
|
||||||
}
|
}
|
||||||
|
|
||||||
// AWS session-manager-plugin requires a valid session be passed in JSON.
|
// AWS session-manager-plugin requires a valid session be passed in JSON.
|
||||||
sessionDetails, err := json.Marshal(d.Session)
|
sessionDetails, err := json.Marshal(d.session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error encountered in reading session details %s", err)
|
return nil, fmt.Errorf("error encountered in reading session details %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AWS session-manager-plugin requires the parameters used in the session to be passed in JSON as well.
|
// AWS session-manager-plugin requires the parameters used in the session to be passed in JSON as well.
|
||||||
sessionParameters, err := json.Marshal(d.SessionParams)
|
sessionParameters, err := json.Marshal(d.sessionParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error encountered in reading session parameter details %s", err)
|
return nil, fmt.Errorf("error encountered in reading session parameter details %s", err)
|
||||||
}
|
}
|
||||||
|
@ -114,7 +175,7 @@ func (d *SSMDriver) Args() ([]string, error) {
|
||||||
sessionCommand,
|
sessionCommand,
|
||||||
d.ProfileName,
|
d.ProfileName,
|
||||||
string(sessionParameters),
|
string(sessionParameters),
|
||||||
d.SessionEndpoint,
|
d.SvcEndpoint,
|
||||||
}
|
}
|
||||||
|
|
||||||
return args, nil
|
return args, nil
|
||||||
|
|
|
@ -3,61 +3,143 @@ package common
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/service/ssm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSSMDriver_StartSession(t *testing.T) {
|
func NewSSMDriverWithMockSvc(svc *MockSSMSvc) *SSMDriver {
|
||||||
tt := []struct {
|
config := SSMDriverConfig{
|
||||||
Name string
|
SvcClient: svc,
|
||||||
PluginName string
|
Region: "east",
|
||||||
ErrorExpected bool
|
ProfileName: "default",
|
||||||
}{
|
SvcEndpoint: "example.com",
|
||||||
{"NonExistingPlugin", "boguspluginname", true},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tt {
|
|
||||||
tc := tc
|
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
|
||||||
driver := SSMDriver{
|
driver := SSMDriver{
|
||||||
Region: "region",
|
SSMDriverConfig: config,
|
||||||
Session: new(ssm.StartSessionOutput),
|
pluginCmdFunc: func(ctx context.Context) error { return nil },
|
||||||
SessionParams: ssm.StartSessionInput{},
|
|
||||||
SessionEndpoint: "endpoint",
|
|
||||||
PluginName: tc.PluginName}
|
|
||||||
|
|
||||||
ctx := context.TODO()
|
|
||||||
err := driver.StartSession(ctx)
|
|
||||||
|
|
||||||
if tc.ErrorExpected && err == nil {
|
|
||||||
t.Fatalf("Executing %q should have failed but instead no error was returned", tc.PluginName)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
return &driver
|
||||||
}
|
}
|
||||||
|
func TestSSMDriver_StartSession(t *testing.T) {
|
||||||
|
mockSvc := MockSSMSvc{}
|
||||||
|
driver := NewSSMDriverWithMockSvc(&mockSvc)
|
||||||
|
|
||||||
|
if driver.SvcClient == nil {
|
||||||
|
t.Fatalf("SvcClient for driver should not be nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
session, err := driver.StartSession(context.TODO(), MockStartSessionInput("fakeinstance"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("calling StartSession should not error but got %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !mockSvc.StartSessionCalled {
|
||||||
|
t.Fatalf("expected test to call ssm mocks but didn't")
|
||||||
|
}
|
||||||
|
|
||||||
|
if session == nil {
|
||||||
|
t.Errorf("expected session to be set after a successful call to StartSession")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(session, MockStartSessionOutput()) {
|
||||||
|
t.Errorf("expected session to be %v but got %v", MockStartSessionOutput(), session)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSSMDriver_StartSessionWithError(t *testing.T) {
|
||||||
|
mockSvc := MockSSMSvc{StartSessionError: fmt.Errorf("bogus error")}
|
||||||
|
driver := NewSSMDriverWithMockSvc(&mockSvc)
|
||||||
|
|
||||||
|
if driver.SvcClient == nil {
|
||||||
|
t.Fatalf("SvcClient for driver should not be nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
session, err := driver.StartSession(context.TODO(), MockStartSessionInput("fakeinstance"))
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("StartSession should have thrown an error but didn't")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !mockSvc.StartSessionCalled {
|
||||||
|
t.Errorf("expected test to call StartSession mock but didn't")
|
||||||
|
}
|
||||||
|
|
||||||
|
if session != nil {
|
||||||
|
t.Errorf("expected session to be nil after a bad StartSession call, but got %v", session)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSSMDriver_StopSession(t *testing.T) {
|
||||||
|
mockSvc := MockSSMSvc{}
|
||||||
|
driver := NewSSMDriverWithMockSvc(&mockSvc)
|
||||||
|
|
||||||
|
if driver.SvcClient == nil {
|
||||||
|
t.Fatalf("SvcClient for driver should not be nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calling StopSession before StartSession should fail
|
||||||
|
err := driver.StopSession()
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("calling StopSession() on a driver that has no started session should fail")
|
||||||
|
}
|
||||||
|
|
||||||
|
if driver.session != nil {
|
||||||
|
t.Errorf("expected session to be default to nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
if mockSvc.TerminateSessionCalled {
|
||||||
|
t.Fatalf("a call to TerminateSession should not occur when there is no valid SSM session")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lets try calling start session, then stopping to see what happens.
|
||||||
|
session, err := driver.StartSession(context.TODO(), MockStartSessionInput("fakeinstance"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("calling StartSession should not error but got %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !mockSvc.StartSessionCalled {
|
||||||
|
t.Fatalf("expected test to call StartSession mock but didn't")
|
||||||
|
}
|
||||||
|
|
||||||
|
if session == nil || driver.session != session {
|
||||||
|
t.Errorf("expected session to be set after a successful call to StartSession")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(session, MockStartSessionOutput()) {
|
||||||
|
t.Errorf("expected session to be %v but got %v", MockStartSessionOutput(), session)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = driver.StopSession()
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("calling StopSession() on a driver on a started session should not fail")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !mockSvc.TerminateSessionCalled {
|
||||||
|
t.Fatalf("expected test to call StopSession mock but didn't")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSSMDriver_Args(t *testing.T) {
|
func TestSSMDriver_Args(t *testing.T) {
|
||||||
tt := []struct {
|
tt := []struct {
|
||||||
Name string
|
Name string
|
||||||
Session *ssm.StartSessionOutput
|
|
||||||
ProfileName string
|
ProfileName string
|
||||||
|
SkipStartSession bool
|
||||||
ErrorExpected bool
|
ErrorExpected bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
Name: "NilSession",
|
Name: "NilSession",
|
||||||
|
SkipStartSession: true,
|
||||||
ErrorExpected: true,
|
ErrorExpected: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "NonNilSession",
|
Name: "NonNilSession",
|
||||||
Session: new(ssm.StartSessionOutput),
|
|
||||||
ErrorExpected: false,
|
ErrorExpected: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "SessionWithProfileName",
|
Name: "SessionWithProfileName",
|
||||||
Session: new(ssm.StartSessionOutput),
|
|
||||||
ProfileName: "default",
|
ProfileName: "default",
|
||||||
ErrorExpected: false,
|
ErrorExpected: false,
|
||||||
},
|
},
|
||||||
|
@ -66,25 +148,36 @@ func TestSSMDriver_Args(t *testing.T) {
|
||||||
for _, tc := range tt {
|
for _, tc := range tt {
|
||||||
tc := tc
|
tc := tc
|
||||||
t.Run(tc.Name, func(t *testing.T) {
|
t.Run(tc.Name, func(t *testing.T) {
|
||||||
driver := SSMDriver{
|
mockSvc := MockSSMSvc{}
|
||||||
Region: "region",
|
driver := NewSSMDriverWithMockSvc(&mockSvc)
|
||||||
ProfileName: tc.ProfileName,
|
driver.ProfileName = tc.ProfileName
|
||||||
Session: tc.Session,
|
|
||||||
SessionParams: ssm.StartSessionInput{},
|
if driver.SvcClient == nil {
|
||||||
SessionEndpoint: "amazon.com/sessions",
|
t.Fatalf("svcclient for driver should not be nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !tc.SkipStartSession {
|
||||||
|
_, err := driver.StartSession(context.TODO(), MockStartSessionInput("fakeinstance"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("got an error when calling StartSession %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
args, err := driver.Args()
|
args, err := driver.Args()
|
||||||
if tc.ErrorExpected && err == nil {
|
if tc.ErrorExpected && err == nil {
|
||||||
t.Fatalf("SSMDriver.Args with a %q should have failed but instead no error was returned", tc.Name)
|
t.Fatalf("Driver.Args with a %q should have failed but instead no error was returned", tc.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if tc.ErrorExpected {
|
if tc.ErrorExpected {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("got an error when it should've worked %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
// validate launch script
|
// validate launch script
|
||||||
expectedArgString := fmt.Sprintf(`{"SessionId":null,"StreamUrl":null,"TokenValue":null} %s StartSession %s {"DocumentName":null,"Parameters":null,"Target":null} %s`, driver.Region, driver.ProfileName, driver.SessionEndpoint)
|
expectedArgString := fmt.Sprintf(`{"SessionId":"packerid","StreamUrl":"http://packer.io","TokenValue":"packer-token"} east StartSession %s {"DocumentName":"AWS-StartPortForwardingSession","Parameters":{"localPortNumber":["8001"],"portNumber":["22"]},"Target":"fakeinstance"} example.com`, tc.ProfileName)
|
||||||
argString := strings.Join(args, " ")
|
argString := strings.Join(args, " ")
|
||||||
if argString != expectedArgString {
|
if argString != expectedArgString {
|
||||||
t.Errorf("Expected launch script to be %q but got %q", expectedArgString, argString)
|
t.Errorf("Expected launch script to be %q but got %q", expectedArgString, argString)
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ssm"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MockSSMSvc struct {
|
||||||
|
ssmiface.SSMAPI
|
||||||
|
StartSessionError error
|
||||||
|
TerminateSessionError error
|
||||||
|
StartSessionCalled bool
|
||||||
|
TerminateSessionCalled bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (svc *MockSSMSvc) StartSessionWithContext(ctx aws.Context, input *ssm.StartSessionInput, options ...request.Option) (*ssm.StartSessionOutput, error) {
|
||||||
|
svc.StartSessionCalled = true
|
||||||
|
return MockStartSessionOutput(), svc.StartSessionError
|
||||||
|
}
|
||||||
|
func (svc *MockSSMSvc) TerminateSession(input *ssm.TerminateSessionInput) (*ssm.TerminateSessionOutput, error) {
|
||||||
|
svc.TerminateSessionCalled = true
|
||||||
|
return new(ssm.TerminateSessionOutput), svc.TerminateSessionError
|
||||||
|
}
|
||||||
|
|
||||||
|
func MockPluginCmdFunc(ctx context.Context) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func MockStartSessionOutput() *ssm.StartSessionOutput {
|
||||||
|
id, url, token := "packerid", "http://packer.io", "packer-token"
|
||||||
|
output := ssm.StartSessionOutput{
|
||||||
|
SessionId: &id,
|
||||||
|
StreamUrl: &url,
|
||||||
|
TokenValue: &token,
|
||||||
|
}
|
||||||
|
return &output
|
||||||
|
}
|
||||||
|
|
||||||
|
func MockStartSessionInput(instance string) ssm.StartSessionInput {
|
||||||
|
params := map[string][]*string{
|
||||||
|
"portNumber": []*string{aws.String("22")},
|
||||||
|
"localPortNumber": []*string{aws.String("8001")},
|
||||||
|
}
|
||||||
|
|
||||||
|
input := ssm.StartSessionInput{
|
||||||
|
DocumentName: aws.String("AWS-StartPortForwardingSession"),
|
||||||
|
Parameters: params,
|
||||||
|
Target: aws.String(instance),
|
||||||
|
}
|
||||||
|
|
||||||
|
return input
|
||||||
|
}
|
|
@ -3,16 +3,13 @@ package common
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go/service/ssm"
|
"github.com/aws/aws-sdk-go/service/ssm"
|
||||||
"github.com/hashicorp/packer/common/net"
|
"github.com/hashicorp/packer/common/net"
|
||||||
"github.com/hashicorp/packer/common/retry"
|
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
"github.com/hashicorp/packer/packer"
|
"github.com/hashicorp/packer/packer"
|
||||||
)
|
)
|
||||||
|
@ -24,16 +21,18 @@ type StepCreateSSMTunnel struct {
|
||||||
RemotePortNumber int
|
RemotePortNumber int
|
||||||
SSMAgentEnabled bool
|
SSMAgentEnabled bool
|
||||||
instanceId string
|
instanceId string
|
||||||
session *ssm.StartSessionOutput
|
driver *SSMDriver
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run executes the Packer build step that creates a session tunnel.
|
// Run executes the Packer build step that creates a session tunnel.
|
||||||
func (s *StepCreateSSMTunnel) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *StepCreateSSMTunnel) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
|
ui := state.Get("ui").(packer.Ui)
|
||||||
|
|
||||||
if !s.SSMAgentEnabled {
|
if !s.SSMAgentEnabled {
|
||||||
return multistep.ActionContinue
|
return multistep.ActionContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
ui := state.Get("ui").(packer.Ui)
|
// Configure local port number
|
||||||
if err := s.ConfigureLocalHostPort(ctx); err != nil {
|
if err := s.ConfigureLocalHostPort(ctx); err != nil {
|
||||||
err := fmt.Errorf("error finding an available port to initiate a session tunnel: %s", err)
|
err := fmt.Errorf("error finding an available port to initiate a session tunnel: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
@ -41,6 +40,7 @@ func (s *StepCreateSSMTunnel) Run(ctx context.Context, state multistep.StateBag)
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get instance information
|
||||||
instance, ok := state.Get("instance").(*ec2.Instance)
|
instance, ok := state.Get("instance").(*ec2.Instance)
|
||||||
if !ok {
|
if !ok {
|
||||||
err := fmt.Errorf("error encountered in obtaining target instance id for session tunnel")
|
err := fmt.Errorf("error encountered in obtaining target instance id for session tunnel")
|
||||||
|
@ -50,62 +50,40 @@ func (s *StepCreateSSMTunnel) Run(ctx context.Context, state multistep.StateBag)
|
||||||
}
|
}
|
||||||
s.instanceId = aws.StringValue(instance.InstanceId)
|
s.instanceId = aws.StringValue(instance.InstanceId)
|
||||||
|
|
||||||
log.Printf("Starting PortForwarding session to instance %q on local port %d to remote port %d", s.instanceId, s.LocalPortNumber, s.RemotePortNumber)
|
if s.driver == nil {
|
||||||
input := s.BuildTunnelInputForInstance(s.instanceId)
|
|
||||||
ssmconn := ssm.New(s.AWSSession)
|
ssmconn := ssm.New(s.AWSSession)
|
||||||
err := retry.Config{
|
cfg := SSMDriverConfig{
|
||||||
ShouldRetry: func(err error) bool { return isAWSErr(err, "TargetNotConnected", "") },
|
SvcClient: ssmconn,
|
||||||
RetryDelay: (&retry.Backoff{InitialBackoff: 200 * time.Millisecond, MaxBackoff: 60 * time.Second, Multiplier: 2}).Linear,
|
|
||||||
}.Run(ctx, func(ctx context.Context) (err error) {
|
|
||||||
s.session, err = ssmconn.StartSessionWithContext(ctx, &input)
|
|
||||||
return err
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("error encountered in starting session for instance %q: %s", s.instanceId, err)
|
|
||||||
ui.Error(err.Error())
|
|
||||||
state.Put("error", err)
|
|
||||||
return multistep.ActionHalt
|
|
||||||
}
|
|
||||||
|
|
||||||
driver := SSMDriver{
|
|
||||||
Region: s.Region,
|
Region: s.Region,
|
||||||
Session: s.session,
|
SvcEndpoint: ssmconn.Endpoint,
|
||||||
SessionParams: input,
|
}
|
||||||
SessionEndpoint: ssmconn.Endpoint,
|
driver := SSMDriver{SSMDriverConfig: cfg}
|
||||||
|
s.driver = &driver
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := driver.StartSession(ctx); err != nil {
|
input := s.BuildTunnelInputForInstance(s.instanceId)
|
||||||
|
_, err := s.driver.StartSession(ctx, input)
|
||||||
|
if err != nil {
|
||||||
err = fmt.Errorf("error encountered in establishing a tunnel %s", err)
|
err = fmt.Errorf("error encountered in establishing a tunnel %s", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.Message(fmt.Sprintf("PortForwarding session %q to instance %q has been started", aws.StringValue(s.session.SessionId), s.instanceId))
|
ui.Message(fmt.Sprintf("PortForwarding session %q has been started", s.instanceId))
|
||||||
state.Put("sessionPort", s.LocalPortNumber)
|
state.Put("sessionPort", s.LocalPortNumber)
|
||||||
return multistep.ActionContinue
|
return multistep.ActionContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup terminates an active session on AWS, which in turn terminates the associated tunnel process running on the local machine.
|
// Cleanup terminates an active session on AWS, which in turn terminates the associated tunnel process running on the local machine.
|
||||||
func (s *StepCreateSSMTunnel) Cleanup(state multistep.StateBag) {
|
func (s *StepCreateSSMTunnel) Cleanup(state multistep.StateBag) {
|
||||||
|
ui := state.Get("ui").(packer.Ui)
|
||||||
if !s.SSMAgentEnabled {
|
if !s.SSMAgentEnabled {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ui := state.Get("ui").(packer.Ui)
|
if err := s.driver.StopSession(); err != nil {
|
||||||
|
ui.Error(err.Error())
|
||||||
if s.session == nil || s.session.SessionId == nil {
|
|
||||||
msg := fmt.Sprintf("Unable to find a valid session to instance %q; skipping the termination step", s.instanceId)
|
|
||||||
ui.Error(msg)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
ssmconn := ssm.New(s.AWSSession)
|
|
||||||
_, err := ssmconn.TerminateSession(&ssm.TerminateSessionInput{SessionId: s.session.SessionId})
|
|
||||||
if err != nil {
|
|
||||||
msg := fmt.Sprintf("Error terminating SSM Session %q. Please terminate the session manually: %s", aws.StringValue(s.session.SessionId), err)
|
|
||||||
ui.Error(msg)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,87 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/hashicorp/packer/packer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestStepCreateSSMTunnel_Run(t *testing.T) {
|
||||||
|
mockSvc := MockSSMSvc{}
|
||||||
|
config := SSMDriverConfig{
|
||||||
|
SvcClient: &mockSvc,
|
||||||
|
SvcEndpoint: "example.com",
|
||||||
|
}
|
||||||
|
|
||||||
|
mockDriver := NewSSMDriver(config)
|
||||||
|
mockDriver.pluginCmdFunc = MockPluginCmdFunc
|
||||||
|
|
||||||
|
state := testState()
|
||||||
|
state.Put("ui", &packer.NoopUi{})
|
||||||
|
state.Put("instance", &ec2.Instance{InstanceId: aws.String("i-something")})
|
||||||
|
|
||||||
|
step := StepCreateSSMTunnel{
|
||||||
|
driver: mockDriver,
|
||||||
|
}
|
||||||
|
|
||||||
|
step.Run(context.Background(), state)
|
||||||
|
|
||||||
|
err := state.Get("error")
|
||||||
|
if err != nil {
|
||||||
|
err = err.(error)
|
||||||
|
t.Fatalf("the call to Run failed with an error when it should've executed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if mockSvc.StartSessionCalled {
|
||||||
|
t.Errorf("StartSession should not be called when SSMAgentEnabled is false")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run when SSMAgentEnabled is true
|
||||||
|
step.SSMAgentEnabled = true
|
||||||
|
step.Run(context.Background(), state)
|
||||||
|
|
||||||
|
err = state.Get("error")
|
||||||
|
if err != nil {
|
||||||
|
err = err.(error)
|
||||||
|
t.Fatalf("the call to Run failed with an error when it should've executed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !mockSvc.StartSessionCalled {
|
||||||
|
t.Errorf("calling run with the correct inputs should call StartSession")
|
||||||
|
}
|
||||||
|
|
||||||
|
step.Cleanup(state)
|
||||||
|
if !mockSvc.TerminateSessionCalled {
|
||||||
|
t.Errorf("calling cleanup on a successful run should call TerminateSession")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStepCreateSSMTunnel_Cleanup(t *testing.T) {
|
||||||
|
mockSvc := MockSSMSvc{}
|
||||||
|
config := SSMDriverConfig{
|
||||||
|
SvcClient: &mockSvc,
|
||||||
|
SvcEndpoint: "example.com",
|
||||||
|
}
|
||||||
|
|
||||||
|
mockDriver := NewSSMDriver(config)
|
||||||
|
mockDriver.pluginCmdFunc = MockPluginCmdFunc
|
||||||
|
|
||||||
|
step := StepCreateSSMTunnel{
|
||||||
|
SSMAgentEnabled: true,
|
||||||
|
driver: mockDriver,
|
||||||
|
}
|
||||||
|
|
||||||
|
state := testState()
|
||||||
|
state.Put("ui", &packer.NoopUi{})
|
||||||
|
state.Put("instance", &ec2.Instance{InstanceId: aws.String("i-something")})
|
||||||
|
|
||||||
|
step.Cleanup(state)
|
||||||
|
|
||||||
|
if mockSvc.TerminateSessionCalled {
|
||||||
|
t.Fatalf("calling cleanup on a non started session should not call TerminateSession")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestStepCreateSSMTunnel_BuildTunnelInputForInstance(t *testing.T) {
|
func TestStepCreateSSMTunnel_BuildTunnelInputForInstance(t *testing.T) {
|
||||||
step := StepCreateSSMTunnel{
|
step := StepCreateSSMTunnel{
|
||||||
Region: "region",
|
Region: "region",
|
||||||
|
|
575
vendor/github.com/aws/aws-sdk-go/service/ssm/ssmiface/interface.go
generated
vendored
Normal file
575
vendor/github.com/aws/aws-sdk-go/service/ssm/ssmiface/interface.go
generated
vendored
Normal file
|
@ -0,0 +1,575 @@
|
||||||
|
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||||
|
|
||||||
|
// Package ssmiface provides an interface to enable mocking the Amazon Simple Systems Manager (SSM) service client
|
||||||
|
// for testing your code.
|
||||||
|
//
|
||||||
|
// It is important to note that this interface will have breaking changes
|
||||||
|
// when the service model is updated and adds new API operations, paginators,
|
||||||
|
// and waiters.
|
||||||
|
package ssmiface
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ssm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SSMAPI provides an interface to enable mocking the
|
||||||
|
// ssm.SSM service client's API operation,
|
||||||
|
// paginators, and waiters. This make unit testing your code that calls out
|
||||||
|
// to the SDK's service client's calls easier.
|
||||||
|
//
|
||||||
|
// The best way to use this interface is so the SDK's service client's calls
|
||||||
|
// can be stubbed out for unit testing your code with the SDK without needing
|
||||||
|
// to inject custom request handlers into the SDK's request pipeline.
|
||||||
|
//
|
||||||
|
// // myFunc uses an SDK service client to make a request to
|
||||||
|
// // Amazon Simple Systems Manager (SSM).
|
||||||
|
// func myFunc(svc ssmiface.SSMAPI) bool {
|
||||||
|
// // Make svc.AddTagsToResource request
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// func main() {
|
||||||
|
// sess := session.New()
|
||||||
|
// svc := ssm.New(sess)
|
||||||
|
//
|
||||||
|
// myFunc(svc)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// In your _test.go file:
|
||||||
|
//
|
||||||
|
// // Define a mock struct to be used in your unit tests of myFunc.
|
||||||
|
// type mockSSMClient struct {
|
||||||
|
// ssmiface.SSMAPI
|
||||||
|
// }
|
||||||
|
// func (m *mockSSMClient) AddTagsToResource(input *ssm.AddTagsToResourceInput) (*ssm.AddTagsToResourceOutput, error) {
|
||||||
|
// // mock response/functionality
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// func TestMyFunc(t *testing.T) {
|
||||||
|
// // Setup Test
|
||||||
|
// mockSvc := &mockSSMClient{}
|
||||||
|
//
|
||||||
|
// myfunc(mockSvc)
|
||||||
|
//
|
||||||
|
// // Verify myFunc's functionality
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// It is important to note that this interface will have breaking changes
|
||||||
|
// when the service model is updated and adds new API operations, paginators,
|
||||||
|
// and waiters. Its suggested to use the pattern above for testing, or using
|
||||||
|
// tooling to generate mocks to satisfy the interfaces.
|
||||||
|
type SSMAPI interface {
|
||||||
|
AddTagsToResource(*ssm.AddTagsToResourceInput) (*ssm.AddTagsToResourceOutput, error)
|
||||||
|
AddTagsToResourceWithContext(aws.Context, *ssm.AddTagsToResourceInput, ...request.Option) (*ssm.AddTagsToResourceOutput, error)
|
||||||
|
AddTagsToResourceRequest(*ssm.AddTagsToResourceInput) (*request.Request, *ssm.AddTagsToResourceOutput)
|
||||||
|
|
||||||
|
CancelCommand(*ssm.CancelCommandInput) (*ssm.CancelCommandOutput, error)
|
||||||
|
CancelCommandWithContext(aws.Context, *ssm.CancelCommandInput, ...request.Option) (*ssm.CancelCommandOutput, error)
|
||||||
|
CancelCommandRequest(*ssm.CancelCommandInput) (*request.Request, *ssm.CancelCommandOutput)
|
||||||
|
|
||||||
|
CancelMaintenanceWindowExecution(*ssm.CancelMaintenanceWindowExecutionInput) (*ssm.CancelMaintenanceWindowExecutionOutput, error)
|
||||||
|
CancelMaintenanceWindowExecutionWithContext(aws.Context, *ssm.CancelMaintenanceWindowExecutionInput, ...request.Option) (*ssm.CancelMaintenanceWindowExecutionOutput, error)
|
||||||
|
CancelMaintenanceWindowExecutionRequest(*ssm.CancelMaintenanceWindowExecutionInput) (*request.Request, *ssm.CancelMaintenanceWindowExecutionOutput)
|
||||||
|
|
||||||
|
CreateActivation(*ssm.CreateActivationInput) (*ssm.CreateActivationOutput, error)
|
||||||
|
CreateActivationWithContext(aws.Context, *ssm.CreateActivationInput, ...request.Option) (*ssm.CreateActivationOutput, error)
|
||||||
|
CreateActivationRequest(*ssm.CreateActivationInput) (*request.Request, *ssm.CreateActivationOutput)
|
||||||
|
|
||||||
|
CreateAssociation(*ssm.CreateAssociationInput) (*ssm.CreateAssociationOutput, error)
|
||||||
|
CreateAssociationWithContext(aws.Context, *ssm.CreateAssociationInput, ...request.Option) (*ssm.CreateAssociationOutput, error)
|
||||||
|
CreateAssociationRequest(*ssm.CreateAssociationInput) (*request.Request, *ssm.CreateAssociationOutput)
|
||||||
|
|
||||||
|
CreateAssociationBatch(*ssm.CreateAssociationBatchInput) (*ssm.CreateAssociationBatchOutput, error)
|
||||||
|
CreateAssociationBatchWithContext(aws.Context, *ssm.CreateAssociationBatchInput, ...request.Option) (*ssm.CreateAssociationBatchOutput, error)
|
||||||
|
CreateAssociationBatchRequest(*ssm.CreateAssociationBatchInput) (*request.Request, *ssm.CreateAssociationBatchOutput)
|
||||||
|
|
||||||
|
CreateDocument(*ssm.CreateDocumentInput) (*ssm.CreateDocumentOutput, error)
|
||||||
|
CreateDocumentWithContext(aws.Context, *ssm.CreateDocumentInput, ...request.Option) (*ssm.CreateDocumentOutput, error)
|
||||||
|
CreateDocumentRequest(*ssm.CreateDocumentInput) (*request.Request, *ssm.CreateDocumentOutput)
|
||||||
|
|
||||||
|
CreateMaintenanceWindow(*ssm.CreateMaintenanceWindowInput) (*ssm.CreateMaintenanceWindowOutput, error)
|
||||||
|
CreateMaintenanceWindowWithContext(aws.Context, *ssm.CreateMaintenanceWindowInput, ...request.Option) (*ssm.CreateMaintenanceWindowOutput, error)
|
||||||
|
CreateMaintenanceWindowRequest(*ssm.CreateMaintenanceWindowInput) (*request.Request, *ssm.CreateMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
CreateOpsItem(*ssm.CreateOpsItemInput) (*ssm.CreateOpsItemOutput, error)
|
||||||
|
CreateOpsItemWithContext(aws.Context, *ssm.CreateOpsItemInput, ...request.Option) (*ssm.CreateOpsItemOutput, error)
|
||||||
|
CreateOpsItemRequest(*ssm.CreateOpsItemInput) (*request.Request, *ssm.CreateOpsItemOutput)
|
||||||
|
|
||||||
|
CreatePatchBaseline(*ssm.CreatePatchBaselineInput) (*ssm.CreatePatchBaselineOutput, error)
|
||||||
|
CreatePatchBaselineWithContext(aws.Context, *ssm.CreatePatchBaselineInput, ...request.Option) (*ssm.CreatePatchBaselineOutput, error)
|
||||||
|
CreatePatchBaselineRequest(*ssm.CreatePatchBaselineInput) (*request.Request, *ssm.CreatePatchBaselineOutput)
|
||||||
|
|
||||||
|
CreateResourceDataSync(*ssm.CreateResourceDataSyncInput) (*ssm.CreateResourceDataSyncOutput, error)
|
||||||
|
CreateResourceDataSyncWithContext(aws.Context, *ssm.CreateResourceDataSyncInput, ...request.Option) (*ssm.CreateResourceDataSyncOutput, error)
|
||||||
|
CreateResourceDataSyncRequest(*ssm.CreateResourceDataSyncInput) (*request.Request, *ssm.CreateResourceDataSyncOutput)
|
||||||
|
|
||||||
|
DeleteActivation(*ssm.DeleteActivationInput) (*ssm.DeleteActivationOutput, error)
|
||||||
|
DeleteActivationWithContext(aws.Context, *ssm.DeleteActivationInput, ...request.Option) (*ssm.DeleteActivationOutput, error)
|
||||||
|
DeleteActivationRequest(*ssm.DeleteActivationInput) (*request.Request, *ssm.DeleteActivationOutput)
|
||||||
|
|
||||||
|
DeleteAssociation(*ssm.DeleteAssociationInput) (*ssm.DeleteAssociationOutput, error)
|
||||||
|
DeleteAssociationWithContext(aws.Context, *ssm.DeleteAssociationInput, ...request.Option) (*ssm.DeleteAssociationOutput, error)
|
||||||
|
DeleteAssociationRequest(*ssm.DeleteAssociationInput) (*request.Request, *ssm.DeleteAssociationOutput)
|
||||||
|
|
||||||
|
DeleteDocument(*ssm.DeleteDocumentInput) (*ssm.DeleteDocumentOutput, error)
|
||||||
|
DeleteDocumentWithContext(aws.Context, *ssm.DeleteDocumentInput, ...request.Option) (*ssm.DeleteDocumentOutput, error)
|
||||||
|
DeleteDocumentRequest(*ssm.DeleteDocumentInput) (*request.Request, *ssm.DeleteDocumentOutput)
|
||||||
|
|
||||||
|
DeleteInventory(*ssm.DeleteInventoryInput) (*ssm.DeleteInventoryOutput, error)
|
||||||
|
DeleteInventoryWithContext(aws.Context, *ssm.DeleteInventoryInput, ...request.Option) (*ssm.DeleteInventoryOutput, error)
|
||||||
|
DeleteInventoryRequest(*ssm.DeleteInventoryInput) (*request.Request, *ssm.DeleteInventoryOutput)
|
||||||
|
|
||||||
|
DeleteMaintenanceWindow(*ssm.DeleteMaintenanceWindowInput) (*ssm.DeleteMaintenanceWindowOutput, error)
|
||||||
|
DeleteMaintenanceWindowWithContext(aws.Context, *ssm.DeleteMaintenanceWindowInput, ...request.Option) (*ssm.DeleteMaintenanceWindowOutput, error)
|
||||||
|
DeleteMaintenanceWindowRequest(*ssm.DeleteMaintenanceWindowInput) (*request.Request, *ssm.DeleteMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
DeleteParameter(*ssm.DeleteParameterInput) (*ssm.DeleteParameterOutput, error)
|
||||||
|
DeleteParameterWithContext(aws.Context, *ssm.DeleteParameterInput, ...request.Option) (*ssm.DeleteParameterOutput, error)
|
||||||
|
DeleteParameterRequest(*ssm.DeleteParameterInput) (*request.Request, *ssm.DeleteParameterOutput)
|
||||||
|
|
||||||
|
DeleteParameters(*ssm.DeleteParametersInput) (*ssm.DeleteParametersOutput, error)
|
||||||
|
DeleteParametersWithContext(aws.Context, *ssm.DeleteParametersInput, ...request.Option) (*ssm.DeleteParametersOutput, error)
|
||||||
|
DeleteParametersRequest(*ssm.DeleteParametersInput) (*request.Request, *ssm.DeleteParametersOutput)
|
||||||
|
|
||||||
|
DeletePatchBaseline(*ssm.DeletePatchBaselineInput) (*ssm.DeletePatchBaselineOutput, error)
|
||||||
|
DeletePatchBaselineWithContext(aws.Context, *ssm.DeletePatchBaselineInput, ...request.Option) (*ssm.DeletePatchBaselineOutput, error)
|
||||||
|
DeletePatchBaselineRequest(*ssm.DeletePatchBaselineInput) (*request.Request, *ssm.DeletePatchBaselineOutput)
|
||||||
|
|
||||||
|
DeleteResourceDataSync(*ssm.DeleteResourceDataSyncInput) (*ssm.DeleteResourceDataSyncOutput, error)
|
||||||
|
DeleteResourceDataSyncWithContext(aws.Context, *ssm.DeleteResourceDataSyncInput, ...request.Option) (*ssm.DeleteResourceDataSyncOutput, error)
|
||||||
|
DeleteResourceDataSyncRequest(*ssm.DeleteResourceDataSyncInput) (*request.Request, *ssm.DeleteResourceDataSyncOutput)
|
||||||
|
|
||||||
|
DeregisterManagedInstance(*ssm.DeregisterManagedInstanceInput) (*ssm.DeregisterManagedInstanceOutput, error)
|
||||||
|
DeregisterManagedInstanceWithContext(aws.Context, *ssm.DeregisterManagedInstanceInput, ...request.Option) (*ssm.DeregisterManagedInstanceOutput, error)
|
||||||
|
DeregisterManagedInstanceRequest(*ssm.DeregisterManagedInstanceInput) (*request.Request, *ssm.DeregisterManagedInstanceOutput)
|
||||||
|
|
||||||
|
DeregisterPatchBaselineForPatchGroup(*ssm.DeregisterPatchBaselineForPatchGroupInput) (*ssm.DeregisterPatchBaselineForPatchGroupOutput, error)
|
||||||
|
DeregisterPatchBaselineForPatchGroupWithContext(aws.Context, *ssm.DeregisterPatchBaselineForPatchGroupInput, ...request.Option) (*ssm.DeregisterPatchBaselineForPatchGroupOutput, error)
|
||||||
|
DeregisterPatchBaselineForPatchGroupRequest(*ssm.DeregisterPatchBaselineForPatchGroupInput) (*request.Request, *ssm.DeregisterPatchBaselineForPatchGroupOutput)
|
||||||
|
|
||||||
|
DeregisterTargetFromMaintenanceWindow(*ssm.DeregisterTargetFromMaintenanceWindowInput) (*ssm.DeregisterTargetFromMaintenanceWindowOutput, error)
|
||||||
|
DeregisterTargetFromMaintenanceWindowWithContext(aws.Context, *ssm.DeregisterTargetFromMaintenanceWindowInput, ...request.Option) (*ssm.DeregisterTargetFromMaintenanceWindowOutput, error)
|
||||||
|
DeregisterTargetFromMaintenanceWindowRequest(*ssm.DeregisterTargetFromMaintenanceWindowInput) (*request.Request, *ssm.DeregisterTargetFromMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
DeregisterTaskFromMaintenanceWindow(*ssm.DeregisterTaskFromMaintenanceWindowInput) (*ssm.DeregisterTaskFromMaintenanceWindowOutput, error)
|
||||||
|
DeregisterTaskFromMaintenanceWindowWithContext(aws.Context, *ssm.DeregisterTaskFromMaintenanceWindowInput, ...request.Option) (*ssm.DeregisterTaskFromMaintenanceWindowOutput, error)
|
||||||
|
DeregisterTaskFromMaintenanceWindowRequest(*ssm.DeregisterTaskFromMaintenanceWindowInput) (*request.Request, *ssm.DeregisterTaskFromMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
DescribeActivations(*ssm.DescribeActivationsInput) (*ssm.DescribeActivationsOutput, error)
|
||||||
|
DescribeActivationsWithContext(aws.Context, *ssm.DescribeActivationsInput, ...request.Option) (*ssm.DescribeActivationsOutput, error)
|
||||||
|
DescribeActivationsRequest(*ssm.DescribeActivationsInput) (*request.Request, *ssm.DescribeActivationsOutput)
|
||||||
|
|
||||||
|
DescribeActivationsPages(*ssm.DescribeActivationsInput, func(*ssm.DescribeActivationsOutput, bool) bool) error
|
||||||
|
DescribeActivationsPagesWithContext(aws.Context, *ssm.DescribeActivationsInput, func(*ssm.DescribeActivationsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
DescribeAssociation(*ssm.DescribeAssociationInput) (*ssm.DescribeAssociationOutput, error)
|
||||||
|
DescribeAssociationWithContext(aws.Context, *ssm.DescribeAssociationInput, ...request.Option) (*ssm.DescribeAssociationOutput, error)
|
||||||
|
DescribeAssociationRequest(*ssm.DescribeAssociationInput) (*request.Request, *ssm.DescribeAssociationOutput)
|
||||||
|
|
||||||
|
DescribeAssociationExecutionTargets(*ssm.DescribeAssociationExecutionTargetsInput) (*ssm.DescribeAssociationExecutionTargetsOutput, error)
|
||||||
|
DescribeAssociationExecutionTargetsWithContext(aws.Context, *ssm.DescribeAssociationExecutionTargetsInput, ...request.Option) (*ssm.DescribeAssociationExecutionTargetsOutput, error)
|
||||||
|
DescribeAssociationExecutionTargetsRequest(*ssm.DescribeAssociationExecutionTargetsInput) (*request.Request, *ssm.DescribeAssociationExecutionTargetsOutput)
|
||||||
|
|
||||||
|
DescribeAssociationExecutions(*ssm.DescribeAssociationExecutionsInput) (*ssm.DescribeAssociationExecutionsOutput, error)
|
||||||
|
DescribeAssociationExecutionsWithContext(aws.Context, *ssm.DescribeAssociationExecutionsInput, ...request.Option) (*ssm.DescribeAssociationExecutionsOutput, error)
|
||||||
|
DescribeAssociationExecutionsRequest(*ssm.DescribeAssociationExecutionsInput) (*request.Request, *ssm.DescribeAssociationExecutionsOutput)
|
||||||
|
|
||||||
|
DescribeAutomationExecutions(*ssm.DescribeAutomationExecutionsInput) (*ssm.DescribeAutomationExecutionsOutput, error)
|
||||||
|
DescribeAutomationExecutionsWithContext(aws.Context, *ssm.DescribeAutomationExecutionsInput, ...request.Option) (*ssm.DescribeAutomationExecutionsOutput, error)
|
||||||
|
DescribeAutomationExecutionsRequest(*ssm.DescribeAutomationExecutionsInput) (*request.Request, *ssm.DescribeAutomationExecutionsOutput)
|
||||||
|
|
||||||
|
DescribeAutomationStepExecutions(*ssm.DescribeAutomationStepExecutionsInput) (*ssm.DescribeAutomationStepExecutionsOutput, error)
|
||||||
|
DescribeAutomationStepExecutionsWithContext(aws.Context, *ssm.DescribeAutomationStepExecutionsInput, ...request.Option) (*ssm.DescribeAutomationStepExecutionsOutput, error)
|
||||||
|
DescribeAutomationStepExecutionsRequest(*ssm.DescribeAutomationStepExecutionsInput) (*request.Request, *ssm.DescribeAutomationStepExecutionsOutput)
|
||||||
|
|
||||||
|
DescribeAvailablePatches(*ssm.DescribeAvailablePatchesInput) (*ssm.DescribeAvailablePatchesOutput, error)
|
||||||
|
DescribeAvailablePatchesWithContext(aws.Context, *ssm.DescribeAvailablePatchesInput, ...request.Option) (*ssm.DescribeAvailablePatchesOutput, error)
|
||||||
|
DescribeAvailablePatchesRequest(*ssm.DescribeAvailablePatchesInput) (*request.Request, *ssm.DescribeAvailablePatchesOutput)
|
||||||
|
|
||||||
|
DescribeDocument(*ssm.DescribeDocumentInput) (*ssm.DescribeDocumentOutput, error)
|
||||||
|
DescribeDocumentWithContext(aws.Context, *ssm.DescribeDocumentInput, ...request.Option) (*ssm.DescribeDocumentOutput, error)
|
||||||
|
DescribeDocumentRequest(*ssm.DescribeDocumentInput) (*request.Request, *ssm.DescribeDocumentOutput)
|
||||||
|
|
||||||
|
DescribeDocumentPermission(*ssm.DescribeDocumentPermissionInput) (*ssm.DescribeDocumentPermissionOutput, error)
|
||||||
|
DescribeDocumentPermissionWithContext(aws.Context, *ssm.DescribeDocumentPermissionInput, ...request.Option) (*ssm.DescribeDocumentPermissionOutput, error)
|
||||||
|
DescribeDocumentPermissionRequest(*ssm.DescribeDocumentPermissionInput) (*request.Request, *ssm.DescribeDocumentPermissionOutput)
|
||||||
|
|
||||||
|
DescribeEffectiveInstanceAssociations(*ssm.DescribeEffectiveInstanceAssociationsInput) (*ssm.DescribeEffectiveInstanceAssociationsOutput, error)
|
||||||
|
DescribeEffectiveInstanceAssociationsWithContext(aws.Context, *ssm.DescribeEffectiveInstanceAssociationsInput, ...request.Option) (*ssm.DescribeEffectiveInstanceAssociationsOutput, error)
|
||||||
|
DescribeEffectiveInstanceAssociationsRequest(*ssm.DescribeEffectiveInstanceAssociationsInput) (*request.Request, *ssm.DescribeEffectiveInstanceAssociationsOutput)
|
||||||
|
|
||||||
|
DescribeEffectivePatchesForPatchBaseline(*ssm.DescribeEffectivePatchesForPatchBaselineInput) (*ssm.DescribeEffectivePatchesForPatchBaselineOutput, error)
|
||||||
|
DescribeEffectivePatchesForPatchBaselineWithContext(aws.Context, *ssm.DescribeEffectivePatchesForPatchBaselineInput, ...request.Option) (*ssm.DescribeEffectivePatchesForPatchBaselineOutput, error)
|
||||||
|
DescribeEffectivePatchesForPatchBaselineRequest(*ssm.DescribeEffectivePatchesForPatchBaselineInput) (*request.Request, *ssm.DescribeEffectivePatchesForPatchBaselineOutput)
|
||||||
|
|
||||||
|
DescribeInstanceAssociationsStatus(*ssm.DescribeInstanceAssociationsStatusInput) (*ssm.DescribeInstanceAssociationsStatusOutput, error)
|
||||||
|
DescribeInstanceAssociationsStatusWithContext(aws.Context, *ssm.DescribeInstanceAssociationsStatusInput, ...request.Option) (*ssm.DescribeInstanceAssociationsStatusOutput, error)
|
||||||
|
DescribeInstanceAssociationsStatusRequest(*ssm.DescribeInstanceAssociationsStatusInput) (*request.Request, *ssm.DescribeInstanceAssociationsStatusOutput)
|
||||||
|
|
||||||
|
DescribeInstanceInformation(*ssm.DescribeInstanceInformationInput) (*ssm.DescribeInstanceInformationOutput, error)
|
||||||
|
DescribeInstanceInformationWithContext(aws.Context, *ssm.DescribeInstanceInformationInput, ...request.Option) (*ssm.DescribeInstanceInformationOutput, error)
|
||||||
|
DescribeInstanceInformationRequest(*ssm.DescribeInstanceInformationInput) (*request.Request, *ssm.DescribeInstanceInformationOutput)
|
||||||
|
|
||||||
|
DescribeInstanceInformationPages(*ssm.DescribeInstanceInformationInput, func(*ssm.DescribeInstanceInformationOutput, bool) bool) error
|
||||||
|
DescribeInstanceInformationPagesWithContext(aws.Context, *ssm.DescribeInstanceInformationInput, func(*ssm.DescribeInstanceInformationOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
DescribeInstancePatchStates(*ssm.DescribeInstancePatchStatesInput) (*ssm.DescribeInstancePatchStatesOutput, error)
|
||||||
|
DescribeInstancePatchStatesWithContext(aws.Context, *ssm.DescribeInstancePatchStatesInput, ...request.Option) (*ssm.DescribeInstancePatchStatesOutput, error)
|
||||||
|
DescribeInstancePatchStatesRequest(*ssm.DescribeInstancePatchStatesInput) (*request.Request, *ssm.DescribeInstancePatchStatesOutput)
|
||||||
|
|
||||||
|
DescribeInstancePatchStatesForPatchGroup(*ssm.DescribeInstancePatchStatesForPatchGroupInput) (*ssm.DescribeInstancePatchStatesForPatchGroupOutput, error)
|
||||||
|
DescribeInstancePatchStatesForPatchGroupWithContext(aws.Context, *ssm.DescribeInstancePatchStatesForPatchGroupInput, ...request.Option) (*ssm.DescribeInstancePatchStatesForPatchGroupOutput, error)
|
||||||
|
DescribeInstancePatchStatesForPatchGroupRequest(*ssm.DescribeInstancePatchStatesForPatchGroupInput) (*request.Request, *ssm.DescribeInstancePatchStatesForPatchGroupOutput)
|
||||||
|
|
||||||
|
DescribeInstancePatches(*ssm.DescribeInstancePatchesInput) (*ssm.DescribeInstancePatchesOutput, error)
|
||||||
|
DescribeInstancePatchesWithContext(aws.Context, *ssm.DescribeInstancePatchesInput, ...request.Option) (*ssm.DescribeInstancePatchesOutput, error)
|
||||||
|
DescribeInstancePatchesRequest(*ssm.DescribeInstancePatchesInput) (*request.Request, *ssm.DescribeInstancePatchesOutput)
|
||||||
|
|
||||||
|
DescribeInventoryDeletions(*ssm.DescribeInventoryDeletionsInput) (*ssm.DescribeInventoryDeletionsOutput, error)
|
||||||
|
DescribeInventoryDeletionsWithContext(aws.Context, *ssm.DescribeInventoryDeletionsInput, ...request.Option) (*ssm.DescribeInventoryDeletionsOutput, error)
|
||||||
|
DescribeInventoryDeletionsRequest(*ssm.DescribeInventoryDeletionsInput) (*request.Request, *ssm.DescribeInventoryDeletionsOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowExecutionTaskInvocations(*ssm.DescribeMaintenanceWindowExecutionTaskInvocationsInput) (*ssm.DescribeMaintenanceWindowExecutionTaskInvocationsOutput, error)
|
||||||
|
DescribeMaintenanceWindowExecutionTaskInvocationsWithContext(aws.Context, *ssm.DescribeMaintenanceWindowExecutionTaskInvocationsInput, ...request.Option) (*ssm.DescribeMaintenanceWindowExecutionTaskInvocationsOutput, error)
|
||||||
|
DescribeMaintenanceWindowExecutionTaskInvocationsRequest(*ssm.DescribeMaintenanceWindowExecutionTaskInvocationsInput) (*request.Request, *ssm.DescribeMaintenanceWindowExecutionTaskInvocationsOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowExecutionTasks(*ssm.DescribeMaintenanceWindowExecutionTasksInput) (*ssm.DescribeMaintenanceWindowExecutionTasksOutput, error)
|
||||||
|
DescribeMaintenanceWindowExecutionTasksWithContext(aws.Context, *ssm.DescribeMaintenanceWindowExecutionTasksInput, ...request.Option) (*ssm.DescribeMaintenanceWindowExecutionTasksOutput, error)
|
||||||
|
DescribeMaintenanceWindowExecutionTasksRequest(*ssm.DescribeMaintenanceWindowExecutionTasksInput) (*request.Request, *ssm.DescribeMaintenanceWindowExecutionTasksOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowExecutions(*ssm.DescribeMaintenanceWindowExecutionsInput) (*ssm.DescribeMaintenanceWindowExecutionsOutput, error)
|
||||||
|
DescribeMaintenanceWindowExecutionsWithContext(aws.Context, *ssm.DescribeMaintenanceWindowExecutionsInput, ...request.Option) (*ssm.DescribeMaintenanceWindowExecutionsOutput, error)
|
||||||
|
DescribeMaintenanceWindowExecutionsRequest(*ssm.DescribeMaintenanceWindowExecutionsInput) (*request.Request, *ssm.DescribeMaintenanceWindowExecutionsOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowSchedule(*ssm.DescribeMaintenanceWindowScheduleInput) (*ssm.DescribeMaintenanceWindowScheduleOutput, error)
|
||||||
|
DescribeMaintenanceWindowScheduleWithContext(aws.Context, *ssm.DescribeMaintenanceWindowScheduleInput, ...request.Option) (*ssm.DescribeMaintenanceWindowScheduleOutput, error)
|
||||||
|
DescribeMaintenanceWindowScheduleRequest(*ssm.DescribeMaintenanceWindowScheduleInput) (*request.Request, *ssm.DescribeMaintenanceWindowScheduleOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowTargets(*ssm.DescribeMaintenanceWindowTargetsInput) (*ssm.DescribeMaintenanceWindowTargetsOutput, error)
|
||||||
|
DescribeMaintenanceWindowTargetsWithContext(aws.Context, *ssm.DescribeMaintenanceWindowTargetsInput, ...request.Option) (*ssm.DescribeMaintenanceWindowTargetsOutput, error)
|
||||||
|
DescribeMaintenanceWindowTargetsRequest(*ssm.DescribeMaintenanceWindowTargetsInput) (*request.Request, *ssm.DescribeMaintenanceWindowTargetsOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowTasks(*ssm.DescribeMaintenanceWindowTasksInput) (*ssm.DescribeMaintenanceWindowTasksOutput, error)
|
||||||
|
DescribeMaintenanceWindowTasksWithContext(aws.Context, *ssm.DescribeMaintenanceWindowTasksInput, ...request.Option) (*ssm.DescribeMaintenanceWindowTasksOutput, error)
|
||||||
|
DescribeMaintenanceWindowTasksRequest(*ssm.DescribeMaintenanceWindowTasksInput) (*request.Request, *ssm.DescribeMaintenanceWindowTasksOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindows(*ssm.DescribeMaintenanceWindowsInput) (*ssm.DescribeMaintenanceWindowsOutput, error)
|
||||||
|
DescribeMaintenanceWindowsWithContext(aws.Context, *ssm.DescribeMaintenanceWindowsInput, ...request.Option) (*ssm.DescribeMaintenanceWindowsOutput, error)
|
||||||
|
DescribeMaintenanceWindowsRequest(*ssm.DescribeMaintenanceWindowsInput) (*request.Request, *ssm.DescribeMaintenanceWindowsOutput)
|
||||||
|
|
||||||
|
DescribeMaintenanceWindowsForTarget(*ssm.DescribeMaintenanceWindowsForTargetInput) (*ssm.DescribeMaintenanceWindowsForTargetOutput, error)
|
||||||
|
DescribeMaintenanceWindowsForTargetWithContext(aws.Context, *ssm.DescribeMaintenanceWindowsForTargetInput, ...request.Option) (*ssm.DescribeMaintenanceWindowsForTargetOutput, error)
|
||||||
|
DescribeMaintenanceWindowsForTargetRequest(*ssm.DescribeMaintenanceWindowsForTargetInput) (*request.Request, *ssm.DescribeMaintenanceWindowsForTargetOutput)
|
||||||
|
|
||||||
|
DescribeOpsItems(*ssm.DescribeOpsItemsInput) (*ssm.DescribeOpsItemsOutput, error)
|
||||||
|
DescribeOpsItemsWithContext(aws.Context, *ssm.DescribeOpsItemsInput, ...request.Option) (*ssm.DescribeOpsItemsOutput, error)
|
||||||
|
DescribeOpsItemsRequest(*ssm.DescribeOpsItemsInput) (*request.Request, *ssm.DescribeOpsItemsOutput)
|
||||||
|
|
||||||
|
DescribeParameters(*ssm.DescribeParametersInput) (*ssm.DescribeParametersOutput, error)
|
||||||
|
DescribeParametersWithContext(aws.Context, *ssm.DescribeParametersInput, ...request.Option) (*ssm.DescribeParametersOutput, error)
|
||||||
|
DescribeParametersRequest(*ssm.DescribeParametersInput) (*request.Request, *ssm.DescribeParametersOutput)
|
||||||
|
|
||||||
|
DescribeParametersPages(*ssm.DescribeParametersInput, func(*ssm.DescribeParametersOutput, bool) bool) error
|
||||||
|
DescribeParametersPagesWithContext(aws.Context, *ssm.DescribeParametersInput, func(*ssm.DescribeParametersOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
DescribePatchBaselines(*ssm.DescribePatchBaselinesInput) (*ssm.DescribePatchBaselinesOutput, error)
|
||||||
|
DescribePatchBaselinesWithContext(aws.Context, *ssm.DescribePatchBaselinesInput, ...request.Option) (*ssm.DescribePatchBaselinesOutput, error)
|
||||||
|
DescribePatchBaselinesRequest(*ssm.DescribePatchBaselinesInput) (*request.Request, *ssm.DescribePatchBaselinesOutput)
|
||||||
|
|
||||||
|
DescribePatchGroupState(*ssm.DescribePatchGroupStateInput) (*ssm.DescribePatchGroupStateOutput, error)
|
||||||
|
DescribePatchGroupStateWithContext(aws.Context, *ssm.DescribePatchGroupStateInput, ...request.Option) (*ssm.DescribePatchGroupStateOutput, error)
|
||||||
|
DescribePatchGroupStateRequest(*ssm.DescribePatchGroupStateInput) (*request.Request, *ssm.DescribePatchGroupStateOutput)
|
||||||
|
|
||||||
|
DescribePatchGroups(*ssm.DescribePatchGroupsInput) (*ssm.DescribePatchGroupsOutput, error)
|
||||||
|
DescribePatchGroupsWithContext(aws.Context, *ssm.DescribePatchGroupsInput, ...request.Option) (*ssm.DescribePatchGroupsOutput, error)
|
||||||
|
DescribePatchGroupsRequest(*ssm.DescribePatchGroupsInput) (*request.Request, *ssm.DescribePatchGroupsOutput)
|
||||||
|
|
||||||
|
DescribePatchProperties(*ssm.DescribePatchPropertiesInput) (*ssm.DescribePatchPropertiesOutput, error)
|
||||||
|
DescribePatchPropertiesWithContext(aws.Context, *ssm.DescribePatchPropertiesInput, ...request.Option) (*ssm.DescribePatchPropertiesOutput, error)
|
||||||
|
DescribePatchPropertiesRequest(*ssm.DescribePatchPropertiesInput) (*request.Request, *ssm.DescribePatchPropertiesOutput)
|
||||||
|
|
||||||
|
DescribeSessions(*ssm.DescribeSessionsInput) (*ssm.DescribeSessionsOutput, error)
|
||||||
|
DescribeSessionsWithContext(aws.Context, *ssm.DescribeSessionsInput, ...request.Option) (*ssm.DescribeSessionsOutput, error)
|
||||||
|
DescribeSessionsRequest(*ssm.DescribeSessionsInput) (*request.Request, *ssm.DescribeSessionsOutput)
|
||||||
|
|
||||||
|
GetAutomationExecution(*ssm.GetAutomationExecutionInput) (*ssm.GetAutomationExecutionOutput, error)
|
||||||
|
GetAutomationExecutionWithContext(aws.Context, *ssm.GetAutomationExecutionInput, ...request.Option) (*ssm.GetAutomationExecutionOutput, error)
|
||||||
|
GetAutomationExecutionRequest(*ssm.GetAutomationExecutionInput) (*request.Request, *ssm.GetAutomationExecutionOutput)
|
||||||
|
|
||||||
|
GetCommandInvocation(*ssm.GetCommandInvocationInput) (*ssm.GetCommandInvocationOutput, error)
|
||||||
|
GetCommandInvocationWithContext(aws.Context, *ssm.GetCommandInvocationInput, ...request.Option) (*ssm.GetCommandInvocationOutput, error)
|
||||||
|
GetCommandInvocationRequest(*ssm.GetCommandInvocationInput) (*request.Request, *ssm.GetCommandInvocationOutput)
|
||||||
|
|
||||||
|
GetConnectionStatus(*ssm.GetConnectionStatusInput) (*ssm.GetConnectionStatusOutput, error)
|
||||||
|
GetConnectionStatusWithContext(aws.Context, *ssm.GetConnectionStatusInput, ...request.Option) (*ssm.GetConnectionStatusOutput, error)
|
||||||
|
GetConnectionStatusRequest(*ssm.GetConnectionStatusInput) (*request.Request, *ssm.GetConnectionStatusOutput)
|
||||||
|
|
||||||
|
GetDefaultPatchBaseline(*ssm.GetDefaultPatchBaselineInput) (*ssm.GetDefaultPatchBaselineOutput, error)
|
||||||
|
GetDefaultPatchBaselineWithContext(aws.Context, *ssm.GetDefaultPatchBaselineInput, ...request.Option) (*ssm.GetDefaultPatchBaselineOutput, error)
|
||||||
|
GetDefaultPatchBaselineRequest(*ssm.GetDefaultPatchBaselineInput) (*request.Request, *ssm.GetDefaultPatchBaselineOutput)
|
||||||
|
|
||||||
|
GetDeployablePatchSnapshotForInstance(*ssm.GetDeployablePatchSnapshotForInstanceInput) (*ssm.GetDeployablePatchSnapshotForInstanceOutput, error)
|
||||||
|
GetDeployablePatchSnapshotForInstanceWithContext(aws.Context, *ssm.GetDeployablePatchSnapshotForInstanceInput, ...request.Option) (*ssm.GetDeployablePatchSnapshotForInstanceOutput, error)
|
||||||
|
GetDeployablePatchSnapshotForInstanceRequest(*ssm.GetDeployablePatchSnapshotForInstanceInput) (*request.Request, *ssm.GetDeployablePatchSnapshotForInstanceOutput)
|
||||||
|
|
||||||
|
GetDocument(*ssm.GetDocumentInput) (*ssm.GetDocumentOutput, error)
|
||||||
|
GetDocumentWithContext(aws.Context, *ssm.GetDocumentInput, ...request.Option) (*ssm.GetDocumentOutput, error)
|
||||||
|
GetDocumentRequest(*ssm.GetDocumentInput) (*request.Request, *ssm.GetDocumentOutput)
|
||||||
|
|
||||||
|
GetInventory(*ssm.GetInventoryInput) (*ssm.GetInventoryOutput, error)
|
||||||
|
GetInventoryWithContext(aws.Context, *ssm.GetInventoryInput, ...request.Option) (*ssm.GetInventoryOutput, error)
|
||||||
|
GetInventoryRequest(*ssm.GetInventoryInput) (*request.Request, *ssm.GetInventoryOutput)
|
||||||
|
|
||||||
|
GetInventorySchema(*ssm.GetInventorySchemaInput) (*ssm.GetInventorySchemaOutput, error)
|
||||||
|
GetInventorySchemaWithContext(aws.Context, *ssm.GetInventorySchemaInput, ...request.Option) (*ssm.GetInventorySchemaOutput, error)
|
||||||
|
GetInventorySchemaRequest(*ssm.GetInventorySchemaInput) (*request.Request, *ssm.GetInventorySchemaOutput)
|
||||||
|
|
||||||
|
GetMaintenanceWindow(*ssm.GetMaintenanceWindowInput) (*ssm.GetMaintenanceWindowOutput, error)
|
||||||
|
GetMaintenanceWindowWithContext(aws.Context, *ssm.GetMaintenanceWindowInput, ...request.Option) (*ssm.GetMaintenanceWindowOutput, error)
|
||||||
|
GetMaintenanceWindowRequest(*ssm.GetMaintenanceWindowInput) (*request.Request, *ssm.GetMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
GetMaintenanceWindowExecution(*ssm.GetMaintenanceWindowExecutionInput) (*ssm.GetMaintenanceWindowExecutionOutput, error)
|
||||||
|
GetMaintenanceWindowExecutionWithContext(aws.Context, *ssm.GetMaintenanceWindowExecutionInput, ...request.Option) (*ssm.GetMaintenanceWindowExecutionOutput, error)
|
||||||
|
GetMaintenanceWindowExecutionRequest(*ssm.GetMaintenanceWindowExecutionInput) (*request.Request, *ssm.GetMaintenanceWindowExecutionOutput)
|
||||||
|
|
||||||
|
GetMaintenanceWindowExecutionTask(*ssm.GetMaintenanceWindowExecutionTaskInput) (*ssm.GetMaintenanceWindowExecutionTaskOutput, error)
|
||||||
|
GetMaintenanceWindowExecutionTaskWithContext(aws.Context, *ssm.GetMaintenanceWindowExecutionTaskInput, ...request.Option) (*ssm.GetMaintenanceWindowExecutionTaskOutput, error)
|
||||||
|
GetMaintenanceWindowExecutionTaskRequest(*ssm.GetMaintenanceWindowExecutionTaskInput) (*request.Request, *ssm.GetMaintenanceWindowExecutionTaskOutput)
|
||||||
|
|
||||||
|
GetMaintenanceWindowExecutionTaskInvocation(*ssm.GetMaintenanceWindowExecutionTaskInvocationInput) (*ssm.GetMaintenanceWindowExecutionTaskInvocationOutput, error)
|
||||||
|
GetMaintenanceWindowExecutionTaskInvocationWithContext(aws.Context, *ssm.GetMaintenanceWindowExecutionTaskInvocationInput, ...request.Option) (*ssm.GetMaintenanceWindowExecutionTaskInvocationOutput, error)
|
||||||
|
GetMaintenanceWindowExecutionTaskInvocationRequest(*ssm.GetMaintenanceWindowExecutionTaskInvocationInput) (*request.Request, *ssm.GetMaintenanceWindowExecutionTaskInvocationOutput)
|
||||||
|
|
||||||
|
GetMaintenanceWindowTask(*ssm.GetMaintenanceWindowTaskInput) (*ssm.GetMaintenanceWindowTaskOutput, error)
|
||||||
|
GetMaintenanceWindowTaskWithContext(aws.Context, *ssm.GetMaintenanceWindowTaskInput, ...request.Option) (*ssm.GetMaintenanceWindowTaskOutput, error)
|
||||||
|
GetMaintenanceWindowTaskRequest(*ssm.GetMaintenanceWindowTaskInput) (*request.Request, *ssm.GetMaintenanceWindowTaskOutput)
|
||||||
|
|
||||||
|
GetOpsItem(*ssm.GetOpsItemInput) (*ssm.GetOpsItemOutput, error)
|
||||||
|
GetOpsItemWithContext(aws.Context, *ssm.GetOpsItemInput, ...request.Option) (*ssm.GetOpsItemOutput, error)
|
||||||
|
GetOpsItemRequest(*ssm.GetOpsItemInput) (*request.Request, *ssm.GetOpsItemOutput)
|
||||||
|
|
||||||
|
GetOpsSummary(*ssm.GetOpsSummaryInput) (*ssm.GetOpsSummaryOutput, error)
|
||||||
|
GetOpsSummaryWithContext(aws.Context, *ssm.GetOpsSummaryInput, ...request.Option) (*ssm.GetOpsSummaryOutput, error)
|
||||||
|
GetOpsSummaryRequest(*ssm.GetOpsSummaryInput) (*request.Request, *ssm.GetOpsSummaryOutput)
|
||||||
|
|
||||||
|
GetParameter(*ssm.GetParameterInput) (*ssm.GetParameterOutput, error)
|
||||||
|
GetParameterWithContext(aws.Context, *ssm.GetParameterInput, ...request.Option) (*ssm.GetParameterOutput, error)
|
||||||
|
GetParameterRequest(*ssm.GetParameterInput) (*request.Request, *ssm.GetParameterOutput)
|
||||||
|
|
||||||
|
GetParameterHistory(*ssm.GetParameterHistoryInput) (*ssm.GetParameterHistoryOutput, error)
|
||||||
|
GetParameterHistoryWithContext(aws.Context, *ssm.GetParameterHistoryInput, ...request.Option) (*ssm.GetParameterHistoryOutput, error)
|
||||||
|
GetParameterHistoryRequest(*ssm.GetParameterHistoryInput) (*request.Request, *ssm.GetParameterHistoryOutput)
|
||||||
|
|
||||||
|
GetParameterHistoryPages(*ssm.GetParameterHistoryInput, func(*ssm.GetParameterHistoryOutput, bool) bool) error
|
||||||
|
GetParameterHistoryPagesWithContext(aws.Context, *ssm.GetParameterHistoryInput, func(*ssm.GetParameterHistoryOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
GetParameters(*ssm.GetParametersInput) (*ssm.GetParametersOutput, error)
|
||||||
|
GetParametersWithContext(aws.Context, *ssm.GetParametersInput, ...request.Option) (*ssm.GetParametersOutput, error)
|
||||||
|
GetParametersRequest(*ssm.GetParametersInput) (*request.Request, *ssm.GetParametersOutput)
|
||||||
|
|
||||||
|
GetParametersByPath(*ssm.GetParametersByPathInput) (*ssm.GetParametersByPathOutput, error)
|
||||||
|
GetParametersByPathWithContext(aws.Context, *ssm.GetParametersByPathInput, ...request.Option) (*ssm.GetParametersByPathOutput, error)
|
||||||
|
GetParametersByPathRequest(*ssm.GetParametersByPathInput) (*request.Request, *ssm.GetParametersByPathOutput)
|
||||||
|
|
||||||
|
GetParametersByPathPages(*ssm.GetParametersByPathInput, func(*ssm.GetParametersByPathOutput, bool) bool) error
|
||||||
|
GetParametersByPathPagesWithContext(aws.Context, *ssm.GetParametersByPathInput, func(*ssm.GetParametersByPathOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
GetPatchBaseline(*ssm.GetPatchBaselineInput) (*ssm.GetPatchBaselineOutput, error)
|
||||||
|
GetPatchBaselineWithContext(aws.Context, *ssm.GetPatchBaselineInput, ...request.Option) (*ssm.GetPatchBaselineOutput, error)
|
||||||
|
GetPatchBaselineRequest(*ssm.GetPatchBaselineInput) (*request.Request, *ssm.GetPatchBaselineOutput)
|
||||||
|
|
||||||
|
GetPatchBaselineForPatchGroup(*ssm.GetPatchBaselineForPatchGroupInput) (*ssm.GetPatchBaselineForPatchGroupOutput, error)
|
||||||
|
GetPatchBaselineForPatchGroupWithContext(aws.Context, *ssm.GetPatchBaselineForPatchGroupInput, ...request.Option) (*ssm.GetPatchBaselineForPatchGroupOutput, error)
|
||||||
|
GetPatchBaselineForPatchGroupRequest(*ssm.GetPatchBaselineForPatchGroupInput) (*request.Request, *ssm.GetPatchBaselineForPatchGroupOutput)
|
||||||
|
|
||||||
|
GetServiceSetting(*ssm.GetServiceSettingInput) (*ssm.GetServiceSettingOutput, error)
|
||||||
|
GetServiceSettingWithContext(aws.Context, *ssm.GetServiceSettingInput, ...request.Option) (*ssm.GetServiceSettingOutput, error)
|
||||||
|
GetServiceSettingRequest(*ssm.GetServiceSettingInput) (*request.Request, *ssm.GetServiceSettingOutput)
|
||||||
|
|
||||||
|
LabelParameterVersion(*ssm.LabelParameterVersionInput) (*ssm.LabelParameterVersionOutput, error)
|
||||||
|
LabelParameterVersionWithContext(aws.Context, *ssm.LabelParameterVersionInput, ...request.Option) (*ssm.LabelParameterVersionOutput, error)
|
||||||
|
LabelParameterVersionRequest(*ssm.LabelParameterVersionInput) (*request.Request, *ssm.LabelParameterVersionOutput)
|
||||||
|
|
||||||
|
ListAssociationVersions(*ssm.ListAssociationVersionsInput) (*ssm.ListAssociationVersionsOutput, error)
|
||||||
|
ListAssociationVersionsWithContext(aws.Context, *ssm.ListAssociationVersionsInput, ...request.Option) (*ssm.ListAssociationVersionsOutput, error)
|
||||||
|
ListAssociationVersionsRequest(*ssm.ListAssociationVersionsInput) (*request.Request, *ssm.ListAssociationVersionsOutput)
|
||||||
|
|
||||||
|
ListAssociations(*ssm.ListAssociationsInput) (*ssm.ListAssociationsOutput, error)
|
||||||
|
ListAssociationsWithContext(aws.Context, *ssm.ListAssociationsInput, ...request.Option) (*ssm.ListAssociationsOutput, error)
|
||||||
|
ListAssociationsRequest(*ssm.ListAssociationsInput) (*request.Request, *ssm.ListAssociationsOutput)
|
||||||
|
|
||||||
|
ListAssociationsPages(*ssm.ListAssociationsInput, func(*ssm.ListAssociationsOutput, bool) bool) error
|
||||||
|
ListAssociationsPagesWithContext(aws.Context, *ssm.ListAssociationsInput, func(*ssm.ListAssociationsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
ListCommandInvocations(*ssm.ListCommandInvocationsInput) (*ssm.ListCommandInvocationsOutput, error)
|
||||||
|
ListCommandInvocationsWithContext(aws.Context, *ssm.ListCommandInvocationsInput, ...request.Option) (*ssm.ListCommandInvocationsOutput, error)
|
||||||
|
ListCommandInvocationsRequest(*ssm.ListCommandInvocationsInput) (*request.Request, *ssm.ListCommandInvocationsOutput)
|
||||||
|
|
||||||
|
ListCommandInvocationsPages(*ssm.ListCommandInvocationsInput, func(*ssm.ListCommandInvocationsOutput, bool) bool) error
|
||||||
|
ListCommandInvocationsPagesWithContext(aws.Context, *ssm.ListCommandInvocationsInput, func(*ssm.ListCommandInvocationsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
ListCommands(*ssm.ListCommandsInput) (*ssm.ListCommandsOutput, error)
|
||||||
|
ListCommandsWithContext(aws.Context, *ssm.ListCommandsInput, ...request.Option) (*ssm.ListCommandsOutput, error)
|
||||||
|
ListCommandsRequest(*ssm.ListCommandsInput) (*request.Request, *ssm.ListCommandsOutput)
|
||||||
|
|
||||||
|
ListCommandsPages(*ssm.ListCommandsInput, func(*ssm.ListCommandsOutput, bool) bool) error
|
||||||
|
ListCommandsPagesWithContext(aws.Context, *ssm.ListCommandsInput, func(*ssm.ListCommandsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
ListComplianceItems(*ssm.ListComplianceItemsInput) (*ssm.ListComplianceItemsOutput, error)
|
||||||
|
ListComplianceItemsWithContext(aws.Context, *ssm.ListComplianceItemsInput, ...request.Option) (*ssm.ListComplianceItemsOutput, error)
|
||||||
|
ListComplianceItemsRequest(*ssm.ListComplianceItemsInput) (*request.Request, *ssm.ListComplianceItemsOutput)
|
||||||
|
|
||||||
|
ListComplianceSummaries(*ssm.ListComplianceSummariesInput) (*ssm.ListComplianceSummariesOutput, error)
|
||||||
|
ListComplianceSummariesWithContext(aws.Context, *ssm.ListComplianceSummariesInput, ...request.Option) (*ssm.ListComplianceSummariesOutput, error)
|
||||||
|
ListComplianceSummariesRequest(*ssm.ListComplianceSummariesInput) (*request.Request, *ssm.ListComplianceSummariesOutput)
|
||||||
|
|
||||||
|
ListDocumentVersions(*ssm.ListDocumentVersionsInput) (*ssm.ListDocumentVersionsOutput, error)
|
||||||
|
ListDocumentVersionsWithContext(aws.Context, *ssm.ListDocumentVersionsInput, ...request.Option) (*ssm.ListDocumentVersionsOutput, error)
|
||||||
|
ListDocumentVersionsRequest(*ssm.ListDocumentVersionsInput) (*request.Request, *ssm.ListDocumentVersionsOutput)
|
||||||
|
|
||||||
|
ListDocuments(*ssm.ListDocumentsInput) (*ssm.ListDocumentsOutput, error)
|
||||||
|
ListDocumentsWithContext(aws.Context, *ssm.ListDocumentsInput, ...request.Option) (*ssm.ListDocumentsOutput, error)
|
||||||
|
ListDocumentsRequest(*ssm.ListDocumentsInput) (*request.Request, *ssm.ListDocumentsOutput)
|
||||||
|
|
||||||
|
ListDocumentsPages(*ssm.ListDocumentsInput, func(*ssm.ListDocumentsOutput, bool) bool) error
|
||||||
|
ListDocumentsPagesWithContext(aws.Context, *ssm.ListDocumentsInput, func(*ssm.ListDocumentsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
ListInventoryEntries(*ssm.ListInventoryEntriesInput) (*ssm.ListInventoryEntriesOutput, error)
|
||||||
|
ListInventoryEntriesWithContext(aws.Context, *ssm.ListInventoryEntriesInput, ...request.Option) (*ssm.ListInventoryEntriesOutput, error)
|
||||||
|
ListInventoryEntriesRequest(*ssm.ListInventoryEntriesInput) (*request.Request, *ssm.ListInventoryEntriesOutput)
|
||||||
|
|
||||||
|
ListResourceComplianceSummaries(*ssm.ListResourceComplianceSummariesInput) (*ssm.ListResourceComplianceSummariesOutput, error)
|
||||||
|
ListResourceComplianceSummariesWithContext(aws.Context, *ssm.ListResourceComplianceSummariesInput, ...request.Option) (*ssm.ListResourceComplianceSummariesOutput, error)
|
||||||
|
ListResourceComplianceSummariesRequest(*ssm.ListResourceComplianceSummariesInput) (*request.Request, *ssm.ListResourceComplianceSummariesOutput)
|
||||||
|
|
||||||
|
ListResourceDataSync(*ssm.ListResourceDataSyncInput) (*ssm.ListResourceDataSyncOutput, error)
|
||||||
|
ListResourceDataSyncWithContext(aws.Context, *ssm.ListResourceDataSyncInput, ...request.Option) (*ssm.ListResourceDataSyncOutput, error)
|
||||||
|
ListResourceDataSyncRequest(*ssm.ListResourceDataSyncInput) (*request.Request, *ssm.ListResourceDataSyncOutput)
|
||||||
|
|
||||||
|
ListTagsForResource(*ssm.ListTagsForResourceInput) (*ssm.ListTagsForResourceOutput, error)
|
||||||
|
ListTagsForResourceWithContext(aws.Context, *ssm.ListTagsForResourceInput, ...request.Option) (*ssm.ListTagsForResourceOutput, error)
|
||||||
|
ListTagsForResourceRequest(*ssm.ListTagsForResourceInput) (*request.Request, *ssm.ListTagsForResourceOutput)
|
||||||
|
|
||||||
|
ModifyDocumentPermission(*ssm.ModifyDocumentPermissionInput) (*ssm.ModifyDocumentPermissionOutput, error)
|
||||||
|
ModifyDocumentPermissionWithContext(aws.Context, *ssm.ModifyDocumentPermissionInput, ...request.Option) (*ssm.ModifyDocumentPermissionOutput, error)
|
||||||
|
ModifyDocumentPermissionRequest(*ssm.ModifyDocumentPermissionInput) (*request.Request, *ssm.ModifyDocumentPermissionOutput)
|
||||||
|
|
||||||
|
PutComplianceItems(*ssm.PutComplianceItemsInput) (*ssm.PutComplianceItemsOutput, error)
|
||||||
|
PutComplianceItemsWithContext(aws.Context, *ssm.PutComplianceItemsInput, ...request.Option) (*ssm.PutComplianceItemsOutput, error)
|
||||||
|
PutComplianceItemsRequest(*ssm.PutComplianceItemsInput) (*request.Request, *ssm.PutComplianceItemsOutput)
|
||||||
|
|
||||||
|
PutInventory(*ssm.PutInventoryInput) (*ssm.PutInventoryOutput, error)
|
||||||
|
PutInventoryWithContext(aws.Context, *ssm.PutInventoryInput, ...request.Option) (*ssm.PutInventoryOutput, error)
|
||||||
|
PutInventoryRequest(*ssm.PutInventoryInput) (*request.Request, *ssm.PutInventoryOutput)
|
||||||
|
|
||||||
|
PutParameter(*ssm.PutParameterInput) (*ssm.PutParameterOutput, error)
|
||||||
|
PutParameterWithContext(aws.Context, *ssm.PutParameterInput, ...request.Option) (*ssm.PutParameterOutput, error)
|
||||||
|
PutParameterRequest(*ssm.PutParameterInput) (*request.Request, *ssm.PutParameterOutput)
|
||||||
|
|
||||||
|
RegisterDefaultPatchBaseline(*ssm.RegisterDefaultPatchBaselineInput) (*ssm.RegisterDefaultPatchBaselineOutput, error)
|
||||||
|
RegisterDefaultPatchBaselineWithContext(aws.Context, *ssm.RegisterDefaultPatchBaselineInput, ...request.Option) (*ssm.RegisterDefaultPatchBaselineOutput, error)
|
||||||
|
RegisterDefaultPatchBaselineRequest(*ssm.RegisterDefaultPatchBaselineInput) (*request.Request, *ssm.RegisterDefaultPatchBaselineOutput)
|
||||||
|
|
||||||
|
RegisterPatchBaselineForPatchGroup(*ssm.RegisterPatchBaselineForPatchGroupInput) (*ssm.RegisterPatchBaselineForPatchGroupOutput, error)
|
||||||
|
RegisterPatchBaselineForPatchGroupWithContext(aws.Context, *ssm.RegisterPatchBaselineForPatchGroupInput, ...request.Option) (*ssm.RegisterPatchBaselineForPatchGroupOutput, error)
|
||||||
|
RegisterPatchBaselineForPatchGroupRequest(*ssm.RegisterPatchBaselineForPatchGroupInput) (*request.Request, *ssm.RegisterPatchBaselineForPatchGroupOutput)
|
||||||
|
|
||||||
|
RegisterTargetWithMaintenanceWindow(*ssm.RegisterTargetWithMaintenanceWindowInput) (*ssm.RegisterTargetWithMaintenanceWindowOutput, error)
|
||||||
|
RegisterTargetWithMaintenanceWindowWithContext(aws.Context, *ssm.RegisterTargetWithMaintenanceWindowInput, ...request.Option) (*ssm.RegisterTargetWithMaintenanceWindowOutput, error)
|
||||||
|
RegisterTargetWithMaintenanceWindowRequest(*ssm.RegisterTargetWithMaintenanceWindowInput) (*request.Request, *ssm.RegisterTargetWithMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
RegisterTaskWithMaintenanceWindow(*ssm.RegisterTaskWithMaintenanceWindowInput) (*ssm.RegisterTaskWithMaintenanceWindowOutput, error)
|
||||||
|
RegisterTaskWithMaintenanceWindowWithContext(aws.Context, *ssm.RegisterTaskWithMaintenanceWindowInput, ...request.Option) (*ssm.RegisterTaskWithMaintenanceWindowOutput, error)
|
||||||
|
RegisterTaskWithMaintenanceWindowRequest(*ssm.RegisterTaskWithMaintenanceWindowInput) (*request.Request, *ssm.RegisterTaskWithMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
RemoveTagsFromResource(*ssm.RemoveTagsFromResourceInput) (*ssm.RemoveTagsFromResourceOutput, error)
|
||||||
|
RemoveTagsFromResourceWithContext(aws.Context, *ssm.RemoveTagsFromResourceInput, ...request.Option) (*ssm.RemoveTagsFromResourceOutput, error)
|
||||||
|
RemoveTagsFromResourceRequest(*ssm.RemoveTagsFromResourceInput) (*request.Request, *ssm.RemoveTagsFromResourceOutput)
|
||||||
|
|
||||||
|
ResetServiceSetting(*ssm.ResetServiceSettingInput) (*ssm.ResetServiceSettingOutput, error)
|
||||||
|
ResetServiceSettingWithContext(aws.Context, *ssm.ResetServiceSettingInput, ...request.Option) (*ssm.ResetServiceSettingOutput, error)
|
||||||
|
ResetServiceSettingRequest(*ssm.ResetServiceSettingInput) (*request.Request, *ssm.ResetServiceSettingOutput)
|
||||||
|
|
||||||
|
ResumeSession(*ssm.ResumeSessionInput) (*ssm.ResumeSessionOutput, error)
|
||||||
|
ResumeSessionWithContext(aws.Context, *ssm.ResumeSessionInput, ...request.Option) (*ssm.ResumeSessionOutput, error)
|
||||||
|
ResumeSessionRequest(*ssm.ResumeSessionInput) (*request.Request, *ssm.ResumeSessionOutput)
|
||||||
|
|
||||||
|
SendAutomationSignal(*ssm.SendAutomationSignalInput) (*ssm.SendAutomationSignalOutput, error)
|
||||||
|
SendAutomationSignalWithContext(aws.Context, *ssm.SendAutomationSignalInput, ...request.Option) (*ssm.SendAutomationSignalOutput, error)
|
||||||
|
SendAutomationSignalRequest(*ssm.SendAutomationSignalInput) (*request.Request, *ssm.SendAutomationSignalOutput)
|
||||||
|
|
||||||
|
SendCommand(*ssm.SendCommandInput) (*ssm.SendCommandOutput, error)
|
||||||
|
SendCommandWithContext(aws.Context, *ssm.SendCommandInput, ...request.Option) (*ssm.SendCommandOutput, error)
|
||||||
|
SendCommandRequest(*ssm.SendCommandInput) (*request.Request, *ssm.SendCommandOutput)
|
||||||
|
|
||||||
|
StartAssociationsOnce(*ssm.StartAssociationsOnceInput) (*ssm.StartAssociationsOnceOutput, error)
|
||||||
|
StartAssociationsOnceWithContext(aws.Context, *ssm.StartAssociationsOnceInput, ...request.Option) (*ssm.StartAssociationsOnceOutput, error)
|
||||||
|
StartAssociationsOnceRequest(*ssm.StartAssociationsOnceInput) (*request.Request, *ssm.StartAssociationsOnceOutput)
|
||||||
|
|
||||||
|
StartAutomationExecution(*ssm.StartAutomationExecutionInput) (*ssm.StartAutomationExecutionOutput, error)
|
||||||
|
StartAutomationExecutionWithContext(aws.Context, *ssm.StartAutomationExecutionInput, ...request.Option) (*ssm.StartAutomationExecutionOutput, error)
|
||||||
|
StartAutomationExecutionRequest(*ssm.StartAutomationExecutionInput) (*request.Request, *ssm.StartAutomationExecutionOutput)
|
||||||
|
|
||||||
|
StartSession(*ssm.StartSessionInput) (*ssm.StartSessionOutput, error)
|
||||||
|
StartSessionWithContext(aws.Context, *ssm.StartSessionInput, ...request.Option) (*ssm.StartSessionOutput, error)
|
||||||
|
StartSessionRequest(*ssm.StartSessionInput) (*request.Request, *ssm.StartSessionOutput)
|
||||||
|
|
||||||
|
StopAutomationExecution(*ssm.StopAutomationExecutionInput) (*ssm.StopAutomationExecutionOutput, error)
|
||||||
|
StopAutomationExecutionWithContext(aws.Context, *ssm.StopAutomationExecutionInput, ...request.Option) (*ssm.StopAutomationExecutionOutput, error)
|
||||||
|
StopAutomationExecutionRequest(*ssm.StopAutomationExecutionInput) (*request.Request, *ssm.StopAutomationExecutionOutput)
|
||||||
|
|
||||||
|
TerminateSession(*ssm.TerminateSessionInput) (*ssm.TerminateSessionOutput, error)
|
||||||
|
TerminateSessionWithContext(aws.Context, *ssm.TerminateSessionInput, ...request.Option) (*ssm.TerminateSessionOutput, error)
|
||||||
|
TerminateSessionRequest(*ssm.TerminateSessionInput) (*request.Request, *ssm.TerminateSessionOutput)
|
||||||
|
|
||||||
|
UpdateAssociation(*ssm.UpdateAssociationInput) (*ssm.UpdateAssociationOutput, error)
|
||||||
|
UpdateAssociationWithContext(aws.Context, *ssm.UpdateAssociationInput, ...request.Option) (*ssm.UpdateAssociationOutput, error)
|
||||||
|
UpdateAssociationRequest(*ssm.UpdateAssociationInput) (*request.Request, *ssm.UpdateAssociationOutput)
|
||||||
|
|
||||||
|
UpdateAssociationStatus(*ssm.UpdateAssociationStatusInput) (*ssm.UpdateAssociationStatusOutput, error)
|
||||||
|
UpdateAssociationStatusWithContext(aws.Context, *ssm.UpdateAssociationStatusInput, ...request.Option) (*ssm.UpdateAssociationStatusOutput, error)
|
||||||
|
UpdateAssociationStatusRequest(*ssm.UpdateAssociationStatusInput) (*request.Request, *ssm.UpdateAssociationStatusOutput)
|
||||||
|
|
||||||
|
UpdateDocument(*ssm.UpdateDocumentInput) (*ssm.UpdateDocumentOutput, error)
|
||||||
|
UpdateDocumentWithContext(aws.Context, *ssm.UpdateDocumentInput, ...request.Option) (*ssm.UpdateDocumentOutput, error)
|
||||||
|
UpdateDocumentRequest(*ssm.UpdateDocumentInput) (*request.Request, *ssm.UpdateDocumentOutput)
|
||||||
|
|
||||||
|
UpdateDocumentDefaultVersion(*ssm.UpdateDocumentDefaultVersionInput) (*ssm.UpdateDocumentDefaultVersionOutput, error)
|
||||||
|
UpdateDocumentDefaultVersionWithContext(aws.Context, *ssm.UpdateDocumentDefaultVersionInput, ...request.Option) (*ssm.UpdateDocumentDefaultVersionOutput, error)
|
||||||
|
UpdateDocumentDefaultVersionRequest(*ssm.UpdateDocumentDefaultVersionInput) (*request.Request, *ssm.UpdateDocumentDefaultVersionOutput)
|
||||||
|
|
||||||
|
UpdateMaintenanceWindow(*ssm.UpdateMaintenanceWindowInput) (*ssm.UpdateMaintenanceWindowOutput, error)
|
||||||
|
UpdateMaintenanceWindowWithContext(aws.Context, *ssm.UpdateMaintenanceWindowInput, ...request.Option) (*ssm.UpdateMaintenanceWindowOutput, error)
|
||||||
|
UpdateMaintenanceWindowRequest(*ssm.UpdateMaintenanceWindowInput) (*request.Request, *ssm.UpdateMaintenanceWindowOutput)
|
||||||
|
|
||||||
|
UpdateMaintenanceWindowTarget(*ssm.UpdateMaintenanceWindowTargetInput) (*ssm.UpdateMaintenanceWindowTargetOutput, error)
|
||||||
|
UpdateMaintenanceWindowTargetWithContext(aws.Context, *ssm.UpdateMaintenanceWindowTargetInput, ...request.Option) (*ssm.UpdateMaintenanceWindowTargetOutput, error)
|
||||||
|
UpdateMaintenanceWindowTargetRequest(*ssm.UpdateMaintenanceWindowTargetInput) (*request.Request, *ssm.UpdateMaintenanceWindowTargetOutput)
|
||||||
|
|
||||||
|
UpdateMaintenanceWindowTask(*ssm.UpdateMaintenanceWindowTaskInput) (*ssm.UpdateMaintenanceWindowTaskOutput, error)
|
||||||
|
UpdateMaintenanceWindowTaskWithContext(aws.Context, *ssm.UpdateMaintenanceWindowTaskInput, ...request.Option) (*ssm.UpdateMaintenanceWindowTaskOutput, error)
|
||||||
|
UpdateMaintenanceWindowTaskRequest(*ssm.UpdateMaintenanceWindowTaskInput) (*request.Request, *ssm.UpdateMaintenanceWindowTaskOutput)
|
||||||
|
|
||||||
|
UpdateManagedInstanceRole(*ssm.UpdateManagedInstanceRoleInput) (*ssm.UpdateManagedInstanceRoleOutput, error)
|
||||||
|
UpdateManagedInstanceRoleWithContext(aws.Context, *ssm.UpdateManagedInstanceRoleInput, ...request.Option) (*ssm.UpdateManagedInstanceRoleOutput, error)
|
||||||
|
UpdateManagedInstanceRoleRequest(*ssm.UpdateManagedInstanceRoleInput) (*request.Request, *ssm.UpdateManagedInstanceRoleOutput)
|
||||||
|
|
||||||
|
UpdateOpsItem(*ssm.UpdateOpsItemInput) (*ssm.UpdateOpsItemOutput, error)
|
||||||
|
UpdateOpsItemWithContext(aws.Context, *ssm.UpdateOpsItemInput, ...request.Option) (*ssm.UpdateOpsItemOutput, error)
|
||||||
|
UpdateOpsItemRequest(*ssm.UpdateOpsItemInput) (*request.Request, *ssm.UpdateOpsItemOutput)
|
||||||
|
|
||||||
|
UpdatePatchBaseline(*ssm.UpdatePatchBaselineInput) (*ssm.UpdatePatchBaselineOutput, error)
|
||||||
|
UpdatePatchBaselineWithContext(aws.Context, *ssm.UpdatePatchBaselineInput, ...request.Option) (*ssm.UpdatePatchBaselineOutput, error)
|
||||||
|
UpdatePatchBaselineRequest(*ssm.UpdatePatchBaselineInput) (*request.Request, *ssm.UpdatePatchBaselineOutput)
|
||||||
|
|
||||||
|
UpdateResourceDataSync(*ssm.UpdateResourceDataSyncInput) (*ssm.UpdateResourceDataSyncOutput, error)
|
||||||
|
UpdateResourceDataSyncWithContext(aws.Context, *ssm.UpdateResourceDataSyncInput, ...request.Option) (*ssm.UpdateResourceDataSyncOutput, error)
|
||||||
|
UpdateResourceDataSyncRequest(*ssm.UpdateResourceDataSyncInput) (*request.Request, *ssm.UpdateResourceDataSyncOutput)
|
||||||
|
|
||||||
|
UpdateServiceSetting(*ssm.UpdateServiceSettingInput) (*ssm.UpdateServiceSettingOutput, error)
|
||||||
|
UpdateServiceSettingWithContext(aws.Context, *ssm.UpdateServiceSettingInput, ...request.Option) (*ssm.UpdateServiceSettingOutput, error)
|
||||||
|
UpdateServiceSettingRequest(*ssm.UpdateServiceSettingInput) (*request.Request, *ssm.UpdateServiceSettingOutput)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ SSMAPI = (*ssm.SSM)(nil)
|
|
@ -0,0 +1,131 @@
|
||||||
|
# complete
|
||||||
|
|
||||||
|
[![Build Status](https://travis-ci.org/posener/complete.svg?branch=master)](https://travis-ci.org/posener/complete)
|
||||||
|
[![codecov](https://codecov.io/gh/posener/complete/branch/master/graph/badge.svg)](https://codecov.io/gh/posener/complete)
|
||||||
|
[![golangci](https://golangci.com/badges/github.com/posener/complete.svg)](https://golangci.com/r/github.com/posener/complete)
|
||||||
|
[![GoDoc](https://godoc.org/github.com/posener/complete?status.svg)](http://godoc.org/github.com/posener/complete)
|
||||||
|
[![goreadme](https://goreadme.herokuapp.com/badge/posener/complete.svg)](https://goreadme.herokuapp.com)
|
||||||
|
|
||||||
|
Package complete provides a tool for bash writing bash completion in go, and bash completion for the go command line.
|
||||||
|
|
||||||
|
Writing bash completion scripts is a hard work. This package provides an easy way
|
||||||
|
to create bash completion scripts for any command, and also an easy way to install/uninstall
|
||||||
|
the completion of the command.
|
||||||
|
|
||||||
|
#### Go Command Bash Completion
|
||||||
|
|
||||||
|
In [./cmd/gocomplete](./cmd/gocomplete) there is an example for bash completion for the `go` command line.
|
||||||
|
|
||||||
|
This is an example that uses the `complete` package on the `go` command - the `complete` package
|
||||||
|
can also be used to implement any completions, see #usage.
|
||||||
|
|
||||||
|
#### Install
|
||||||
|
|
||||||
|
1. Type in your shell:
|
||||||
|
|
||||||
|
```go
|
||||||
|
go get -u github.com/posener/complete/gocomplete
|
||||||
|
gocomplete -install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Restart your shell
|
||||||
|
|
||||||
|
Uninstall by `gocomplete -uninstall`
|
||||||
|
|
||||||
|
#### Features
|
||||||
|
|
||||||
|
- Complete `go` command, including sub commands and all flags.
|
||||||
|
- Complete packages names or `.go` files when necessary.
|
||||||
|
- Complete test names after `-run` flag.
|
||||||
|
|
||||||
|
#### Complete package
|
||||||
|
|
||||||
|
Supported shells:
|
||||||
|
|
||||||
|
- [x] bash
|
||||||
|
- [x] zsh
|
||||||
|
- [x] fish
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
Assuming you have program called `run` and you want to have bash completion
|
||||||
|
for it, meaning, if you type `run` then space, then press the `Tab` key,
|
||||||
|
the shell will suggest relevant complete options.
|
||||||
|
|
||||||
|
In that case, we will create a program called `runcomplete`, a go program,
|
||||||
|
with a `func main()` and so, that will make the completion of the `run`
|
||||||
|
program. Once the `runcomplete` will be in a binary form, we could
|
||||||
|
`runcomplete -install` and that will add to our shell all the bash completion
|
||||||
|
options for `run`.
|
||||||
|
|
||||||
|
So here it is:
|
||||||
|
|
||||||
|
```go
|
||||||
|
import "github.com/posener/complete"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
// create a Command object, that represents the command we want
|
||||||
|
// to complete.
|
||||||
|
run := complete.Command{
|
||||||
|
|
||||||
|
// Sub defines a list of sub commands of the program,
|
||||||
|
// this is recursive, since every command is of type command also.
|
||||||
|
Sub: complete.Commands{
|
||||||
|
|
||||||
|
// add a build sub command
|
||||||
|
"build": complete.Command {
|
||||||
|
|
||||||
|
// define flags of the build sub command
|
||||||
|
Flags: complete.Flags{
|
||||||
|
// build sub command has a flag '-cpus', which
|
||||||
|
// expects number of cpus after it. in that case
|
||||||
|
// anything could complete this flag.
|
||||||
|
"-cpus": complete.PredictAnything,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// define flags of the 'run' main command
|
||||||
|
Flags: complete.Flags{
|
||||||
|
// a flag -o, which expects a file ending with .out after
|
||||||
|
// it, the tab completion will auto complete for files matching
|
||||||
|
// the given pattern.
|
||||||
|
"-o": complete.PredictFiles("*.out"),
|
||||||
|
},
|
||||||
|
|
||||||
|
// define global flags of the 'run' main command
|
||||||
|
// those will show up also when a sub command was entered in the
|
||||||
|
// command line
|
||||||
|
GlobalFlags: complete.Flags{
|
||||||
|
|
||||||
|
// a flag '-h' which does not expects anything after it
|
||||||
|
"-h": complete.PredictNothing,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// run the command completion, as part of the main() function.
|
||||||
|
// this triggers the autocompletion when needed.
|
||||||
|
// name must be exactly as the binary that we want to complete.
|
||||||
|
complete.New("run", run).Run()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Self completing program
|
||||||
|
|
||||||
|
In case that the program that we want to complete is written in go we
|
||||||
|
can make it self completing.
|
||||||
|
Here is an example: [./example/self/main.go](./example/self/main.go) .
|
||||||
|
|
||||||
|
## Sub Packages
|
||||||
|
|
||||||
|
* [cmd](./cmd): Package cmd used for command line options for the complete tool
|
||||||
|
|
||||||
|
* [gocomplete](./gocomplete): Package main is complete tool for the go command line
|
||||||
|
|
||||||
|
* [match](./match): Package match contains matchers that decide if to apply completion.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Created by [goreadme](https://github.com/apps/goreadme)
|
|
@ -161,6 +161,7 @@ github.com/aws/aws-sdk-go/service/s3/s3manager
|
||||||
github.com/aws/aws-sdk-go/service/secretsmanager
|
github.com/aws/aws-sdk-go/service/secretsmanager
|
||||||
github.com/aws/aws-sdk-go/service/secretsmanager/secretsmanageriface
|
github.com/aws/aws-sdk-go/service/secretsmanager/secretsmanageriface
|
||||||
github.com/aws/aws-sdk-go/service/ssm
|
github.com/aws/aws-sdk-go/service/ssm
|
||||||
|
github.com/aws/aws-sdk-go/service/ssm/ssmiface
|
||||||
github.com/aws/aws-sdk-go/service/sts
|
github.com/aws/aws-sdk-go/service/sts
|
||||||
github.com/aws/aws-sdk-go/service/sts/stsiface
|
github.com/aws/aws-sdk-go/service/sts/stsiface
|
||||||
# github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d
|
# github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d
|
||||||
|
|
Loading…
Reference in New Issue