@@ -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,36 +169,52 @@ 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 )
174
+ logger .Warnf ("error obtaining tags category: %v " , err )
175
175
return tags , false
176
176
}
177
177
178
- b , err := io . ReadAll ( metadata . Content )
179
- if err != nil {
180
- logger .Warnf ( "error extracting tags category payload: %s" , err )
181
- return tags , false
178
+ tagInput := string ( b )
179
+ if tagInput == "" {
180
+ logger .Info ( "No tags present in the EC2 instance" )
181
+ return tags , true
182
182
}
183
183
184
- for _ , tag := range strings .Split (string ( b ) , "\n " ) {
184
+ for _ , tag := range strings .Split (tagInput , "\n " ) {
185
185
tagPath := fmt .Sprintf ("%s/%s" , tagsCategory , tag )
186
- metadata , err := client . GetMetadata (ctx , & imds. GetMetadataInput { Path : tagPath } )
186
+ b , err := getMetadataHelper (ctx , client , tagPath , logger )
187
187
if err != nil {
188
- logger .Warnf ("error from IMDS tag request: %s" , err )
188
+ logger .Warnf ("error extracting tag value of %s: %v" , tag , err )
189
189
return tags , false
190
190
}
191
191
192
- b , err := io .ReadAll (metadata .Content )
192
+ tags [tag ] = string (b )
193
+ }
194
+
195
+ return tags , true
196
+ }
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 ()
193
207
if err != nil {
194
- logger .Warnf ("error extracting tag value payload: %s" , err )
195
- return tags , false
208
+ logger .Warnf ("error closing IMDS metadata response body: %v" , err )
196
209
}
210
+ }(metadata .Content )
197
211
198
- tags [tag ] = string (b )
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 )
199
215
}
200
216
201
- return tags , true
217
+ return content , nil
202
218
}
203
219
204
220
// clusterNameFromDescribeTag is a helper to extract EKS cluster name using DescribeTag.
0 commit comments