func reconcilePodVehicle()

in pkg/controller/agent/reconcile.go [33:122]


func reconcilePodVehicle(params Params, podTemplate corev1.PodTemplateSpec) (*reconciler.Results, agentv1alpha1.AgentStatus) {
	defer tracing.Span(&params.Context)()
	results := reconciler.NewResult(params.Context)

	spec := params.Agent.Spec
	name := Name(params.Agent.Name)

	var toDelete []client.Object
	var reconciliationFunc func(params ReconciliationParams) (int32, int32, error)
	switch {
	case spec.DaemonSet != nil:
		reconciliationFunc = reconcileDaemonSet
		toDelete = append(toDelete,
			&v1.Deployment{
				ObjectMeta: metav1.ObjectMeta{
					Name:      name,
					Namespace: params.Agent.Namespace,
				},
			},
			&v1.StatefulSet{
				ObjectMeta: metav1.ObjectMeta{
					Name:      name,
					Namespace: params.Agent.Namespace,
				},
			},
		)
	case spec.Deployment != nil:
		reconciliationFunc = reconcileDeployment
		toDelete = append(toDelete,
			&v1.DaemonSet{
				ObjectMeta: metav1.ObjectMeta{
					Name:      name,
					Namespace: params.Agent.Namespace,
				},
			},
			&v1.StatefulSet{
				ObjectMeta: metav1.ObjectMeta{
					Name:      name,
					Namespace: params.Agent.Namespace,
				},
			},
		)
	case spec.StatefulSet != nil:
		reconciliationFunc = reconcileStatefulSet
		toDelete = append(toDelete,
			&v1.DaemonSet{
				ObjectMeta: metav1.ObjectMeta{
					Name:      name,
					Namespace: params.Agent.Namespace,
				},
			},
			&v1.Deployment{
				ObjectMeta: metav1.ObjectMeta{
					Name:      name,
					Namespace: params.Agent.Namespace,
				},
			},
		)
	}

	ready, desired, err := reconciliationFunc(ReconciliationParams{
		ctx:         params.Context,
		client:      params.Client,
		agent:       params.Agent,
		podTemplate: podTemplate,
	})

	if err != nil {
		return results.WithError(err), params.Status
	}

	for _, obj := range toDelete {
		// clean up the other ones
		if err := params.Client.Get(params.Context, types.NamespacedName{
			Namespace: params.Agent.Namespace,
			Name:      name,
		}, obj); err == nil {
			results.WithError(params.Client.Delete(params.Context, obj))
		} else if !apierrors.IsNotFound(err) {
			results.WithError(err)
		}
	}

	var status agentv1alpha1.AgentStatus
	if status, err = calculateStatus(&params, ready, desired); err != nil {
		err = errors.Wrap(err, "while calculating status")
	}

	return results.WithError(err), status
}