forked from LaconicNetwork/kompose
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d6934e81c |
@@ -81,6 +81,8 @@ const (
|
|||||||
DaemonSetController = "daemonset"
|
DaemonSetController = "daemonset"
|
||||||
// StatefulStateController is controller type for StatefulSet
|
// StatefulStateController is controller type for StatefulSet
|
||||||
StatefulStateController = "statefulset"
|
StatefulStateController = "statefulset"
|
||||||
|
// JobController is controller type for Job
|
||||||
|
JobController = "job"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CheckUnsupportedKey checks if given komposeObject contains
|
// CheckUnsupportedKey checks if given komposeObject contains
|
||||||
@@ -523,6 +525,52 @@ func (k *Kubernetes) InitDS(name string, service kobject.ServiceConfig, opt kobj
|
|||||||
return ds
|
return ds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InitJob initializes Kubernetes Job object
|
||||||
|
func (k *Kubernetes) InitJob(name string, service kobject.ServiceConfig, opt kobject.ConvertOptions) *batchv1.Job {
|
||||||
|
var podSpec api.PodSpec
|
||||||
|
if len(service.Configs) > 0 {
|
||||||
|
podSpec = k.InitPodSpecWithConfigMap(name, service, opt)
|
||||||
|
} else {
|
||||||
|
podSpec = k.InitPodSpec(name, service, opt)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jobs need RestartPolicy set (default is Always which is invalid for Jobs)
|
||||||
|
// Use Never for jobs unless explicitly set
|
||||||
|
if podSpec.RestartPolicy == "" || podSpec.RestartPolicy == api.RestartPolicyAlways {
|
||||||
|
podSpec.RestartPolicy = api.RestartPolicyNever
|
||||||
|
}
|
||||||
|
|
||||||
|
job := &batchv1.Job{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
Kind: "Job",
|
||||||
|
APIVersion: "batch/v1",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
Labels: transformer.ConfigAllLabels(name, &service),
|
||||||
|
},
|
||||||
|
Spec: batchv1.JobSpec{
|
||||||
|
Template: api.PodTemplateSpec{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Labels: transformer.ConfigLabels(name),
|
||||||
|
},
|
||||||
|
Spec: podSpec,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set backoffLimit from label if specified
|
||||||
|
if backoffLimit, ok := service.Labels["kompose.job.backoff-limit"]; ok {
|
||||||
|
limit, err := strconv.ParseInt(backoffLimit, 10, 32)
|
||||||
|
if err == nil {
|
||||||
|
limit32 := int32(limit)
|
||||||
|
job.Spec.BackoffLimit = &limit32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return job
|
||||||
|
}
|
||||||
|
|
||||||
// InitSS method initialize a stateful set
|
// InitSS method initialize a stateful set
|
||||||
func (k *Kubernetes) InitSS(name string, service kobject.ServiceConfig, replicas int, opt kobject.ConvertOptions) *appsv1.StatefulSet {
|
func (k *Kubernetes) InitSS(name string, service kobject.ServiceConfig, replicas int, opt kobject.ConvertOptions) *appsv1.StatefulSet {
|
||||||
var podSpec api.PodSpec
|
var podSpec api.PodSpec
|
||||||
@@ -1454,6 +1502,10 @@ func (k *Kubernetes) CreateWorkloadAndConfigMapObjects(name string, service kobj
|
|||||||
objects = append(objects, k.InitSS(name, service, replica, opt))
|
objects = append(objects, k.InitSS(name, service, replica, opt))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opt.Controller == JobController {
|
||||||
|
objects = append(objects, k.InitJob(name, service, opt))
|
||||||
|
}
|
||||||
|
|
||||||
envConfigMaps := k.PargeEnvFiletoConfigMaps(name, service, opt)
|
envConfigMaps := k.PargeEnvFiletoConfigMaps(name, service, opt)
|
||||||
objects = append(objects, envConfigMaps...)
|
objects = append(objects, envConfigMaps...)
|
||||||
return objects
|
return objects
|
||||||
@@ -1807,7 +1859,10 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate pod or cronjob and configmap objects
|
// Generate pod or cronjob and configmap objects
|
||||||
if (service.Restart == "no" || service.Restart == "on-failure") && !opt.IsPodController() {
|
// Check if service has explicit controller type label
|
||||||
|
_, hasControllerLabel := service.Labels[compose.LabelControllerType]
|
||||||
|
|
||||||
|
if (service.Restart == "no" || service.Restart == "on-failure") && !opt.IsPodController() && !hasControllerLabel {
|
||||||
if service.CronJobSchedule != "" {
|
if service.CronJobSchedule != "" {
|
||||||
log.Infof("Create kubernetes pod instead of pod controller due to restart policy: %s", service.Restart)
|
log.Infof("Create kubernetes pod instead of pod controller due to restart policy: %s", service.Restart)
|
||||||
cronJob := k.InitCJ(name, service, service.CronJobSchedule, service.CronJobConcurrencyPolicy, service.CronJobBackoffLimit, opt)
|
cronJob := k.InitCJ(name, service, service.CronJobSchedule, service.CronJobConcurrencyPolicy, service.CronJobBackoffLimit, opt)
|
||||||
@@ -1881,6 +1936,12 @@ func (k *Kubernetes) UpdateController(obj runtime.Object, updateTemplate func(*a
|
|||||||
return errors.Wrap(err, "updateTemplate failed")
|
return errors.Wrap(err, "updateTemplate failed")
|
||||||
}
|
}
|
||||||
updateMeta(&t.ObjectMeta)
|
updateMeta(&t.ObjectMeta)
|
||||||
|
case *batchv1.Job:
|
||||||
|
err = updateTemplate(&t.Spec.Template)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "updateTemplate failed")
|
||||||
|
}
|
||||||
|
updateMeta(&t.ObjectMeta)
|
||||||
case *deployapi.DeploymentConfig:
|
case *deployapi.DeploymentConfig:
|
||||||
err = updateTemplate(t.Spec.Template)
|
err = updateTemplate(t.Spec.Template)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user