properly generate podTemplate for the cron job's pod
This commit is contained in:
		
							parent
							
								
									de9ffb6eff
								
							
						
					
					
						commit
						40175633a5
					
				| 
						 | 
					@ -303,7 +303,7 @@ func (c *Cluster) Create() error {
 | 
				
			||||||
		if err := c.createBackupCronJob(); err != nil {
 | 
							if err := c.createBackupCronJob(); err != nil {
 | 
				
			||||||
			return fmt.Errorf("could not create a k8s cron job for logical backups: %v", err)
 | 
								return fmt.Errorf("could not create a k8s cron job for logical backups: %v", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		c.logger.Infof("a k8s cron job for logical backup has been successfully created")
 | 
							c.logger.Info("a k8s cron job for logical backup has been successfully created")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := c.listResources(); err != nil {
 | 
						if err := c.listResources(); err != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,6 @@ import (
 | 
				
			||||||
	"github.com/zalando/postgres-operator/pkg/util/constants"
 | 
						"github.com/zalando/postgres-operator/pkg/util/constants"
 | 
				
			||||||
	batchv1 "k8s.io/api/batch/v1"
 | 
						batchv1 "k8s.io/api/batch/v1"
 | 
				
			||||||
	batchv1beta1 "k8s.io/api/batch/v1beta1"
 | 
						batchv1beta1 "k8s.io/api/batch/v1beta1"
 | 
				
			||||||
	corev1 "k8s.io/api/core/v1"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1255,36 +1254,67 @@ func (c *Cluster) getClusterServiceConnectionParameters(clusterName string) (hos
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Cluster) generateCronJob() *batchv1beta1.CronJob {
 | 
					func (c *Cluster) generateCronJob() (*batchv1beta1.CronJob, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jobSpec := batchv1.JobSpec{Template: v1.PodTemplateSpec{
 | 
						var (
 | 
				
			||||||
		Spec: corev1.PodSpec{
 | 
							err         error
 | 
				
			||||||
			Containers: []corev1.Container{
 | 
							podTemplate *v1.PodTemplateSpec
 | 
				
			||||||
				corev1.Container{
 | 
						)
 | 
				
			||||||
					Name:    "Hello world",
 | 
					
 | 
				
			||||||
					Image:   "hello-world",
 | 
						c.logger.Debug("Generating logical backup pod template")
 | 
				
			||||||
					Command: []string{"date", "echo Hello from the Kubernetes cluster"},
 | 
					
 | 
				
			||||||
				},
 | 
						defaultResources := c.makeDefaultResources()
 | 
				
			||||||
			},
 | 
						resourceRequirements, err := generateResourceRequirements(c.Spec.Resources, defaultResources)
 | 
				
			||||||
		},
 | 
						volumeMounts := generateVolumeMounts()
 | 
				
			||||||
	},
 | 
					
 | 
				
			||||||
 | 
						logicalBackupContainer := generateSpiloContainer(
 | 
				
			||||||
 | 
							"logical-backup",
 | 
				
			||||||
 | 
							&c.OpConfig.LogicalBackup.LogicalBackupDockerImage,
 | 
				
			||||||
 | 
							resourceRequirements,
 | 
				
			||||||
 | 
							[]v1.EnvVar{},
 | 
				
			||||||
 | 
							volumeMounts,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if podTemplate, err = generatePodTemplate(
 | 
				
			||||||
 | 
							c.Namespace,
 | 
				
			||||||
 | 
							c.labelsSet(true),
 | 
				
			||||||
 | 
							logicalBackupContainer,
 | 
				
			||||||
 | 
							[]v1.Container{},
 | 
				
			||||||
 | 
							[]v1.Container{},
 | 
				
			||||||
 | 
							&[]v1.Toleration{},
 | 
				
			||||||
 | 
							nodeAffinity(c.OpConfig.NodeReadinessLabel),
 | 
				
			||||||
 | 
							int64(c.OpConfig.PodTerminateGracePeriod.Seconds()),
 | 
				
			||||||
 | 
							c.OpConfig.PodServiceAccountName,
 | 
				
			||||||
 | 
							c.OpConfig.KubeIAMRole,
 | 
				
			||||||
 | 
							"",
 | 
				
			||||||
 | 
							false,
 | 
				
			||||||
 | 
							false,
 | 
				
			||||||
 | 
							c.OpConfig.PodAntiAffinityTopologyKey); err != nil {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("could not generate pod template for logical backup cron job: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						jobSpec := batchv1.JobSpec{Template: *podTemplate}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	jobTemplateSpec := batchv1beta1.JobTemplateSpec{
 | 
						jobTemplateSpec := batchv1beta1.JobTemplateSpec{
 | 
				
			||||||
		Spec: jobSpec,
 | 
							Spec: jobSpec,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						schedule := c.Postgresql.Spec.LogicalBackupSchedule
 | 
				
			||||||
 | 
						if schedule == "" {
 | 
				
			||||||
 | 
							schedule = c.OpConfig.LogicalBackupSchedule
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cronJob := &batchv1beta1.CronJob{
 | 
						cronJob := &batchv1beta1.CronJob{
 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
			Name:      "Dummy cron job",
 | 
								Name:      "logical-backup-" + c.clusterName().String(),
 | 
				
			||||||
			Namespace: c.Namespace,
 | 
								Namespace: c.Namespace,
 | 
				
			||||||
			Labels:    c.labelsSet(true),
 | 
								Labels:    c.labelsSet(true),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		Spec: batchv1beta1.CronJobSpec{
 | 
							Spec: batchv1beta1.CronJobSpec{
 | 
				
			||||||
			Schedule:    c.Postgresql.Spec.LogicalBackupSchedule,
 | 
								Schedule:    schedule,
 | 
				
			||||||
			JobTemplate: jobTemplateSpec,
 | 
								JobTemplate: jobTemplateSpec,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return cronJob
 | 
						return cronJob, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -611,9 +611,14 @@ func (c *Cluster) createRoles() (err error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Cluster) createBackupCronJob() (err error) {
 | 
					func (c *Cluster) createBackupCronJob() (err error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.setProcessName("creating a k8s cron job for backups")
 | 
						c.setProcessName("creating a k8s cron job for logical backups")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cronJobSpec, err := c.generateCronJob()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("could not generate k8s cron job spec: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c.logger.Debugf("Generated cronJobSpec: %v", cronJobSpec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cronJobSpec := c.generateCronJob()
 | 
					 | 
				
			||||||
	cronJob, err := c.KubeClient.CronJobsGetter.CronJobs(c.Namespace).Create(cronJobSpec)
 | 
						cronJob, err := c.KubeClient.CronJobsGetter.CronJobs(c.Namespace).Create(cronJobSpec)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("could not create k8s cron job: %v", err)
 | 
							return fmt.Errorf("could not create k8s cron job: %v", err)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,10 +67,10 @@ type Scalyr struct {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LogicalBackup
 | 
					// LogicalBackup
 | 
				
			||||||
type LogicalBackup struct {
 | 
					type LogicalBackup struct {
 | 
				
			||||||
	EnableLogicalBackup      bool   `json:"enable_logical_backup,omitempty"`
 | 
						EnableLogicalBackup      bool   `name:"enable_logical_backup" default:"false"`
 | 
				
			||||||
	LogicalBackupSchedule    string `json:"logical_backup_schedule,omitempty"`
 | 
						LogicalBackupSchedule    string `name:"logical_backup_schedule" default:"30 00 * * *"`
 | 
				
			||||||
	LogicalBackupDockerImage string `json:"logical_backup_docker_image,omitempty"`
 | 
						LogicalBackupDockerImage string `name:"logical_backup_image" default:""`
 | 
				
			||||||
	LogicalBackupS3Bucket    string `json:"logical_backup_s3_bucket,omitempty"`
 | 
						LogicalBackupS3Bucket    string `name:"logical_backup_s3_bucket"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Config describes operator config
 | 
					// Config describes operator config
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,6 +87,7 @@ func NewFromConfig(cfg *rest.Config) (KubernetesClient, error) {
 | 
				
			||||||
	kubeClient.PodDisruptionBudgetsGetter = client.PolicyV1beta1()
 | 
						kubeClient.PodDisruptionBudgetsGetter = client.PolicyV1beta1()
 | 
				
			||||||
	kubeClient.RESTClient = client.CoreV1().RESTClient()
 | 
						kubeClient.RESTClient = client.CoreV1().RESTClient()
 | 
				
			||||||
	kubeClient.RoleBindingsGetter = client.RbacV1beta1()
 | 
						kubeClient.RoleBindingsGetter = client.RbacV1beta1()
 | 
				
			||||||
 | 
						kubeClient.CronJobsGetter = client.BatchV1beta1()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiextClient, err := apiextclient.NewForConfig(cfg)
 | 
						apiextClient, err := apiextclient.NewForConfig(cfg)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue