-
Notifications
You must be signed in to change notification settings - Fork 141
Expand file tree
/
Copy pathMakefile
More file actions
119 lines (110 loc) · 3.84 KB
/
Makefile
File metadata and controls
119 lines (110 loc) · 3.84 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
.PHONY: all build test clean config-extractor sync-chart-values
all: build test clean
# Chart output directory
CHART_PROVIDERS_DIR ?= ../cloud-api-adaptor/install/charts/peerpods/providers
define gen-provider-values
./bin/config-extractor -o json -no-secrets -include-shared $(1) | jq -r ' \
"# Auto-generated by: make sync-chart-values", \
"# Avoid editing manually. You can, but CI will check for drift.", \
"# Provider: \(.provider)", \
"", \
"provider: \(.provider)", \
"", \
(if .provider == "libvirt" or .provider == "docker" then \
"# Dev image required for this provider (includes CGO bindings)", \
"# Update to <commit>-dev at release time", \
"image:", \
" tag: \"latest\"", \
"" \
else \
empty \
end), \
"providerConfigs:", \
(if ([.flags[] | select(.env_var != "" and .required)] | length) > 0 then \
" \(.provider):" \
else \
" \(.provider): {}" \
end), \
(.flags[] | select(.env_var != "") | \
if .required then \
" # \(.description)", \
" # (required)", \
" \(.env_var): \"\"" \
else \
" # \(.description)", \
" # (default: \"\(.default)\")", \
" # \(.env_var): \"\(.default)\"" \
end, \
"" \
)' > $(CHART_PROVIDERS_DIR)/$(1).yaml
endef
define gen-provider-secrets
./bin/config-extractor -o json -only-secrets $(1) | jq -r ' \
if (.flags | length) == 0 then \
"# No cloud credentials required for \(.provider)", \
(if .provider == "libvirt" then \
"# Note: SSH key for hypervisor connection is handled differently as secrets.mode is:", \
"# - reference: you should create the ssh-key-secret secret yourself.", \
"# - create: you should uncomment below lines and fill the id_rsa field", \
"#", \
"# providerSecrets:", \
"# libvirt:", \
"# id_rsa: |", \
"# -----BEGIN OPENSSH PRIVATE KEY-----", \
"# ...", \
"# -----END OPENSSH PRIVATE KEY-----" \
elif .provider == "byom" then \
"# Note: SSH keys for VM access are handled differently as secrets.mode is:", \
"# - reference: you should create the ssh-key-secret secret yourself.", \
"# - create: you should uncomment below lines and fill both id_rsa and id_rsa_pub fields", \
"#", \
"# providerSecrets:", \
"# byom:", \
"# id_rsa: |", \
"# -----BEGIN OPENSSH PRIVATE KEY-----", \
"# ...", \
"# -----END OPENSSH PRIVATE KEY-----", \
"# id_rsa_pub: |", \
"# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC... user@host" \
else empty end) \
else \
"# Auto-generated by: make sync-chart-values", \
"# Copy to \(.provider)-secrets.yaml, fill in credentials, and DO NOT commit to git!", \
"", \
"providerSecrets:", \
" \(.provider):", \
(.flags[] | select(.env_var != "") | \
" # \(.description)", \
" \(.env_var): \"\"", \
"" \
) \
end' > $(CHART_PROVIDERS_DIR)/$(1)-secrets.yaml.template
endef
sync-chart-values: config-extractor ## Generate provider values for helm chart
@mkdir -p $(CHART_PROVIDERS_DIR)
ifdef CLOUD_PROVIDER
@echo "→ Generating chart values for $(CLOUD_PROVIDER)..."
$(call gen-provider-values,$(CLOUD_PROVIDER))
$(call gen-provider-secrets,$(CLOUD_PROVIDER))
else
@for p in $$(find . -maxdepth 2 -name 'manager.go' -printf '%h\n' | sed 's|./||'); do \
echo " → $$p"; \
$(call gen-provider-values,$$p); \
$(call gen-provider-secrets,$$p); \
done
endif
build:
@echo "→ Building all modules..."
go build ./...
test:
@echo "→ Running unit tests in src/cloud-providers..."
go test ./... -coverprofile cover.out -v
clean:
@echo "→ Cleaning build cache and test artifacts..."
go clean -cache -testcache -modcache
@rm -f cover.out
@rm -rf bin/
config-extractor: ## Build config-extractor dev tool
@echo "→ Building config-extractor..."
@mkdir -p bin
go build -o bin/config-extractor ./cmd/config-extractor