mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #54858 from wackxu/createpri
Automatic merge from submit-queue (batch tested with PRs 54460, 55258, 54858, 55506, 55510). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. add create subcommand for priorityclass **What this PR does / why we need it**: add `create priorityclass` sub command **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:Fixes #54857 **Special notes for your reviewer**: **Release note**: ```release-note add create priorityclass sub command ```
This commit is contained in:
commit
0ca74ef2e3
@ -170,6 +170,7 @@ docs/man/man1/kubectl-create-configmap.1
|
|||||||
docs/man/man1/kubectl-create-deployment.1
|
docs/man/man1/kubectl-create-deployment.1
|
||||||
docs/man/man1/kubectl-create-namespace.1
|
docs/man/man1/kubectl-create-namespace.1
|
||||||
docs/man/man1/kubectl-create-poddisruptionbudget.1
|
docs/man/man1/kubectl-create-poddisruptionbudget.1
|
||||||
|
docs/man/man1/kubectl-create-priorityclass.1
|
||||||
docs/man/man1/kubectl-create-quota.1
|
docs/man/man1/kubectl-create-quota.1
|
||||||
docs/man/man1/kubectl-create-role.1
|
docs/man/man1/kubectl-create-role.1
|
||||||
docs/man/man1/kubectl-create-rolebinding.1
|
docs/man/man1/kubectl-create-rolebinding.1
|
||||||
@ -269,6 +270,7 @@ docs/user-guide/kubectl/kubectl_create_configmap.md
|
|||||||
docs/user-guide/kubectl/kubectl_create_deployment.md
|
docs/user-guide/kubectl/kubectl_create_deployment.md
|
||||||
docs/user-guide/kubectl/kubectl_create_namespace.md
|
docs/user-guide/kubectl/kubectl_create_namespace.md
|
||||||
docs/user-guide/kubectl/kubectl_create_poddisruptionbudget.md
|
docs/user-guide/kubectl/kubectl_create_poddisruptionbudget.md
|
||||||
|
docs/user-guide/kubectl/kubectl_create_priorityclass.md
|
||||||
docs/user-guide/kubectl/kubectl_create_quota.md
|
docs/user-guide/kubectl/kubectl_create_quota.md
|
||||||
docs/user-guide/kubectl/kubectl_create_role.md
|
docs/user-guide/kubectl/kubectl_create_role.md
|
||||||
docs/user-guide/kubectl/kubectl_create_rolebinding.md
|
docs/user-guide/kubectl/kubectl_create_rolebinding.md
|
||||||
|
3
docs/man/man1/kubectl-create-priorityclass.1
Normal file
3
docs/man/man1/kubectl-create-priorityclass.1
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
This file is autogenerated, but we've stopped checking such files into the
|
||||||
|
repository to reduce the need for rebases. Please run hack/generate-docs.sh to
|
||||||
|
populate this file.
|
3
docs/user-guide/kubectl/kubectl_create_priorityclass.md
Normal file
3
docs/user-guide/kubectl/kubectl_create_priorityclass.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
This file is autogenerated, but we've stopped checking such files into the
|
||||||
|
repository to reduce the need for rebases. Please run hack/generate-docs.sh to
|
||||||
|
populate this file.
|
@ -19,6 +19,7 @@ go_test(
|
|||||||
"history_test.go",
|
"history_test.go",
|
||||||
"namespace_test.go",
|
"namespace_test.go",
|
||||||
"pdb_test.go",
|
"pdb_test.go",
|
||||||
|
"priorityclass_test.go",
|
||||||
"quota_test.go",
|
"quota_test.go",
|
||||||
"resource_filter_test.go",
|
"resource_filter_test.go",
|
||||||
"rolebinding_test.go",
|
"rolebinding_test.go",
|
||||||
@ -61,6 +62,7 @@ go_test(
|
|||||||
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/rbac/v1:go_default_library",
|
"//vendor/k8s.io/api/rbac/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/rbac/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/rbac/v1beta1:go_default_library",
|
||||||
|
"//vendor/k8s.io/api/scheduling/v1alpha1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
@ -98,6 +100,7 @@ go_library(
|
|||||||
"kubectl.go",
|
"kubectl.go",
|
||||||
"namespace.go",
|
"namespace.go",
|
||||||
"pdb.go",
|
"pdb.go",
|
||||||
|
"priorityclass.go",
|
||||||
"quota.go",
|
"quota.go",
|
||||||
"resource_filter.go",
|
"resource_filter.go",
|
||||||
"rolebinding.go",
|
"rolebinding.go",
|
||||||
@ -154,6 +157,7 @@ go_library(
|
|||||||
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/rbac/v1:go_default_library",
|
"//vendor/k8s.io/api/rbac/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/rbac/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/rbac/v1beta1:go_default_library",
|
||||||
|
"//vendor/k8s.io/api/scheduling/v1alpha1:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
|
@ -30,6 +30,7 @@ go_library(
|
|||||||
"create_deployment.go",
|
"create_deployment.go",
|
||||||
"create_namespace.go",
|
"create_namespace.go",
|
||||||
"create_pdb.go",
|
"create_pdb.go",
|
||||||
|
"create_priorityclass.go",
|
||||||
"create_quota.go",
|
"create_quota.go",
|
||||||
"create_role.go",
|
"create_role.go",
|
||||||
"create_rolebinding.go",
|
"create_rolebinding.go",
|
||||||
@ -166,6 +167,7 @@ go_test(
|
|||||||
"create_deployment_test.go",
|
"create_deployment_test.go",
|
||||||
"create_namespace_test.go",
|
"create_namespace_test.go",
|
||||||
"create_pdb_test.go",
|
"create_pdb_test.go",
|
||||||
|
"create_priorityclass_test.go",
|
||||||
"create_quota_test.go",
|
"create_quota_test.go",
|
||||||
"create_role_test.go",
|
"create_role_test.go",
|
||||||
"create_rolebinding_test.go",
|
"create_rolebinding_test.go",
|
||||||
|
@ -108,6 +108,7 @@ func NewCmdCreate(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command {
|
|||||||
cmd.AddCommand(NewCmdCreateRole(f, out))
|
cmd.AddCommand(NewCmdCreateRole(f, out))
|
||||||
cmd.AddCommand(NewCmdCreateRoleBinding(f, out))
|
cmd.AddCommand(NewCmdCreateRoleBinding(f, out))
|
||||||
cmd.AddCommand(NewCmdCreatePodDisruptionBudget(f, out))
|
cmd.AddCommand(NewCmdCreatePodDisruptionBudget(f, out))
|
||||||
|
cmd.AddCommand(NewCmdCreatePriorityClass(f, out))
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
90
pkg/kubectl/cmd/create_priorityclass.go
Normal file
90
pkg/kubectl/cmd/create_priorityclass.go
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
pcLong = templates.LongDesc(i18n.T(`
|
||||||
|
Create a priorityclass with the specified name, value, globalDefault and description`))
|
||||||
|
|
||||||
|
pcExample = templates.Examples(i18n.T(`
|
||||||
|
# Create a priorityclass named high-priority
|
||||||
|
kubectl create priorityclass default-priority --value=1000 --description="high priority"
|
||||||
|
|
||||||
|
# Create a priorityclass named default-priority that considered as the global default priority
|
||||||
|
kubectl create priorityclass default-priority --value=1000 --global-default=true --description="default priority"`))
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewCmdCreatePriorityClass is a macro command to create a new priorityClass.
|
||||||
|
func NewCmdCreatePriorityClass(f cmdutil.Factory, cmdOut io.Writer) *cobra.Command {
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "priorityclass NAME --value=VALUE --global-default=BOOL [--dry-run]",
|
||||||
|
Aliases: []string{"pc"},
|
||||||
|
Short: i18n.T("Create a priorityclass with the specified name."),
|
||||||
|
Long: pcLong,
|
||||||
|
Example: pcExample,
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
cmdutil.CheckErr(CreatePriorityClass(f, cmdOut, cmd, args))
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdutil.AddApplyAnnotationFlags(cmd)
|
||||||
|
cmdutil.AddValidateFlags(cmd)
|
||||||
|
cmdutil.AddPrinterFlags(cmd)
|
||||||
|
cmdutil.AddGeneratorFlags(cmd, cmdutil.PriorityClassV1Alpha1GeneratorName)
|
||||||
|
|
||||||
|
cmd.Flags().Int32("value", 0, i18n.T("the value of this priority class."))
|
||||||
|
cmd.Flags().Bool("global-default", false, i18n.T("global-default specifies whether this PriorityClass should be considered as the default priority."))
|
||||||
|
cmd.Flags().String("description", "", i18n.T("description is an arbitrary string that usually provides guidelines on when this priority class should be used."))
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatePriorityClass implements the behavior to run the create priorityClass command.
|
||||||
|
func CreatePriorityClass(f cmdutil.Factory, cmdOut io.Writer, cmd *cobra.Command, args []string) error {
|
||||||
|
name, err := NameFromCommandArgs(cmd, args)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var generator kubectl.StructuredGenerator
|
||||||
|
switch generatorName := cmdutil.GetFlagString(cmd, "generator"); generatorName {
|
||||||
|
case cmdutil.PriorityClassV1Alpha1GeneratorName:
|
||||||
|
generator = &kubectl.PriorityClassV1Generator{
|
||||||
|
Name: name,
|
||||||
|
Value: cmdutil.GetFlagInt32(cmd, "value"),
|
||||||
|
GlobalDefault: cmdutil.GetFlagBool(cmd, "global-default"),
|
||||||
|
Description: cmdutil.GetFlagString(cmd, "description"),
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return errUnsupportedGenerator(cmd, generatorName)
|
||||||
|
}
|
||||||
|
return RunCreateSubcommand(f, cmd, cmdOut, &CreateSubcommandOptions{
|
||||||
|
Name: name,
|
||||||
|
StructuredGenerator: generator,
|
||||||
|
DryRun: cmdutil.GetFlagBool(cmd, "dry-run"),
|
||||||
|
OutputFormat: cmdutil.GetFlagString(cmd, "output"),
|
||||||
|
})
|
||||||
|
}
|
59
pkg/kubectl/cmd/create_priorityclass_test.go
Normal file
59
pkg/kubectl/cmd/create_priorityclass_test.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
restclient "k8s.io/client-go/rest"
|
||||||
|
"k8s.io/client-go/rest/fake"
|
||||||
|
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCreatePriorityClass(t *testing.T) {
|
||||||
|
pcName := "my-pc"
|
||||||
|
f, tf, _, ns := cmdtesting.NewAPIFactory()
|
||||||
|
tf.Client = &fake.RESTClient{
|
||||||
|
GroupVersion: schema.GroupVersion{Group: "scheduling.k8s.io", Version: "v1alpha1"},
|
||||||
|
NegotiatedSerializer: ns,
|
||||||
|
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: http.StatusOK,
|
||||||
|
Body: ioutil.NopCloser(&bytes.Buffer{}),
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
tf.ClientConfig = &restclient.Config{}
|
||||||
|
tf.Printer = &testPrinter{}
|
||||||
|
buf := bytes.NewBuffer([]byte{})
|
||||||
|
|
||||||
|
cmd := NewCmdCreatePriorityClass(f, buf)
|
||||||
|
cmd.Flags().Set("value", "1000")
|
||||||
|
cmd.Flags().Set("global-default", "true")
|
||||||
|
cmd.Flags().Set("description", "my priority")
|
||||||
|
cmd.Flags().Set("dry-run", "true")
|
||||||
|
cmd.Flags().Set("output", "name")
|
||||||
|
CreatePriorityClass(f, buf, cmd, []string{pcName})
|
||||||
|
expectedOutput := "priorityclass/" + pcName + "\n"
|
||||||
|
if buf.String() != expectedOutput {
|
||||||
|
t.Errorf("expected output: %s, but got: %s", expectedOutput, buf.String())
|
||||||
|
}
|
||||||
|
}
|
@ -498,6 +498,7 @@ const (
|
|||||||
ClusterV1Beta1GeneratorName = "cluster/v1beta1"
|
ClusterV1Beta1GeneratorName = "cluster/v1beta1"
|
||||||
PodDisruptionBudgetV1GeneratorName = "poddisruptionbudget/v1beta1"
|
PodDisruptionBudgetV1GeneratorName = "poddisruptionbudget/v1beta1"
|
||||||
PodDisruptionBudgetV2GeneratorName = "poddisruptionbudget/v1beta1/v2"
|
PodDisruptionBudgetV2GeneratorName = "poddisruptionbudget/v1beta1/v2"
|
||||||
|
PriorityClassV1Alpha1GeneratorName = "priorityclass/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultGenerators returns the set of default generators for use in Factory instances
|
// DefaultGenerators returns the set of default generators for use in Factory instances
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
jsonpatch "github.com/evanphx/json-patch"
|
"github.com/evanphx/json-patch"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
@ -362,6 +362,15 @@ func GetFlagInt(cmd *cobra.Command, flag string) int {
|
|||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assumes the flag has a default value.
|
||||||
|
func GetFlagInt32(cmd *cobra.Command, flag string) int32 {
|
||||||
|
i, err := cmd.Flags().GetInt32(flag)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalf("error accessing flag %s for command %s: %v", flag, cmd.Name(), err)
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
// Assumes the flag has a default value.
|
// Assumes the flag has a default value.
|
||||||
func GetFlagInt64(cmd *cobra.Command, flag string) int64 {
|
func GetFlagInt64(cmd *cobra.Command, flag string) int64 {
|
||||||
i, err := cmd.Flags().GetInt64(flag)
|
i, err := cmd.Flags().GetInt64(flag)
|
||||||
|
85
pkg/kubectl/priorityclass.go
Normal file
85
pkg/kubectl/priorityclass.go
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kubectl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
scheduling "k8s.io/api/scheduling/v1alpha1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PriorityClassV1Generator supports stable generation of a priorityClass.
|
||||||
|
type PriorityClassV1Generator struct {
|
||||||
|
Name string
|
||||||
|
Value int32
|
||||||
|
GlobalDefault bool
|
||||||
|
Description string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure it supports the generator pattern that uses parameters specified during construction.
|
||||||
|
var _ StructuredGenerator = &PriorityClassV1Generator{}
|
||||||
|
|
||||||
|
func (PriorityClassV1Generator) ParamNames() []GeneratorParam {
|
||||||
|
return []GeneratorParam{
|
||||||
|
{"name", true},
|
||||||
|
{"value", true},
|
||||||
|
{"global-default", false},
|
||||||
|
{"description", false},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s PriorityClassV1Generator) Generate(params map[string]interface{}) (runtime.Object, error) {
|
||||||
|
if err := ValidateParams(s.ParamNames(), params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
name, found := params["name"].(string)
|
||||||
|
if !found {
|
||||||
|
return nil, fmt.Errorf("expected string, saw %v for 'name'", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
value, found := params["value"].(int32)
|
||||||
|
if !found {
|
||||||
|
return nil, fmt.Errorf("expected int32, found %v", value)
|
||||||
|
}
|
||||||
|
|
||||||
|
globalDefault, found := params["global-default"].(bool)
|
||||||
|
if !found {
|
||||||
|
return nil, fmt.Errorf("expected bool, found %v", globalDefault)
|
||||||
|
}
|
||||||
|
|
||||||
|
description, found := params["description"].(string)
|
||||||
|
if !found {
|
||||||
|
return nil, fmt.Errorf("expected string, found %v", description)
|
||||||
|
}
|
||||||
|
delegate := &PriorityClassV1Generator{Name: name, Value: value, GlobalDefault: globalDefault, Description: description}
|
||||||
|
return delegate.StructuredGenerate()
|
||||||
|
}
|
||||||
|
|
||||||
|
// StructuredGenerate outputs a priorityClass object using the configured fields.
|
||||||
|
func (s *PriorityClassV1Generator) StructuredGenerate() (runtime.Object, error) {
|
||||||
|
return &scheduling.PriorityClass{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: s.Name,
|
||||||
|
},
|
||||||
|
Value: s.Value,
|
||||||
|
GlobalDefault: s.GlobalDefault,
|
||||||
|
Description: s.Description,
|
||||||
|
}, nil
|
||||||
|
}
|
90
pkg/kubectl/priorityclass_test.go
Normal file
90
pkg/kubectl/priorityclass_test.go
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kubectl
|
||||||
|
|
||||||
|
import (
|
||||||
|
scheduling "k8s.io/api/scheduling/v1alpha1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestPriorityClassV1Generator(t *testing.T) {
|
||||||
|
tests := map[string]struct {
|
||||||
|
params map[string]interface{}
|
||||||
|
expected *scheduling.PriorityClass
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
"test valid case": {
|
||||||
|
params: map[string]interface{}{
|
||||||
|
"name": "foo",
|
||||||
|
"value": int32(1000),
|
||||||
|
"global-default": false,
|
||||||
|
"description": "high priority class",
|
||||||
|
},
|
||||||
|
expected: &scheduling.PriorityClass{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
},
|
||||||
|
Value: int32(1000),
|
||||||
|
GlobalDefault: false,
|
||||||
|
Description: "high priority class",
|
||||||
|
},
|
||||||
|
expectErr: false,
|
||||||
|
},
|
||||||
|
"test valid case that as default priority": {
|
||||||
|
params: map[string]interface{}{
|
||||||
|
"name": "foo",
|
||||||
|
"value": int32(1000),
|
||||||
|
"global-default": true,
|
||||||
|
"description": "high priority class",
|
||||||
|
},
|
||||||
|
expected: &scheduling.PriorityClass{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
},
|
||||||
|
Value: int32(1000),
|
||||||
|
GlobalDefault: true,
|
||||||
|
Description: "high priority class",
|
||||||
|
},
|
||||||
|
expectErr: false,
|
||||||
|
},
|
||||||
|
"test missing required param": {
|
||||||
|
params: map[string]interface{}{
|
||||||
|
"name": "foo",
|
||||||
|
"global-default": true,
|
||||||
|
"description": "high priority class",
|
||||||
|
},
|
||||||
|
expectErr: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
generator := PriorityClassV1Generator{}
|
||||||
|
for name, test := range tests {
|
||||||
|
obj, err := generator.Generate(test.params)
|
||||||
|
if !test.expectErr && err != nil {
|
||||||
|
t.Errorf("%s: unexpected error: %v", name, err)
|
||||||
|
}
|
||||||
|
if test.expectErr && err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(obj.(*scheduling.PriorityClass), test.expected) {
|
||||||
|
t.Errorf("%s:\nexpected:\n%#v\nsaw:\n%#v", name, test.expected, obj.(*scheduling.PriorityClass))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user