[Backport release-1.5] Feat: support set labels for env (#4506)

* Feat: support set labels for env

Signed-off-by: codinghuang <codinghuang@qq.com>
(cherry picked from commit 25558c1f18)

* Refactor: Remove util.ParseLabelString

use k8s.io/apimachinery/pkg/labels

Signed-off-by: codinghuang <codinghuang@qq.com>
(cherry picked from commit abf756fb14)

Co-authored-by: codinghuang <codinghuang@qq.com>
This commit is contained in:
github-actions[bot]
2022-07-29 19:18:32 +08:00
committed by GitHub
parent db21d74a52
commit 618596b98e
3 changed files with 58 additions and 13 deletions

59
pkg/utils/env/env.go vendored
View File

@@ -27,11 +27,13 @@ import (
"github.com/pkg/errors"
v1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1"
"github.com/oam-dev/kubevela/apis/types"
"github.com/oam-dev/kubevela/pkg/oam"
"github.com/oam-dev/kubevela/pkg/oam/util"
"github.com/oam-dev/kubevela/pkg/utils"
"github.com/oam-dev/kubevela/pkg/utils/common"
"github.com/oam-dev/kubevela/pkg/utils/system"
@@ -98,22 +100,13 @@ func GetEnvByName(name string) (*types.EnvMeta, error) {
if name == DefaultEnvNamespace {
return &types.EnvMeta{Name: DefaultEnvNamespace, Namespace: DefaultEnvNamespace}, nil
}
clt, err := common.GetClient()
namespace, err := getEnvNamespaceByName(name)
if err != nil {
return nil, err
}
ctx := context.Background()
var nsList v1.NamespaceList
err = clt.List(ctx, &nsList, client.MatchingLabels{oam.LabelNamespaceOfEnvName: name})
if err != nil {
return nil, err
}
if len(nsList.Items) < 1 {
return nil, errors.Errorf("Env %s not exist", name)
}
return &types.EnvMeta{
Name: name,
Namespace: nsList.Items[0].Name,
Namespace: namespace.Name,
}, nil
}
@@ -240,3 +233,47 @@ func SetCurrentEnv(meta *types.EnvMeta) error {
}
return nil
}
// getEnvNamespaceByName get v1.Namespace object by env name
func getEnvNamespaceByName(name string) (*v1.Namespace, error) {
clt, err := common.GetClient()
if err != nil {
return nil, err
}
ctx := context.Background()
var nsList v1.NamespaceList
err = clt.List(ctx, &nsList, client.MatchingLabels{oam.LabelNamespaceOfEnvName: name})
if err != nil {
return nil, err
}
if len(nsList.Items) < 1 {
return nil, errors.Errorf("Env %s not exist", name)
}
return &nsList.Items[0], nil
}
// SetEnvLabels set labels for namespace
func SetEnvLabels(envArgs *types.EnvMeta) error {
c, err := common.GetClient()
if err != nil {
return err
}
namespace, err := getEnvNamespaceByName(envArgs.Name)
if err != nil {
return err
}
labels, err := labels.ConvertSelectorToLabelsMap(envArgs.Labels)
if err != nil {
return err
}
namespace.Labels = util.MergeMapOverrideWithDst(namespace.GetLabels(), labels)
err = c.Update(context.Background(), namespace)
if err != nil {
return errors.Wrapf(err, "fail to set env labels")
}
return nil
}