X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/78c908ca43839aa38bb45ef9a9959e1005e39494..c38a28a51ba3fbe3fe58e72a5e16c27f79c89719:/lib/cloud/ec2/ec2.go diff --git a/lib/cloud/ec2/ec2.go b/lib/cloud/ec2/ec2.go index e2ad6b42b2..d373d2b718 100644 --- a/lib/cloud/ec2/ec2.go +++ b/lib/cloud/ec2/ec2.go @@ -25,8 +25,6 @@ import ( "golang.org/x/crypto/ssh" ) -const tagKeyInstanceSetID = "arvados-dispatch-id" - // Driver is the ec2 implementation of the cloud.Driver interface. var Driver = cloud.DriverFunc(newEC2InstanceSet) @@ -34,7 +32,7 @@ type ec2InstanceSetConfig struct { AccessKeyID string SecretAccessKey string Region string - SecurityGroupIDs []string + SecurityGroupIDs arvados.StringSet SubnetID string AdminUsername string EBSVolumeType string @@ -58,7 +56,7 @@ type ec2InstanceSet struct { keys map[string]string } -func newEC2InstanceSet(config json.RawMessage, instanceSetID cloud.InstanceSetID, logger logrus.FieldLogger) (prv cloud.InstanceSet, err error) { +func newEC2InstanceSet(config json.RawMessage, instanceSetID cloud.InstanceSetID, _ cloud.SharedResourceTags, logger logrus.FieldLogger) (prv cloud.InstanceSet, err error) { instanceSet := &ec2InstanceSet{ instanceSetID: instanceSetID, logger: logger, @@ -155,12 +153,7 @@ func (instanceSet *ec2InstanceSet) Create( } instanceSet.keysMtx.Unlock() - ec2tags := []*ec2.Tag{ - &ec2.Tag{ - Key: aws.String(tagKeyInstanceSetID), - Value: aws.String(string(instanceSet.instanceSetID)), - }, - } + ec2tags := []*ec2.Tag{} for k, v := range newTags { ec2tags = append(ec2tags, &ec2.Tag{ Key: aws.String(k), @@ -168,6 +161,11 @@ func (instanceSet *ec2InstanceSet) Create( }) } + var groups []string + for sg := range instanceSet.ec2config.SecurityGroupIDs { + groups = append(groups, sg) + } + rii := ec2.RunInstancesInput{ ImageId: aws.String(string(imageID)), InstanceType: &instanceType.ProviderType, @@ -180,7 +178,7 @@ func (instanceSet *ec2InstanceSet) Create( AssociatePublicIpAddress: aws.Bool(false), DeleteOnTermination: aws.Bool(true), DeviceIndex: aws.Int64(0), - Groups: aws.StringSlice(instanceSet.ec2config.SecurityGroupIDs), + Groups: aws.StringSlice(groups), SubnetId: &instanceSet.ec2config.SubnetID, }}, DisableApiTermination: aws.Bool(false), @@ -224,13 +222,15 @@ func (instanceSet *ec2InstanceSet) Create( }, nil } -func (instanceSet *ec2InstanceSet) Instances(cloud.InstanceTags) (instances []cloud.Instance, err error) { - dii := &ec2.DescribeInstancesInput{ - Filters: []*ec2.Filter{&ec2.Filter{ - Name: aws.String("tag:" + tagKeyInstanceSetID), - Values: []*string{aws.String(string(instanceSet.instanceSetID))}, - }}} - +func (instanceSet *ec2InstanceSet) Instances(tags cloud.InstanceTags) (instances []cloud.Instance, err error) { + var filters []*ec2.Filter + for k, v := range tags { + filters = append(filters, &ec2.Filter{ + Name: aws.String("tag:" + k), + Values: []*string{aws.String(v)}, + }) + } + dii := &ec2.DescribeInstancesInput{Filters: filters} for { dio, err := instanceSet.client.DescribeInstances(dii) if err != nil { @@ -272,12 +272,7 @@ func (inst *ec2Instance) ProviderType() string { } func (inst *ec2Instance) SetTags(newTags cloud.InstanceTags) error { - ec2tags := []*ec2.Tag{ - &ec2.Tag{ - Key: aws.String(tagKeyInstanceSetID), - Value: aws.String(string(inst.provider.instanceSetID)), - }, - } + var ec2tags []*ec2.Tag for k, v := range newTags { ec2tags = append(ec2tags, &ec2.Tag{ Key: aws.String(k),