diff --git a/pkg/mcclient/options/k8s/base.go b/pkg/mcclient/options/k8s/base.go index 384c027251..4a45cc869c 100644 --- a/pkg/mcclient/options/k8s/base.go +++ b/pkg/mcclient/options/k8s/base.go @@ -15,8 +15,9 @@ func (o ClusterBaseOptions) Params() *jsonutils.JSONDict { } type BaseListOptions struct { - Limit int `default:"20" help:"Page limit"` - Offset int `default:"0" help:"page offset"` + Limit int `default:"20" help:"Page limit"` + Offset int `default:"0" help:"Page offset"` + Name string `help:"Search by name"` } func (o BaseListOptions) Params() *jsonutils.JSONDict { @@ -27,6 +28,9 @@ func (o BaseListOptions) Params() *jsonutils.JSONDict { if o.Offset > 0 { params.Add(jsonutils.NewInt(int64(o.Offset)), "offset") } + if o.Name != "" { + params.Add(jsonutils.NewString(o.Name), "name") + } return params } diff --git a/pkg/mcclient/options/k8s/deployment.go b/pkg/mcclient/options/k8s/deployment.go index 7d69632601..4f9f1fe8ef 100644 --- a/pkg/mcclient/options/k8s/deployment.go +++ b/pkg/mcclient/options/k8s/deployment.go @@ -17,7 +17,7 @@ type DeploymentCreateOptions struct { Image string `help:"The image for the container to run"` Replicas int64 `help:"Number of replicas for pods in this deployment"` RunAsPrivileged bool `help:"Whether to run the container as privileged user"` - Labels string `help:"Comma separated labels to apply to the pod(s)"` + Label []string `help:"Labels to apply to the pod(s), e.g. 'env=prod'"` Env []string `help:"Environment variables to set in container"` Port []string `help:"Port for the service that is created, format is :: e.g. tcp:80:3000"` Net string `help:"Network config, e.g. net1, net1:10.168.222.171"` @@ -62,6 +62,15 @@ func (o DeploymentCreateOptions) Params() (*jsonutils.JSONDict, error) { } params.Add(net, "networkConfig") } + labels := jsonutils.NewArray() + for _, label := range o.Label { + label, err := parseLabel(label) + if err != nil { + return nil, err + } + labels.Add(label) + } + params.Add(labels, "labels") return params, nil } @@ -145,3 +154,14 @@ func (o DeploymentCreateFromFileOptions) Params() (*jsonutils.JSONDict, error) { params.Add(jsonutils.NewString(string(content)), "content") return params, nil } + +func parseLabel(str string) (jsonutils.JSONObject, error) { + parts := strings.Split(str, "=") + if len(parts) != 2 { + return nil, fmt.Errorf("Invalid label string: %s", str) + } + label := jsonutils.NewDict() + label.Add(jsonutils.NewString(parts[0]), "key") + label.Add(jsonutils.NewString(parts[1]), "value") + return label, nil +}