mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-16 14:45:28 +00:00
Set a default user agent on all client.Client calls
Form: kube-controller-manager/v0.10.0 (linux/amd64) kubernetes/550b98e <basename(os.Argv)>/<gitVersion> (<GOOS>/<GOARCH>) kubernetes/<shortGitCommit> Can be set by other clients
This commit is contained in:
@@ -18,79 +18,21 @@ limitations under the License.
|
||||
package kubectl
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta"
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/version"
|
||||
)
|
||||
|
||||
var apiVersionToUse = "v1beta1"
|
||||
|
||||
const kubectlAnnotationPrefix = "kubectl.kubernetes.io/"
|
||||
|
||||
func GetKubeClient(config *client.Config, matchVersion bool) (*client.Client, error) {
|
||||
// TODO: get the namespace context when kubectl ns is completed
|
||||
c, err := client.New(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if matchVersion {
|
||||
clientVersion := version.Get()
|
||||
serverVersion, err := c.ServerVersion()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("couldn't read version from server: %v\n", err)
|
||||
}
|
||||
if s := *serverVersion; !reflect.DeepEqual(clientVersion, s) {
|
||||
return nil, fmt.Errorf("server version (%#v) differs from client version (%#v)!\n", s, clientVersion)
|
||||
}
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
type NamespaceInfo struct {
|
||||
Namespace string
|
||||
}
|
||||
|
||||
// LoadNamespaceInfo parses a NamespaceInfo object from a file path. It creates a file at the specified path if it doesn't exist with the default namespace.
|
||||
func LoadNamespaceInfo(path string) (*NamespaceInfo, error) {
|
||||
var ns NamespaceInfo
|
||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||
ns.Namespace = api.NamespaceDefault
|
||||
err = SaveNamespaceInfo(path, &ns)
|
||||
return &ns, err
|
||||
}
|
||||
data, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = json.Unmarshal(data, &ns)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ns, err
|
||||
}
|
||||
|
||||
// SaveNamespaceInfo saves a NamespaceInfo object at the specified file path.
|
||||
func SaveNamespaceInfo(path string, ns *NamespaceInfo) error {
|
||||
if !util.IsDNSLabel(ns.Namespace) {
|
||||
return fmt.Errorf("namespace %s is not a valid DNS Label", ns.Namespace)
|
||||
}
|
||||
data, err := json.Marshal(ns)
|
||||
err = ioutil.WriteFile(path, data, 0600)
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO Move to labels package.
|
||||
func formatLabels(labelMap map[string]string) string {
|
||||
l := labels.Set(labelMap).String()
|
||||
|
@@ -1,84 +0,0 @@
|
||||
/*
|
||||
Copyright 2014 Google Inc. All rights reserved.
|
||||
|
||||
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 (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||
)
|
||||
|
||||
func validateAction(expectedAction, actualAction client.FakeAction, t *testing.T) {
|
||||
if !reflect.DeepEqual(expectedAction, actualAction) {
|
||||
t.Errorf("Unexpected Action: %#v, expected: %#v", actualAction, expectedAction)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadNamespaceInfo(t *testing.T) {
|
||||
loadNamespaceInfoTests := []struct {
|
||||
nsData string
|
||||
nsInfo *NamespaceInfo
|
||||
}{
|
||||
{
|
||||
`{"Namespace":"test"}`,
|
||||
&NamespaceInfo{Namespace: "test"},
|
||||
},
|
||||
{
|
||||
"", nil,
|
||||
},
|
||||
{
|
||||
"missing",
|
||||
&NamespaceInfo{Namespace: "default"},
|
||||
},
|
||||
}
|
||||
for _, loadNamespaceInfoTest := range loadNamespaceInfoTests {
|
||||
tt := loadNamespaceInfoTest
|
||||
nsfile, err := ioutil.TempFile("", "testNamespaceInfo")
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if tt.nsData != "missing" {
|
||||
defer os.Remove(nsfile.Name())
|
||||
defer nsfile.Close()
|
||||
_, err := nsfile.WriteString(tt.nsData)
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
} else {
|
||||
nsfile.Close()
|
||||
os.Remove(nsfile.Name())
|
||||
}
|
||||
nsInfo, err := LoadNamespaceInfo(nsfile.Name())
|
||||
if len(tt.nsData) == 0 && tt.nsData != "missing" {
|
||||
if err == nil {
|
||||
t.Error("LoadNamespaceInfo didn't fail on an empty file")
|
||||
}
|
||||
continue
|
||||
}
|
||||
if tt.nsData != "missing" {
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v, %v", tt.nsData, err)
|
||||
}
|
||||
if !reflect.DeepEqual(nsInfo, tt.nsInfo) {
|
||||
t.Errorf("Expected %v, got %v", tt.nsInfo, nsInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user