@@ -689,35 +689,49 @@ func (d *Driver) innerCreate() error {
689689
690690 var instance * ec2.Instance
691691 if d .RequestSpotInstance {
692- req := ec2.RequestSpotInstancesInput {
693- LaunchSpecification : & ec2.RequestSpotLaunchSpecification {
694- ImageId : & d .AMI ,
695- Placement : & ec2.SpotPlacement {
696- AvailabilityZone : & regionZone ,
697- },
698- KeyName : & d .KeyName ,
699- InstanceType : & d .InstanceType ,
700- NetworkInterfaces : netSpecs ,
701- Monitoring : & ec2.RunInstancesMonitoringEnabled {Enabled : aws .Bool (d .Monitoring )},
702- IamInstanceProfile : & ec2.IamInstanceProfileSpecification {
703- Name : & d .IamInstanceProfile ,
692+ req := ec2.RunInstancesInput {
693+ ImageId : & d .AMI ,
694+ MinCount : aws .Int64 (1 ),
695+ MaxCount : aws .Int64 (1 ),
696+ Placement : & ec2.Placement {
697+ AvailabilityZone : & regionZone ,
698+ },
699+ KeyName : & d .KeyName ,
700+ InstanceType : & d .InstanceType ,
701+ NetworkInterfaces : netSpecs ,
702+ Monitoring : & ec2.RunInstancesMonitoringEnabled {Enabled : aws .Bool (d .Monitoring )},
703+ IamInstanceProfile : & ec2.IamInstanceProfileSpecification {
704+ Name : & d .IamInstanceProfile ,
705+ },
706+ EbsOptimized : & d .UseEbsOptimizedInstance ,
707+ BlockDeviceMappings : bdmList ,
708+ UserData : & userdata ,
709+ MetadataOptions : & ec2.InstanceMetadataOptionsRequest {},
710+ InstanceMarketOptions : & ec2.InstanceMarketOptionsRequest {
711+ MarketType : aws .String (ec2 .MarketTypeSpot ),
712+ SpotOptions : & ec2.SpotMarketOptions {
713+ MaxPrice : & d .SpotPrice ,
714+ SpotInstanceType : aws .String (ec2 .SpotInstanceTypeOneTime ),
704715 },
705- EbsOptimized : & d .UseEbsOptimizedInstance ,
706- BlockDeviceMappings : bdmList ,
707- UserData : & userdata ,
708716 },
709- InstanceCount : aws .Int64 (1 ),
710- SpotPrice : & d .SpotPrice ,
711717 }
712- if d .BlockDurationMinutes != 0 {
713- req .BlockDurationMinutes = & d .BlockDurationMinutes
718+
719+ if d .HttpEndpoint != "" {
720+ req .MetadataOptions .HttpEndpoint = aws .String (d .HttpEndpoint )
721+ }
722+
723+ if d .HttpTokens != "" {
724+ req .MetadataOptions .HttpTokens = aws .String (d .HttpTokens )
714725 }
715726
716- spotInstanceRequest , err := d .getClient ().RequestSpotInstances (& req )
727+ if d .BlockDurationMinutes != 0 {
728+ req .InstanceMarketOptions .SpotOptions .BlockDurationMinutes = & d .BlockDurationMinutes
729+ }
730+ res , err := d .getClient ().RunInstances (& req )
717731 if err != nil {
718732 return fmt .Errorf ("Error request spot instance: %s" , err )
719733 }
720- d .spotInstanceRequestId = * spotInstanceRequest . SpotInstanceRequests [0 ].SpotInstanceRequestId
734+ d .spotInstanceRequestId = * res . Instances [0 ].SpotInstanceRequestId
721735
722736 log .Info ("Waiting for spot instance..." )
723737 for i := 0 ; i < 3 ; i ++ {
@@ -777,7 +791,7 @@ func (d *Driver) innerCreate() error {
777791 ec2VolumeResource , // EBS volume
778792 ec2NetworkInterfaceResource ,
779793 })
780- inst , err := d . getClient (). RunInstances ( & ec2.RunInstancesInput {
794+ req := ec2.RunInstancesInput {
781795 ImageId : & d .AMI ,
782796 MinCount : aws .Int64 (1 ),
783797 MaxCount : aws .Int64 (1 ),
@@ -794,13 +808,24 @@ func (d *Driver) innerCreate() error {
794808 EbsOptimized : & d .UseEbsOptimizedInstance ,
795809 BlockDeviceMappings : bdmList ,
796810 UserData : & userdata ,
811+ MetadataOptions : & ec2.InstanceMetadataOptionsRequest {},
797812 TagSpecifications : resourceTags ,
798- })
813+ }
814+
815+ if d .HttpEndpoint != "" {
816+ req .MetadataOptions .HttpEndpoint = aws .String (d .HttpEndpoint )
817+ }
818+
819+ if d .HttpTokens != "" {
820+ req .MetadataOptions .HttpTokens = aws .String (d .HttpTokens )
821+ }
822+
823+ res , err := d .getClient ().RunInstances (& req )
799824
800825 if err != nil {
801826 return fmt .Errorf ("Error launching instance: %s" , err )
802827 }
803- instance = inst .Instances [0 ]
828+ instance = res .Instances [0 ]
804829 }
805830
806831 d .InstanceId = * instance .InstanceId
@@ -830,17 +855,6 @@ func (d *Driver) innerCreate() error {
830855 }
831856 }
832857
833- if d .HttpEndpoint != "" || d .HttpTokens != "" {
834- _ , err := d .getClient ().ModifyInstanceMetadataOptions (& ec2.ModifyInstanceMetadataOptionsInput {
835- InstanceId : aws .String (d .InstanceId ),
836- HttpEndpoint : aws .String (d .HttpEndpoint ),
837- HttpTokens : aws .String (d .HttpTokens ),
838- })
839- if err != nil {
840- return fmt .Errorf ("Error modifying instance metadata options for instance: %s" , err )
841- }
842- }
843-
844858 log .Debugf ("created instance ID %s, IP address %s, Private IP address %s" ,
845859 d .InstanceId ,
846860 d .IPAddress ,
0 commit comments