1
1
package netserv
2
2
3
3
import (
4
- " strconv "
5
4
dcsi " pythoner6.dev/netserv/k8s/democratic-csi :netserv "
6
5
cnpg " pythoner6.dev/netserv/k8s/cnpg :netserv "
7
6
rook " pythoner6.dev/netserv/k8s/rook :netserv "
8
7
clusters " postgresql.cnpg.io/cluster/v1 "
9
- bucketclaims " objectbucket.io/objectbucketclaim/v1alpha1 "
10
8
// secretstores "external-secrets.io/secretstore/v1beta1"
11
- externalsecrets " external-secrets. io/externalsecret/v1beta1 "
9
+ helmrelease " helm.toolkit.fluxcd. io/helmrelease/v2beta2 "
12
10
corev1 " k8s.io/api/core/v1 "
13
11
rbacv1 " k8s.io/api/rbac/v1 "
14
12
)
15
13
16
14
appName : " gitlab "
17
15
#Charts : _
18
16
19
- #BucketClaim : this =(bucketclaims .#ObjectBucketClaim & {
20
- spec : {
21
- bucketName : this .metadata .name
22
- storageClassName : rook .kustomizations .cluster .manifest .bucketStorageClass .metadata .name
23
- }
24
- })
25
-
26
- #BucketSecret : externalsecrets .#ExternalSecret & {
27
- #bucket : _
28
- #store : _
29
- metadata : name : #bucket .metadata .name
30
- spec : {
31
- secretStoreRef : {
32
- name : #store .metadata .name
33
- kind : #store .kind
34
- }
35
- refreshInterval : " 0 "
36
- target : {
37
- name : metadata .name
38
- deletionPolicy : " Merge "
39
- creationPolicy : " Merge "
40
- template : {
41
- engineVersion : " v2 "
42
- data :
43
- connection : """
44
- provider: AWS
45
- path_style: true
46
- host: \(strconv .Quote (rook .objectStoreHost ) )
47
- endpoint: \(strconv .Quote (" http:// " + rook .objectStoreHost + " : " + strconv .FormatInt (rook .objectStorePort , 10 )) )
48
- region: ""
49
- aws_signature_version: 4
50
- aws_access_key_id: {{ .aws_access_key_id | quote }}
51
- aws_secret_access_key: {{ .aws_secret_access_key | quote }}
52
- """
53
- }
54
- }
55
- data : [
56
- {
57
- secretKey : " aws_access_key_id "
58
- remoteRef : {
59
- key : metadata .name
60
- property : " AWS_ACCESS_KEY_ID "
61
- }
62
- },
63
- {
64
- secretKey : " aws_secret_access_key "
65
- remoteRef : {
66
- key : metadata .name
67
- property : " AWS_SECRET_ACCESS_KEY "
68
- }
69
- },
70
- ]
71
- }
17
+ let nodeAffinity = {
18
+ nodeAffinity : requiredDuringSchedulingIgnoredDuringExecution : nodeSelectorTerms : [{
19
+ matchExpressions : [{
20
+ key : " storage "
21
+ operator : " In "
22
+ values : [" yes " ]
23
+ }]
24
+ }]
72
25
}
73
26
74
27
kustomizations : $default : #dependsOn : [dcsi .kustomizations .helm , cnpg .kustomizations .helm , rook .kustomizations .cluster ]
75
28
kustomizations : $default : manifest : {
76
29
ns : #AppNamespace
77
- db : clusters .#Cluster & {
78
- metadata : name : " gitlab "
30
+ " gitlab-db " : clusters .#Cluster & {
79
31
spec : {
80
32
instances : 3
81
33
maxSyncReplicas : 2
@@ -84,17 +36,10 @@ kustomizations: $default: manifest: {
84
36
storageClass : dcsi .localHostpath
85
37
size : " 10Gi "
86
38
}
87
- affinity : nodeAffinity : requiredDuringSchedulingIgnoredDuringExecution : nodeSelectorTerms : [{
88
- matchExpressions : [{
89
- key : " storage "
90
- operator : " In "
91
- values : [" yes " ]
92
- }]
93
- }]
39
+ affinity : nodeAffinity
94
40
}
95
41
}
96
- praefectDb : clusters .#Cluster & {
97
- metadata : name : " praefect "
42
+ " praefect-db " : clusters .#Cluster & {
98
43
spec : {
99
44
instances : 3
100
45
maxSyncReplicas : 2
@@ -103,24 +48,14 @@ kustomizations: $default: manifest: {
103
48
storageClass : dcsi .localHostpath
104
49
size : " 1Gi "
105
50
}
106
- affinity : nodeAffinity : requiredDuringSchedulingIgnoredDuringExecution : nodeSelectorTerms : [{
107
- matchExpressions : [{
108
- key : " storage "
109
- operator : " In "
110
- values : [" yes " ]
111
- }]
112
- }]
51
+ affinity : nodeAffinity
113
52
}
114
53
}
115
54
storeServiceAccount : corev1 .#ServiceAccount & {
116
- apiVersion : " v1 "
117
- kind : " ServiceAccount "
118
55
metadata : name : " bucket-secrets-store "
119
56
}
120
57
// TODO restrict to specific secrets
121
58
storeRole : rbacv1 .#Role & {
122
- apiVersion : " rbac.authorization.k8s.io/v1 "
123
- kind : " Role "
124
59
metadata : name : " bucket-secrets-store "
125
60
rules : [{
126
61
apiGroups : [" " ]
@@ -129,8 +64,6 @@ kustomizations: $default: manifest: {
129
64
}]
130
65
}
131
66
storeRoleBinding : rbacv1 .#RoleBinding & {
132
- apiVersion : " rbac.authorization.k8s.io/v1 "
133
- kind : " RoleBinding "
134
67
metadata : name : " bucket-secrets-store "
135
68
subjects : [{
136
69
kind : storeServiceAccount .kind
@@ -144,6 +77,7 @@ kustomizations: $default: manifest: {
144
77
}
145
78
}
146
79
store =" bucket-secrets-store " : {
80
+ // CUE MaxFields is broken so the ES CRD doesn't validate right now
147
81
apiVersion : " external-secrets.io/v1beta1 "
148
82
kind : " SecretStore "
149
83
spec : provider : kubernetes : {
@@ -170,6 +104,95 @@ kustomizations: $default: manifest: {
170
104
packagesSecret : #BucketSecret & { #bucket : packagesBucket , #store : store }
171
105
}
172
106
173
- // kustomizations: helm: #dependsOn: [kustomizations["$default"]]
174
- // kustomizations: helm: manifest: {
175
- // }
107
+ let gitlabDbRw = kustomizations [" $default " ].manifest [" gitlab-db " ].metadata .name + " -rw "
108
+ let gitlabDbPass = kustomizations [" $default " ].manifest [" gitlab-db " ].metadata .name + " -app "
109
+ let praefectDbRw = kustomizations [" $default " ].manifest [" praefect-db " ].metadata .name + " -rw "
110
+ let praefectDbPass = kustomizations [" $default " ].manifest [" praefect-db " ].metadata .name + " -app "
111
+
112
+ kustomizations : helm : #dependsOn : [kustomizations [" $default " ]]
113
+ kustomizations : helm : manifest : {
114
+ (appName ): helmrelease .#HelmRelease & {
115
+ spec : {
116
+ chart : spec : #Charts [appName ]
117
+ interval : " 10m0s "
118
+ values : {
119
+ global : {
120
+ hosts : domain : " home.josephmartin.org "
121
+ nodeSelector : storage : " yes "
122
+ gitaly : enabled : true
123
+ minio : enabled : false
124
+ ingress : configureCertmanager : false
125
+ pages : enabled : false
126
+ psql : {
127
+ host : gitlabDbRw
128
+ database : " app "
129
+ username : " app "
130
+ password : {
131
+ secret : gitlabDbPass
132
+ key : " password "
133
+ }
134
+ }
135
+ praefect : {
136
+ enabled : true
137
+ dbSecret : {
138
+ secret : praefectDbPass
139
+ key : " password "
140
+ }
141
+ psql : {
142
+ user : " app "
143
+ dbName : " app "
144
+ host : praefectDbRw
145
+ }
146
+ virtualStorages : [{
147
+ name : " default "
148
+ gitalyReplicas : 3
149
+ maxUnavailable : 1
150
+ persistence : {
151
+ enabled : true
152
+ size : " 50Gi "
153
+ accessMode : " ReadWriteOnce "
154
+ storageClass : dcsi .localHostpath
155
+ defaultReplicationFactor : 3
156
+ }
157
+ }]
158
+ }
159
+ appConfig : {
160
+ lfs : {
161
+ enabled : true
162
+ proxy_download : true
163
+ bucket : kustomizations [" $default " ].manifest .lfsBucket .spec .bucketName
164
+ connection : secret : kustomizations [" $default " ].manifest .lfsSecret .metadata .name
165
+ }
166
+ artifacts : {
167
+ enabled : true
168
+ proxy_download : true
169
+ bucket : kustomizations [" $default " ].manifest .artifactsBucket .spec .bucketName
170
+ connection : secret : kustomizations [" $default " ].manifest .artifactsSecret .metadata .name
171
+ }
172
+ uploads : {
173
+ enabled : true
174
+ proxy_download : true
175
+ bucket : kustomizations [" $default " ].manifest .uploadsBucket .spec .bucketName
176
+ connection : secret : kustomizations [" $default " ].manifest .uploadsSecret .metadata .name
177
+ }
178
+ packages : {
179
+ enabled : true
180
+ proxy_download : true
181
+ // bucket: kustomizations["default"].manifest.packagesBucket.spec.bucketName
182
+ connection : secret : kustomizations [" $default " ].manifest .packagesSecret .metadata .name
183
+ }
184
+ }
185
+ }
186
+ " certmanager-issuer " : install : false
187
+ prometheus : install : false
188
+ postgresql : install : false
189
+ " gitlab-runner " : install : false
190
+ gitlab : toolbox : enabled : false
191
+ redis : {
192
+ master : nodeSelector : storage : " yes "
193
+ global : storageClass : dcsi .localHostpath
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
0 commit comments