mirror of https://github.com/k3s-io/k3s
Fix some golint errors for packages in `pkg/kubectl`
- Fix some golint errors for `pkg/kubectl` - Fix a golint error for `pkg/kubectl/apps` - Fix all golint errors for `pkg/kubectl/cmd` - Fix some golint errors for `pkg/kubectl/generate/versioned` - Fix a golint error for `pkg/kubectl/generate` - Fix some golint errors for `pkg/kubectl/metricsutil` - Fix all golint errors for `pkg/kubectl/util` - Fix all golint errors for `pkg/kubectl/util/slice`pull/58/head
parent
fdc653ebb9
commit
3d0c961d57
|
@ -141,7 +141,6 @@ pkg/kubeapiserver/authorizer/modes
|
|||
pkg/kubeapiserver/options
|
||||
pkg/kubectl
|
||||
pkg/kubectl/apps
|
||||
pkg/kubectl/cmd
|
||||
pkg/kubectl/cmd/annotate
|
||||
pkg/kubectl/cmd/apiresources
|
||||
pkg/kubectl/cmd/apply
|
||||
|
@ -189,8 +188,6 @@ pkg/kubectl/cmd/wait
|
|||
pkg/kubectl/generate
|
||||
pkg/kubectl/generate/versioned
|
||||
pkg/kubectl/metricsutil
|
||||
pkg/kubectl/util
|
||||
pkg/kubectl/util/slice
|
||||
pkg/kubectl/util/templates
|
||||
pkg/kubelet
|
||||
pkg/kubelet/apis
|
||||
|
|
|
@ -135,7 +135,8 @@ func CreateApplyAnnotation(obj runtime.Object, codec runtime.Encoder) error {
|
|||
return setOriginalConfiguration(obj, modified)
|
||||
}
|
||||
|
||||
// Create the annotation used by kubectl apply only when createAnnotation is true
|
||||
// CreateOrUpdateAnnotation creates the annotation used by
|
||||
// kubectl apply only when createAnnotation is true
|
||||
// Otherwise, only update the annotation when it already exists
|
||||
func CreateOrUpdateAnnotation(createAnnotation bool, obj runtime.Object, codec runtime.Encoder) error {
|
||||
if createAnnotation {
|
||||
|
|
|
@ -173,7 +173,7 @@ type TestKindVisitor struct {
|
|||
|
||||
var _ apps.KindVisitor = &TestKindVisitor{}
|
||||
|
||||
func (t *TestKindVisitor) Visit(kind apps.GroupKindElement) { t.visits[kind.Kind] += 1 }
|
||||
func (t *TestKindVisitor) Visit(kind apps.GroupKindElement) { t.visits[kind.Kind]++ }
|
||||
|
||||
func (t *TestKindVisitor) VisitDaemonSet(kind apps.GroupKindElement) { t.Visit(kind) }
|
||||
func (t *TestKindVisitor) VisitDeployment(kind apps.GroupKindElement) { t.Visit(kind) }
|
||||
|
|
|
@ -77,7 +77,8 @@ func NewAPIResourceOptions(ioStreams genericclioptions.IOStreams) *ApiResourcesO
|
|||
}
|
||||
}
|
||||
|
||||
func NewCmdApiResources(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
|
||||
// NewCmdAPIResources creates the `api-resources` command
|
||||
func NewCmdAPIResources(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
|
||||
o := NewAPIResourceOptions(ioStreams)
|
||||
|
||||
cmd := &cobra.Command{
|
||||
|
|
|
@ -48,7 +48,8 @@ func NewApiVersionsOptions(ioStreams genericclioptions.IOStreams) *ApiVersionsOp
|
|||
}
|
||||
}
|
||||
|
||||
func NewCmdApiVersions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
|
||||
// NewCmdAPIVersions creates the `api-versions` command
|
||||
func NewCmdAPIVersions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
|
||||
o := NewApiVersionsOptions(ioStreams)
|
||||
cmd := &cobra.Command{
|
||||
Use: "api-versions",
|
||||
|
|
|
@ -159,7 +159,7 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
|
|||
CPUPercent: o.CpuPercent,
|
||||
ScaleRefName: name,
|
||||
ScaleRefKind: mapping.GroupVersionKind.Kind,
|
||||
ScaleRefApiVersion: mapping.GroupVersionKind.GroupVersion().String(),
|
||||
ScaleRefAPIVersion: mapping.GroupVersionKind.GroupVersion().String(),
|
||||
}, nil
|
||||
default:
|
||||
return nil, cmdutil.UsageErrorf(cmd, "Generator %s not supported. ", o.Generator)
|
||||
|
|
|
@ -284,7 +284,7 @@ __custom_func() {
|
|||
)
|
||||
|
||||
var (
|
||||
bash_completion_flags = map[string]string{
|
||||
bashCompletionFlags = map[string]string{
|
||||
"namespace": "__kubectl_get_resource_namespace",
|
||||
"context": "__kubectl_config_get_contexts",
|
||||
"cluster": "__kubectl_config_get_clusters",
|
||||
|
@ -292,10 +292,12 @@ var (
|
|||
}
|
||||
)
|
||||
|
||||
// NewDefaultKubectlCommand creates the `kubectl` command with default arguments
|
||||
func NewDefaultKubectlCommand() *cobra.Command {
|
||||
return NewDefaultKubectlCommandWithArgs(&defaultPluginHandler{}, os.Args, os.Stdin, os.Stdout, os.Stderr)
|
||||
}
|
||||
|
||||
// NewDefaultKubectlCommandWithArgs creates the `kubectl` command with arguments
|
||||
func NewDefaultKubectlCommandWithArgs(pluginHandler PluginHandler, args []string, in io.Reader, out, errout io.Writer) *cobra.Command {
|
||||
cmd := NewKubectlCommand(in, out, errout)
|
||||
|
||||
|
@ -528,7 +530,7 @@ func NewKubectlCommand(in io.Reader, out, err io.Writer) *cobra.Command {
|
|||
|
||||
templates.ActsAsRootCommand(cmds, filters, groups...)
|
||||
|
||||
for name, completion := range bash_completion_flags {
|
||||
for name, completion := range bashCompletionFlags {
|
||||
if cmds.Flag(name) != nil {
|
||||
if cmds.Flag(name).Annotations == nil {
|
||||
cmds.Flag(name).Annotations = map[string][]string{}
|
||||
|
@ -544,8 +546,8 @@ func NewKubectlCommand(in io.Reader, out, err io.Writer) *cobra.Command {
|
|||
cmds.AddCommand(cmdconfig.NewCmdConfig(f, clientcmd.NewDefaultPathOptions(), ioStreams))
|
||||
cmds.AddCommand(plugin.NewCmdPlugin(f, ioStreams))
|
||||
cmds.AddCommand(version.NewCmdVersion(f, ioStreams))
|
||||
cmds.AddCommand(apiresources.NewCmdApiVersions(f, ioStreams))
|
||||
cmds.AddCommand(apiresources.NewCmdApiResources(f, ioStreams))
|
||||
cmds.AddCommand(apiresources.NewCmdAPIVersions(f, ioStreams))
|
||||
cmds.AddCommand(apiresources.NewCmdAPIResources(f, ioStreams))
|
||||
cmds.AddCommand(options.NewCmdOptions(ioStreams.Out))
|
||||
|
||||
return cmds
|
||||
|
|
|
@ -102,7 +102,7 @@ func AnnotateFlags(cmd *cobra.Command, generators map[string]Generator) {
|
|||
}
|
||||
}
|
||||
|
||||
// EnsureFlagsValid ensures that no invalid flags are being used against a
|
||||
// EnsureFlagsValid ensures that no invalid flags are being used against a
|
||||
func EnsureFlagsValid(cmd *cobra.Command, generators map[string]Generator, generatorInUse string) error {
|
||||
AnnotateFlags(cmd, generators)
|
||||
|
||||
|
|
|
@ -25,12 +25,12 @@ import (
|
|||
"k8s.io/kubernetes/pkg/kubectl/generate"
|
||||
)
|
||||
|
||||
// HorizontalPodAutoscalerV1Generator supports stable generation of a horizontal pod autoscaler.
|
||||
// HorizontalPodAutoscalerGeneratorV1 supports stable generation of a horizontal pod autoscaler.
|
||||
type HorizontalPodAutoscalerGeneratorV1 struct {
|
||||
Name string
|
||||
ScaleRefKind string
|
||||
ScaleRefName string
|
||||
ScaleRefApiVersion string
|
||||
ScaleRefAPIVersion string
|
||||
MinReplicas int32
|
||||
MaxReplicas int32
|
||||
CPUPercent int32
|
||||
|
@ -53,7 +53,7 @@ func (s *HorizontalPodAutoscalerGeneratorV1) StructuredGenerate() (runtime.Objec
|
|||
ScaleTargetRef: autoscalingv1.CrossVersionObjectReference{
|
||||
Kind: s.ScaleRefKind,
|
||||
Name: s.ScaleRefName,
|
||||
APIVersion: s.ScaleRefApiVersion,
|
||||
APIVersion: s.ScaleRefAPIVersion,
|
||||
},
|
||||
MaxReplicas: s.MaxReplicas,
|
||||
},
|
||||
|
|
|
@ -31,7 +31,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
HPAName string
|
||||
scaleRefKind string
|
||||
scaleRefName string
|
||||
scaleRefApiVersion string
|
||||
scaleRefAPIVersion string
|
||||
minReplicas int32
|
||||
maxReplicas int32
|
||||
CPUPercent int32
|
||||
|
@ -46,7 +46,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
CPUPercent: 80,
|
||||
scaleRefKind: "kind",
|
||||
scaleRefName: "name",
|
||||
scaleRefApiVersion: "apiVersion",
|
||||
scaleRefAPIVersion: "apiVersion",
|
||||
expected: &autoscalingv1.HorizontalPodAutoscaler{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "foo",
|
||||
|
@ -68,7 +68,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
name: "'name' is a required parameter",
|
||||
scaleRefKind: "kind",
|
||||
scaleRefName: "name",
|
||||
scaleRefApiVersion: "apiVersion",
|
||||
scaleRefAPIVersion: "apiVersion",
|
||||
expectErr: true,
|
||||
},
|
||||
{
|
||||
|
@ -76,7 +76,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
HPAName: "foo",
|
||||
scaleRefKind: "kind",
|
||||
scaleRefName: "name",
|
||||
scaleRefApiVersion: "apiVersion",
|
||||
scaleRefAPIVersion: "apiVersion",
|
||||
expectErr: true,
|
||||
},
|
||||
{
|
||||
|
@ -86,7 +86,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
maxReplicas: 1,
|
||||
scaleRefKind: "kind",
|
||||
scaleRefName: "name",
|
||||
scaleRefApiVersion: "apiVersion",
|
||||
scaleRefAPIVersion: "apiVersion",
|
||||
expectErr: true,
|
||||
},
|
||||
{
|
||||
|
@ -96,7 +96,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
maxReplicas: -10,
|
||||
scaleRefKind: "kind",
|
||||
scaleRefName: "name",
|
||||
scaleRefApiVersion: "apiVersion",
|
||||
scaleRefAPIVersion: "apiVersion",
|
||||
expectErr: true,
|
||||
},
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ func TestHPAGenerate(t *testing.T) {
|
|||
Name: tt.HPAName,
|
||||
ScaleRefKind: tt.scaleRefKind,
|
||||
ScaleRefName: tt.scaleRefName,
|
||||
ScaleRefApiVersion: tt.scaleRefApiVersion,
|
||||
ScaleRefAPIVersion: tt.scaleRefAPIVersion,
|
||||
MinReplicas: tt.minReplicas,
|
||||
MaxReplicas: tt.maxReplicas,
|
||||
CPUPercent: tt.CPUPercent,
|
||||
|
|
|
@ -29,7 +29,7 @@ import (
|
|||
"k8s.io/kubernetes/pkg/kubectl/generate"
|
||||
)
|
||||
|
||||
// BaseDeploymentGenerator: implement the common functionality of
|
||||
// BaseDeploymentGenerator implements the common functionality of
|
||||
// DeploymentBasicGeneratorV1, DeploymentBasicAppsGeneratorV1Beta1 and DeploymentBasicAppsGeneratorV1. To reduce
|
||||
// confusion, it's best to keep this struct in the same file as those
|
||||
// generators.
|
||||
|
|
|
@ -205,7 +205,7 @@ func handleFromFileSources(secret *v1.Secret, fileSources []string) error {
|
|||
}
|
||||
if info.IsDir() {
|
||||
if strings.Contains(fileSource, "=") {
|
||||
return fmt.Errorf("cannot give a key name for a directory path.")
|
||||
return fmt.Errorf("cannot give a key name for a directory path")
|
||||
}
|
||||
fileList, err := ioutil.ReadDir(filePath)
|
||||
if err != nil {
|
||||
|
@ -265,7 +265,7 @@ func addKeyFromLiteralToSecret(secret *v1.Secret, keyName string, data []byte) e
|
|||
}
|
||||
|
||||
if _, entryExists := secret.Data[keyName]; entryExists {
|
||||
return fmt.Errorf("cannot add key %s, another key by that name already exists: %v.", keyName, secret.Data)
|
||||
return fmt.Errorf("cannot add key %s, another key by that name already exists: %v", keyName, secret.Data)
|
||||
}
|
||||
secret.Data[keyName] = data
|
||||
return nil
|
||||
|
|
|
@ -97,11 +97,11 @@ func (s SecretForDockerRegistryGeneratorV1) StructuredGenerate() (runtime.Object
|
|||
}
|
||||
}
|
||||
if len(s.FileSources) == 0 {
|
||||
dockercfgJsonContent, err := handleDockerCfgJsonContent(s.Username, s.Password, s.Email, s.Server)
|
||||
dockercfgJSONContent, err := handleDockerCfgJSONContent(s.Username, s.Password, s.Email, s.Server)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
secret.Data[v1.DockerConfigJsonKey] = dockercfgJsonContent
|
||||
secret.Data[v1.DockerConfigJsonKey] = dockercfgJSONContent
|
||||
}
|
||||
if s.AppendHash {
|
||||
h, err := hash.SecretHash(secret)
|
||||
|
@ -146,24 +146,24 @@ func (s SecretForDockerRegistryGeneratorV1) validate() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// handleDockerCfgJsonContent serializes a ~/.docker/config.json file
|
||||
func handleDockerCfgJsonContent(username, password, email, server string) ([]byte, error) {
|
||||
// handleDockerCfgJSONContent serializes a ~/.docker/config.json file
|
||||
func handleDockerCfgJSONContent(username, password, email, server string) ([]byte, error) {
|
||||
dockercfgAuth := DockerConfigEntry{
|
||||
Username: username,
|
||||
Password: password,
|
||||
Email: email,
|
||||
}
|
||||
|
||||
dockerCfgJson := DockerConfigJson{
|
||||
dockerCfgJSON := DockerConfigJSON{
|
||||
Auths: map[string]DockerConfigEntry{server: dockercfgAuth},
|
||||
}
|
||||
|
||||
return json.Marshal(dockerCfgJson)
|
||||
return json.Marshal(dockerCfgJSON)
|
||||
}
|
||||
|
||||
// DockerConfigJson represents a local docker auth config file
|
||||
// DockerConfigJSON represents a local docker auth config file
|
||||
// for pulling images.
|
||||
type DockerConfigJson struct {
|
||||
type DockerConfigJSON struct {
|
||||
Auths DockerConfig `json:"auths"`
|
||||
// +optional
|
||||
HttpHeaders map[string]string `json:"HttpHeaders,omitempty"`
|
||||
|
|
|
@ -26,11 +26,11 @@ import (
|
|||
|
||||
func TestSecretForDockerRegistryGenerate(t *testing.T) {
|
||||
username, password, email, server := "test-user", "test-password", "test-user@example.org", "https://index.docker.io/v1/"
|
||||
secretData, err := handleDockerCfgJsonContent(username, password, email, server)
|
||||
secretData, err := handleDockerCfgJSONContent(username, password, email, server)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
secretDataNoEmail, err := handleDockerCfgJsonContent(username, password, "", server)
|
||||
secretDataNoEmail, err := handleDockerCfgJSONContent(username, password, "", server)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ func generateService(genericParams map[string]interface{}) (runtime.Object, erro
|
|||
}
|
||||
selectorString, found := params["selector"]
|
||||
if !found || len(selectorString) == 0 {
|
||||
return nil, fmt.Errorf("'selector' is a required parameter.")
|
||||
return nil, fmt.Errorf("'selector' is a required parameter")
|
||||
}
|
||||
selector, err := generate.ParseLabels(selectorString)
|
||||
if err != nil {
|
||||
|
@ -108,7 +108,7 @@ func generateService(genericParams map[string]interface{}) (runtime.Object, erro
|
|||
if !found || len(name) == 0 {
|
||||
name, found = params["default-name"]
|
||||
if !found || len(name) == 0 {
|
||||
return nil, fmt.Errorf("'name' is a required parameter.")
|
||||
return nil, fmt.Errorf("'name' is a required parameter")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,7 +136,7 @@ func generateService(genericParams map[string]interface{}) (runtime.Object, erro
|
|||
if portString, found = params["ports"]; !found {
|
||||
portString, found = params["port"]
|
||||
if !found && !isHeadlessService {
|
||||
return nil, fmt.Errorf("'ports' or 'port' is a required parameter.")
|
||||
return nil, fmt.Errorf("'ports' or 'port' is a required parameter")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ func NewHeapsterMetricsClient(svcClient corev1client.ServicesGetter, namespace,
|
|||
}
|
||||
}
|
||||
|
||||
func podMetricsUrl(namespace string, name string) (string, error) {
|
||||
func podMetricsURL(namespace string, name string) (string, error) {
|
||||
if namespace == metav1.NamespaceAll {
|
||||
return fmt.Sprintf("%s/pods", metricsRoot), nil
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ func podMetricsUrl(namespace string, name string) (string, error) {
|
|||
return fmt.Sprintf("%s/namespaces/%s/pods/%s", metricsRoot, namespace, name), nil
|
||||
}
|
||||
|
||||
func nodeMetricsUrl(name string) (string, error) {
|
||||
func nodeMetricsURL(name string) (string, error) {
|
||||
if len(name) > 0 {
|
||||
errs := validation.NameIsDNSSubdomain(name, false)
|
||||
if len(errs) > 0 {
|
||||
|
@ -96,7 +96,7 @@ func nodeMetricsUrl(name string) (string, error) {
|
|||
|
||||
func (cli *HeapsterMetricsClient) GetNodeMetrics(nodeName string, selector string) (*metricsapi.NodeMetricsList, error) {
|
||||
params := map[string]string{"labelSelector": selector}
|
||||
path, err := nodeMetricsUrl(nodeName)
|
||||
path, err := nodeMetricsURL(nodeName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ func (cli *HeapsterMetricsClient) GetPodMetrics(namespace string, podName string
|
|||
if allNamespaces {
|
||||
namespace = metav1.NamespaceAll
|
||||
}
|
||||
path, err := podMetricsUrl(namespace, podName)
|
||||
path, err := podMetricsURL(namespace, podName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ func valOrZero(val *int32) int32 {
|
|||
|
||||
const (
|
||||
kubectlAnnotationPrefix = "kubectl.kubernetes.io/"
|
||||
sourceIdAnnotation = kubectlAnnotationPrefix + "update-source-id"
|
||||
sourceIDAnnotation = kubectlAnnotationPrefix + "update-source-id"
|
||||
desiredReplicasAnnotation = kubectlAnnotationPrefix + "desired-replicas"
|
||||
originalReplicasAnnotation = kubectlAnnotationPrefix + "original-replicas"
|
||||
nextControllerAnnotation = kubectlAnnotationPrefix + "next-controller-id"
|
||||
|
@ -135,7 +135,7 @@ type RollingUpdater struct {
|
|||
scaleAndWait func(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error)
|
||||
//getOrCreateTargetController gets and validates an existing controller or
|
||||
//makes a new one.
|
||||
getOrCreateTargetController func(controller *corev1.ReplicationController, sourceId string) (*corev1.ReplicationController, bool, error)
|
||||
getOrCreateTargetController func(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error)
|
||||
// cleanup performs post deployment cleanup tasks for newRc and oldRc.
|
||||
cleanup func(oldRc, newRc *corev1.ReplicationController, config *RollingUpdaterConfig) error
|
||||
// getReadyPods returns the amount of old and new ready pods.
|
||||
|
@ -188,8 +188,8 @@ func (r *RollingUpdater) Update(config *RollingUpdaterConfig) error {
|
|||
|
||||
// Find an existing controller (for continuing an interrupted update) or
|
||||
// create a new one if necessary.
|
||||
sourceId := fmt.Sprintf("%s:%s", oldRc.Name, oldRc.UID)
|
||||
newRc, existed, err := r.getOrCreateTargetController(config.NewRc, sourceId)
|
||||
sourceID := fmt.Sprintf("%s:%s", oldRc.Name, oldRc.UID)
|
||||
newRc, existed, err := r.getOrCreateTargetController(config.NewRc, sourceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -458,14 +458,14 @@ func (r *RollingUpdater) readyPods(oldRc, newRc *corev1.ReplicationController, m
|
|||
}
|
||||
|
||||
// getOrCreateTargetControllerWithClient looks for an existing controller with
|
||||
// sourceId. If found, the existing controller is returned with true
|
||||
// sourceID. If found, the existing controller is returned with true
|
||||
// indicating that the controller already exists. If the controller isn't
|
||||
// found, a new one is created and returned along with false indicating the
|
||||
// controller was created.
|
||||
//
|
||||
// Existing controllers are validated to ensure their sourceIdAnnotation
|
||||
// matches sourceId; if there's a mismatch, an error is returned.
|
||||
func (r *RollingUpdater) getOrCreateTargetControllerWithClient(controller *corev1.ReplicationController, sourceId string) (*corev1.ReplicationController, bool, error) {
|
||||
// Existing controllers are validated to ensure their sourceIDAnnotation
|
||||
// matches sourceID; if there's a mismatch, an error is returned.
|
||||
func (r *RollingUpdater) getOrCreateTargetControllerWithClient(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error) {
|
||||
existingRc, err := r.existingController(controller)
|
||||
if err != nil {
|
||||
if !errors.IsNotFound(err) {
|
||||
|
@ -474,24 +474,24 @@ func (r *RollingUpdater) getOrCreateTargetControllerWithClient(controller *corev
|
|||
return nil, false, err
|
||||
}
|
||||
if valOrZero(controller.Spec.Replicas) <= 0 {
|
||||
return nil, false, fmt.Errorf("Invalid controller spec for %s; required: > 0 replicas, actual: %d\n", controller.Name, valOrZero(controller.Spec.Replicas))
|
||||
return nil, false, fmt.Errorf("Invalid controller spec for %s; required: > 0 replicas, actual: %d", controller.Name, valOrZero(controller.Spec.Replicas))
|
||||
}
|
||||
// The controller wasn't found, so create it.
|
||||
if controller.Annotations == nil {
|
||||
controller.Annotations = map[string]string{}
|
||||
}
|
||||
controller.Annotations[desiredReplicasAnnotation] = fmt.Sprintf("%d", valOrZero(controller.Spec.Replicas))
|
||||
controller.Annotations[sourceIdAnnotation] = sourceId
|
||||
controller.Annotations[sourceIDAnnotation] = sourceID
|
||||
controller.Spec.Replicas = newInt32Ptr(0)
|
||||
newRc, err := r.rcClient.ReplicationControllers(r.ns).Create(controller)
|
||||
return newRc, false, err
|
||||
}
|
||||
// Validate and use the existing controller.
|
||||
annotations := existingRc.Annotations
|
||||
source := annotations[sourceIdAnnotation]
|
||||
source := annotations[sourceIDAnnotation]
|
||||
_, ok := annotations[desiredReplicasAnnotation]
|
||||
if source != sourceId || !ok {
|
||||
return nil, false, fmt.Errorf("Missing/unexpected annotations for controller %s, expected %s : %s", controller.Name, sourceId, annotations)
|
||||
if source != sourceID || !ok {
|
||||
return nil, false, fmt.Errorf("Missing/unexpected annotations for controller %s, expected %s : %s", controller.Name, sourceID, annotations)
|
||||
}
|
||||
return existingRc, true, nil
|
||||
}
|
||||
|
@ -517,7 +517,7 @@ func (r *RollingUpdater) cleanupWithClients(oldRc, newRc *corev1.ReplicationCont
|
|||
return err
|
||||
}
|
||||
applyUpdate := func(rc *corev1.ReplicationController) {
|
||||
delete(rc.Annotations, sourceIdAnnotation)
|
||||
delete(rc.Annotations, sourceIDAnnotation)
|
||||
delete(rc.Annotations, desiredReplicasAnnotation)
|
||||
}
|
||||
if newRc, err = updateRcWithRetries(r.rcClient, r.ns, newRc, applyUpdate); err != nil {
|
||||
|
@ -662,7 +662,7 @@ func AbortRollingUpdate(c *RollingUpdaterConfig) error {
|
|||
if c.NewRc.Annotations == nil {
|
||||
c.NewRc.Annotations = map[string]string{}
|
||||
}
|
||||
c.NewRc.Annotations[sourceIdAnnotation] = fmt.Sprintf("%s:%s", c.OldRc.Name, c.OldRc.UID)
|
||||
c.NewRc.Annotations[sourceIDAnnotation] = fmt.Sprintf("%s:%s", c.OldRc.Name, c.OldRc.UID)
|
||||
|
||||
// Use the original value since the replica count change from old to new
|
||||
// could be asymmetric. If we don't know the original count, we can't safely
|
||||
|
@ -841,7 +841,7 @@ func FindSourceController(r corev1client.ReplicationControllersGetter, namespace
|
|||
}
|
||||
for ix := range list.Items {
|
||||
rc := &list.Items[ix]
|
||||
if rc.Annotations != nil && strings.HasPrefix(rc.Annotations[sourceIdAnnotation], name) {
|
||||
if rc.Annotations != nil && strings.HasPrefix(rc.Annotations[sourceIDAnnotation], name) {
|
||||
return rc, nil
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ func newRc(replicas int, desired int) *corev1.ReplicationController {
|
|||
Name: "foo-v2",
|
||||
Annotations: map[string]string{
|
||||
desiredReplicasAnnotation: fmt.Sprintf("%d", desired),
|
||||
sourceIdAnnotation: "foo-v1:7764ae47-9092-11e4-8393-42010af018ff",
|
||||
sourceIDAnnotation: "foo-v1:7764ae47-9092-11e4-8393-42010af018ff",
|
||||
},
|
||||
}
|
||||
return rc
|
||||
|
@ -812,7 +812,7 @@ Scaling foo-v2 up to 2
|
|||
rc.Status.Replicas = *rc.Spec.Replicas
|
||||
return rc, nil
|
||||
},
|
||||
getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceId string) (*corev1.ReplicationController, bool, error) {
|
||||
getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error) {
|
||||
// Simulate a create vs. update of an existing controller.
|
||||
return tt.newRc, tt.newRcExists, nil
|
||||
},
|
||||
|
@ -865,7 +865,7 @@ func TestUpdate_progressTimeout(t *testing.T) {
|
|||
// Do nothing.
|
||||
return rc, nil
|
||||
},
|
||||
getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceId string) (*corev1.ReplicationController, bool, error) {
|
||||
getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error) {
|
||||
return newRc, false, nil
|
||||
},
|
||||
cleanup: func(oldRc, newRc *corev1.ReplicationController, config *RollingUpdaterConfig) error {
|
||||
|
@ -909,7 +909,7 @@ func TestUpdate_assignOriginalAnnotation(t *testing.T) {
|
|||
scaleAndWait: func(rc *corev1.ReplicationController, retry *RetryParams, wait *RetryParams) (*corev1.ReplicationController, error) {
|
||||
return rc, nil
|
||||
},
|
||||
getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceId string) (*corev1.ReplicationController, bool, error) {
|
||||
getOrCreateTargetController: func(controller *corev1.ReplicationController, sourceID string) (*corev1.ReplicationController, bool, error) {
|
||||
return newRc, false, nil
|
||||
},
|
||||
cleanup: func(oldRc, newRc *corev1.ReplicationController, config *RollingUpdaterConfig) error {
|
||||
|
@ -1244,7 +1244,7 @@ func TestFindSourceController(t *testing.T) {
|
|||
Namespace: metav1.NamespaceDefault,
|
||||
Name: "foo",
|
||||
Annotations: map[string]string{
|
||||
sourceIdAnnotation: "bar:1234",
|
||||
sourceIDAnnotation: "bar:1234",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -1253,7 +1253,7 @@ func TestFindSourceController(t *testing.T) {
|
|||
Namespace: metav1.NamespaceDefault,
|
||||
Name: "bar",
|
||||
Annotations: map[string]string{
|
||||
sourceIdAnnotation: "foo:12345",
|
||||
sourceIDAnnotation: "foo:12345",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -1262,7 +1262,7 @@ func TestFindSourceController(t *testing.T) {
|
|||
Namespace: metav1.NamespaceDefault,
|
||||
Name: "baz",
|
||||
Annotations: map[string]string{
|
||||
sourceIdAnnotation: "baz:45667",
|
||||
sourceIDAnnotation: "baz:45667",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -175,7 +175,7 @@ func scaleHasDesiredReplicas(sClient scaleclient.ScalesGetter, gr schema.GroupRe
|
|||
// or returns error when timeout happens
|
||||
func WaitForScaleHasDesiredReplicas(sClient scaleclient.ScalesGetter, gr schema.GroupResource, resourceName string, namespace string, newSize uint, waitForReplicas *RetryParams) error {
|
||||
if waitForReplicas == nil {
|
||||
return fmt.Errorf("waitForReplicas parameter cannot be nil!")
|
||||
return fmt.Errorf("waitForReplicas parameter cannot be nil")
|
||||
}
|
||||
err := wait.PollImmediate(
|
||||
waitForReplicas.Interval,
|
||||
|
|
|
@ -37,7 +37,7 @@ import (
|
|||
"vbom.ml/util/sortorder"
|
||||
)
|
||||
|
||||
// Sorting printer sorts list types before delegating to another printer.
|
||||
// SortingPrinter sorts list types before delegating to another printer.
|
||||
// Non-list types are simply passed through
|
||||
type SortingPrinter struct {
|
||||
SortField string
|
||||
|
@ -296,7 +296,8 @@ func (r *RuntimeSort) Less(i, j int) bool {
|
|||
return less
|
||||
}
|
||||
|
||||
// Returns the starting (original) position of a particular index. e.g. If OriginalPosition(0) returns 5 than the
|
||||
// OriginalPosition returns the starting (original) position of a particular index.
|
||||
// e.g. If OriginalPosition(0) returns 5 than the
|
||||
// the item currently at position 0 was at position 5 in the original unsorted array.
|
||||
func (r *RuntimeSort) OriginalPosition(ix int) int {
|
||||
if ix < 0 || ix > len(r.origPosition) {
|
||||
|
|
|
@ -23,8 +23,8 @@ import (
|
|||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
)
|
||||
|
||||
// Lookup containerPort number from Service port number
|
||||
// It implements the handling of resolving container named port, as well as ignoring targetPort when clusterIP=None
|
||||
// LookupContainerPortNumberByServicePort implements
|
||||
// the handling of resolving container named port, as well as ignoring targetPort when clusterIP=None
|
||||
// It returns an error when a named port can't find a match (with -1 returned), or when the service does not
|
||||
// declare such port (with the input port number returned).
|
||||
func LookupContainerPortNumberByServicePort(svc v1.Service, pod v1.Pod, port int32) (int32, error) {
|
||||
|
@ -39,12 +39,10 @@ func LookupContainerPortNumberByServicePort(svc v1.Service, pod v1.Pod, port int
|
|||
if svcportspec.TargetPort.IntValue() == 0 {
|
||||
// targetPort is omitted, and the IntValue() would be zero
|
||||
return svcportspec.Port, nil
|
||||
} else {
|
||||
return int32(svcportspec.TargetPort.IntValue()), nil
|
||||
}
|
||||
} else {
|
||||
return LookupContainerPortNumberByName(pod, svcportspec.TargetPort.String())
|
||||
return int32(svcportspec.TargetPort.IntValue()), nil
|
||||
}
|
||||
return LookupContainerPortNumberByName(pod, svcportspec.TargetPort.String())
|
||||
}
|
||||
return port, fmt.Errorf("Service %s does not have a service port %d", svc.Name, port)
|
||||
}
|
||||
|
|
|
@ -20,5 +20,5 @@ import (
|
|||
"sort"
|
||||
)
|
||||
|
||||
// Sorts []int64 in increasing order
|
||||
// SortInts64 sorts []int64 in increasing order
|
||||
func SortInts64(a []int64) { sort.Slice(a, func(i, j int) bool { return a[i] < a[j] }) }
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
// Umask is a wrapper for `unix.Umask()` on non-Windows platforms
|
||||
func Umask(mask int) (old int, err error) {
|
||||
return unix.Umask(mask), nil
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
"errors"
|
||||
)
|
||||
|
||||
// Umask returns an error on Windows
|
||||
func Umask(mask int) (int, error) {
|
||||
return 0, errors.New("platform and architecture is not supported")
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ func ParseRFC3339(s string, nowFn func() metav1.Time) (metav1.Time, error) {
|
|||
return metav1.Time{Time: t}, nil
|
||||
}
|
||||
|
||||
// HashObject returns the hash of a Object hash by a Codec
|
||||
func HashObject(obj runtime.Object, codec runtime.Codec) (string, error) {
|
||||
data, err := runtime.Encode(codec, obj)
|
||||
if err != nil {
|
||||
|
@ -63,11 +64,11 @@ func ParseFileSource(source string) (keyName, filePath string, err error) {
|
|||
case numSeparators == 0:
|
||||
return path.Base(filepath.ToSlash(source)), source, nil
|
||||
case numSeparators == 1 && strings.HasPrefix(source, "="):
|
||||
return "", "", fmt.Errorf("key name for file path %v missing.", strings.TrimPrefix(source, "="))
|
||||
return "", "", fmt.Errorf("key name for file path %v missing", strings.TrimPrefix(source, "="))
|
||||
case numSeparators == 1 && strings.HasSuffix(source, "="):
|
||||
return "", "", fmt.Errorf("file path for key name %v missing.", strings.TrimSuffix(source, "="))
|
||||
return "", "", fmt.Errorf("file path for key name %v missing", strings.TrimSuffix(source, "="))
|
||||
case numSeparators > 1:
|
||||
return "", "", errors.New("Key names or file paths cannot contain '='.")
|
||||
return "", "", errors.New("Key names or file paths cannot contain '='")
|
||||
default:
|
||||
components := strings.Split(source, "=")
|
||||
return components[0], components[1], nil
|
||||
|
|
Loading…
Reference in New Issue