@@ -21,6 +21,8 @@ type ManagerOpts struct {
21
21
ImageTagKey string
22
22
ImageTagValue string
23
23
ImageNameTag string
24
+ ManagedTagKey string
25
+ ManagedTagValue string
24
26
RebootOnImageTag string
25
27
26
28
DefaultImageNameTemplate * template.Template
@@ -41,6 +43,8 @@ func NewManagerOptsFromConfig(client *ec2.EC2) (*ManagerOpts, error) {
41
43
ImageTagKey : config .ImageTagKey (),
42
44
ImageTagValue : config .ImageTagValue (),
43
45
ImageNameTag : config .ImageNameTag (),
46
+ ManagedTagKey : config .ManagedTagKey (),
47
+ ManagedTagValue : config .ManagedTagValue (),
44
48
RebootOnImageTag : config .RebootOnImageTag (),
45
49
Verbose : true ,
46
50
@@ -165,12 +169,32 @@ func (m *Manager) backupVolumes() error {
165
169
if err != nil {
166
170
m .logf ("Error creating snapshot for volume '%s'\n " , aws .StringValue (v .VolumeId ))
167
171
errorChan <- err
168
- } else {
169
- m .logf ("Created snapshot '%s' for volume '%s'\n " ,
172
+ return
173
+ }
174
+
175
+ m .logf ("Created snapshot '%s' for volume '%s'\n " ,
176
+ aws .StringValue (snap .SnapshotId ),
177
+ aws .StringValue (v .VolumeId ),
178
+ )
179
+
180
+ err = m .addManagmentTags (
181
+ []* string {snap .SnapshotId },
182
+ map [string ]string {
183
+ "lambda-ebs-backup/volume-id" : aws .StringValue (v .VolumeId ),
184
+ },
185
+ )
186
+
187
+ if err != nil {
188
+ m .logf ("Error adding management tag to snapshot '%s'(%s)\n " ,
170
189
aws .StringValue (snap .SnapshotId ),
171
190
aws .StringValue (v .VolumeId ),
172
191
)
192
+ errorChan <- err
193
+ return
173
194
}
195
+
196
+ m .logf ("Added management tag for snapshot '%s'\n " , aws .StringValue (snap .SnapshotId ))
197
+
174
198
}(volume )
175
199
}
176
200
@@ -222,6 +246,27 @@ func (m *Manager) backupInstances() error {
222
246
aws .StringValue (i .InstanceId ),
223
247
tags .GetDefault ("Name" , "" ),
224
248
)
249
+
250
+ err = m .addManagmentTags (
251
+ []* string {image .ImageId },
252
+ map [string ]string {
253
+ "lambda-ebs-backup/instance-id" : aws .StringValue (i .InstanceId ),
254
+ },
255
+ )
256
+
257
+ if err != nil {
258
+ m .logf ("Error adding management tag for image '%s'(%s)\n " ,
259
+ aws .StringValue (image .ImageId ),
260
+ imageName ,
261
+ )
262
+ errorChan <- err
263
+ return
264
+ }
265
+
266
+ m .logf ("Added management tag for image '%s'(%s)\n " ,
267
+ aws .StringValue (image .ImageId ),
268
+ imageName ,
269
+ )
225
270
}(instance )
226
271
}
227
272
@@ -236,6 +281,50 @@ func (m *Manager) backupInstances() error {
236
281
return nil
237
282
}
238
283
284
+ // Cleanup cleans up old volume snapshots and images
285
+ func (m * Manager ) Cleanup () error {
286
+ return m .all (
287
+ []func () error {
288
+ m .cleanupSnapshots ,
289
+ m .cleanupImages ,
290
+ },
291
+ )
292
+ }
293
+
294
+ func (m * Manager ) cleanupSnapshots () error {
295
+ m .logf ("Starting cleanup of old ebs snapshots" )
296
+ return nil
297
+ }
298
+
299
+ func (m * Manager ) cleanupImages () error {
300
+ m .logf ("Starting cleanup of old AMIs" )
301
+ return nil
302
+ }
303
+
304
+ func (m * Manager ) addManagmentTags (resources []* string , extraTags map [string ]string ) error {
305
+
306
+ tags := []* ec2.Tag {
307
+ & ec2.Tag {
308
+ Key : aws .String (m .ManagerOpts .ManagedTagKey ),
309
+ Value : aws .String (m .ManagerOpts .ManagedTagValue ),
310
+ },
311
+ }
312
+ if extraTags != nil {
313
+ for k , v := range extraTags {
314
+ tags = append (tags , & ec2.Tag {
315
+ Key : aws .String (k ),
316
+ Value : aws .String (v ),
317
+ })
318
+ }
319
+ }
320
+
321
+ _ , err := m .client .CreateTags (& ec2.CreateTagsInput {
322
+ Resources : resources ,
323
+ Tags : tags ,
324
+ })
325
+ return err
326
+ }
327
+
239
328
func (m * Manager ) all (funcs []func () error ) error {
240
329
var wg sync.WaitGroup
241
330
errorChan := make (chan error , 1 )
0 commit comments