-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathvcluster.py
More file actions
38 lines (32 loc) · 1.77 KB
/
vcluster.py
File metadata and controls
38 lines (32 loc) · 1.77 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
from crossplane.pythonic import BaseComposite, Map
class VClusterComposite(BaseComposite):
def compose(self):
name = self.metadata.name
namespace = name
release = self.resources.release('Release', 'helm.crossplane.io/v1beta1', name=name)
release.spec.rollbackLimit = 1
release.spec.forProvider.chart.repository = 'https://charts.loft.sh'
release.spec.forProvider.chart.name = 'vcluster'
release.spec.forProvider.chart.version = '0.26.0'
release.spec.forProvider.namespace = namespace
release.spec.forProvider.values.controlPlane.proxy.extraSANs[0] = f'{name}.{namespace}'
secret_name = f'vc-{name}'
vcluster_secret = self.requireds.vcluster_secret('Secret', 'v1', namespace, secret_name)[0]
if vcluster_secret:
argocd_secret = self.resources.argocd_secret('Secret', 'v1', 'default', secret_name)
argocd_secret.metadata.labels['argocd.argoproj.io/secret-type'] = 'cluster'
argocd_secret.type = 'Opaque'
argocd_secret.data.name = B64Encode(name)
argocd_secret.data.server = B64Encode(f'https://{name}.{namespace}:443')
argocd_secret.data.config = B64Encode(format(self.argcd_secret(vcluster_secret), 'json'))
argocd_secret.ready = argocd_secret.observed
else:
self.ready = False
def argcd_secret(self, secret):
config = Map()
config.tlsClientConfig.insecure = True
# ArgoCD wants these fields to be B64 encoded, so don't decode them
config.tlsClientConfig.caData = secret.data['certificate-authority']
config.tlsClientConfig.certData = secret.data['client-certificate']
config.tlsClientConfig.keyData = secret.data['client-key']
return config