-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
64 lines (56 loc) · 2 KB
/
Makefile
File metadata and controls
64 lines (56 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# ==============================
# Config
# ==============================
TOKEN := TOKEN HERE
TAG := TAG NAME HERE
API := https://api.digitalocean.com/v2
AUTH := -H "Authorization: Bearer $(TOKEN)" -H "Content-Type: application/json"
# ==============================
# Targets
# ==============================
all: cleanup snapshots
# ------------------------------
# List droplets by tag
# ------------------------------
droplets:
curl -s $(AUTH) "$(API)/droplets?tag_name=$(TAG)" | jq .
# ------------------------------
# List snapshots
# ------------------------------
snapshots-list:
curl -s $(AUTH) "$(API)/snapshots?resource_type=droplet" | jq .
# ------------------------------
# Delete old snapshots
# FreeBSD: uses date -j -f instead of GNU date -d
# ------------------------------
cleanup:
@echo "Checking snapshots..."
@curl -s $(AUTH) "$(API)/snapshots?resource_type=droplet" | \
jq -c '.snapshots[]' | while read snap; do \
ID=$$(echo $$snap | jq -r '.id'); \
NAME=$$(echo $$snap | jq -r '.name'); \
CREATED=$$(echo $$snap | jq -r '.created_at'); \
CREATED_TRIM=$$(echo $$CREATED | sed 's/T.*//' | tr -d '-'); \
DAY=$$(date -j -f "%Y%m%d" "$$CREATED_TRIM" +%a); \
SNAP_TS=$$(date -j -f "%Y%m%d" "$$CREATED_TRIM" +%s); \
NOW_TS=$$(date +%s); \
DIFF=$$(( ($$NOW_TS - $$SNAP_TS) / 86400 )); \
if [ "$$DAY" != "Fri" ] || { [ "$$DAY" = "Fri" ] && [ $$DIFF -ge 7 ]; }; then \
echo "Deleting snapshot $$NAME ($$ID) created $$CREATED"; \
curl -s -X DELETE $(AUTH) "$(API)/snapshots/$$ID" > /dev/null; \
fi; \
done
# ------------------------------
# Snapshot all droplets
# ------------------------------
snapshots:
@echo "Backing up droplets..."
@curl -s $(AUTH) "$(API)/droplets?tag_name=$(TAG)" | \
jq -c '.droplets[]' | while read droplet; do \
ID=$$(echo $$droplet | jq -r '.id'); \
NAME=$$(echo $$droplet | jq -r '.name'); \
echo "Creating snapshot for $$NAME ($$ID)"; \
curl -s -X POST $(AUTH) \
-d '{"type":"snapshot"}' \
"$(API)/droplets/$$ID/actions" > /dev/null; \
done