in pkg/controller/agent/reconcile.go [33:122]
func reconcilePodVehicle(params Params, podTemplate corev1.PodTemplateSpec) (*reconciler.Results, agentv1alpha1.AgentStatus) {
defer tracing.Span(¶ms.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(¶ms, ready, desired); err != nil {
err = errors.Wrap(err, "while calculating status")
}
return results.WithError(err), status
}