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
7#include <aws/crt/DateTime.h>
8#include <aws/crt/Exports.h>
9#include <aws/crt/Types.h>
10#include <functional>
11
12struct aws_credentials;
13struct aws_imds_client;
14struct aws_imds_instance_info;
15struct aws_imds_iam_profile;
16
17namespace 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)>;
134 std::function<void(const Auth::Credentials &credentials, int errorCode, void *userData)>;
136 std::function<void(const IamProfileView &iamProfile, int errorCode, void *userData)>;
138 std::function<void(const InstanceInfoView &instanceInfo, int errorCode, void *userData)>;
139
141 {
142 public:
143 ImdsClient(const ImdsClientConfig &config, Allocator *allocator = g_allocator) noexcept;
144
145 ~ImdsClient();
146
147 ImdsClient(const ImdsClient &) = delete;
148 ImdsClient(ImdsClient &&) = delete;
149 ImdsClient &operator=(const 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
#define AWS_CRT_CPP_API
Definition: Exports.h:37
Definition: Credentials.h:38
Definition: DateTime.h:53
Definition: ImdsClient.h:141
ImdsClient(ImdsClient &&)=delete
aws_imds_client * GetUnderlyingHandle()
Definition: ImdsClient.h:152
ImdsClient & operator=(ImdsClient &&)=delete
ImdsClient(const ImdsClient &)=delete
ImdsClient & operator=(const ImdsClient &)=delete
Definition: Bootstrap.h:35
Definition: StringView.h:32
std::function< void(const StringView &resource, int errorCode, void *userData)> OnResourceAcquired
Definition: ImdsClient.h:130
std::function< void(const Vector< StringView > &resource, int errorCode, void *userData)> OnVectorResourceAcquired
Definition: ImdsClient.h:132
std::function< void(const Auth::Credentials &credentials, int errorCode, void *userData)> OnCredentialsAcquired
Definition: ImdsClient.h:134
std::function< void(const InstanceInfoView &instanceInfo, int errorCode, void *userData)> OnInstanceInfoAcquired
Definition: ImdsClient.h:138
std::function< void(const IamProfileView &iamProfile, int errorCode, void *userData)> OnIamProfileAcquired
Definition: ImdsClient.h:136
aws_allocator Allocator
Definition: StlAllocator.h:17
AWS_CRT_CPP_API Allocator * g_allocator
Definition: Api.cpp:23
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition: Types.h:47
std::vector< T, StlAllocator< T > > Vector
Definition: Types.h:55
Definition: Api.h:14
Definition: ImdsClient.h:66
DateTime lastUpdated
Definition: ImdsClient.h:72
String instanceProfileArn
Definition: ImdsClient.h:73
IamProfile()
Definition: ImdsClient.h:67
String instanceProfileId
Definition: ImdsClient.h:74
Definition: ImdsClient.h:56
DateTime lastUpdated
Definition: ImdsClient.h:57
StringView instanceProfileArn
Definition: ImdsClient.h:58
StringView instanceProfileId
Definition: ImdsClient.h:59
Definition: ImdsClient.h:37
Io::ClientBootstrap * Bootstrap
Definition: ImdsClient.h:47
ImdsClientConfig()
Definition: ImdsClient.h:38
Definition: ImdsClient.h:106
String availabilityZone
Definition: ImdsClient.h:114
Vector< String > marketplaceProductCodes
Definition: ImdsClient.h:113
String region
Definition: ImdsClient.h:127
String imageId
Definition: ImdsClient.h:122
String instanceType
Definition: ImdsClient.h:120
String version
Definition: ImdsClient.h:116
String ramdiskId
Definition: ImdsClient.h:126
String privateIp
Definition: ImdsClient.h:115
InstanceInfo()
Definition: ImdsClient.h:107
String architecture
Definition: ImdsClient.h:124
String instanceId
Definition: ImdsClient.h:117
Vector< String > billingProducts
Definition: ImdsClient.h:119
String accountId
Definition: ImdsClient.h:121
String kernelId
Definition: ImdsClient.h:125
DateTime pendingTime
Definition: ImdsClient.h:123
Definition: ImdsClient.h:83
Vector< StringView > marketplaceProductCodes
Definition: ImdsClient.h:85
StringView ramdiskId
Definition: ImdsClient.h:98
StringView imageId
Definition: ImdsClient.h:94
StringView privateIp
Definition: ImdsClient.h:87
StringView region
Definition: ImdsClient.h:99
StringView version
Definition: ImdsClient.h:88
StringView kernelId
Definition: ImdsClient.h:97
Vector< StringView > billingProducts
Definition: ImdsClient.h:91
StringView architecture
Definition: ImdsClient.h:96
StringView instanceType
Definition: ImdsClient.h:92
StringView instanceId
Definition: ImdsClient.h:89
StringView availabilityZone
Definition: ImdsClient.h:86
StringView accountId
Definition: ImdsClient.h:93
DateTime pendingTime
Definition: ImdsClient.h:95