aws-crt-cpp
C++ wrapper around the aws-c-* libraries. Provides Cross-Platform Transport Protocols and SSL/TLS implementations for C++.
ImdsClient.h
Go to the documentation of this file.
1 #pragma once
2 
7 #include <aws/crt/DateTime.h>
8 #include <aws/crt/Exports.h>
9 #include <aws/crt/Types.h>
10 #include <functional>
11 
12 struct aws_credentials;
13 struct aws_imds_client;
14 struct aws_imds_instance_info;
15 struct aws_imds_iam_profile;
16 
17 namespace Aws
18 {
19 
20  namespace Crt
21  {
22 
23  namespace Io
24  {
25  class ClientBootstrap;
26  }
27 
28  namespace Auth
29  {
30  class Credentials;
31  }
32 
33  namespace Imds
34  {
35 
37  {
38  ImdsClientConfig() : Bootstrap(nullptr) {}
39 
48 
49  /* Should add retry strategy support once that is available */
50  };
51 
56  {
60  };
61 
66  {
68  IamProfile(const IamProfileView &other);
69 
70  IamProfile &operator=(const IamProfileView &other);
71 
75  };
76 
83  {
84  /* an array of StringView */
90  /* an array of StringView */
100  };
101 
106  {
108  InstanceInfo(const InstanceInfoView &other);
109 
110  InstanceInfo &operator=(const InstanceInfoView &other);
111 
112  /* an array of StringView */
118  /* an array of StringView */
128  };
129 
130  using OnResourceAcquired = std::function<void(const StringView &resource, int errorCode, void *userData)>;
132  std::function<void(const Vector<StringView> &resource, int errorCode, void *userData)>;
133  using OnCredentialsAcquired =
134  std::function<void(const Auth::Credentials &credentials, int errorCode, void *userData)>;
135  using OnIamProfileAcquired =
136  std::function<void(const IamProfileView &iamProfile, int errorCode, void *userData)>;
137  using OnInstanceInfoAcquired =
138  std::function<void(const InstanceInfoView &instanceInfo, int errorCode, void *userData)>;
139 
141  {
142  public:
143  ImdsClient(const ImdsClientConfig &config, Allocator *allocator = ApiAllocator()) noexcept;
144 
145  ~ImdsClient();
146 
147  ImdsClient(const ImdsClient &) = delete;
148  ImdsClient(ImdsClient &&) = delete;
149  ImdsClient &operator=(const ImdsClient &) = delete;
150  ImdsClient &operator=(ImdsClient &&) = delete;
151 
152  aws_imds_client *GetUnderlyingHandle() { return m_client; }
153 
162  int GetResource(const StringView &resourcePath, OnResourceAcquired callback, void *userData);
163 
171  int GetAmiId(OnResourceAcquired callback, void *userData);
172 
180  int GetAmiLaunchIndex(OnResourceAcquired callback, void *userData);
181 
189  int GetAmiManifestPath(OnResourceAcquired callback, void *userData);
190 
198  int GetAncestorAmiIds(OnVectorResourceAcquired callback, void *userData);
199 
207  int GetInstanceAction(OnResourceAcquired callback, void *userData);
208 
216  int GetInstanceId(OnResourceAcquired callback, void *userData);
217 
225  int GetInstanceType(OnResourceAcquired callback, void *userData);
226 
234  int GetMacAddress(OnResourceAcquired callback, void *userData);
235 
243  int GetPrivateIpAddress(OnResourceAcquired callback, void *userData);
244 
252  int GetAvailabilityZone(OnResourceAcquired callback, void *userData);
253 
261  int GetProductCodes(OnResourceAcquired callback, void *userData);
262 
270  int GetPublicKey(OnResourceAcquired callback, void *userData);
271 
279  int GetRamDiskId(OnResourceAcquired callback, void *userData);
280 
288  int GetReservationId(OnResourceAcquired callback, void *userData);
289 
297  int GetSecurityGroups(OnVectorResourceAcquired callback, void *userData);
298 
306  int GetBlockDeviceMapping(OnVectorResourceAcquired callback, void *userData);
307 
315  int GetAttachedIamRole(OnResourceAcquired callback, void *userData);
316 
325  int GetCredentials(const StringView &iamRoleName, OnCredentialsAcquired callback, void *userData);
326 
334  int GetIamProfile(OnIamProfileAcquired callback, void *userData);
335 
343  int GetUserData(OnResourceAcquired callback, void *userData);
344 
352  int GetInstanceSignature(OnResourceAcquired callback, void *userData);
353 
361  int GetInstanceInfo(OnInstanceInfoAcquired callback, void *userData);
362 
363  private:
364  static void s_onResourceAcquired(const aws_byte_buf *resource, int erroCode, void *userData);
365 
366  static void s_onVectorResourceAcquired(const aws_array_list *array, int errorCode, void *userData);
367 
368  static void s_onCredentialsAcquired(const aws_credentials *credentials, int errorCode, void *userData);
369 
370  static void s_onIamProfileAcquired(
371  const aws_imds_iam_profile *iamProfileInfo,
372  int errorCode,
373  void *userData);
374 
375  static void s_onInstanceInfoAcquired(
376  const aws_imds_instance_info *instanceInfo,
377  int error_code,
378  void *userData);
379 
380  aws_imds_client *m_client;
381  Allocator *m_allocator;
382  };
383 
384  } // namespace Imds
385  } // namespace Crt
386 } // namespace Aws
Definition: ImdsClient.h:140
String region
Definition: ImdsClient.h:127
DateTime lastUpdated
Definition: ImdsClient.h:57
String version
Definition: ImdsClient.h:116
std::function< void(const InstanceInfoView &instanceInfo, int errorCode, void *userData)> OnInstanceInfoAcquired
Definition: ImdsClient.h:138
std::function< void(const StringView &resource, int errorCode, void *userData)> OnResourceAcquired
Definition: ImdsClient.h:130
#define AWS_CRT_CPP_API
Definition: Exports.h:36
String instanceId
Definition: ImdsClient.h:117
StringView architecture
Definition: ImdsClient.h:96
Definition: ImdsClient.h:36
DateTime lastUpdated
Definition: ImdsClient.h:72
StringView accountId
Definition: ImdsClient.h:93
String availabilityZone
Definition: ImdsClient.h:114
Definition: ImdsClient.h:55
Vector< String > billingProducts
Definition: ImdsClient.h:119
std::function< void(const Auth::Credentials &credentials, int errorCode, void *userData)> OnCredentialsAcquired
Definition: ImdsClient.h:134
std::basic_string< char, std::char_traits< char >, StlAllocator< char >> String
Definition: Types.h:45
String architecture
Definition: ImdsClient.h:124
String kernelId
Definition: ImdsClient.h:125
Definition: ImdsClient.h:65
aws_allocator Allocator
Definition: Allocator.h:14
StringView kernelId
Definition: ImdsClient.h:97
InstanceInfo()
Definition: ImdsClient.h:107
StringView instanceProfileId
Definition: ImdsClient.h:59
DateTime pendingTime
Definition: ImdsClient.h:95
Vector< StringView > marketplaceProductCodes
Definition: ImdsClient.h:85
Definition: ImdsClient.h:105
String imageId
Definition: ImdsClient.h:122
std::function< void(const Vector< StringView > &resource, int errorCode, void *userData)> OnVectorResourceAcquired
Definition: ImdsClient.h:132
Definition: ImdsClient.h:82
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition: Allocator.cpp:24
StringView instanceProfileArn
Definition: ImdsClient.h:58
String instanceProfileId
Definition: ImdsClient.h:74
std::function< void(const IamProfileView &iamProfile, int errorCode, void *userData)> OnIamProfileAcquired
Definition: ImdsClient.h:136
IamProfile()
Definition: ImdsClient.h:67
StringView availabilityZone
Definition: ImdsClient.h:86
StringView version
Definition: ImdsClient.h:88
Vector< String > marketplaceProductCodes
Definition: ImdsClient.h:113
String privateIp
Definition: ImdsClient.h:115
Io::ClientBootstrap * Bootstrap
Definition: ImdsClient.h:47
StringView privateIp
Definition: ImdsClient.h:87
Definition: Bootstrap.h:34
String instanceProfileArn
Definition: ImdsClient.h:73
std::vector< T, StlAllocator< T >> Vector
Definition: Types.h:53
DateTime pendingTime
Definition: ImdsClient.h:123
String ramdiskId
Definition: ImdsClient.h:126
StringView region
Definition: ImdsClient.h:99
aws_imds_client * GetUnderlyingHandle()
Definition: ImdsClient.h:152
Vector< StringView > billingProducts
Definition: ImdsClient.h:91
ImdsClientConfig()
Definition: ImdsClient.h:38
Definition: DateTime.h:52
String accountId
Definition: ImdsClient.h:121
StringView instanceType
Definition: ImdsClient.h:92
Definition: StringView.h:32
StringView instanceId
Definition: ImdsClient.h:89
String instanceType
Definition: ImdsClient.h:120
Definition: Allocator.h:10
StringView imageId
Definition: ImdsClient.h:94
StringView ramdiskId
Definition: ImdsClient.h:98