Skip to content

Commit ebbf6b7

Browse files
committed
Merge pull request 'fixes | creating initial Velero and Sealed Secrets backups while bootstrapping a fresh cluster' (#139) from hetzner/bare-metal into main
Reviewed-on: https://gitea.obmondo.com/EnableIT/kubeaid-bootstrap-script/pulls/139
2 parents 1c28ac2 + ea37530 commit ebbf6b7

19 files changed

+182
-96
lines changed

pkg/cloud/aws/get_vm_specs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ func (a *AWS) GetVMSpecs(ctx context.Context, vmType string) *cloud.VMSpec {
2828

2929
return &cloud.VMSpec{
3030
CPU: uint32(*instanceDetails.VCpuInfo.DefaultVCpus),
31-
Memory: uint32(*instanceDetails.MemoryInfo.SizeInMiB),
31+
Memory: uint32(*instanceDetails.MemoryInfo.SizeInMiB) / 1024,
3232
}
3333
}

pkg/cloud/azure/get_vm_specs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func (a *Azure) GetVMSpecs(ctx context.Context, vmType string) *cloud.VMSpec {
2424
if *vmSize.Name == vmType {
2525
return &cloud.VMSpec{
2626
CPU: uint32(*vmSize.NumberOfCores),
27-
Memory: uint32(*vmSize.MemoryInMB),
27+
Memory: uint32(*vmSize.MemoryInMB) / 1024,
2828
}
2929
}
3030
}

pkg/cloud/cloud_provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type (
2222

2323
VMSpec struct {
2424
CPU uint32
25-
Memory uint32 // (in MiB).
25+
Memory uint32 // (in GiB).
2626

2727
// Only used in case of HCloud, since the root volume size is fixed unlike in case of other
2828
// hyper-scalars like AWS / Azure.

pkg/cloud/hetzner/get_vm_specs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func (h *Hetzner) GetVMSpecs(ctx context.Context, machineType string) *cloud.VMS
1616

1717
return &cloud.VMSpec{
1818
CPU: uint32(machineDetails.Cores),
19-
Memory: uint32(machineDetails.Memory * 1024),
19+
Memory: uint32(machineDetails.Memory),
2020
RootVolumeSize: aws.Uint32(uint32(machineDetails.Disk)),
2121
}
2222
}

pkg/config/config.go

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ type (
2323

2424
ForksConfig struct {
2525
KubeaidForkURL string `yaml:"kubeaid" default:"https://github.com/Obmondo/KubeAid"`
26-
KubeaidConfigForkURL string `yaml:"kubeaidConfig" validate:"required,notblank"`
26+
KubeaidConfigForkURL string `yaml:"kubeaidConfig" validate:"notblank"`
2727
}
2828

2929
ClusterConfig struct {
30-
Name string `yaml:"name" validate:"required,notblank"`
31-
K8sVersion string `yaml:"k8sVersion" validate:"required,notblank"`
32-
KubeaidVersion string `yaml:"kubeaidVersion" validate:"required,notblank"`
30+
Name string `yaml:"name" validate:"notblank"`
31+
K8sVersion string `yaml:"k8sVersion" validate:"notblank"`
32+
KubeaidVersion string `yaml:"kubeaidVersion" validate:"notblank"`
3333

3434
EnableAuditLogging bool `yaml:"enableAuditLogging" default:"True"`
3535

@@ -56,9 +56,9 @@ type (
5656

5757
// REFER : "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1".HostPathMount
5858
HostPathMountConfig struct {
59-
Name string `yaml:"name" validate:"required,notblank"`
60-
HostPath string `yaml:"hostPath" validate:"required,notblank"`
61-
MountPath string `yaml:"mountPath" validate:"required,notblank"`
59+
Name string `yaml:"name" validate:"notblank"`
60+
HostPath string `yaml:"hostPath" validate:"notblank"`
61+
MountPath string `yaml:"mountPath" validate:"notblank"`
6262
PathType coreV1.HostPathType `yaml:"pathType" validate:"required"`
6363

6464
/*
@@ -75,8 +75,8 @@ type (
7575

7676
// REFER : "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1".File
7777
FileConfig struct {
78-
Path string `yaml:"path" validate:"required,notblank"`
79-
Content string `yaml:"content" validate:"required,notblank"`
78+
Path string `yaml:"path" validate:"notblank"`
79+
Content string `yaml:"content" validate:"notblank"`
8080
}
8181

8282
UserConfig struct {
@@ -85,7 +85,7 @@ type (
8585
}
8686

8787
NodeGroup struct {
88-
Name string `yaml:"name" validate:"required,notblank"`
88+
Name string `yaml:"name" validate:"notblank"`
8989

9090
CPU uint32 `validate:"required"`
9191
Memory uint32 `validate:"required"`
@@ -107,16 +107,16 @@ type (
107107
}
108108

109109
DisasterRecoveryConfig struct {
110-
VeleroBackupsBucketName string `yaml:"veleroBackupsBucketName" validate:"required,notblank"`
111-
SealedSecretsBackupsBucketName string `yaml:"sealedSecretsBackupsBucketName" validate:"required,notblank"`
110+
VeleroBackupsBucketName string `yaml:"veleroBackupsBucketName" validate:"notblank"`
111+
SealedSecretsBackupsBucketName string `yaml:"sealedSecretsBackupsBucketName" validate:"notblank"`
112112
}
113113

114114
SSHKeyPairConfig struct {
115-
PublicKeyFilePath string `yaml:"publicKeyFilePath" validate:"required,notblank"`
116-
PublicKey string ` validate:"required,notblank"`
115+
PublicKeyFilePath string `yaml:"publicKeyFilePath" validate:"notblank"`
116+
PublicKey string ` validate:"notblank"`
117117

118-
PrivateKeyFilePath string `yaml:"privateKeyFilePath" validate:"required,notblank"`
119-
PrivateKey string ` validate:"required,notblank"`
118+
PrivateKeyFilePath string `yaml:"privateKeyFilePath" validate:"notblank"`
119+
PrivateKey string ` validate:"notblank"`
120120
}
121121

122122
MonitoringConfig struct {
@@ -129,49 +129,49 @@ type (
129129
// AWS specific.
130130
type (
131131
AWSConfig struct {
132-
Region string `yaml:"region" validate:"required,notblank"`
132+
Region string `yaml:"region" validate:"notblank"`
133133

134-
SSHKeyName string `yaml:"sshKeyName" validate:"required,notblank"`
134+
SSHKeyName string `yaml:"sshKeyName" validate:"notblank"`
135135
VPCID *string `yaml:"vpcID"`
136-
BastionEnabled bool `yaml:"bastionEnabled" default:"True"`
136+
BastionEnabled bool `yaml:"bastionEnabled" default:"True"`
137137
ControlPlane AWSControlPlane `yaml:"controlPlane" validate:"required"`
138138
NodeGroups []AWSNodeGroup `yaml:"nodeGroups" validate:"required"`
139139
}
140140

141141
AWSControlPlane struct {
142-
LoadBalancerScheme string `yaml:"loadBalancerScheme" default:"internet-facing" validate:"required,notblank"`
142+
LoadBalancerScheme string `yaml:"loadBalancerScheme" default:"internet-facing" validate:"notblank"`
143143
Replicas uint32 `yaml:"replicas" validate:"required"`
144-
InstanceType string `yaml:"instanceType" validate:"required,notblank"`
144+
InstanceType string `yaml:"instanceType" validate:"notblank"`
145145
AMI AMIConfig `yaml:"ami" validate:"required"`
146146
}
147147

148148
AWSNodeGroup struct {
149149
NodeGroup `yaml:",inline"`
150150

151151
AMI AMIConfig `yaml:"ami" validate:"required"`
152-
InstanceType string `yaml:"instanceType" validate:"required,notblank"`
152+
InstanceType string `yaml:"instanceType" validate:"notblank"`
153153
RootVolumeSize uint32 `yaml:"rootVolumeSize" validate:"required"`
154-
SSHKeyName string `yaml:"sshKeyName" validate:"required,notblank"`
154+
SSHKeyName string `yaml:"sshKeyName" validate:"notblank"`
155155
}
156156

157157
AMIConfig struct {
158-
ID string `yaml:"id" validate:"required,notblank"`
158+
ID string `yaml:"id" validate:"notblank"`
159159
}
160160
)
161161

162162
// Azure specific.
163163
type (
164164
AzureConfig struct {
165-
TenantID string `yaml:"tenantID" validate:"required,notblank"`
166-
SubscriptionID string `yaml:"subscriptionID" validate:"required,notblank"`
165+
TenantID string `yaml:"tenantID" validate:"notblank"`
166+
SubscriptionID string `yaml:"subscriptionID" validate:"notblank"`
167167
AADApplication AADApplication `yaml:"aadApplication" validate:"required"`
168-
Location string `yaml:"location" validate:"required,notblank"`
168+
Location string `yaml:"location" validate:"notblank"`
169169

170-
StorageAccount string `yaml:"storageAccount" validate:"required,notblank"`
170+
StorageAccount string `yaml:"storageAccount" validate:"notblank"`
171171

172172
WorkloadIdentity WorkloadIdentity `yaml:"workloadIdentity" validate:"required"`
173173

174-
SSHPublicKey string `yaml:"sshPublicKey" validate:"required,notblank"`
174+
SSHPublicKey string `yaml:"sshPublicKey" validate:"notblank"`
175175

176176
ImageID *string `yaml:"imageID"`
177177

@@ -180,57 +180,57 @@ type (
180180
}
181181

182182
AADApplication struct {
183-
Name string `yaml:"name" validate:"required,notblank"`
184-
ObjectID string `yaml:"objectID" validate:"required,notblank"`
185-
ServicePrincipalID string `yaml:"servicePrincipalID" validate:"required,notblank"`
183+
Name string `yaml:"name" validate:"notblank"`
184+
ObjectID string `yaml:"objectID" validate:"notblank"`
185+
ServicePrincipalID string `yaml:"servicePrincipalID" validate:"notblank"`
186186
}
187187

188188
WorkloadIdentity struct {
189-
OpenIDProviderSSHKeyPair SSHKeyPairConfig `yaml:"openIDProviderSSHKeyPair" validate:"required,notblank"`
189+
OpenIDProviderSSHKeyPair SSHKeyPairConfig `yaml:"openIDProviderSSHKeyPair" validate:"notblank"`
190190
}
191191

192192
AzureControlPlane struct {
193-
LoadBalancerType string `yaml:"loadBalancerType" validate:"required,notblank" default:"Public"`
193+
LoadBalancerType string `yaml:"loadBalancerType" validate:"notblank" default:"Public"`
194194
DiskSizeGB uint32 `yaml:"diskSizeGB" validate:"required,gt=100"`
195-
VMSize string `yaml:"vmSize" validate:"required,notblank"`
195+
VMSize string `yaml:"vmSize" validate:"notblank"`
196196
Replicas uint32 `yaml:"replicas" validate:"required,gt=0"`
197197
}
198198

199199
AzureNodeGroup struct {
200200
NodeGroup `yaml:",inline"`
201201

202-
VMSize string `yaml:"vmSize" validate:"required,notblank"`
202+
VMSize string `yaml:"vmSize" validate:"notblank"`
203203
DiskSizeGB uint32 `yaml:"diskSizeGB" validate:"required"`
204204
}
205205
)
206206

207207
// Hetzner specific.
208208
type (
209209
HetznerConfig struct {
210-
Mode string `yaml:"mode" default:"hcloud" validate:"required,notblank"`
210+
Mode string `yaml:"mode" default:"hcloud" validate:"notblank,oneof='bare-metal hcloud hybrid'"`
211211

212-
Zone string `yaml:"zone" validate:"required,notblank"`
213-
Region string `yaml:"region" validate:"required,notblank"`
212+
Zone string `yaml:"zone" validate:"notblank"`
213+
Region string `yaml:"region" validate:"notblank"`
214214

215-
HCloudSSHKeyPairName string `yaml:"hcloudSSHKeyPairName" validate:"required,notblank"`
215+
HCloudSSHKeyPairName string `yaml:"hcloudSSHKeyPairName" validate:"notblank"`
216216

217217
NetworkEnabled bool `yaml:"networkEnabled" default:"True" validate:"required"`
218-
ImageName string `yaml:"imageName" default:"ubuntu-24.04" validate:"required,notblank"`
218+
ImageName string `yaml:"imageName" default:"ubuntu-24.04" validate:"notblank"`
219219

220220
ControlPlane HetznerControlPlane `yaml:"controlPlane" validate:"required"`
221221
NodeGroups HetznerNodeGroups `yaml:"nodeGroups" validate:"required"`
222222
}
223223

224224
HetznerControlPlane struct {
225-
MachineType string `yaml:"machineType" validate:"required,notblank"`
225+
MachineType string `yaml:"machineType" validate:"notblank"`
226226
Replicas uint `yaml:"replicas" validate:"required"`
227227
Regions []string `yaml:"regions" validate:"required,gt=0"`
228228
LoadBalancer HCloudControlPlaneLoadBalancer `yaml:"loadBalancer"`
229229
}
230230

231231
HCloudControlPlaneLoadBalancer struct {
232232
Enabled bool `yaml:"enabled" validate:"required"`
233-
Region string `yaml:"region" validate:"required,notblank"`
233+
Region string `yaml:"region" validate:"notblank"`
234234
}
235235

236236
HetznerNodeGroups struct {
@@ -240,7 +240,7 @@ type (
240240
HCloudNodeGroup struct {
241241
NodeGroup `yaml:",inline"`
242242

243-
MachineType string `yaml:"machineType" validate:"required,notblank"`
243+
MachineType string `yaml:"machineType" validate:"notblank"`
244244
RootVolumeSize uint32 ` validate:"required"`
245245
}
246246
)

pkg/config/secrets.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ type (
1515
}
1616

1717
AWSCredentials struct {
18-
AWSAccessKeyID string `yaml:"accessKeyID" validate:"required,notblank"`
19-
AWSSecretAccessKey string `yaml:"secretAccessKey" validate:"required,notblank"`
18+
AWSAccessKeyID string `yaml:"accessKeyID" validate:"notblank"`
19+
AWSSecretAccessKey string `yaml:"secretAccessKey" validate:"notblank"`
2020
AWSSessionToken string `yaml:"sessionToken"`
2121
}
2222

2323
AzureCredentials struct {
24-
ClientID string `yaml:"clientID" validate:"required,notblank"`
25-
ClientSecret string `yaml:"clientSecret" validate:"required,notblank"`
24+
ClientID string `yaml:"clientID" validate:"notblank"`
25+
ClientSecret string `yaml:"clientSecret" validate:"notblank"`
2626
}
2727

2828
HetznerCredentials struct {
29-
APIToken string `yaml:"apiToken" validate:"required,notblank"`
29+
APIToken string `yaml:"apiToken" validate:"notblank"`
3030
}
3131
)

pkg/constants/constants.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,15 @@ const (
120120
AzureBlobNameOpenIDConfiguration = ".well-known/openid-configuration"
121121
AzureBlobNameJWKSDocument = "openid/v1/jwks"
122122

123+
// NOTE : You can view all the Azure built-in roles here :
124+
// https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles.
125+
123126
// Grants full access to manage all resources, but does not allow you to assign roles in Azure
124127
// RBAC, manage assignments in Azure Blueprints, or share image galleries.
125128
AzureRoleIDContributor = "b24988ac-6180-42a0-ab88-20f7382dd24c"
126129
// Provides full access to Azure Storage blob containers and data, including assigning POSIX
127130
// access control.
128131
AzureRoleIDStorageBlobDataOwner = "b7e6dc6d-f1e8-4753-8033-0f276bb0955b"
129-
// NOTE : You can view all the Azure built-in roles here :
130-
// https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles.
131132

132133
AzureResponseStatusCodeResourceAlreadyExists = 409
133134

@@ -136,6 +137,13 @@ const (
136137
UAMISealedSecretsBackuper = "sealed-secrets-backuper"
137138
)
138139

140+
// Hetzner
141+
const (
142+
HetznerModeBareMetal = "bare-metal"
143+
HetznerModeHCloud = "hcloud"
144+
HetznerModeHybrid = "hybrid"
145+
)
146+
139147
const (
140148
// Namespaces.
141149
NamespaceVelero = "velero"
@@ -148,11 +156,14 @@ const (
148156
ServiceAccountSealedSecrets = "sealed-secrets"
149157
)
150158

151-
// Miscellaneous.
159+
// File names
152160
const (
153161
FileNameGeneralConfig = "general.yaml"
154162
FileNameSecretsConfig = "secrets.yaml"
163+
)
155164

165+
// Miscellaneous.
166+
const (
156167
RepoURLObmondoKubeAid = "https://github.com/Obmondo/KubeAid"
157168

158169
ClusterTypeManagement = "management"
@@ -162,4 +173,6 @@ const (
162173
SSHPublicKeyPrefixPEM = "-----BEGIN PUBLIC KEY-----"
163174

164175
GzippedFilenameSuffix = ".gz"
176+
177+
CRONJobNameBackupSealedSecrets = "backup-sealed-secrets"
165178
)

pkg/constants/templates.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ var (
120120
// Hetzner specific template names.
121121
var (
122122
HCloudSpecificNonSecretTemplateNames = []string{
123-
// For HCloud Controller Manager.
123+
// For Hetzner Cloud Controller Manager.
124124
"argocd-apps/templates/ccm-hetzner.yaml.tmpl",
125125
"argocd-apps/values-ccm-hetzner.yaml.tmpl",
126126

@@ -130,7 +130,7 @@ var (
130130
}
131131

132132
HCloudSpecificSecretTemplateNames = []string{
133-
// For HCloud Controller Manager.
133+
// For Hetzner Cloud Controller Manager.
134134
"sealed-secrets/kube-system/cloud-credentials.yaml.tmpl",
135135

136136
// For Cluster API.

0 commit comments

Comments
 (0)