mirror of https://github.com/docker/docs.git
Fetching the default vpc id from account
Signed-off-by: Jean-Laurent de Morlhon <jeanlaurent@morlhon.net>
This commit is contained in:
parent
0d2bc08d6e
commit
04fd9e7741
|
|
@ -289,8 +289,15 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
|
||||||
return fmt.Errorf("amazonec2 driver requires the --amazonec2-secret-key option")
|
return fmt.Errorf("amazonec2 driver requires the --amazonec2-secret-key option")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.VpcId == "" {
|
||||||
|
d.VpcId, err = d.getDefaultVPCId()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("couldn't determine your account Default VPC ID : %q", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if d.SubnetId == "" && d.VpcId == "" {
|
if d.SubnetId == "" && d.VpcId == "" {
|
||||||
return fmt.Errorf("amazonec2 driver requires either the --amazonec2-subnet-id or --amazonec2-vpc-id option")
|
return fmt.Errorf("amazonec2 driver requires either the --amazonec2-subnet-id or --amazonec2-vpc-id option or an AWS Account with a default vpc-id")
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.SubnetId != "" && d.VpcId != "" {
|
if d.SubnetId != "" && d.VpcId != "" {
|
||||||
|
|
@ -952,6 +959,21 @@ func (d *Driver) deleteKeyPair() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *Driver) getDefaultVPCId() (string, error) {
|
||||||
|
output, err := d.getClient().DescribeAccountAttributes(&ec2.DescribeAccountAttributesInput{})
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, attribute := range output.AccountAttributes {
|
||||||
|
if *attribute.AttributeName == "default-vpc" {
|
||||||
|
return *attribute.AttributeValues[0].AttributeValue, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", errors.New("No default-vpc attribute")
|
||||||
|
}
|
||||||
|
|
||||||
func generateId() string {
|
func generateId() string {
|
||||||
rb := make([]byte, 10)
|
rb := make([]byte, 10)
|
||||||
_, err := rand.Read(rb)
|
_, err := rand.Read(rb)
|
||||||
|
|
|
||||||
|
|
@ -239,3 +239,69 @@ func TestSetConfigFromFlags(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Empty(t, checkFlags.InvalidFlags)
|
assert.Empty(t, checkFlags.InvalidFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type fakeEC2WithDescribe struct {
|
||||||
|
*ec2.EC2
|
||||||
|
output *ec2.DescribeAccountAttributesOutput
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *fakeEC2WithDescribe) DescribeAccountAttributes(input *ec2.DescribeAccountAttributesInput) (*ec2.DescribeAccountAttributesOutput, error) {
|
||||||
|
return f.output, f.err
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFindDefaultVPC(t *testing.T) {
|
||||||
|
defaultVpc := "default-vpc"
|
||||||
|
vpcName := "vpc-9999"
|
||||||
|
|
||||||
|
driver := NewDriver("machineFoo", "path")
|
||||||
|
driver.clientFactory = func() Ec2Client {
|
||||||
|
return &fakeEC2WithDescribe{
|
||||||
|
output: &ec2.DescribeAccountAttributesOutput{
|
||||||
|
AccountAttributes: []*ec2.AccountAttribute{
|
||||||
|
{
|
||||||
|
AttributeName: &defaultVpc,
|
||||||
|
AttributeValues: []*ec2.AccountAttributeValue{
|
||||||
|
{AttributeValue: &vpcName},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vpc, err := driver.getDefaultVPCId()
|
||||||
|
|
||||||
|
assert.Equal(t, "vpc-9999", vpc)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDefaultVPCIsMissing(t *testing.T) {
|
||||||
|
driver := NewDriver("machineFoo", "path")
|
||||||
|
driver.clientFactory = func() Ec2Client {
|
||||||
|
return &fakeEC2WithDescribe{
|
||||||
|
output: &ec2.DescribeAccountAttributesOutput{
|
||||||
|
AccountAttributes: []*ec2.AccountAttribute{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vpc, err := driver.getDefaultVPCId()
|
||||||
|
|
||||||
|
assert.EqualError(t, err, "No default-vpc attribute")
|
||||||
|
assert.Empty(t, vpc)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDescribeAccountAttributeFails(t *testing.T) {
|
||||||
|
driver := NewDriver("machineFoo", "path")
|
||||||
|
driver.clientFactory = func() Ec2Client {
|
||||||
|
return &fakeEC2WithDescribe{
|
||||||
|
err: errors.New("Not Found"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vpc, err := driver.getDefaultVPCId()
|
||||||
|
|
||||||
|
assert.EqualError(t, err, "Not Found")
|
||||||
|
assert.Empty(t, vpc)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue