Merge pull request #3021 from dhiltgen/harden_aws_mark2

Add retry support to AWS driver
This commit is contained in:
Nathan LeClaire 2016-02-09 17:23:37 -08:00
commit db1aa13ef2
2 changed files with 11 additions and 0 deletions

View File

@ -71,6 +71,8 @@ You can use environment variables:
- `--amazonec2-monitoring`: Enable CloudWatch Monitoring. - `--amazonec2-monitoring`: Enable CloudWatch Monitoring.
- `--amazonec2-use-ebs-optimized-instance`: Create an EBS Optimized Instance, instance type must support it. - `--amazonec2-use-ebs-optimized-instance`: Create an EBS Optimized Instance, instance type must support it.
- `--amazonec2-ssh-keypath`: Path to Private Key file to use for instance. Matching public key with .pub extension should exist - `--amazonec2-ssh-keypath`: Path to Private Key file to use for instance. Matching public key with .pub extension should exist
- `--amazonec2-retries`: Set retry count for recoverable failures (use -1 to disable)
Environment variables and default values: Environment variables and default values:
@ -99,6 +101,7 @@ Environment variables and default values:
| `--amazonec2-monitoring` | - | `false` | | `--amazonec2-monitoring` | - | `false` |
| `--amazonec2-use-ebs-optimized-instance` | - | `false` | | `--amazonec2-use-ebs-optimized-instance` | - | `false` |
| `--amazonec2-ssh-keypath` | `AWS_SSH_KEYPATH` | - | | `--amazonec2-ssh-keypath` | `AWS_SSH_KEYPATH` | - |
| `--amazonec2-retries` | - | `5` |
## Default AMIs ## Default AMIs

View File

@ -87,6 +87,7 @@ type Driver struct {
UseEbsOptimizedInstance bool UseEbsOptimizedInstance bool
Monitoring bool Monitoring bool
SSHPrivateKeyPath string SSHPrivateKeyPath string
RetryCount int
} }
type clientFactory interface { type clientFactory interface {
@ -213,6 +214,11 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
Usage: "SSH Key for Instance", Usage: "SSH Key for Instance",
EnvVar: "AWS_SSH_KEYPATH", EnvVar: "AWS_SSH_KEYPATH",
}, },
mcnflag.IntFlag{
Name: "amazonec2-retries",
Usage: "Set retry count for recoverable failures (use -1 to disable)",
Value: 5,
},
} }
} }
@ -247,6 +253,7 @@ func (d *Driver) buildClient() Ec2Client {
config = config.WithCredentials(d.awsCredentials.NewStaticCredentials(d.AccessKey, d.SecretKey, d.SessionToken)) config = config.WithCredentials(d.awsCredentials.NewStaticCredentials(d.AccessKey, d.SecretKey, d.SessionToken))
config = config.WithLogger(alogger) config = config.WithLogger(alogger)
config = config.WithLogLevel(aws.LogDebugWithHTTPBody) config = config.WithLogLevel(aws.LogDebugWithHTTPBody)
config = config.WithMaxRetries(d.RetryCount)
return ec2.New(session.New(config)) return ec2.New(session.New(config))
} }
@ -291,6 +298,7 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.UseEbsOptimizedInstance = flags.Bool("amazonec2-use-ebs-optimized-instance") d.UseEbsOptimizedInstance = flags.Bool("amazonec2-use-ebs-optimized-instance")
d.SSHPrivateKeyPath = flags.String("amazonec2-ssh-keypath") d.SSHPrivateKeyPath = flags.String("amazonec2-ssh-keypath")
d.SetSwarmConfigFromFlags(flags) d.SetSwarmConfigFromFlags(flags)
d.RetryCount = flags.Int("amazonec2-retries")
if d.AccessKey == "" && d.SecretKey == "" { if d.AccessKey == "" && d.SecretKey == "" {
credentials, err := d.awsCredentials.NewSharedCredentials("", "").Get() credentials, err := d.awsCredentials.NewSharedCredentials("", "").Get()