@@ -283,6 +283,56 @@ public static String getUserData() {
283
283
return getData (EC2_USERDATA_ROOT );
284
284
}
285
285
286
+
287
+ public static InstanceInfo getInstanceInfo () {
288
+ return doGetInstanceInfo (getData (EC2_DYNAMICDATA_ROOT + INSTANCE_IDENTITY_DOCUMENT ));
289
+ }
290
+
291
+ static InstanceInfo doGetInstanceInfo (String json ) {
292
+ if (json != null ) {
293
+ try {
294
+ Map <String , JsonNode > jsonNode = JSON_PARSER .parse (json ).asObject ();
295
+ return new InstanceInfo (stringValue (jsonNode .get ("pendingTime" )),
296
+ stringValue (jsonNode .get ("instanceType" )),
297
+ stringValue (jsonNode .get ("imageId" )),
298
+ stringValue (jsonNode .get ("instanceId" )),
299
+ stringArrayValue (jsonNode .get ("billingProducts" )),
300
+ stringValue (jsonNode .get ("architecture" )),
301
+ stringValue (jsonNode .get ("accountId" )),
302
+ stringValue (jsonNode .get ("kernelId" )),
303
+ stringValue (jsonNode .get ("ramdiskId" )),
304
+ stringValue (jsonNode .get ("region" )),
305
+ stringValue (jsonNode .get ("version" )),
306
+ stringValue (jsonNode .get ("availabilityZone" )),
307
+ stringValue (jsonNode .get ("privateIp" )),
308
+ stringArrayValue (jsonNode .get ("devpayProductCodes" )),
309
+ stringArrayValue (jsonNode .get ("marketplaceProductCodes" )));
310
+ } catch (Exception e ) {
311
+ log .warn ("Unable to parse dynamic EC2 instance info (" + json + ") : " + e .getMessage (), e );
312
+ }
313
+ }
314
+ return null ;
315
+ }
316
+
317
+ private static String stringValue (JsonNode jsonNode ) {
318
+ if (jsonNode .isString ()) {
319
+ return jsonNode .asString ();
320
+ }
321
+ return null ;
322
+ }
323
+
324
+ private static String [] stringArrayValue (JsonNode jsonNode ) {
325
+ if (!jsonNode .isArray ()) {
326
+ return null ;
327
+ }
328
+
329
+ return jsonNode .asArray ()
330
+ .stream ()
331
+ .filter (JsonNode ::isString )
332
+ .map (JsonNode ::asString )
333
+ .toArray (String []::new );
334
+ }
335
+
286
336
public static String getData (String path ) {
287
337
return getData (path , DEFAULT_QUERY_RETRIES );
288
338
}
@@ -587,4 +637,120 @@ public Map<String, String> headers() {
587
637
return requestHeaders ;
588
638
}
589
639
}
640
+
641
+
642
+ public static class InstanceInfo {
643
+ private final String pendingTime ;
644
+ private final String instanceType ;
645
+ private final String imageId ;
646
+ private final String instanceId ;
647
+ private final String [] billingProducts ;
648
+ private final String architecture ;
649
+ private final String accountId ;
650
+ private final String kernelId ;
651
+ private final String ramdiskId ;
652
+ private final String region ;
653
+ private final String version ;
654
+ private final String availabilityZone ;
655
+ private final String privateIp ;
656
+ private final String [] devpayProductCodes ;
657
+ private final String [] marketplaceProductCodes ;
658
+
659
+ public InstanceInfo (
660
+ String pendingTime ,
661
+ String instanceType ,
662
+ String imageId ,
663
+ String instanceId ,
664
+ String [] billingProducts ,
665
+ String architecture ,
666
+ String accountId ,
667
+ String kernelId ,
668
+ String ramdiskId ,
669
+ String region ,
670
+ String version ,
671
+ String availabilityZone ,
672
+ String privateIp ,
673
+ String [] devpayProductCodes ,
674
+ String [] marketplaceProductCodes ) {
675
+
676
+ this .pendingTime = pendingTime ;
677
+ this .instanceType = instanceType ;
678
+ this .imageId = imageId ;
679
+ this .instanceId = instanceId ;
680
+ this .billingProducts = billingProducts == null
681
+ ? null : billingProducts .clone ();
682
+ this .architecture = architecture ;
683
+ this .accountId = accountId ;
684
+ this .kernelId = kernelId ;
685
+ this .ramdiskId = ramdiskId ;
686
+ this .region = region ;
687
+ this .version = version ;
688
+ this .availabilityZone = availabilityZone ;
689
+ this .privateIp = privateIp ;
690
+ this .devpayProductCodes = devpayProductCodes == null
691
+ ? null : devpayProductCodes .clone ();
692
+ this .marketplaceProductCodes = marketplaceProductCodes == null
693
+ ? null : marketplaceProductCodes .clone ();
694
+ }
695
+
696
+ public String getPendingTime () {
697
+ return pendingTime ;
698
+ }
699
+
700
+ public String getInstanceType () {
701
+ return instanceType ;
702
+ }
703
+
704
+ public String getImageId () {
705
+ return imageId ;
706
+ }
707
+
708
+ public String getInstanceId () {
709
+ return instanceId ;
710
+ }
711
+
712
+ public String [] getBillingProducts () {
713
+ return billingProducts == null ? null : billingProducts .clone ();
714
+ }
715
+
716
+ public String getArchitecture () {
717
+ return architecture ;
718
+ }
719
+
720
+ public String getAccountId () {
721
+ return accountId ;
722
+ }
723
+
724
+ public String getKernelId () {
725
+ return kernelId ;
726
+ }
727
+
728
+ public String getRamdiskId () {
729
+ return ramdiskId ;
730
+ }
731
+
732
+ public String getRegion () {
733
+ return region ;
734
+ }
735
+
736
+ public String getVersion () {
737
+ return version ;
738
+ }
739
+
740
+ public String getAvailabilityZone () {
741
+ return availabilityZone ;
742
+ }
743
+
744
+ public String getPrivateIp () {
745
+ return privateIp ;
746
+ }
747
+
748
+ public String [] getDevpayProductCodes () {
749
+ return devpayProductCodes == null ? null : devpayProductCodes .clone ();
750
+ }
751
+
752
+ public String [] getMarketplaceProductCodes () {
753
+ return marketplaceProductCodes == null ? null : marketplaceProductCodes .clone ();
754
+ }
755
+ }
590
756
}
0 commit comments