Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
df0718ca
Commit
df0718ca
authored
Sep 20, 2015
by
Trevor Pounds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Migrate source to aws-sdk-go v0.9.9.
Upgrading to aws-sdk-go >= v0.9.0 requires a source migration via awsmigrate-renamer tool. see:
http://aws.amazon.com/releasenotes/2948141298714307
parent
b76f6a02
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
125 additions
and
124 deletions
+125
-124
aws.go
pkg/cloudprovider/providers/aws/aws.go
+83
-82
aws_instancegroups.go
pkg/cloudprovider/providers/aws/aws_instancegroups.go
+2
-2
aws_loadbalancer.go
pkg/cloudprovider/providers/aws/aws_loadbalancer.go
+5
-5
aws_routes.go
pkg/cloudprovider/providers/aws/aws_routes.go
+11
-11
aws_test.go
pkg/cloudprovider/providers/aws/aws_test.go
+24
-24
No files found.
pkg/cloudprovider/providers/aws/aws.go
View file @
df0718ca
...
@@ -33,6 +33,7 @@ import (
...
@@ -33,6 +33,7 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds"
"github.com/aws/aws-sdk-go/service/autoscaling"
"github.com/aws/aws-sdk-go/service/autoscaling"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/elb"
"github.com/aws/aws-sdk-go/service/elb"
...
@@ -89,7 +90,7 @@ type EC2 interface {
...
@@ -89,7 +90,7 @@ type EC2 interface {
AuthorizeSecurityGroupIngress
(
*
ec2
.
AuthorizeSecurityGroupIngressInput
)
(
*
ec2
.
AuthorizeSecurityGroupIngressOutput
,
error
)
AuthorizeSecurityGroupIngress
(
*
ec2
.
AuthorizeSecurityGroupIngressInput
)
(
*
ec2
.
AuthorizeSecurityGroupIngressOutput
,
error
)
RevokeSecurityGroupIngress
(
*
ec2
.
RevokeSecurityGroupIngressInput
)
(
*
ec2
.
RevokeSecurityGroupIngressOutput
,
error
)
RevokeSecurityGroupIngress
(
*
ec2
.
RevokeSecurityGroupIngressInput
)
(
*
ec2
.
RevokeSecurityGroupIngressOutput
,
error
)
DescribeVPCs
(
*
ec2
.
DescribeV
PCsInput
)
([]
*
ec2
.
VPC
,
error
)
DescribeVPCs
(
*
ec2
.
DescribeV
pcsInput
)
([]
*
ec2
.
Vpc
,
error
)
DescribeSubnets
(
*
ec2
.
DescribeSubnetsInput
)
([]
*
ec2
.
Subnet
,
error
)
DescribeSubnets
(
*
ec2
.
DescribeSubnetsInput
)
([]
*
ec2
.
Subnet
,
error
)
...
@@ -208,7 +209,7 @@ type awsSDKProvider struct {
...
@@ -208,7 +209,7 @@ type awsSDKProvider struct {
func
(
p
*
awsSDKProvider
)
Compute
(
regionName
string
)
(
EC2
,
error
)
{
func
(
p
*
awsSDKProvider
)
Compute
(
regionName
string
)
(
EC2
,
error
)
{
ec2
:=
&
awsSdkEC2
{
ec2
:=
&
awsSdkEC2
{
ec2
:
ec2
.
New
(
&
aws
.
Config
{
ec2
:
ec2
.
New
(
&
aws
.
Config
{
Region
:
regionName
,
Region
:
&
regionName
,
Credentials
:
p
.
creds
,
Credentials
:
p
.
creds
,
}),
}),
}
}
...
@@ -217,7 +218,7 @@ func (p *awsSDKProvider) Compute(regionName string) (EC2, error) {
...
@@ -217,7 +218,7 @@ func (p *awsSDKProvider) Compute(regionName string) (EC2, error) {
func
(
p
*
awsSDKProvider
)
LoadBalancing
(
regionName
string
)
(
ELB
,
error
)
{
func
(
p
*
awsSDKProvider
)
LoadBalancing
(
regionName
string
)
(
ELB
,
error
)
{
elbClient
:=
elb
.
New
(
&
aws
.
Config
{
elbClient
:=
elb
.
New
(
&
aws
.
Config
{
Region
:
regionName
,
Region
:
&
regionName
,
Credentials
:
p
.
creds
,
Credentials
:
p
.
creds
,
})
})
return
elbClient
,
nil
return
elbClient
,
nil
...
@@ -225,7 +226,7 @@ func (p *awsSDKProvider) LoadBalancing(regionName string) (ELB, error) {
...
@@ -225,7 +226,7 @@ func (p *awsSDKProvider) LoadBalancing(regionName string) (ELB, error) {
func
(
p
*
awsSDKProvider
)
Autoscaling
(
regionName
string
)
(
ASG
,
error
)
{
func
(
p
*
awsSDKProvider
)
Autoscaling
(
regionName
string
)
(
ASG
,
error
)
{
client
:=
autoscaling
.
New
(
&
aws
.
Config
{
client
:=
autoscaling
.
New
(
&
aws
.
Config
{
Region
:
regionName
,
Region
:
&
regionName
,
Credentials
:
p
.
creds
,
Credentials
:
p
.
creds
,
})
})
return
client
,
nil
return
client
,
nil
...
@@ -349,8 +350,8 @@ func (s *awsSdkEC2) DescribeSecurityGroups(request *ec2.DescribeSecurityGroupsIn
...
@@ -349,8 +350,8 @@ func (s *awsSdkEC2) DescribeSecurityGroups(request *ec2.DescribeSecurityGroupsIn
func
(
s
*
awsSdkEC2
)
AttachVolume
(
volumeID
,
instanceId
,
device
string
)
(
resp
*
ec2
.
VolumeAttachment
,
err
error
)
{
func
(
s
*
awsSdkEC2
)
AttachVolume
(
volumeID
,
instanceId
,
device
string
)
(
resp
*
ec2
.
VolumeAttachment
,
err
error
)
{
request
:=
ec2
.
AttachVolumeInput
{
request
:=
ec2
.
AttachVolumeInput
{
Device
:
&
device
,
Device
:
&
device
,
InstanceI
D
:
&
instanceId
,
InstanceI
d
:
&
instanceId
,
VolumeI
D
:
&
volumeID
,
VolumeI
d
:
&
volumeID
,
}
}
return
s
.
ec2
.
AttachVolume
(
&
request
)
return
s
.
ec2
.
AttachVolume
(
&
request
)
}
}
...
@@ -388,17 +389,17 @@ func (s *awsSdkEC2) CreateVolume(request *ec2.CreateVolumeInput) (resp *ec2.Volu
...
@@ -388,17 +389,17 @@ func (s *awsSdkEC2) CreateVolume(request *ec2.CreateVolumeInput) (resp *ec2.Volu
}
}
func
(
s
*
awsSdkEC2
)
DeleteVolume
(
volumeID
string
)
(
resp
*
ec2
.
DeleteVolumeOutput
,
err
error
)
{
func
(
s
*
awsSdkEC2
)
DeleteVolume
(
volumeID
string
)
(
resp
*
ec2
.
DeleteVolumeOutput
,
err
error
)
{
request
:=
ec2
.
DeleteVolumeInput
{
VolumeI
D
:
&
volumeID
}
request
:=
ec2
.
DeleteVolumeInput
{
VolumeI
d
:
&
volumeID
}
return
s
.
ec2
.
DeleteVolume
(
&
request
)
return
s
.
ec2
.
DeleteVolume
(
&
request
)
}
}
func
(
s
*
awsSdkEC2
)
DescribeVPCs
(
request
*
ec2
.
DescribeV
PCsInput
)
([]
*
ec2
.
VPC
,
error
)
{
func
(
s
*
awsSdkEC2
)
DescribeVPCs
(
request
*
ec2
.
DescribeV
pcsInput
)
([]
*
ec2
.
Vpc
,
error
)
{
// VPCs are not paged
// VPCs are not paged
response
,
err
:=
s
.
ec2
.
DescribeV
PC
s
(
request
)
response
,
err
:=
s
.
ec2
.
DescribeV
pc
s
(
request
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error listing AWS VPCs: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"error listing AWS VPCs: %v"
,
err
)
}
}
return
response
.
V
PC
s
,
nil
return
response
.
V
pc
s
,
nil
}
}
func
(
s
*
awsSdkEC2
)
DescribeSubnets
(
request
*
ec2
.
DescribeSubnetsInput
)
([]
*
ec2
.
Subnet
,
error
)
{
func
(
s
*
awsSdkEC2
)
DescribeSubnets
(
request
*
ec2
.
DescribeSubnetsInput
)
([]
*
ec2
.
Subnet
,
error
)
{
...
@@ -456,7 +457,7 @@ func init() {
...
@@ -456,7 +457,7 @@ func init() {
creds
:=
credentials
.
NewChainCredentials
(
creds
:=
credentials
.
NewChainCredentials
(
[]
credentials
.
Provider
{
[]
credentials
.
Provider
{
&
credentials
.
EnvProvider
{},
&
credentials
.
EnvProvider
{},
&
credential
s
.
EC2RoleProvider
{},
&
ec2rolecred
s
.
EC2RoleProvider
{},
&
credentials
.
SharedCredentialsProvider
{},
&
credentials
.
SharedCredentialsProvider
{},
})
})
aws
:=
&
awsSDKProvider
{
creds
:
creds
}
aws
:=
&
awsSDKProvider
{
creds
:
creds
}
...
@@ -635,11 +636,11 @@ func (aws *AWSCloud) NodeAddresses(name string) ([]api.NodeAddress, error) {
...
@@ -635,11 +636,11 @@ func (aws *AWSCloud) NodeAddresses(name string) ([]api.NodeAddress, error) {
addresses
:=
[]
api
.
NodeAddress
{}
addresses
:=
[]
api
.
NodeAddress
{}
if
!
isNilOrEmpty
(
instance
.
PrivateI
P
Address
)
{
if
!
isNilOrEmpty
(
instance
.
PrivateI
p
Address
)
{
ipAddress
:=
*
instance
.
PrivateI
P
Address
ipAddress
:=
*
instance
.
PrivateI
p
Address
ip
:=
net
.
ParseIP
(
ipAddress
)
ip
:=
net
.
ParseIP
(
ipAddress
)
if
ip
==
nil
{
if
ip
==
nil
{
return
nil
,
fmt
.
Errorf
(
"EC2 instance had invalid private address: %s (%s)"
,
orEmpty
(
instance
.
InstanceI
D
),
ipAddress
)
return
nil
,
fmt
.
Errorf
(
"EC2 instance had invalid private address: %s (%s)"
,
orEmpty
(
instance
.
InstanceI
d
),
ipAddress
)
}
}
addresses
=
append
(
addresses
,
api
.
NodeAddress
{
Type
:
api
.
NodeInternalIP
,
Address
:
ip
.
String
()})
addresses
=
append
(
addresses
,
api
.
NodeAddress
{
Type
:
api
.
NodeInternalIP
,
Address
:
ip
.
String
()})
...
@@ -648,11 +649,11 @@ func (aws *AWSCloud) NodeAddresses(name string) ([]api.NodeAddress, error) {
...
@@ -648,11 +649,11 @@ func (aws *AWSCloud) NodeAddresses(name string) ([]api.NodeAddress, error) {
}
}
// TODO: Other IP addresses (multiple ips)?
// TODO: Other IP addresses (multiple ips)?
if
!
isNilOrEmpty
(
instance
.
PublicI
P
Address
)
{
if
!
isNilOrEmpty
(
instance
.
PublicI
p
Address
)
{
ipAddress
:=
*
instance
.
PublicI
P
Address
ipAddress
:=
*
instance
.
PublicI
p
Address
ip
:=
net
.
ParseIP
(
ipAddress
)
ip
:=
net
.
ParseIP
(
ipAddress
)
if
ip
==
nil
{
if
ip
==
nil
{
return
nil
,
fmt
.
Errorf
(
"EC2 instance had invalid public address: %s (%s)"
,
orEmpty
(
instance
.
InstanceI
D
),
ipAddress
)
return
nil
,
fmt
.
Errorf
(
"EC2 instance had invalid public address: %s (%s)"
,
orEmpty
(
instance
.
InstanceI
d
),
ipAddress
)
}
}
addresses
=
append
(
addresses
,
api
.
NodeAddress
{
Type
:
api
.
NodeExternalIP
,
Address
:
ip
.
String
()})
addresses
=
append
(
addresses
,
api
.
NodeAddress
{
Type
:
api
.
NodeExternalIP
,
Address
:
ip
.
String
()})
}
}
...
@@ -671,7 +672,7 @@ func (aws *AWSCloud) ExternalID(name string) (string, error) {
...
@@ -671,7 +672,7 @@ func (aws *AWSCloud) ExternalID(name string) (string, error) {
if
instance
==
nil
||
!
isAlive
(
instance
)
{
if
instance
==
nil
||
!
isAlive
(
instance
)
{
return
""
,
cloudprovider
.
InstanceNotFound
return
""
,
cloudprovider
.
InstanceNotFound
}
}
return
orEmpty
(
instance
.
InstanceI
D
),
nil
return
orEmpty
(
instance
.
InstanceI
d
),
nil
}
}
// InstanceID returns the cloud provider ID of the specified instance.
// InstanceID returns the cloud provider ID of the specified instance.
...
@@ -683,7 +684,7 @@ func (aws *AWSCloud) InstanceID(name string) (string, error) {
...
@@ -683,7 +684,7 @@ func (aws *AWSCloud) InstanceID(name string) (string, error) {
}
}
// In the future it is possible to also return an endpoint as:
// In the future it is possible to also return an endpoint as:
// <endpoint>/<zone>/<instanceid>
// <endpoint>/<zone>/<instanceid>
return
"/"
+
orEmpty
(
inst
.
Placement
.
AvailabilityZone
)
+
"/"
+
orEmpty
(
inst
.
InstanceI
D
),
nil
return
"/"
+
orEmpty
(
inst
.
Placement
.
AvailabilityZone
)
+
"/"
+
orEmpty
(
inst
.
InstanceI
d
),
nil
}
}
// Check if the instance is alive (running or pending)
// Check if the instance is alive (running or pending)
...
@@ -741,14 +742,14 @@ func (s *AWSCloud) getInstancesByRegex(regex string) ([]string, error) {
...
@@ -741,14 +742,14 @@ func (s *AWSCloud) getInstancesByRegex(regex string) ([]string, error) {
// Only return fully-ready instances when listing instances
// Only return fully-ready instances when listing instances
// (vs a query by name, where we will return it if we find it)
// (vs a query by name, where we will return it if we find it)
if
orEmpty
(
instance
.
State
.
Name
)
==
"pending"
{
if
orEmpty
(
instance
.
State
.
Name
)
==
"pending"
{
glog
.
V
(
2
)
.
Infof
(
"skipping EC2 instance (pending): %s"
,
*
instance
.
InstanceI
D
)
glog
.
V
(
2
)
.
Infof
(
"skipping EC2 instance (pending): %s"
,
*
instance
.
InstanceI
d
)
continue
continue
}
}
privateDNSName
:=
orEmpty
(
instance
.
PrivateD
NS
Name
)
privateDNSName
:=
orEmpty
(
instance
.
PrivateD
ns
Name
)
if
privateDNSName
==
""
{
if
privateDNSName
==
""
{
glog
.
V
(
2
)
.
Infof
(
"skipping EC2 instance (no PrivateDNSName): %s"
,
glog
.
V
(
2
)
.
Infof
(
"skipping EC2 instance (no PrivateDNSName): %s"
,
orEmpty
(
instance
.
InstanceI
D
))
orEmpty
(
instance
.
InstanceI
d
))
continue
continue
}
}
...
@@ -832,7 +833,7 @@ func (self *awsInstance) getInstanceType() *awsInstanceType {
...
@@ -832,7 +833,7 @@ func (self *awsInstance) getInstanceType() *awsInstanceType {
func
(
self
*
awsInstance
)
getInfo
()
(
*
ec2
.
Instance
,
error
)
{
func
(
self
*
awsInstance
)
getInfo
()
(
*
ec2
.
Instance
,
error
)
{
instanceID
:=
self
.
awsID
instanceID
:=
self
.
awsID
request
:=
&
ec2
.
DescribeInstancesInput
{
request
:=
&
ec2
.
DescribeInstancesInput
{
InstanceI
D
s
:
[]
*
string
{
&
instanceID
},
InstanceI
d
s
:
[]
*
string
{
&
instanceID
},
}
}
instances
,
err
:=
self
.
ec2
.
DescribeInstances
(
request
)
instances
,
err
:=
self
.
ec2
.
DescribeInstances
(
request
)
...
@@ -877,7 +878,7 @@ func (self *awsInstance) assignMountpoint(volumeID string) (mountpoint string, a
...
@@ -877,7 +878,7 @@ func (self *awsInstance) assignMountpoint(volumeID string) (mountpoint string, a
if
strings
.
HasPrefix
(
mountpoint
,
"/dev/xvd"
)
{
if
strings
.
HasPrefix
(
mountpoint
,
"/dev/xvd"
)
{
mountpoint
=
mountpoint
[
8
:
]
mountpoint
=
mountpoint
[
8
:
]
}
}
deviceMappings
[
mountpoint
]
=
orEmpty
(
blockDevice
.
E
BS
.
VolumeID
)
deviceMappings
[
mountpoint
]
=
orEmpty
(
blockDevice
.
E
bs
.
VolumeId
)
}
}
self
.
deviceMappings
=
deviceMappings
self
.
deviceMappings
=
deviceMappings
}
}
...
@@ -979,7 +980,7 @@ func (self *awsDisk) getInfo() (*ec2.Volume, error) {
...
@@ -979,7 +980,7 @@ func (self *awsDisk) getInfo() (*ec2.Volume, error) {
volumeID
:=
self
.
awsID
volumeID
:=
self
.
awsID
request
:=
&
ec2
.
DescribeVolumesInput
{
request
:=
&
ec2
.
DescribeVolumesInput
{
VolumeI
D
s
:
[]
*
string
{
&
volumeID
},
VolumeI
d
s
:
[]
*
string
{
&
volumeID
},
}
}
volumes
,
err
:=
self
.
ec2
.
DescribeVolumes
(
request
)
volumes
,
err
:=
self
.
ec2
.
DescribeVolumes
(
request
)
...
@@ -1090,7 +1091,7 @@ func (aws *AWSCloud) getAwsInstance(nodeName string) (*awsInstance, error) {
...
@@ -1090,7 +1091,7 @@ func (aws *AWSCloud) getAwsInstance(nodeName string) (*awsInstance, error) {
return
nil
,
fmt
.
Errorf
(
"error finding instance %s: %v"
,
nodeName
,
err
)
return
nil
,
fmt
.
Errorf
(
"error finding instance %s: %v"
,
nodeName
,
err
)
}
}
awsInstance
=
newAWSInstance
(
aws
.
ec2
,
orEmpty
(
instance
.
InstanceI
D
),
orEmpty
(
instance
.
PrivateDNS
Name
))
awsInstance
=
newAWSInstance
(
aws
.
ec2
,
orEmpty
(
instance
.
InstanceI
d
),
orEmpty
(
instance
.
PrivateDns
Name
))
}
}
return
awsInstance
,
nil
return
awsInstance
,
nil
...
@@ -1168,8 +1169,8 @@ func (aws *AWSCloud) DetachDisk(instanceName string, diskName string) error {
...
@@ -1168,8 +1169,8 @@ func (aws *AWSCloud) DetachDisk(instanceName string, diskName string) error {
}
}
request
:=
ec2
.
DetachVolumeInput
{
request
:=
ec2
.
DetachVolumeInput
{
InstanceI
D
:
&
awsInstance
.
awsID
,
InstanceI
d
:
&
awsInstance
.
awsID
,
VolumeI
D
:
&
disk
.
awsID
,
VolumeI
d
:
&
disk
.
awsID
,
}
}
response
,
err
:=
aws
.
ec2
.
DetachVolume
(
&
request
)
response
,
err
:=
aws
.
ec2
.
DetachVolume
(
&
request
)
...
@@ -1202,7 +1203,7 @@ func (aws *AWSCloud) CreateVolume(volumeOptions *VolumeOptions) (string, error)
...
@@ -1202,7 +1203,7 @@ func (aws *AWSCloud) CreateVolume(volumeOptions *VolumeOptions) (string, error)
}
}
az
:=
orEmpty
(
response
.
AvailabilityZone
)
az
:=
orEmpty
(
response
.
AvailabilityZone
)
awsID
:=
orEmpty
(
response
.
VolumeI
D
)
awsID
:=
orEmpty
(
response
.
VolumeI
d
)
volumeName
:=
"aws://"
+
az
+
"/"
+
awsID
volumeName
:=
"aws://"
+
az
+
"/"
+
awsID
...
@@ -1277,8 +1278,8 @@ func (self *AWSCloud) findVPCID() (string, error) {
...
@@ -1277,8 +1278,8 @@ func (self *AWSCloud) findVPCID() (string, error) {
}
}
// Find the VPC which self is attached to.
// Find the VPC which self is attached to.
func
(
self
*
AWSCloud
)
findVPC
()
(
*
ec2
.
V
PC
,
error
)
{
func
(
self
*
AWSCloud
)
findVPC
()
(
*
ec2
.
V
pc
,
error
)
{
request
:=
&
ec2
.
DescribeV
PC
sInput
{}
request
:=
&
ec2
.
DescribeV
pc
sInput
{}
// find by vpcID from metadata
// find by vpcID from metadata
vpcID
,
err
:=
self
.
findVPCID
()
vpcID
,
err
:=
self
.
findVPCID
()
...
@@ -1308,7 +1309,7 @@ func (self *AWSCloud) findVPC() (*ec2.VPC, error) {
...
@@ -1308,7 +1309,7 @@ func (self *AWSCloud) findVPC() (*ec2.VPC, error) {
// Retrieves the specified security group from the AWS API, or returns nil if not found
// Retrieves the specified security group from the AWS API, or returns nil if not found
func
(
s
*
AWSCloud
)
findSecurityGroup
(
securityGroupId
string
)
(
*
ec2
.
SecurityGroup
,
error
)
{
func
(
s
*
AWSCloud
)
findSecurityGroup
(
securityGroupId
string
)
(
*
ec2
.
SecurityGroup
,
error
)
{
describeSecurityGroupsRequest
:=
&
ec2
.
DescribeSecurityGroupsInput
{
describeSecurityGroupsRequest
:=
&
ec2
.
DescribeSecurityGroupsInput
{
GroupI
D
s
:
[]
*
string
{
&
securityGroupId
},
GroupI
d
s
:
[]
*
string
{
&
securityGroupId
},
}
}
groups
,
err
:=
s
.
ec2
.
DescribeSecurityGroups
(
describeSecurityGroupsRequest
)
groups
,
err
:=
s
.
ec2
.
DescribeSecurityGroups
(
describeSecurityGroupsRequest
)
...
@@ -1347,34 +1348,34 @@ func isEqualStringPointer(l, r *string) bool {
...
@@ -1347,34 +1348,34 @@ func isEqualStringPointer(l, r *string) bool {
return
*
l
==
*
r
return
*
l
==
*
r
}
}
func
isEqualIPPermission
(
l
,
r
*
ec2
.
I
P
Permission
,
compareGroupUserIDs
bool
)
bool
{
func
isEqualIPPermission
(
l
,
r
*
ec2
.
I
p
Permission
,
compareGroupUserIDs
bool
)
bool
{
if
!
isEqualIntPointer
(
l
.
FromPort
,
r
.
FromPort
)
{
if
!
isEqualIntPointer
(
l
.
FromPort
,
r
.
FromPort
)
{
return
false
return
false
}
}
if
!
isEqualIntPointer
(
l
.
ToPort
,
r
.
ToPort
)
{
if
!
isEqualIntPointer
(
l
.
ToPort
,
r
.
ToPort
)
{
return
false
return
false
}
}
if
!
isEqualStringPointer
(
l
.
I
PProtocol
,
r
.
IP
Protocol
)
{
if
!
isEqualStringPointer
(
l
.
I
pProtocol
,
r
.
Ip
Protocol
)
{
return
false
return
false
}
}
if
len
(
l
.
I
PRanges
)
!=
len
(
r
.
IP
Ranges
)
{
if
len
(
l
.
I
pRanges
)
!=
len
(
r
.
Ip
Ranges
)
{
return
false
return
false
}
}
for
j
:=
range
l
.
I
P
Ranges
{
for
j
:=
range
l
.
I
p
Ranges
{
if
!
isEqualStringPointer
(
l
.
I
PRanges
[
j
]
.
CIDRIP
,
r
.
IPRanges
[
j
]
.
CIDRIP
)
{
if
!
isEqualStringPointer
(
l
.
I
pRanges
[
j
]
.
CidrIp
,
r
.
IpRanges
[
j
]
.
CidrIp
)
{
return
false
return
false
}
}
}
}
if
len
(
l
.
UserI
DGroupPairs
)
!=
len
(
r
.
UserID
GroupPairs
)
{
if
len
(
l
.
UserI
dGroupPairs
)
!=
len
(
r
.
UserId
GroupPairs
)
{
return
false
return
false
}
}
for
j
:=
range
l
.
UserI
D
GroupPairs
{
for
j
:=
range
l
.
UserI
d
GroupPairs
{
if
!
isEqualStringPointer
(
l
.
UserI
DGroupPairs
[
j
]
.
GroupID
,
r
.
UserIDGroupPairs
[
j
]
.
GroupID
)
{
if
!
isEqualStringPointer
(
l
.
UserI
dGroupPairs
[
j
]
.
GroupId
,
r
.
UserIdGroupPairs
[
j
]
.
GroupId
)
{
return
false
return
false
}
}
if
compareGroupUserIDs
{
if
compareGroupUserIDs
{
if
!
isEqualStringPointer
(
l
.
UserI
DGroupPairs
[
j
]
.
UserID
,
r
.
UserIDGroupPairs
[
j
]
.
UserID
)
{
if
!
isEqualStringPointer
(
l
.
UserI
dGroupPairs
[
j
]
.
UserId
,
r
.
UserIdGroupPairs
[
j
]
.
UserId
)
{
return
false
return
false
}
}
}
}
...
@@ -1386,7 +1387,7 @@ func isEqualIPPermission(l, r *ec2.IPPermission, compareGroupUserIDs bool) bool
...
@@ -1386,7 +1387,7 @@ func isEqualIPPermission(l, r *ec2.IPPermission, compareGroupUserIDs bool) bool
// Makes sure the security group includes the specified permissions
// Makes sure the security group includes the specified permissions
// Returns true if and only if changes were made
// Returns true if and only if changes were made
// The security group must already exist
// The security group must already exist
func
(
s
*
AWSCloud
)
ensureSecurityGroupIngress
(
securityGroupId
string
,
addPermissions
[]
*
ec2
.
I
P
Permission
)
(
bool
,
error
)
{
func
(
s
*
AWSCloud
)
ensureSecurityGroupIngress
(
securityGroupId
string
,
addPermissions
[]
*
ec2
.
I
p
Permission
)
(
bool
,
error
)
{
group
,
err
:=
s
.
findSecurityGroup
(
securityGroupId
)
group
,
err
:=
s
.
findSecurityGroup
(
securityGroupId
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Warning
(
"error retrieving security group"
,
err
)
glog
.
Warning
(
"error retrieving security group"
,
err
)
...
@@ -1397,17 +1398,17 @@ func (s *AWSCloud) ensureSecurityGroupIngress(securityGroupId string, addPermiss
...
@@ -1397,17 +1398,17 @@ func (s *AWSCloud) ensureSecurityGroupIngress(securityGroupId string, addPermiss
return
false
,
fmt
.
Errorf
(
"security group not found: %s"
,
securityGroupId
)
return
false
,
fmt
.
Errorf
(
"security group not found: %s"
,
securityGroupId
)
}
}
changes
:=
[]
*
ec2
.
I
P
Permission
{}
changes
:=
[]
*
ec2
.
I
p
Permission
{}
for
_
,
addPermission
:=
range
addPermissions
{
for
_
,
addPermission
:=
range
addPermissions
{
hasUserID
:=
false
hasUserID
:=
false
for
i
:=
range
addPermission
.
UserI
D
GroupPairs
{
for
i
:=
range
addPermission
.
UserI
d
GroupPairs
{
if
addPermission
.
UserI
DGroupPairs
[
i
]
.
UserID
!=
nil
{
if
addPermission
.
UserI
dGroupPairs
[
i
]
.
UserId
!=
nil
{
hasUserID
=
true
hasUserID
=
true
}
}
}
}
found
:=
false
found
:=
false
for
_
,
groupPermission
:=
range
group
.
I
P
Permissions
{
for
_
,
groupPermission
:=
range
group
.
I
p
Permissions
{
if
isEqualIPPermission
(
addPermission
,
groupPermission
,
hasUserID
)
{
if
isEqualIPPermission
(
addPermission
,
groupPermission
,
hasUserID
)
{
found
=
true
found
=
true
break
break
...
@@ -1426,8 +1427,8 @@ func (s *AWSCloud) ensureSecurityGroupIngress(securityGroupId string, addPermiss
...
@@ -1426,8 +1427,8 @@ func (s *AWSCloud) ensureSecurityGroupIngress(securityGroupId string, addPermiss
glog
.
V
(
2
)
.
Infof
(
"Adding security group ingress: %s %v"
,
securityGroupId
,
changes
)
glog
.
V
(
2
)
.
Infof
(
"Adding security group ingress: %s %v"
,
securityGroupId
,
changes
)
request
:=
&
ec2
.
AuthorizeSecurityGroupIngressInput
{}
request
:=
&
ec2
.
AuthorizeSecurityGroupIngressInput
{}
request
.
GroupI
D
=
&
securityGroupId
request
.
GroupI
d
=
&
securityGroupId
request
.
I
P
Permissions
=
changes
request
.
I
p
Permissions
=
changes
_
,
err
=
s
.
ec2
.
AuthorizeSecurityGroupIngress
(
request
)
_
,
err
=
s
.
ec2
.
AuthorizeSecurityGroupIngress
(
request
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Warning
(
"error authorizing security group ingress"
,
err
)
glog
.
Warning
(
"error authorizing security group ingress"
,
err
)
...
@@ -1440,7 +1441,7 @@ func (s *AWSCloud) ensureSecurityGroupIngress(securityGroupId string, addPermiss
...
@@ -1440,7 +1441,7 @@ func (s *AWSCloud) ensureSecurityGroupIngress(securityGroupId string, addPermiss
// Makes sure the security group no longer includes the specified permissions
// Makes sure the security group no longer includes the specified permissions
// Returns true if and only if changes were made
// Returns true if and only if changes were made
// If the security group no longer exists, will return (false, nil)
// If the security group no longer exists, will return (false, nil)
func
(
s
*
AWSCloud
)
removeSecurityGroupIngress
(
securityGroupId
string
,
removePermissions
[]
*
ec2
.
I
P
Permission
)
(
bool
,
error
)
{
func
(
s
*
AWSCloud
)
removeSecurityGroupIngress
(
securityGroupId
string
,
removePermissions
[]
*
ec2
.
I
p
Permission
)
(
bool
,
error
)
{
group
,
err
:=
s
.
findSecurityGroup
(
securityGroupId
)
group
,
err
:=
s
.
findSecurityGroup
(
securityGroupId
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Warning
(
"error retrieving security group"
,
err
)
glog
.
Warning
(
"error retrieving security group"
,
err
)
...
@@ -1452,17 +1453,17 @@ func (s *AWSCloud) removeSecurityGroupIngress(securityGroupId string, removePerm
...
@@ -1452,17 +1453,17 @@ func (s *AWSCloud) removeSecurityGroupIngress(securityGroupId string, removePerm
return
false
,
nil
return
false
,
nil
}
}
changes
:=
[]
*
ec2
.
I
P
Permission
{}
changes
:=
[]
*
ec2
.
I
p
Permission
{}
for
_
,
removePermission
:=
range
removePermissions
{
for
_
,
removePermission
:=
range
removePermissions
{
hasUserID
:=
false
hasUserID
:=
false
for
i
:=
range
removePermission
.
UserI
D
GroupPairs
{
for
i
:=
range
removePermission
.
UserI
d
GroupPairs
{
if
removePermission
.
UserI
DGroupPairs
[
i
]
.
UserID
!=
nil
{
if
removePermission
.
UserI
dGroupPairs
[
i
]
.
UserId
!=
nil
{
hasUserID
=
true
hasUserID
=
true
}
}
}
}
var
found
*
ec2
.
I
P
Permission
var
found
*
ec2
.
I
p
Permission
for
_
,
groupPermission
:=
range
group
.
I
P
Permissions
{
for
_
,
groupPermission
:=
range
group
.
I
p
Permissions
{
if
isEqualIPPermission
(
groupPermission
,
removePermission
,
hasUserID
)
{
if
isEqualIPPermission
(
groupPermission
,
removePermission
,
hasUserID
)
{
found
=
groupPermission
found
=
groupPermission
break
break
...
@@ -1481,8 +1482,8 @@ func (s *AWSCloud) removeSecurityGroupIngress(securityGroupId string, removePerm
...
@@ -1481,8 +1482,8 @@ func (s *AWSCloud) removeSecurityGroupIngress(securityGroupId string, removePerm
glog
.
V
(
2
)
.
Infof
(
"Removing security group ingress: %s %v"
,
securityGroupId
,
changes
)
glog
.
V
(
2
)
.
Infof
(
"Removing security group ingress: %s %v"
,
securityGroupId
,
changes
)
request
:=
&
ec2
.
RevokeSecurityGroupIngressInput
{}
request
:=
&
ec2
.
RevokeSecurityGroupIngressInput
{}
request
.
GroupI
D
=
&
securityGroupId
request
.
GroupI
d
=
&
securityGroupId
request
.
I
P
Permissions
=
changes
request
.
I
p
Permissions
=
changes
_
,
err
=
s
.
ec2
.
RevokeSecurityGroupIngress
(
request
)
_
,
err
=
s
.
ec2
.
RevokeSecurityGroupIngress
(
request
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Warning
(
"error revoking security group ingress"
,
err
)
glog
.
Warning
(
"error revoking security group ingress"
,
err
)
...
@@ -1516,11 +1517,11 @@ func (s *AWSCloud) ensureSecurityGroup(name string, description string, vpcID st
...
@@ -1516,11 +1517,11 @@ func (s *AWSCloud) ensureSecurityGroup(name string, description string, vpcID st
if
len
(
securityGroups
)
>
1
{
if
len
(
securityGroups
)
>
1
{
glog
.
Warning
(
"Found multiple security groups with name:"
,
name
)
glog
.
Warning
(
"Found multiple security groups with name:"
,
name
)
}
}
return
orEmpty
(
securityGroups
[
0
]
.
GroupI
D
),
nil
return
orEmpty
(
securityGroups
[
0
]
.
GroupI
d
),
nil
}
}
createRequest
:=
&
ec2
.
CreateSecurityGroupInput
{}
createRequest
:=
&
ec2
.
CreateSecurityGroupInput
{}
createRequest
.
V
PCID
=
&
vpcID
createRequest
.
V
pcId
=
&
vpcID
createRequest
.
GroupName
=
&
name
createRequest
.
GroupName
=
&
name
createRequest
.
Description
=
&
description
createRequest
.
Description
=
&
description
...
@@ -1540,7 +1541,7 @@ func (s *AWSCloud) ensureSecurityGroup(name string, description string, vpcID st
...
@@ -1540,7 +1541,7 @@ func (s *AWSCloud) ensureSecurityGroup(name string, description string, vpcID st
}
}
time
.
Sleep
(
1
*
time
.
Second
)
time
.
Sleep
(
1
*
time
.
Second
)
}
else
{
}
else
{
groupID
=
orEmpty
(
createResponse
.
GroupI
D
)
groupID
=
orEmpty
(
createResponse
.
GroupI
d
)
break
break
}
}
}
}
...
@@ -1629,7 +1630,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
...
@@ -1629,7 +1630,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
{
{
request
:=
&
ec2
.
DescribeSubnetsInput
{}
request
:=
&
ec2
.
DescribeSubnetsInput
{}
filters
:=
[]
*
ec2
.
Filter
{}
filters
:=
[]
*
ec2
.
Filter
{}
filters
=
append
(
filters
,
newEc2Filter
(
"vpc-id"
,
orEmpty
(
vpc
.
V
PCID
)))
filters
=
append
(
filters
,
newEc2Filter
(
"vpc-id"
,
orEmpty
(
vpc
.
V
pcId
)))
// Note, this will only return subnets tagged with the cluster identifier for this Kubernetes cluster.
// Note, this will only return subnets tagged with the cluster identifier for this Kubernetes cluster.
// In the case where an AZ has public & private subnets per AWS best practices, the deployment should ensure
// In the case where an AZ has public & private subnets per AWS best practices, the deployment should ensure
// only the public subnet (where the ELB will go) is so tagged.
// only the public subnet (where the ELB will go) is so tagged.
...
@@ -1644,7 +1645,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
...
@@ -1644,7 +1645,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
// zones := []string{}
// zones := []string{}
for
_
,
subnet
:=
range
subnets
{
for
_
,
subnet
:=
range
subnets
{
subnetIDs
=
append
(
subnetIDs
,
orEmpty
(
subnet
.
SubnetI
D
))
subnetIDs
=
append
(
subnetIDs
,
orEmpty
(
subnet
.
SubnetI
d
))
if
!
strings
.
HasPrefix
(
orEmpty
(
subnet
.
AvailabilityZone
),
region
)
{
if
!
strings
.
HasPrefix
(
orEmpty
(
subnet
.
AvailabilityZone
),
region
)
{
glog
.
Error
(
"found AZ that did not match region"
,
orEmpty
(
subnet
.
AvailabilityZone
),
" vs "
,
region
)
glog
.
Error
(
"found AZ that did not match region"
,
orEmpty
(
subnet
.
AvailabilityZone
),
" vs "
,
region
)
return
nil
,
fmt
.
Errorf
(
"invalid AZ for region"
)
return
nil
,
fmt
.
Errorf
(
"invalid AZ for region"
)
...
@@ -1658,23 +1659,23 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
...
@@ -1658,23 +1659,23 @@ func (s *AWSCloud) EnsureTCPLoadBalancer(name, region string, publicIP net.IP, p
{
{
sgName
:=
"k8s-elb-"
+
name
sgName
:=
"k8s-elb-"
+
name
sgDescription
:=
"Security group for Kubernetes ELB "
+
name
sgDescription
:=
"Security group for Kubernetes ELB "
+
name
securityGroupID
,
err
=
s
.
ensureSecurityGroup
(
sgName
,
sgDescription
,
orEmpty
(
vpc
.
V
PCID
))
securityGroupID
,
err
=
s
.
ensureSecurityGroup
(
sgName
,
sgDescription
,
orEmpty
(
vpc
.
V
pcId
))
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Error
(
"error creating load balancer security group: "
,
err
)
glog
.
Error
(
"error creating load balancer security group: "
,
err
)
return
nil
,
err
return
nil
,
err
}
}
permissions
:=
[]
*
ec2
.
I
P
Permission
{}
permissions
:=
[]
*
ec2
.
I
p
Permission
{}
for
_
,
port
:=
range
ports
{
for
_
,
port
:=
range
ports
{
portInt64
:=
int64
(
port
.
Port
)
portInt64
:=
int64
(
port
.
Port
)
protocol
:=
strings
.
ToLower
(
string
(
port
.
Protocol
))
protocol
:=
strings
.
ToLower
(
string
(
port
.
Protocol
))
sourceIp
:=
"0.0.0.0/0"
sourceIp
:=
"0.0.0.0/0"
permission
:=
&
ec2
.
I
P
Permission
{}
permission
:=
&
ec2
.
I
p
Permission
{}
permission
.
FromPort
=
&
portInt64
permission
.
FromPort
=
&
portInt64
permission
.
ToPort
=
&
portInt64
permission
.
ToPort
=
&
portInt64
permission
.
I
PRanges
=
[]
*
ec2
.
IPRange
{{
CIDRIP
:
&
sourceIp
}}
permission
.
I
pRanges
=
[]
*
ec2
.
IpRange
{{
CidrIp
:
&
sourceIp
}}
permission
.
I
P
Protocol
=
&
protocol
permission
.
I
p
Protocol
=
&
protocol
permissions
=
append
(
permissions
,
permission
)
permissions
=
append
(
permissions
,
permission
)
}
}
...
@@ -1772,23 +1773,23 @@ func toStatus(lb *elb.LoadBalancerDescription) *api.LoadBalancerStatus {
...
@@ -1772,23 +1773,23 @@ func toStatus(lb *elb.LoadBalancerDescription) *api.LoadBalancerStatus {
func
findSecurityGroupForInstance
(
instance
*
ec2
.
Instance
)
*
string
{
func
findSecurityGroupForInstance
(
instance
*
ec2
.
Instance
)
*
string
{
var
securityGroupId
*
string
var
securityGroupId
*
string
for
_
,
securityGroup
:=
range
instance
.
SecurityGroups
{
for
_
,
securityGroup
:=
range
instance
.
SecurityGroups
{
if
securityGroup
==
nil
||
securityGroup
.
GroupI
D
==
nil
{
if
securityGroup
==
nil
||
securityGroup
.
GroupI
d
==
nil
{
// Not expected, but avoid panic
// Not expected, but avoid panic
glog
.
Warning
(
"Unexpected empty security group for instance: "
,
orEmpty
(
instance
.
InstanceI
D
))
glog
.
Warning
(
"Unexpected empty security group for instance: "
,
orEmpty
(
instance
.
InstanceI
d
))
continue
continue
}
}
if
securityGroupId
!=
nil
{
if
securityGroupId
!=
nil
{
// We create instances with one SG
// We create instances with one SG
glog
.
Warningf
(
"Multiple security groups found for instance (%s); will use first group (%s)"
,
orEmpty
(
instance
.
InstanceI
D
),
*
securityGroupId
)
glog
.
Warningf
(
"Multiple security groups found for instance (%s); will use first group (%s)"
,
orEmpty
(
instance
.
InstanceI
d
),
*
securityGroupId
)
continue
continue
}
else
{
}
else
{
securityGroupId
=
securityGroup
.
GroupI
D
securityGroupId
=
securityGroup
.
GroupI
d
}
}
}
}
if
securityGroupId
==
nil
{
if
securityGroupId
==
nil
{
glog
.
Warning
(
"No security group found for instance "
,
orEmpty
(
instance
.
InstanceI
D
))
glog
.
Warning
(
"No security group found for instance "
,
orEmpty
(
instance
.
InstanceI
d
))
}
}
return
securityGroupId
return
securityGroupId
...
@@ -1835,7 +1836,7 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
...
@@ -1835,7 +1836,7 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
for
_
,
instance
:=
range
allInstances
{
for
_
,
instance
:=
range
allInstances
{
securityGroupId
:=
findSecurityGroupForInstance
(
instance
)
securityGroupId
:=
findSecurityGroupForInstance
(
instance
)
if
isNilOrEmpty
(
securityGroupId
)
{
if
isNilOrEmpty
(
securityGroupId
)
{
glog
.
Warning
(
"ignoring instance without security group: "
,
orEmpty
(
instance
.
InstanceI
D
))
glog
.
Warning
(
"ignoring instance without security group: "
,
orEmpty
(
instance
.
InstanceI
d
))
continue
continue
}
}
...
@@ -1844,12 +1845,12 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
...
@@ -1844,12 +1845,12 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
// Compare to actual groups
// Compare to actual groups
for
_
,
actualGroup
:=
range
actualGroups
{
for
_
,
actualGroup
:=
range
actualGroups
{
if
isNilOrEmpty
(
actualGroup
.
GroupI
D
)
{
if
isNilOrEmpty
(
actualGroup
.
GroupI
d
)
{
glog
.
Warning
(
"ignoring group without ID: "
,
actualGroup
)
glog
.
Warning
(
"ignoring group without ID: "
,
actualGroup
)
continue
continue
}
}
actualGroupID
:=
*
actualGroup
.
GroupI
D
actualGroupID
:=
*
actualGroup
.
GroupI
d
adding
,
found
:=
instanceSecurityGroupIds
[
actualGroupID
]
adding
,
found
:=
instanceSecurityGroupIds
[
actualGroupID
]
if
found
&&
adding
{
if
found
&&
adding
{
...
@@ -1867,16 +1868,16 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
...
@@ -1867,16 +1868,16 @@ func (s *AWSCloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalan
}
else
{
}
else
{
glog
.
V
(
2
)
.
Infof
(
"Removing rule for traffic from the load balancer (%s) to instance (%s)"
,
loadBalancerSecurityGroupId
,
instanceSecurityGroupId
)
glog
.
V
(
2
)
.
Infof
(
"Removing rule for traffic from the load balancer (%s) to instance (%s)"
,
loadBalancerSecurityGroupId
,
instanceSecurityGroupId
)
}
}
sourceGroupId
:=
&
ec2
.
UserI
D
GroupPair
{}
sourceGroupId
:=
&
ec2
.
UserI
d
GroupPair
{}
sourceGroupId
.
GroupI
D
=
&
loadBalancerSecurityGroupId
sourceGroupId
.
GroupI
d
=
&
loadBalancerSecurityGroupId
allProtocols
:=
"-1"
allProtocols
:=
"-1"
permission
:=
&
ec2
.
I
P
Permission
{}
permission
:=
&
ec2
.
I
p
Permission
{}
permission
.
I
P
Protocol
=
&
allProtocols
permission
.
I
p
Protocol
=
&
allProtocols
permission
.
UserI
DGroupPairs
=
[]
*
ec2
.
UserID
GroupPair
{
sourceGroupId
}
permission
.
UserI
dGroupPairs
=
[]
*
ec2
.
UserId
GroupPair
{
sourceGroupId
}
permissions
:=
[]
*
ec2
.
I
P
Permission
{
permission
}
permissions
:=
[]
*
ec2
.
I
p
Permission
{
permission
}
if
add
{
if
add
{
changed
,
err
:=
s
.
ensureSecurityGroupIngress
(
instanceSecurityGroupId
,
permissions
)
changed
,
err
:=
s
.
ensureSecurityGroupIngress
(
instanceSecurityGroupId
,
permissions
)
...
@@ -1958,7 +1959,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancerDeleted(name, region string) error {
...
@@ -1958,7 +1959,7 @@ func (s *AWSCloud) EnsureTCPLoadBalancerDeleted(name, region string) error {
for
{
for
{
for
securityGroupID
:=
range
securityGroupIDs
{
for
securityGroupID
:=
range
securityGroupIDs
{
request
:=
&
ec2
.
DeleteSecurityGroupInput
{}
request
:=
&
ec2
.
DeleteSecurityGroupInput
{}
request
.
GroupI
D
=
&
securityGroupID
request
.
GroupI
d
=
&
securityGroupID
_
,
err
:=
s
.
ec2
.
DeleteSecurityGroup
(
request
)
_
,
err
:=
s
.
ec2
.
DeleteSecurityGroup
(
request
)
if
err
==
nil
{
if
err
==
nil
{
delete
(
securityGroupIDs
,
securityGroupID
)
delete
(
securityGroupIDs
,
securityGroupID
)
...
@@ -2046,7 +2047,7 @@ func (a *AWSCloud) getInstancesByIds(ids []string) ([]*ec2.Instance, error) {
...
@@ -2046,7 +2047,7 @@ func (a *AWSCloud) getInstancesByIds(ids []string) ([]*ec2.Instance, error) {
// Returns the instance with the specified ID
// Returns the instance with the specified ID
func
(
a
*
AWSCloud
)
getInstanceById
(
instanceID
string
)
(
*
ec2
.
Instance
,
error
)
{
func
(
a
*
AWSCloud
)
getInstanceById
(
instanceID
string
)
(
*
ec2
.
Instance
,
error
)
{
request
:=
&
ec2
.
DescribeInstancesInput
{
request
:=
&
ec2
.
DescribeInstancesInput
{
InstanceI
D
s
:
[]
*
string
{
&
instanceID
},
InstanceI
d
s
:
[]
*
string
{
&
instanceID
},
}
}
instances
,
err
:=
a
.
ec2
.
DescribeInstances
(
request
)
instances
,
err
:=
a
.
ec2
.
DescribeInstances
(
request
)
...
...
pkg/cloudprovider/providers/aws/aws_instancegroups.go
View file @
df0718ca
...
@@ -32,8 +32,8 @@ var _ InstanceGroups = &AWSCloud{}
...
@@ -32,8 +32,8 @@ var _ InstanceGroups = &AWSCloud{}
func
(
a
*
AWSCloud
)
ResizeInstanceGroup
(
instanceGroupName
string
,
size
int
)
error
{
func
(
a
*
AWSCloud
)
ResizeInstanceGroup
(
instanceGroupName
string
,
size
int
)
error
{
request
:=
&
autoscaling
.
UpdateAutoScalingGroupInput
{
request
:=
&
autoscaling
.
UpdateAutoScalingGroupInput
{
AutoScalingGroupName
:
aws
.
String
(
instanceGroupName
),
AutoScalingGroupName
:
aws
.
String
(
instanceGroupName
),
MinSize
:
aws
.
Long
(
int64
(
size
)),
MinSize
:
aws
.
Int64
(
int64
(
size
)),
MaxSize
:
aws
.
Long
(
int64
(
size
)),
MaxSize
:
aws
.
Int64
(
int64
(
size
)),
}
}
if
_
,
err
:=
a
.
asg
.
UpdateAutoScalingGroup
(
request
);
err
!=
nil
{
if
_
,
err
:=
a
.
asg
.
UpdateAutoScalingGroup
(
request
);
err
!=
nil
{
return
fmt
.
Errorf
(
"error resizing AWS autoscaling group: %v"
,
err
)
return
fmt
.
Errorf
(
"error resizing AWS autoscaling group: %v"
,
err
)
...
...
pkg/cloudprovider/providers/aws/aws_loadbalancer.go
View file @
df0718ca
...
@@ -133,7 +133,7 @@ func (s *AWSCloud) ensureLoadBalancer(name string, listeners []*elb.Listener, su
...
@@ -133,7 +133,7 @@ func (s *AWSCloud) ensureLoadBalancer(name string, listeners []*elb.Listener, su
if
orZero
(
actual
.
LoadBalancerPort
)
!=
orZero
(
expected
.
LoadBalancerPort
)
{
if
orZero
(
actual
.
LoadBalancerPort
)
!=
orZero
(
expected
.
LoadBalancerPort
)
{
continue
continue
}
}
if
orEmpty
(
actual
.
SSLCertificateI
D
)
!=
orEmpty
(
expected
.
SSLCertificateID
)
{
if
orEmpty
(
actual
.
SSLCertificateI
d
)
!=
orEmpty
(
expected
.
SSLCertificateId
)
{
continue
continue
}
}
found
=
i
found
=
i
...
@@ -247,12 +247,12 @@ func (s *AWSCloud) ensureLoadBalancerHealthCheck(loadBalancer *elb.LoadBalancerD
...
@@ -247,12 +247,12 @@ func (s *AWSCloud) ensureLoadBalancerHealthCheck(loadBalancer *elb.LoadBalancerD
func
(
s
*
AWSCloud
)
ensureLoadBalancerInstances
(
loadBalancerName
string
,
lbInstances
[]
*
elb
.
Instance
,
instances
[]
*
ec2
.
Instance
)
error
{
func
(
s
*
AWSCloud
)
ensureLoadBalancerInstances
(
loadBalancerName
string
,
lbInstances
[]
*
elb
.
Instance
,
instances
[]
*
ec2
.
Instance
)
error
{
expected
:=
sets
.
NewString
()
expected
:=
sets
.
NewString
()
for
_
,
instance
:=
range
instances
{
for
_
,
instance
:=
range
instances
{
expected
.
Insert
(
orEmpty
(
instance
.
InstanceI
D
))
expected
.
Insert
(
orEmpty
(
instance
.
InstanceI
d
))
}
}
actual
:=
sets
.
NewString
()
actual
:=
sets
.
NewString
()
for
_
,
lbInstance
:=
range
lbInstances
{
for
_
,
lbInstance
:=
range
lbInstances
{
actual
.
Insert
(
orEmpty
(
lbInstance
.
InstanceI
D
))
actual
.
Insert
(
orEmpty
(
lbInstance
.
InstanceI
d
))
}
}
additions
:=
expected
.
Difference
(
actual
)
additions
:=
expected
.
Difference
(
actual
)
...
@@ -261,14 +261,14 @@ func (s *AWSCloud) ensureLoadBalancerInstances(loadBalancerName string, lbInstan
...
@@ -261,14 +261,14 @@ func (s *AWSCloud) ensureLoadBalancerInstances(loadBalancerName string, lbInstan
addInstances
:=
[]
*
elb
.
Instance
{}
addInstances
:=
[]
*
elb
.
Instance
{}
for
instanceId
:=
range
additions
{
for
instanceId
:=
range
additions
{
addInstance
:=
&
elb
.
Instance
{}
addInstance
:=
&
elb
.
Instance
{}
addInstance
.
InstanceI
D
=
aws
.
String
(
instanceId
)
addInstance
.
InstanceI
d
=
aws
.
String
(
instanceId
)
addInstances
=
append
(
addInstances
,
addInstance
)
addInstances
=
append
(
addInstances
,
addInstance
)
}
}
removeInstances
:=
[]
*
elb
.
Instance
{}
removeInstances
:=
[]
*
elb
.
Instance
{}
for
instanceId
:=
range
removals
{
for
instanceId
:=
range
removals
{
removeInstance
:=
&
elb
.
Instance
{}
removeInstance
:=
&
elb
.
Instance
{}
removeInstance
.
InstanceI
D
=
aws
.
String
(
instanceId
)
removeInstance
.
InstanceI
d
=
aws
.
String
(
instanceId
)
removeInstances
=
append
(
removeInstances
,
removeInstance
)
removeInstances
=
append
(
removeInstances
,
removeInstance
)
}
}
...
...
pkg/cloudprovider/providers/aws/aws_routes.go
View file @
df0718ca
...
@@ -56,8 +56,8 @@ func (s *AWSCloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, error
...
@@ -56,8 +56,8 @@ func (s *AWSCloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, error
var
routes
[]
*
cloudprovider
.
Route
var
routes
[]
*
cloudprovider
.
Route
for
_
,
r
:=
range
table
.
Routes
{
for
_
,
r
:=
range
table
.
Routes
{
instanceID
:=
orEmpty
(
r
.
InstanceI
D
)
instanceID
:=
orEmpty
(
r
.
InstanceI
d
)
destinationCIDR
:=
orEmpty
(
r
.
DestinationC
IDR
Block
)
destinationCIDR
:=
orEmpty
(
r
.
DestinationC
idr
Block
)
if
instanceID
==
""
||
destinationCIDR
==
""
{
if
instanceID
==
""
||
destinationCIDR
==
""
{
continue
continue
...
@@ -67,7 +67,7 @@ func (s *AWSCloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, error
...
@@ -67,7 +67,7 @@ func (s *AWSCloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, error
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
instanceName
:=
orEmpty
(
instance
.
PrivateD
NS
Name
)
instanceName
:=
orEmpty
(
instance
.
PrivateD
ns
Name
)
routeName
:=
clusterName
+
"-"
+
destinationCIDR
routeName
:=
clusterName
+
"-"
+
destinationCIDR
routes
=
append
(
routes
,
&
cloudprovider
.
Route
{
Name
:
routeName
,
TargetInstance
:
instanceName
,
DestinationCIDR
:
destinationCIDR
})
routes
=
append
(
routes
,
&
cloudprovider
.
Route
{
Name
:
routeName
,
TargetInstance
:
instanceName
,
DestinationCIDR
:
destinationCIDR
})
}
}
...
@@ -78,8 +78,8 @@ func (s *AWSCloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, error
...
@@ -78,8 +78,8 @@ func (s *AWSCloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, error
// Sets the instance attribute "source-dest-check" to the specified value
// Sets the instance attribute "source-dest-check" to the specified value
func
(
s
*
AWSCloud
)
configureInstanceSourceDestCheck
(
instanceID
string
,
sourceDestCheck
bool
)
error
{
func
(
s
*
AWSCloud
)
configureInstanceSourceDestCheck
(
instanceID
string
,
sourceDestCheck
bool
)
error
{
request
:=
&
ec2
.
ModifyInstanceAttributeInput
{}
request
:=
&
ec2
.
ModifyInstanceAttributeInput
{}
request
.
InstanceI
D
=
aws
.
String
(
instanceID
)
request
.
InstanceI
d
=
aws
.
String
(
instanceID
)
request
.
SourceDestCheck
=
&
ec2
.
AttributeBooleanValue
{
Value
:
aws
.
Bool
ean
(
sourceDestCheck
)}
request
.
SourceDestCheck
=
&
ec2
.
AttributeBooleanValue
{
Value
:
aws
.
Bool
(
sourceDestCheck
)}
_
,
err
:=
s
.
ec2
.
ModifyInstanceAttribute
(
request
)
_
,
err
:=
s
.
ec2
.
ModifyInstanceAttribute
(
request
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -98,7 +98,7 @@ func (s *AWSCloud) CreateRoute(clusterName string, nameHint string, route *cloud
...
@@ -98,7 +98,7 @@ func (s *AWSCloud) CreateRoute(clusterName string, nameHint string, route *cloud
// In addition to configuring the route itself, we also need to configure the instance to accept that traffic
// In addition to configuring the route itself, we also need to configure the instance to accept that traffic
// On AWS, this requires turning source-dest checks off
// On AWS, this requires turning source-dest checks off
err
=
s
.
configureInstanceSourceDestCheck
(
orEmpty
(
instance
.
InstanceI
D
),
false
)
err
=
s
.
configureInstanceSourceDestCheck
(
orEmpty
(
instance
.
InstanceI
d
),
false
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -110,9 +110,9 @@ func (s *AWSCloud) CreateRoute(clusterName string, nameHint string, route *cloud
...
@@ -110,9 +110,9 @@ func (s *AWSCloud) CreateRoute(clusterName string, nameHint string, route *cloud
request
:=
&
ec2
.
CreateRouteInput
{}
request
:=
&
ec2
.
CreateRouteInput
{}
// TODO: use ClientToken for idempotency?
// TODO: use ClientToken for idempotency?
request
.
DestinationC
IDR
Block
=
aws
.
String
(
route
.
DestinationCIDR
)
request
.
DestinationC
idr
Block
=
aws
.
String
(
route
.
DestinationCIDR
)
request
.
InstanceI
D
=
instance
.
InstanceID
request
.
InstanceI
d
=
instance
.
InstanceId
request
.
RouteTableI
D
=
table
.
RouteTableID
request
.
RouteTableI
d
=
table
.
RouteTableId
_
,
err
=
s
.
ec2
.
CreateRoute
(
request
)
_
,
err
=
s
.
ec2
.
CreateRoute
(
request
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -131,8 +131,8 @@ func (s *AWSCloud) DeleteRoute(clusterName string, route *cloudprovider.Route) e
...
@@ -131,8 +131,8 @@ func (s *AWSCloud) DeleteRoute(clusterName string, route *cloudprovider.Route) e
}
}
request
:=
&
ec2
.
DeleteRouteInput
{}
request
:=
&
ec2
.
DeleteRouteInput
{}
request
.
DestinationC
IDR
Block
=
aws
.
String
(
route
.
DestinationCIDR
)
request
.
DestinationC
idr
Block
=
aws
.
String
(
route
.
DestinationCIDR
)
request
.
RouteTableI
D
=
table
.
RouteTableID
request
.
RouteTableI
d
=
table
.
RouteTableId
_
,
err
=
s
.
ec2
.
DeleteRoute
(
request
)
_
,
err
=
s
.
ec2
.
DeleteRoute
(
request
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/cloudprovider/providers/aws/aws_test.go
View file @
df0718ca
...
@@ -132,8 +132,8 @@ func NewFakeAWSServices() *FakeAWSServices {
...
@@ -132,8 +132,8 @@ func NewFakeAWSServices() *FakeAWSServices {
s
.
instanceId
=
"i-self"
s
.
instanceId
=
"i-self"
s
.
privateDnsName
=
"ip-172-20-0-100.ec2.internal"
s
.
privateDnsName
=
"ip-172-20-0-100.ec2.internal"
var
selfInstance
ec2
.
Instance
var
selfInstance
ec2
.
Instance
selfInstance
.
InstanceI
D
=
&
s
.
instanceId
selfInstance
.
InstanceI
d
=
&
s
.
instanceId
selfInstance
.
PrivateD
NS
Name
=
&
s
.
privateDnsName
selfInstance
.
PrivateD
ns
Name
=
&
s
.
privateDnsName
s
.
instances
=
[]
*
ec2
.
Instance
{
&
selfInstance
}
s
.
instances
=
[]
*
ec2
.
Instance
{
&
selfInstance
}
var
tag
ec2
.
Tag
var
tag
ec2
.
Tag
...
@@ -263,10 +263,10 @@ func contains(haystack []*string, needle string) bool {
...
@@ -263,10 +263,10 @@ func contains(haystack []*string, needle string) bool {
func
instanceMatchesFilter
(
instance
*
ec2
.
Instance
,
filter
*
ec2
.
Filter
)
bool
{
func
instanceMatchesFilter
(
instance
*
ec2
.
Instance
,
filter
*
ec2
.
Filter
)
bool
{
name
:=
*
filter
.
Name
name
:=
*
filter
.
Name
if
name
==
"private-dns-name"
{
if
name
==
"private-dns-name"
{
if
instance
.
PrivateD
NS
Name
==
nil
{
if
instance
.
PrivateD
ns
Name
==
nil
{
return
false
return
false
}
}
return
contains
(
filter
.
Values
,
*
instance
.
PrivateD
NS
Name
)
return
contains
(
filter
.
Values
,
*
instance
.
PrivateD
ns
Name
)
}
}
panic
(
"Unknown filter name: "
+
name
)
panic
(
"Unknown filter name: "
+
name
)
}
}
...
@@ -274,15 +274,15 @@ func instanceMatchesFilter(instance *ec2.Instance, filter *ec2.Filter) bool {
...
@@ -274,15 +274,15 @@ func instanceMatchesFilter(instance *ec2.Instance, filter *ec2.Filter) bool {
func
(
self
*
FakeEC2
)
DescribeInstances
(
request
*
ec2
.
DescribeInstancesInput
)
([]
*
ec2
.
Instance
,
error
)
{
func
(
self
*
FakeEC2
)
DescribeInstances
(
request
*
ec2
.
DescribeInstancesInput
)
([]
*
ec2
.
Instance
,
error
)
{
matches
:=
[]
*
ec2
.
Instance
{}
matches
:=
[]
*
ec2
.
Instance
{}
for
_
,
instance
:=
range
self
.
aws
.
instances
{
for
_
,
instance
:=
range
self
.
aws
.
instances
{
if
request
.
InstanceI
D
s
!=
nil
{
if
request
.
InstanceI
d
s
!=
nil
{
if
instance
.
InstanceI
D
==
nil
{
if
instance
.
InstanceI
d
==
nil
{
glog
.
Warning
(
"Instance with no instance id: "
,
instance
)
glog
.
Warning
(
"Instance with no instance id: "
,
instance
)
continue
continue
}
}
found
:=
false
found
:=
false
for
_
,
instanceId
:=
range
request
.
InstanceI
D
s
{
for
_
,
instanceId
:=
range
request
.
InstanceI
d
s
{
if
*
instanceId
==
*
instance
.
InstanceI
D
{
if
*
instanceId
==
*
instance
.
InstanceI
d
{
found
=
true
found
=
true
break
break
}
}
...
@@ -381,7 +381,7 @@ func (ec2 *FakeEC2) RevokeSecurityGroupIngress(*ec2.RevokeSecurityGroupIngressIn
...
@@ -381,7 +381,7 @@ func (ec2 *FakeEC2) RevokeSecurityGroupIngress(*ec2.RevokeSecurityGroupIngressIn
panic
(
"Not implemented"
)
panic
(
"Not implemented"
)
}
}
func
(
ec2
*
FakeEC2
)
DescribeVPCs
(
*
ec2
.
DescribeV
PCsInput
)
([]
*
ec2
.
VPC
,
error
)
{
func
(
ec2
*
FakeEC2
)
DescribeVPCs
(
*
ec2
.
DescribeV
pcsInput
)
([]
*
ec2
.
Vpc
,
error
)
{
panic
(
"Not implemented"
)
panic
(
"Not implemented"
)
}
}
...
@@ -500,8 +500,8 @@ func TestList(t *testing.T) {
...
@@ -500,8 +500,8 @@ func TestList(t *testing.T) {
Value
:
aws
.
String
(
"foo"
),
Value
:
aws
.
String
(
"foo"
),
}
}
instance0
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag0
}
instance0
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag0
}
instance0
.
InstanceI
D
=
aws
.
String
(
"instance0"
)
instance0
.
InstanceI
d
=
aws
.
String
(
"instance0"
)
instance0
.
PrivateD
NS
Name
=
aws
.
String
(
"instance0.ec2.internal"
)
instance0
.
PrivateD
ns
Name
=
aws
.
String
(
"instance0.ec2.internal"
)
state0
:=
ec2
.
InstanceState
{
state0
:=
ec2
.
InstanceState
{
Name
:
aws
.
String
(
"running"
),
Name
:
aws
.
String
(
"running"
),
}
}
...
@@ -513,8 +513,8 @@ func TestList(t *testing.T) {
...
@@ -513,8 +513,8 @@ func TestList(t *testing.T) {
Value
:
aws
.
String
(
"bar"
),
Value
:
aws
.
String
(
"bar"
),
}
}
instance1
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag1
}
instance1
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag1
}
instance1
.
InstanceI
D
=
aws
.
String
(
"instance1"
)
instance1
.
InstanceI
d
=
aws
.
String
(
"instance1"
)
instance1
.
PrivateD
NS
Name
=
aws
.
String
(
"instance1.ec2.internal"
)
instance1
.
PrivateD
ns
Name
=
aws
.
String
(
"instance1.ec2.internal"
)
state1
:=
ec2
.
InstanceState
{
state1
:=
ec2
.
InstanceState
{
Name
:
aws
.
String
(
"running"
),
Name
:
aws
.
String
(
"running"
),
}
}
...
@@ -526,8 +526,8 @@ func TestList(t *testing.T) {
...
@@ -526,8 +526,8 @@ func TestList(t *testing.T) {
Value
:
aws
.
String
(
"baz"
),
Value
:
aws
.
String
(
"baz"
),
}
}
instance2
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag2
}
instance2
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag2
}
instance2
.
InstanceI
D
=
aws
.
String
(
"instance2"
)
instance2
.
InstanceI
d
=
aws
.
String
(
"instance2"
)
instance2
.
PrivateD
NS
Name
=
aws
.
String
(
"instance2.ec2.internal"
)
instance2
.
PrivateD
ns
Name
=
aws
.
String
(
"instance2.ec2.internal"
)
state2
:=
ec2
.
InstanceState
{
state2
:=
ec2
.
InstanceState
{
Name
:
aws
.
String
(
"running"
),
Name
:
aws
.
String
(
"running"
),
}
}
...
@@ -539,8 +539,8 @@ func TestList(t *testing.T) {
...
@@ -539,8 +539,8 @@ func TestList(t *testing.T) {
Value
:
aws
.
String
(
"quux"
),
Value
:
aws
.
String
(
"quux"
),
}
}
instance3
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag3
}
instance3
.
Tags
=
[]
*
ec2
.
Tag
{
&
tag3
}
instance3
.
InstanceI
D
=
aws
.
String
(
"instance3"
)
instance3
.
InstanceI
d
=
aws
.
String
(
"instance3"
)
instance3
.
PrivateD
NS
Name
=
aws
.
String
(
"instance3.ec2.internal"
)
instance3
.
PrivateD
ns
Name
=
aws
.
String
(
"instance3.ec2.internal"
)
state3
:=
ec2
.
InstanceState
{
state3
:=
ec2
.
InstanceState
{
Name
:
aws
.
String
(
"running"
),
Name
:
aws
.
String
(
"running"
),
}
}
...
@@ -585,10 +585,10 @@ func TestNodeAddresses(t *testing.T) {
...
@@ -585,10 +585,10 @@ func TestNodeAddresses(t *testing.T) {
var
instance1
ec2
.
Instance
var
instance1
ec2
.
Instance
//0
//0
instance0
.
InstanceI
D
=
aws
.
String
(
"instance-same"
)
instance0
.
InstanceI
d
=
aws
.
String
(
"instance-same"
)
instance0
.
PrivateD
NS
Name
=
aws
.
String
(
"instance-same.ec2.internal"
)
instance0
.
PrivateD
ns
Name
=
aws
.
String
(
"instance-same.ec2.internal"
)
instance0
.
PrivateI
P
Address
=
aws
.
String
(
"192.168.0.1"
)
instance0
.
PrivateI
p
Address
=
aws
.
String
(
"192.168.0.1"
)
instance0
.
PublicI
P
Address
=
aws
.
String
(
"1.2.3.4"
)
instance0
.
PublicI
p
Address
=
aws
.
String
(
"1.2.3.4"
)
instance0
.
InstanceType
=
aws
.
String
(
"c3.large"
)
instance0
.
InstanceType
=
aws
.
String
(
"c3.large"
)
state0
:=
ec2
.
InstanceState
{
state0
:=
ec2
.
InstanceState
{
Name
:
aws
.
String
(
"running"
),
Name
:
aws
.
String
(
"running"
),
...
@@ -596,9 +596,9 @@ func TestNodeAddresses(t *testing.T) {
...
@@ -596,9 +596,9 @@ func TestNodeAddresses(t *testing.T) {
instance0
.
State
=
&
state0
instance0
.
State
=
&
state0
//1
//1
instance1
.
InstanceI
D
=
aws
.
String
(
"instance-same"
)
instance1
.
InstanceI
d
=
aws
.
String
(
"instance-same"
)
instance1
.
PrivateD
NS
Name
=
aws
.
String
(
"instance-same.ec2.internal"
)
instance1
.
PrivateD
ns
Name
=
aws
.
String
(
"instance-same.ec2.internal"
)
instance1
.
PrivateI
P
Address
=
aws
.
String
(
"192.168.0.2"
)
instance1
.
PrivateI
p
Address
=
aws
.
String
(
"192.168.0.2"
)
instance1
.
InstanceType
=
aws
.
String
(
"c3.large"
)
instance1
.
InstanceType
=
aws
.
String
(
"c3.large"
)
state1
:=
ec2
.
InstanceState
{
state1
:=
ec2
.
InstanceState
{
Name
:
aws
.
String
(
"running"
),
Name
:
aws
.
String
(
"running"
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment