1
1
package hudson .plugins .ec2 ;
2
2
3
- import com .amazonaws .AmazonClientException ;
4
- import com .amazonaws .AmazonServiceException ;
5
- import com .amazonaws .services .ec2 .AmazonEC2 ;
6
- import com .amazonaws .services .ec2 .model .AvailabilityZone ;
7
- import com .amazonaws .services .ec2 .model .DescribeAvailabilityZonesResult ;
8
- import com .amazonaws .services .ec2 .model .DescribeImagesRequest ;
9
- import com .amazonaws .services .ec2 .model .DescribeInstancesRequest ;
10
- import com .amazonaws .services .ec2 .model .Image ;
11
- import com .amazonaws .services .ec2 .model .Instance ;
12
- import com .amazonaws .services .ec2 .model .Reservation ;
13
3
import edu .umd .cs .findbugs .annotations .CheckForNull ;
14
4
import java .util .ArrayList ;
15
5
import java .util .Collections ;
16
6
import java .util .List ;
17
7
import java .util .logging .Logger ;
18
8
import org .apache .commons .lang .StringUtils ;
9
+ import software .amazon .awssdk .awscore .exception .AwsServiceException ;
10
+ import software .amazon .awssdk .core .exception .SdkException ;
11
+ import software .amazon .awssdk .services .ec2 .Ec2Client ;
12
+ import software .amazon .awssdk .services .ec2 .model .AvailabilityZone ;
13
+ import software .amazon .awssdk .services .ec2 .model .DescribeAvailabilityZonesResponse ;
14
+ import software .amazon .awssdk .services .ec2 .model .DescribeImagesRequest ;
15
+ import software .amazon .awssdk .services .ec2 .model .DescribeInstancesRequest ;
16
+ import software .amazon .awssdk .services .ec2 .model .Image ;
17
+ import software .amazon .awssdk .services .ec2 .model .Instance ;
18
+ import software .amazon .awssdk .services .ec2 .model .Reservation ;
19
19
20
20
final class CloudHelper {
21
21
private static final Logger LOGGER = Logger .getLogger (CloudHelper .class .getName ());
22
22
23
- static Instance getInstanceWithRetry (String instanceId , EC2Cloud cloud )
24
- throws AmazonClientException , InterruptedException {
23
+ static Instance getInstanceWithRetry (String instanceId , EC2Cloud cloud ) throws SdkException , InterruptedException {
25
24
// Sometimes even after a successful RunInstances, DescribeInstances
26
25
// returns an error for a few seconds. We do a few retries instead of
27
26
// failing instantly. See [JENKINS-15319].
28
27
for (int i = 0 ; i < 5 ; i ++) {
29
28
try {
30
29
return getInstance (instanceId , cloud );
31
- } catch (AmazonServiceException e ) {
32
- if (e .getErrorCode ().equals ("InvalidInstanceID.NotFound" )
33
- || EC2Cloud .EC2_REQUEST_EXPIRED_ERROR_CODE .equals (e .getErrorCode ())) {
30
+ } catch (AwsServiceException e ) {
31
+ if (e .awsErrorDetails ().errorCode ().equals ("InvalidInstanceID.NotFound" )
32
+ || EC2Cloud .EC2_REQUEST_EXPIRED_ERROR_CODE .equals (
33
+ e .awsErrorDetails ().errorCode ())) {
34
34
// retry in 5 seconds.
35
35
Thread .sleep (5000 );
36
36
continue ;
@@ -43,50 +43,51 @@ static Instance getInstanceWithRetry(String instanceId, EC2Cloud cloud)
43
43
}
44
44
45
45
@ CheckForNull
46
- static Instance getInstance (String instanceId , EC2Cloud cloud ) throws AmazonClientException {
46
+ static Instance getInstance (String instanceId , EC2Cloud cloud ) throws SdkException {
47
47
if (StringUtils .isEmpty (instanceId ) || cloud == null ) {
48
48
return null ;
49
49
}
50
50
51
- DescribeInstancesRequest request = new DescribeInstancesRequest ();
52
- request .setInstanceIds (Collections .singletonList (instanceId ));
51
+ DescribeInstancesRequest request = DescribeInstancesRequest .builder ()
52
+ .instanceIds (Collections .singletonList (instanceId ))
53
+ .build ();
53
54
54
55
List <Reservation > reservations =
55
- cloud .connect ().describeInstances (request ).getReservations ();
56
+ cloud .connect ().describeInstances (request ).reservations ();
56
57
if (reservations .size () != 1 ) {
57
58
String message = "Unexpected number of reservations reported by EC2 for instance id '" + instanceId
58
59
+ "', expected 1 result, found " + reservations + "." ;
59
60
if (reservations .isEmpty ()) {
60
61
message += " Instance seems to be dead." ;
61
62
}
62
63
LOGGER .info (message );
63
- throw new AmazonClientException ( message );
64
+ throw SdkException . builder (). message ( message ). build ( );
64
65
}
65
66
Reservation reservation = reservations .get (0 );
66
67
67
- List <Instance > instances = reservation .getInstances ();
68
+ List <Instance > instances = reservation .instances ();
68
69
if (instances .size () != 1 ) {
69
70
String message = "Unexpected number of instances reported by EC2 for instance id '" + instanceId
70
71
+ "', expected 1 result, found " + instances + "." ;
71
72
if (instances .isEmpty ()) {
72
73
message += " Instance seems to be dead." ;
73
74
}
74
75
LOGGER .info (message );
75
- throw new AmazonClientException ( message );
76
+ throw SdkException . builder (). message ( message ). build ( );
76
77
}
77
78
return instances .get (0 );
78
79
}
79
80
80
81
@ CheckForNull
81
- static Image getAmiImage (AmazonEC2 ec2 , String ami ) {
82
+ static Image getAmiImage (Ec2Client ec2 , String ami ) {
82
83
List <String > images = Collections .singletonList (ami );
83
84
List <String > owners = Collections .emptyList ();
84
85
List <String > users = Collections .emptyList ();
85
- DescribeImagesRequest request = new DescribeImagesRequest ();
86
- request . setImageIds (images );
87
- request . setOwners (owners );
88
- request . setExecutableUsers (users );
89
- List <Image > img = ec2 .describeImages (request ). getImages ();
86
+ DescribeImagesRequest . Builder requestBuilder = DescribeImagesRequest . builder ();
87
+ requestBuilder . imageIds (images );
88
+ requestBuilder . owners (owners );
89
+ requestBuilder . executableUsers (users );
90
+ List <Image > img = ec2 .describeImages (requestBuilder . build ()). images ();
90
91
if (img == null || img .isEmpty ()) {
91
92
// de-registered AMI causes an empty list to be
92
93
// returned. so be defensive
@@ -98,14 +99,14 @@ static Image getAmiImage(AmazonEC2 ec2, String ami) {
98
99
}
99
100
100
101
// Retrieve the availability zones for the region connected on
101
- static ArrayList <String > getAvailabilityZones (AmazonEC2 ec2 ) {
102
+ static ArrayList <String > getAvailabilityZones (Ec2Client ec2 ) {
102
103
ArrayList <String > availabilityZones = new ArrayList <>();
103
104
104
- DescribeAvailabilityZonesResult zones = ec2 .describeAvailabilityZones ();
105
- List <AvailabilityZone > zoneList = zones .getAvailabilityZones ();
105
+ DescribeAvailabilityZonesResponse zones = ec2 .describeAvailabilityZones ();
106
+ List <AvailabilityZone > zoneList = zones .availabilityZones ();
106
107
107
108
for (AvailabilityZone z : zoneList ) {
108
- availabilityZones .add (z .getZoneName ());
109
+ availabilityZones .add (z .zoneName ());
109
110
}
110
111
111
112
return availabilityZones ;
0 commit comments