mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +00:00 
			
		
		
		
	- 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`
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| 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 util
 | |
| 
 | |
| import (
 | |
| 	"crypto/md5"
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"path"
 | |
| 	"path/filepath"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| 
 | |
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | |
| 	"k8s.io/apimachinery/pkg/runtime"
 | |
| )
 | |
| 
 | |
| // ParseRFC3339 parses an RFC3339 date in either RFC3339Nano or RFC3339 format.
 | |
| func ParseRFC3339(s string, nowFn func() metav1.Time) (metav1.Time, error) {
 | |
| 	if t, timeErr := time.Parse(time.RFC3339Nano, s); timeErr == nil {
 | |
| 		return metav1.Time{Time: t}, nil
 | |
| 	}
 | |
| 	t, err := time.Parse(time.RFC3339, s)
 | |
| 	if err != nil {
 | |
| 		return metav1.Time{}, err
 | |
| 	}
 | |
| 	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 {
 | |
| 		return "", err
 | |
| 	}
 | |
| 	return fmt.Sprintf("%x", md5.Sum(data)), nil
 | |
| }
 | |
| 
 | |
| // ParseFileSource parses the source given.
 | |
| //
 | |
| //  Acceptable formats include:
 | |
| //   1.  source-path: the basename will become the key name
 | |
| //   2.  source-name=source-path: the source-name will become the key name and
 | |
| //       source-path is the path to the key file.
 | |
| //
 | |
| // Key names cannot include '='.
 | |
| func ParseFileSource(source string) (keyName, filePath string, err error) {
 | |
| 	numSeparators := strings.Count(source, "=")
 | |
| 	switch {
 | |
| 	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, "="))
 | |
| 	case numSeparators == 1 && strings.HasSuffix(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 '='")
 | |
| 	default:
 | |
| 		components := strings.Split(source, "=")
 | |
| 		return components[0], components[1], nil
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ParseLiteralSource parses the source key=val pair into its component pieces.
 | |
| // This functionality is distinguished from strings.SplitN(source, "=", 2) since
 | |
| // it returns an error in the case of empty keys, values, or a missing equals sign.
 | |
| func ParseLiteralSource(source string) (keyName, value string, err error) {
 | |
| 	// leading equal is invalid
 | |
| 	if strings.Index(source, "=") == 0 {
 | |
| 		return "", "", fmt.Errorf("invalid literal source %v, expected key=value", source)
 | |
| 	}
 | |
| 	// split after the first equal (so values can have the = character)
 | |
| 	items := strings.SplitN(source, "=", 2)
 | |
| 	if len(items) != 2 {
 | |
| 		return "", "", fmt.Errorf("invalid literal source %v, expected key=value", source)
 | |
| 	}
 | |
| 
 | |
| 	return items[0], items[1], nil
 | |
| }
 |