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
45
46 /* Should add retry strategy support once that is available */
47 };
48
53 {
57 };
58
63 {
65 IamProfile(const IamProfileView &other);
66
67 IamProfile &operator=(const IamProfileView &other);
68
72 };
73
80 {
81 /* an array of StringView */
87 /* an array of StringView */
97 };
98
103 {
105 InstanceInfo(const InstanceInfoView &other);
106
107 InstanceInfo &operator=(const InstanceInfoView &other);
108
109 /* an array of StringView */
115 /* an array of StringView */
125 };
126
127 using OnResourceAcquired = std::function<void(const StringView &resource, int errorCode, void *userData)>;
129 std::function<void(const Vector<StringView> &resource, int errorCode, void *userData)>;
131 std::function<void(const Auth::Credentials &credentials, int errorCode, void *userData)>;
133 std::function<void(const IamProfileView &iamProfile, int errorCode, void *userData)>;
135 std::function<void(const InstanceInfoView &instanceInfo, int errorCode, void *userData)>;
136
138 {
139 public:
140 ImdsClient(const ImdsClientConfig &config, Allocator *allocator = g_allocator) noexcept;
141
142 ~ImdsClient();
143
144 ImdsClient(const ImdsClient &) = delete;
145 ImdsClient(ImdsClient &&) = delete;
146 ImdsClient &operator=(const ImdsClient &) = delete;
148
149 aws_imds_client *GetUnderlyingHandle() { return m_client; }
150
159 int GetResource(const StringView &resourcePath, OnResourceAcquired callback, void *userData);
160
168 int GetAmiId(OnResourceAcquired callback, void *userData);
169
177 int GetAmiLaunchIndex(OnResourceAcquired callback, void *userData);
178
186 int GetAmiManifestPath(OnResourceAcquired callback, void *userData);
187
195 int GetAncestorAmiIds(OnVectorResourceAcquired callback, void *userData);
196
204 int GetInstanceAction(OnResourceAcquired callback, void *userData);
205
213 int GetInstanceId(OnResourceAcquired callback, void *userData);
214
222 int GetInstanceType(OnResourceAcquired callback, void *userData);
223
231 int GetMacAddress(OnResourceAcquired callback, void *userData);
232
240 int GetPrivateIpAddress(OnResourceAcquired callback, void *userData);
241
249 int GetAvailabilityZone(OnResourceAcquired callback, void *userData);
250
258 int GetProductCodes(OnResourceAcquired callback, void *userData);
259
267 int GetPublicKey(OnResourceAcquired callback, void *userData);
268
276 int GetRamDiskId(OnResourceAcquired callback, void *userData);
277
285 int GetReservationId(OnResourceAcquired callback, void *userData);
286
294 int GetSecurityGroups(OnVectorResourceAcquired callback, void *userData);
295
303 int GetBlockDeviceMapping(OnVectorResourceAcquired callback, void *userData);
304
312 int GetAttachedIamRole(OnResourceAcquired callback, void *userData);
313
322 int GetCredentials(const StringView &iamRoleName, OnCredentialsAcquired callback, void *userData);
323
331 int GetIamProfile(OnIamProfileAcquired callback, void *userData);
332
340 int GetUserData(OnResourceAcquired callback, void *userData);
341
349 int GetInstanceSignature(OnResourceAcquired callback, void *userData);
350
358 int GetInstanceInfo(OnInstanceInfoAcquired callback, void *userData);
359
360 private:
361 static void s_onResourceAcquired(const aws_byte_buf *resource, int erroCode, void *userData);
362
363 static void s_onVectorResourceAcquired(const aws_array_list *array, int errorCode, void *userData);
364
365 static void s_onCredentialsAcquired(const aws_credentials *credentials, int errorCode, void *userData);
366
367 static void s_onIamProfileAcquired(
368 const aws_imds_iam_profile *iamProfileInfo,
369 int errorCode,
370 void *userData);
371
372 static void s_onInstanceInfoAcquired(
373 const aws_imds_instance_info *instanceInfo,
374 int error_code,
375 void *userData);
376
377 aws_imds_client *m_client;
378 Allocator *m_allocator;
379 };
380
381 } // namespace Imds
382 } // namespace Crt
383} // namespace Aws
#define AWS_CRT_CPP_API
Definition: Exports.h:37
Definition: Credentials.h:38
Definition: DateTime.h:53
Definition: ImdsClient.h:138
ImdsClient(ImdsClient &&)=delete
aws_imds_client * GetUnderlyingHandle()
Definition: ImdsClient.h:149
ImdsClient & operator=(ImdsClient &&)=delete
ImdsClient(const ImdsClient &)=delete
ImdsClient & operator=(const ImdsClient &)=delete
Definition: Bootstrap.h:35
Definition: StringView.h:27
std::function< void(const StringView &resource, int errorCode, void *userData)> OnResourceAcquired
Definition: ImdsClient.h:127
std::function< void(const Vector< StringView > &resource, int errorCode, void *userData)> OnVectorResourceAcquired
Definition: ImdsClient.h:129
std::function< void(const Auth::Credentials &credentials, int errorCode, void *userData)> OnCredentialsAcquired
Definition: ImdsClient.h:131
std::function< void(const InstanceInfoView &instanceInfo, int errorCode, void *userData)> OnInstanceInfoAcquired
Definition: ImdsClient.h:135
std::function< void(const IamProfileView &iamProfile, int errorCode, void *userData)> OnIamProfileAcquired
Definition: ImdsClient.h:133
aws_allocator Allocator
Definition: StlAllocator.h:17
AWS_CRT_CPP_API Allocator * g_allocator
Definition: Api.cpp:21
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:17
Definition: ImdsClient.h:63
DateTime lastUpdated
Definition: ImdsClient.h:69
String instanceProfileArn
Definition: ImdsClient.h:70
IamProfile()
Definition: ImdsClient.h:64
String instanceProfileId
Definition: ImdsClient.h:71
Definition: ImdsClient.h:53
DateTime lastUpdated
Definition: ImdsClient.h:54
StringView instanceProfileArn
Definition: ImdsClient.h:55
StringView instanceProfileId
Definition: ImdsClient.h:56
Definition: ImdsClient.h:37
Io::ClientBootstrap * Bootstrap
Definition: ImdsClient.h:44
ImdsClientConfig()
Definition: ImdsClient.h:38
Definition: ImdsClient.h:103
String availabilityZone
Definition: ImdsClient.h:111
Vector< String > marketplaceProductCodes
Definition: ImdsClient.h:110
String region
Definition: ImdsClient.h:124
String imageId
Definition: ImdsClient.h:119
String instanceType
Definition: ImdsClient.h:117
String version
Definition: ImdsClient.h:113
String ramdiskId
Definition: ImdsClient.h:123
String privateIp
Definition: ImdsClient.h:112
InstanceInfo()
Definition: ImdsClient.h:104
String architecture
Definition: ImdsClient.h:121
String instanceId
Definition: ImdsClient.h:114
Vector< String > billingProducts
Definition: ImdsClient.h:116
String accountId
Definition: ImdsClient.h:118
String kernelId
Definition: ImdsClient.h:122
DateTime pendingTime
Definition: ImdsClient.h:120
Definition: ImdsClient.h:80
Vector< StringView > marketplaceProductCodes
Definition: ImdsClient.h:82
StringView ramdiskId
Definition: ImdsClient.h:95
StringView imageId
Definition: ImdsClient.h:91
StringView privateIp
Definition: ImdsClient.h:84
StringView region
Definition: ImdsClient.h:96
StringView version
Definition: ImdsClient.h:85
StringView kernelId
Definition: ImdsClient.h:94
Vector< StringView > billingProducts
Definition: ImdsClient.h:88
StringView architecture
Definition: ImdsClient.h:93
StringView instanceType
Definition: ImdsClient.h:89
StringView instanceId
Definition: ImdsClient.h:86
StringView availabilityZone
Definition: ImdsClient.h:83
StringView accountId
Definition: ImdsClient.h:90
DateTime pendingTime
Definition: ImdsClient.h:92