@@ -153,7 +153,7 @@ func getTags(ctx context.Context, imdsClient IMDSClient, ec2Client EC2Client, in
153
153
logger .Info ("Tag extraction from IMDS failed, fallback to DescribeTags API to obtain EKS cluster name." )
154
154
clusterName , err := clusterNameFromDescribeTag (ctx , ec2Client , instanceId )
155
155
if err != nil {
156
- logger .Warnf ("error obtaining cluster name: %s ." , err )
156
+ logger .Warnf ("error obtaining cluster name: %v ." , err )
157
157
return tags
158
158
}
159
159
@@ -169,38 +169,54 @@ func getTags(ctx context.Context, imdsClient IMDSClient, ec2Client EC2Client, in
169
169
func getTagsFromIMDS (ctx context.Context , client IMDSClient , logger * logp.Logger ) (tags map [string ]string , ok bool ) {
170
170
tags = make (map [string ]string )
171
171
172
- metadata , err := client . GetMetadata (ctx , & imds. GetMetadataInput { Path : tagsCategory } )
172
+ b , err := getMetadataHelper (ctx , client , tagsCategory , logger )
173
173
if err != nil {
174
- logger .Warnf ("error from IMDS tags category request: %s" , err )
175
- return tags , false
176
- }
177
-
178
- b , err := io .ReadAll (metadata .Content )
179
- if err != nil {
180
- logger .Warnf ("error extracting tags category payload: %s" , err )
174
+ logger .Warnf ("error obtaining tags category: %v" , err )
181
175
return tags , false
182
176
}
183
177
184
178
for _ , tag := range strings .Split (string (b ), "\n " ) {
185
179
tagPath := fmt .Sprintf ("%s/%s" , tagsCategory , tag )
186
- metadata , err := client . GetMetadata (ctx , & imds. GetMetadataInput { Path : tagPath } )
180
+ b , err := getMetadataHelper (ctx , client , tagPath , logger )
187
181
if err != nil {
188
- logger .Warnf ("error from IMDS tag request: %s" , err )
182
+ logger .Warnf ("error extracting tag value of %s: %v" , tag , err )
189
183
return tags , false
190
184
}
191
185
192
- b , err := io . ReadAll ( metadata . Content )
193
- if err != nil {
194
- logger .Warnf ( "error extracting tag value payload: %s " , err )
195
- return tags , false
186
+ tagValue := string ( b )
187
+ if tagValue == "" {
188
+ logger .Infof ( "Ignoring tag key %s as value is empty " , tag )
189
+ continue
196
190
}
197
191
198
- tags [tag ] = string ( b )
192
+ tags [tag ] = tagValue
199
193
}
200
194
201
195
return tags , true
202
196
}
203
197
198
+ // getMetadataHelper performs the IMDS call for the given path and returns the response content after closing the underlying content reader.
199
+ func getMetadataHelper (ctx context.Context , client IMDSClient , path string , logger * logp.Logger ) (content []byte , err error ) {
200
+ metadata , err := client .GetMetadata (ctx , & imds.GetMetadataInput {Path : path })
201
+ if err != nil {
202
+ return nil , fmt .Errorf ("error from IMDS metadata request: %w" , err )
203
+ }
204
+
205
+ defer func (Content io.ReadCloser ) {
206
+ err := Content .Close ()
207
+ if err != nil {
208
+ logger .Warnf ("error closing IMDS metadata response body: %v" , err )
209
+ }
210
+ }(metadata .Content )
211
+
212
+ content , err = io .ReadAll (metadata .Content )
213
+ if err != nil {
214
+ return nil , fmt .Errorf ("error extracting metadata from the IMDS response: %w" , err )
215
+ }
216
+
217
+ return content , nil
218
+ }
219
+
204
220
// clusterNameFromDescribeTag is a helper to extract EKS cluster name using DescribeTag.
205
221
func clusterNameFromDescribeTag (ctx context.Context , ec2Client EC2Client , instanceID string ) (string , error ) {
206
222
input := & ec2.DescribeTagsInput {
0 commit comments