func ForServices(existing []v1.Service, desired []v1.Service) Service {
	update := []v1.Service{}
	mdelete := serviceMap(existing)
	mcreate := serviceMap(desired)
	for k, v := range mcreate {
		if t, ok := mdelete[k]; ok {
			tp := t.DeepCopy()
			util.InitObjectMeta(tp)
			if v.Spec.ClusterIP == "" && len(tp.Spec.ClusterIP) > 0 {
				v.Spec.ClusterIP = tp.Spec.ClusterIP
			}
			tp.Spec = v.Spec
			tp.ObjectMeta.OwnerReferences = v.ObjectMeta.OwnerReferences
			for k, v := range v.ObjectMeta.Annotations {
				tp.ObjectMeta.Annotations[k] = v
			}
			for k, v := range v.ObjectMeta.Labels {
				tp.ObjectMeta.Labels[k] = v
			}
			update = append(update, *tp)
			delete(mcreate, k)
			delete(mdelete, k)
		}
	}
	return Service{
		Create: serviceList(mcreate),
		Update: update,
		Delete: serviceList(mdelete),
	}
}
ForServices builds an inventory of services based on the existing and desired states
package inventory
import (
	"fmt"
	v1 "k8s.io/api/core/v1"
	"github.com/jaegertracing/jaeger-operator/pkg/util"
)
type Service struct {
	Create []v1.Service
	Update []v1.Service
	Delete []v1.Service
}