mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-19 04:26:39 +00:00
Determine whether it is necessary to create a service (#333)
* Determine whether it is necessary to create a service * add checkContainerPortsSpecified func * add check workload is nil
This commit is contained in:
@@ -109,26 +109,7 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
|
||||
fmt.Sprintf("Workload `%s` successfully patched a deployment `%s`",
|
||||
workload.Name, deploy.Name)))
|
||||
|
||||
// create a service for the workload
|
||||
service, err := r.renderService(ctx, &workload)
|
||||
if err != nil {
|
||||
log.Error(err, "Failed to render a service")
|
||||
r.record.Event(eventObj, event.Warning(errRenderService, err))
|
||||
return util.ReconcileWaitResult,
|
||||
util.PatchCondition(ctx, r, &workload, cpv1alpha1.ReconcileError(errors.Wrap(err, errRenderService)))
|
||||
}
|
||||
// server side apply the service
|
||||
if err := r.Patch(ctx, service, client.Apply, applyOpts...); err != nil {
|
||||
log.Error(err, "Failed to apply a service")
|
||||
r.record.Event(eventObj, event.Warning(errApplyDeployment, err))
|
||||
return util.ReconcileWaitResult,
|
||||
util.PatchCondition(ctx, r, &workload, cpv1alpha1.ReconcileError(errors.Wrap(err, errApplyService)))
|
||||
}
|
||||
r.record.Event(eventObj, event.Normal("Service created",
|
||||
fmt.Sprintf("Workload `%s` successfully server side patched a service `%s`",
|
||||
workload.Name, service.Name)))
|
||||
|
||||
// record the new deployment, new service
|
||||
// record the new deployment
|
||||
workload.Status.Resources = []cpv1alpha1.TypedReference{
|
||||
{
|
||||
APIVersion: deploy.GetObjectKind().GroupVersionKind().GroupVersion().String(),
|
||||
@@ -136,12 +117,37 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
|
||||
Name: deploy.GetName(),
|
||||
UID: deploy.UID,
|
||||
},
|
||||
{
|
||||
}
|
||||
|
||||
// Determine whether it is necessary to create a service.if container.
|
||||
setPorts := r.checkContainerPortsSpecified(ctx, &workload)
|
||||
if !setPorts {
|
||||
// create a service for the workload
|
||||
service, err := r.renderService(ctx, &workload)
|
||||
if err != nil {
|
||||
log.Error(err, "Failed to render a service")
|
||||
r.record.Event(eventObj, event.Warning(errRenderService, err))
|
||||
return util.ReconcileWaitResult,
|
||||
util.PatchCondition(ctx, r, &workload, cpv1alpha1.ReconcileError(errors.Wrap(err, errRenderService)))
|
||||
}
|
||||
// server side apply the service
|
||||
if err := r.Patch(ctx, service, client.Apply, applyOpts...); err != nil {
|
||||
log.Error(err, "Failed to apply a service")
|
||||
r.record.Event(eventObj, event.Warning(errApplyDeployment, err))
|
||||
return util.ReconcileWaitResult,
|
||||
util.PatchCondition(ctx, r, &workload, cpv1alpha1.ReconcileError(errors.Wrap(err, errApplyService)))
|
||||
}
|
||||
r.record.Event(eventObj, event.Normal("Service created",
|
||||
fmt.Sprintf("Workload `%s` successfully server side patched a service `%s`",
|
||||
workload.Name, service.Name)))
|
||||
|
||||
// record the new service
|
||||
workload.Status.Resources = append(workload.Status.Resources, cpv1alpha1.TypedReference{
|
||||
APIVersion: service.GetObjectKind().GroupVersionKind().GroupVersion().String(),
|
||||
Kind: service.GetObjectKind().GroupVersionKind().Kind,
|
||||
Name: service.GetName(),
|
||||
UID: service.UID,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if err := r.Status().Update(ctx, &workload); err != nil {
|
||||
@@ -204,6 +210,20 @@ func (r *Reconciler) renderDeployment(ctx context.Context,
|
||||
return deploy, nil
|
||||
}
|
||||
|
||||
// check whether the container port is specified
|
||||
func (r *Reconciler) checkContainerPortsSpecified(ctx context.Context,
|
||||
workload *v1alpha1.Containerized) bool {
|
||||
if workload == nil {
|
||||
return false
|
||||
}
|
||||
for _, container := range workload.Spec.PodSpec.Containers {
|
||||
if len(container.Ports) > 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// create a service for the deployment
|
||||
func (r *Reconciler) renderService(ctx context.Context,
|
||||
workload *v1alpha1.Containerized) (*corev1.Service, error) {
|
||||
|
||||
Reference in New Issue
Block a user