diff --git a/pkg/devfile/adapters/kubernetes/component/adapter.go b/pkg/devfile/adapters/kubernetes/component/adapter.go index 3a9391c3509..724d8865fba 100644 --- a/pkg/devfile/adapters/kubernetes/component/adapter.go +++ b/pkg/devfile/adapters/kubernetes/component/adapter.go @@ -182,8 +182,9 @@ func (a Adapter) Push(parameters common.PushParameters) (err error) { if err != nil { return errors.Wrap(err, "error while trying to fetch service(s) from devfile") } + labels := componentlabels.GetLabels(a.ComponentName, a.AppName, true) // create the Kubernetes objects from the manifest - services, err := service.CreateServiceFromKubernetesInlineComponents(a.Client.GetKubeClient(), k8sComponents) + services, err := service.CreateServiceFromKubernetesInlineComponents(a.Client.GetKubeClient(), k8sComponents, labels) if err != nil { return errors.Wrap(err, "failed to create service(s) associated with the component") } diff --git a/pkg/service/service.go b/pkg/service/service.go index e9e42cb4582..085b102fbe7 100644 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@ -797,8 +797,25 @@ func (d *DynamicCRD) GetServiceNameFromCRD() (string, error) { return "", fmt.Errorf("couldn't find metadata.name in the yaml; provide a name for the service") } +// AddComponentLabelsToCRD appends odo labels to CRD if "labels" field already exists in metadata; else creates labels +func (d *DynamicCRD) AddComponentLabelsToCRD(labels map[string]string) { + metaMap := d.OriginalCRD["metadata"].(map[string]interface{}) + + for k := range metaMap { + if k == "labels" { + metaLabels := metaMap["labels"].(map[string]interface{}) + for i := range labels { + metaLabels[i] = labels[i] + } + return + } + } + // if metadata doesn't have 'labels' field, we set it up + metaMap["labels"] = labels +} + // CreateServiceFromKubernetesInlineComponents creates service(s) from Kubernetes Inlined component in a devfile -func CreateServiceFromKubernetesInlineComponents(client *kclient.Client, k8sComponents []devfile.Component) ([]string, error) { +func CreateServiceFromKubernetesInlineComponents(client *kclient.Client, k8sComponents []devfile.Component, labels map[string]string) ([]string, error) { if len(k8sComponents) == 0 { // if there's no Kubernetes Inlined component, there's nothing to do. return []string{}, nil @@ -833,6 +850,9 @@ func CreateServiceFromKubernetesInlineComponents(client *kclient.Client, k8sComp } } + // add labels to the CRD before creation + d.AddComponentLabelsToCRD(labels) + // create the service on cluster err = client.CreateDynamicResource(d.OriginalCRD, group, version, resource) if err != nil {