Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apis/database/v4/oraclerestart_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ type OracleRestartDbPwdSecretDetails struct {

// OracleRestart Ssh secret Details
type OracleRestartSshSecretDetails struct {
Name string `json:"name"` // Name of the secret.
Name string `json:"name,omitempty"` // Name of the secret.
KeyMountLocation string `json:"keyMountLocation,omitempty"`
PrivKeySecretName string `json:"privKeySecretName,omitempty"`
PubKeySecretName string `json:"pubKeySecretName,omitempty"`
Expand Down
54 changes: 27 additions & 27 deletions apis/database/v4/oraclerestart_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func (r *OracleRestart) Default(ctx context.Context, obj runtime.Object) error {
cr.Spec.ConfigParams.CrsAsmDiskDg = "DATA"
}
if cr.Spec.ConfigParams.CrsAsmDiskDgRedundancy == "" {
cr.Spec.ConfigParams.CrsAsmDiskDgRedundancy = "external"
cr.Spec.ConfigParams.CrsAsmDiskDgRedundancy = "EXTERNAL"
}
}

Expand Down Expand Up @@ -171,7 +171,7 @@ func (r *OracleRestart) ValidateCreate(ctx context.Context, obj runtime.Object)
"image cannot be set to empty"))
}

validationErrs = append(validationErrs, cr.validateSshSecret()...)
// validationErrs = append(validationErrs, cr.validateSshSecret()...)
validationErrs = append(validationErrs, cr.validateDbSecret()...)
validationErrs = append(validationErrs, cr.validateTdeSecret()...)
validationErrs = append(validationErrs, cr.validateServiceSpecs()...)
Expand Down Expand Up @@ -465,31 +465,31 @@ func (r *OracleRestart) ValidateDelete(ctx context.Context, obj runtime.Object)

//========== User Functions to check the fields ==========

func (r *OracleRestart) validateSshSecret() field.ErrorList {
var validationErrs field.ErrorList
sshPath := field.NewPath("spec").Child("SshKeySecret")

if r.Spec.SshKeySecret == nil {
validationErrs = append(validationErrs,
field.Required(sshPath, "SshKeySecret must be specified"))
return validationErrs
}

if r.Spec.SshKeySecret.Name == "" {
validationErrs = append(validationErrs,
field.Required(sshPath.Child("Name"), "SshKeySecret.Name cannot be empty"))
}
if r.Spec.SshKeySecret.PrivKeySecretName == "" {
validationErrs = append(validationErrs,
field.Required(sshPath.Child("PrivKeySecretName"), "PrivKeySecretName cannot be empty"))
}
if r.Spec.SshKeySecret.PubKeySecretName == "" {
validationErrs = append(validationErrs,
field.Required(sshPath.Child("PubKeySecretName"), "PubKeySecretName cannot be empty"))
}

return validationErrs
}
// func (r *OracleRestart) validateSshSecret() field.ErrorList {
// var validationErrs field.ErrorList
// sshPath := field.NewPath("spec").Child("SshKeySecret")

// if r.Spec.SshKeySecret == nil {
// validationErrs = append(validationErrs,
// field.Required(sshPath, "SshKeySecret must be specified"))
// return validationErrs
// }

// if r.Spec.SshKeySecret.Name == "" {
// validationErrs = append(validationErrs,
// field.Required(sshPath.Child("Name"), "SshKeySecret.Name cannot be empty"))
// }
// if r.Spec.SshKeySecret.PrivKeySecretName == "" {
// validationErrs = append(validationErrs,
// field.Required(sshPath.Child("PrivKeySecretName"), "PrivKeySecretName cannot be empty"))
// }
// if r.Spec.SshKeySecret.PubKeySecretName == "" {
// validationErrs = append(validationErrs,
// field.Required(sshPath.Child("PubKeySecretName"), "PubKeySecretName cannot be empty"))
// }

// return validationErrs
// }
func (r *OracleRestart) validateDbSecret() field.ErrorList {
var validationErrs field.ErrorList
dbPath := field.NewPath("spec").Child("DbSecret")
Expand Down
23 changes: 18 additions & 5 deletions commons/oraclerestart/oraclerestartcommon.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,16 +188,12 @@ func GetRacPodName(racName string) string {
return podName
}

func getlabelsForRac(instance *oraclerestart.OracleRestart) map[string]string {
return buildLabelsForOracleRestart(instance, "OracleRestart")
}

func GetAsmPvcName(name string, diskPath string, instance *oraclerestart.OracleRestart) string {

// pvcName := "asm-pvc-disk-" + strconv.Itoa(index) + "-" + name + "-" + dgType + "-" + "pvc"
dgType := CheckDiskInAsmDeviceList(instance, diskPath)
diskName := diskPath[strings.LastIndex(diskPath, "/")+1:]
pvcName := "asm-pvc-" + strings.ToLower(dgType) + "-" + diskName + "-" + name + "-" + instance.Spec.InstDetails.Name + "-0"
pvcName := "asm-pvc-" + strings.ToLower(dgType) + "-" + diskName + "-" + instance.Name

return pvcName
}
Expand Down Expand Up @@ -1395,3 +1391,20 @@ func CheckStorageClass(instance *oraclerestart.OracleRestart) string {
}
return "SC"
}

func checkHugePagesConfigured(instance *oraclerestart.OracleRestart) bool {

if instance.Spec.Resources != nil {
if len(instance.Spec.Resources.Limits) > 0 {
_, ok := instance.Spec.Resources.Limits["hugepages-2Mi"]
if ok {
return true
}
_, ok = instance.Spec.Resources.Requests["hugepages-2Mi"]
if ok {
return true
}
}
}
return false
}
90 changes: 60 additions & 30 deletions commons/oraclerestart/oraclerestartprov.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,6 @@ func buildStatefulSpecForOracleRestart(
if len(instance.Spec.SwStorageClass) != 0 && len(instance.Spec.InstDetails.HostSwLocation) == 0 {
sfsetspec.VolumeClaimTemplates = append(sfsetspec.VolumeClaimTemplates, SwVolumeClaimTemplatesForOracleRestart(instance, OracleRestartSpex))
}
// Add annotations to the Pod template
// sfsetspec.Template.Annotations = generateNetworkDetails(instance, OracleRestartSpex, kClient)

return sfsetspec
}

Expand Down Expand Up @@ -273,14 +270,6 @@ func getAsmNodeAffinity(instance *oraclerestart.OracleRestart, disk *oracleresta
func buildVolumeSpecForOracleRestart(instance *oraclerestart.OracleRestart, OracleRestartSpex oraclerestart.OracleRestartInstDetailSpec) []corev1.Volume {
var result []corev1.Volume
result = []corev1.Volume{
{
Name: OracleRestartSpex.Name + "-ssh-secretmap-vol",
VolumeSource: corev1.VolumeSource{
Secret: &corev1.SecretVolumeSource{
SecretName: instance.Spec.SshKeySecret.Name,
},
},
},
{
Name: OracleRestartSpex.Name + "-oradshm-vol",
VolumeSource: corev1.VolumeSource{
Expand All @@ -289,6 +278,20 @@ func buildVolumeSpecForOracleRestart(instance *oraclerestart.OracleRestart, Orac
},
}

// Only add the SSH secret volume if SshKeySecret is not nil and Name is not empty/whitespace
if instance.Spec.SshKeySecret != nil && strings.TrimSpace(instance.Spec.SshKeySecret.Name) != "" {
result = append([]corev1.Volume{
{
Name: OracleRestartSpex.Name + "-ssh-secretmap-vol",
VolumeSource: corev1.VolumeSource{
Secret: &corev1.SecretVolumeSource{
SecretName: instance.Spec.SshKeySecret.Name,
},
},
},
}, result...)
}

if len(instance.Spec.ScriptsLocation) != 0 {
result = append(result, corev1.Volume{Name: OracleRestartSpex.Name + "-oradata-scripts-vol", VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}}})
}
Expand Down Expand Up @@ -383,27 +386,38 @@ func buildVolumeSpecForOracleRestart(instance *oraclerestart.OracleRestart, Orac
}
}

if checkHugePagesConfigured(instance) {
result = append(result, corev1.Volume{
Name: OracleRestartSpex.Name + "-oradata-hugepages-vol",
VolumeSource: corev1.VolumeSource{
EmptyDir: &corev1.EmptyDirVolumeSource{
Medium: corev1.StorageMediumHugePages,
},
},
})
}

if len(OracleRestartSpex.PvcName) != 0 {
for source := range OracleRestartSpex.PvcName {
result = append(result, corev1.Volume{Name: OracleRestartSpex.Name + "-ora-vol-" + source, VolumeSource: corev1.VolumeSource{PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{ClaimName: source}}})
}
}

seen := make(map[string]struct{})
if instance.Spec.AsmStorageDetails != nil {
// Iterate over the DisksBySize slice
for _, diskBySize := range instance.Spec.AsmStorageDetails.DisksBySize {
// For each DiskBySize, append PVCs for the disks in DiskNames
for _, diskName := range diskBySize.DiskNames {
// Construct PVC name based on index and instance name
pvcName := GetAsmPvcName(instance.Name, diskName, instance)
result = append(result, corev1.Volume{
Name: pvcName,
VolumeSource: corev1.VolumeSource{
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
ClaimName: pvcName,
if _, exists := seen[pvcName]; !exists {
seen[pvcName] = struct{}{}
result = append(result, corev1.Volume{
Name: pvcName,
VolumeSource: corev1.VolumeSource{
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
ClaimName: pvcName,
},
},
},
})
})
}
}
}
}
Expand Down Expand Up @@ -435,7 +449,7 @@ func buildContainerSpecForOracleRestart(instance *oraclerestart.OracleRestart, O
Command: []string{
"/usr/sbin/init",
},
VolumeDevices: getAsmVolumeDevices(instance, OracleRestartSpex),
VolumeDevices: getAsmVolumeDevices(instance),
Resources: corev1.ResourceRequirements{
Requests: make(map[corev1.ResourceName]resource.Quantity),
},
Expand Down Expand Up @@ -468,21 +482,24 @@ func buildContainerSpecForOracleRestart(instance *oraclerestart.OracleRestart, O
return result
}

func getAsmVolumeDevices(instance *oraclerestart.OracleRestart, OracleRestartSpex oraclerestart.OracleRestartInstDetailSpec) []corev1.VolumeDevice {
func getAsmVolumeDevices(instance *oraclerestart.OracleRestart) []corev1.VolumeDevice {
var result []corev1.VolumeDevice
seen := make(map[string]struct{})

if instance.Spec.AsmStorageDetails != nil {
// Iterate over the DisksBySize slice
for _, diskBySize := range instance.Spec.AsmStorageDetails.DisksBySize {
// For each disk in DiskNames, create a VolumeDevice
for _, diskName := range diskBySize.DiskNames {
// Create PVC name and append VolumeDevice to the result
pvcName := GetAsmPvcName(instance.Name, diskName, instance)
result = append(result, corev1.VolumeDevice{Name: pvcName, DevicePath: diskName})
if _, exists := seen[pvcName]; !exists {
seen[pvcName] = struct{}{}
result = append(result, corev1.VolumeDevice{
Name: pvcName,
DevicePath: diskName,
})
}
}
}
}

return result
}

Expand Down Expand Up @@ -534,7 +551,13 @@ func buildInitContainerSpecForOracleRestart(instance *oraclerestart.OracleRestar

func buildVolumeMountSpecForOracleRestart(instance *oraclerestart.OracleRestart, OracleRestartSpex oraclerestart.OracleRestartInstDetailSpec) []corev1.VolumeMount {
var result []corev1.VolumeMount
result = append(result, corev1.VolumeMount{Name: OracleRestartSpex.Name + "-ssh-secretmap-vol", MountPath: instance.Spec.SshKeySecret.KeyMountLocation, ReadOnly: true})
if instance.Spec.SshKeySecret != nil && strings.TrimSpace(instance.Spec.SshKeySecret.KeyMountLocation) != "" {
result = append(result, corev1.VolumeMount{
Name: OracleRestartSpex.Name + "-ssh-secretmap-vol",
MountPath: instance.Spec.SshKeySecret.KeyMountLocation,
ReadOnly: true,
})
}
if instance.Spec.DbSecret != nil {
if instance.Spec.DbSecret.KeySecretName != "" {
result = append(result, corev1.VolumeMount{Name: OracleRestartSpex.Name + "-dbsecret-key-vol", MountPath: instance.Spec.DbSecret.KeyFileMountLocation, ReadOnly: true})
Expand Down Expand Up @@ -616,6 +639,13 @@ func buildVolumeMountSpecForOracleRestart(instance *oraclerestart.OracleRestart,
}
}

if checkHugePagesConfigured(instance) {
result = append(result, corev1.VolumeMount{
Name: OracleRestartSpex.Name + "-oradata-hugepages-vol",
MountPath: "/hugepages",
})
}

if len(OracleRestartSpex.PvcName) != 0 {
for source, target := range OracleRestartSpex.PvcName {
result = append(result, corev1.VolumeMount{Name: OracleRestartSpex.Name + "-ora-vol-" + source, MountPath: target})
Expand Down
4 changes: 0 additions & 4 deletions config/crd/bases/database.oracle.com_oraclerestarts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -675,8 +675,6 @@ spec:
type: string
pubKeySecretName:
type: string
required:
- name
type: object
swDgStorageClass:
type: string
Expand Down Expand Up @@ -1395,8 +1393,6 @@ spec:
type: string
pubKeySecretName:
type: string
required:
- name
type: object
state:
type: string
Expand Down
Loading