Merge pull request #41548 from sttts/sttts-staging-gofmt

Automatic merge from submit-queue (batch tested with PRs 41548, 41221)

hack/*.sh: re-add staging dirs to verify+update scripts
This commit is contained in:
Kubernetes Submit Queue 2017-02-17 04:34:34 -08:00 committed by GitHub
commit 867e38fbf7
43 changed files with 466 additions and 468 deletions

View File

@ -34,11 +34,10 @@ find_files() {
-o -wholename './_output' \ -o -wholename './_output' \
-o -wholename './_gopath' \ -o -wholename './_gopath' \
-o -wholename './release' \ -o -wholename './release' \
-o -wholename './staging' \
-o -wholename './target' \ -o -wholename './target' \
-o -wholename '*/third_party/*' \ -o -wholename '*/third_party/*' \
-o -wholename '*/vendor/*' \ -o -wholename '*/vendor/*' \
-o -wholename './staging' \ -o -wholename './staging/src/k8s.io/client-go/*vendor/*' \
\) -prune \ \) -prune \
\) -name '*.go' \) -name '*.go'
} }

View File

@ -42,7 +42,7 @@ find_files() {
-o -wholename './target' \ -o -wholename './target' \
-o -wholename '*/third_party/*' \ -o -wholename '*/third_party/*' \
-o -wholename '*/vendor/*' \ -o -wholename '*/vendor/*' \
-o -wholename './staging' \ -o -wholename './staging/src/k8s.io/client-go/*vendor/*' \
-o -wholename '*/bindata.go' \ -o -wholename '*/bindata.go' \
\) -prune \ \) -prune \
\) -name '*.go' \) -name '*.go'

View File

@ -26,7 +26,7 @@ source "${KUBE_ROOT}/hack/lib/init.sh"
kube::golang::verify_go_version kube::golang::verify_go_version
cd "${KUBE_ROOT}" cd "${KUBE_ROOT}"
if git --no-pager grep -E $'^(import |\t)[a-z]+[A-Z_][a-zA-Z]* "[^"]+"$' -- '**/*.go' ':(exclude)vendor/*' ':(exclude)staging/*'; then if git --no-pager grep -E $'^(import |\t)[a-z]+[A-Z_][a-zA-Z]* "[^"]+"$' -- '**/*.go' ':(exclude)vendor/*' ':(exclude)staging/src/k8s.io/client-go/*vendor/*'; then
echo "!!! Some package aliases break go conventions." echo "!!! Some package aliases break go conventions."
echo "To fix these errors, do not use capitalized or underlined characters" echo "To fix these errors, do not use capitalized or underlined characters"
echo "in pkg aliases. Refer to https://blog.golang.org/package-names for more info." echo "in pkg aliases. Refer to https://blog.golang.org/package-names for more info."

View File

@ -37,7 +37,8 @@ find_files() {
-o -wholename './target' \ -o -wholename './target' \
-o -wholename '*/third_party/*' \ -o -wholename '*/third_party/*' \
-o -wholename '*/vendor/*' \ -o -wholename '*/vendor/*' \
-o -wholename './staging' \ -o -wholename './staging/src/k8s.io/client-go/*vendor/*' \
-o -wholename './staging/src/k8s.io/client-go/pkg/*' \
\) -prune \ \) -prune \
\) -name '.readonly' \) -name '.readonly'
} }

View File

@ -17,18 +17,18 @@ limitations under the License.
package testing package testing
import ( import (
"os"
"mime"
"fmt" "fmt"
"mime"
"os"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/runtime/serializer/recognizer" "k8s.io/apimachinery/pkg/runtime/serializer/recognizer"
) )
var ( var (
testCodecMediaType string testCodecMediaType string
testStorageCodecMediaType string testStorageCodecMediaType string
) )

View File

@ -27,17 +27,17 @@ func TestValueFuzz(t *testing.T) {
U uint U uint
} }
X struct { X struct {
Ptr *X Ptr *X
Y Y Y Y
Map map[string]int Map map[string]int
Slice []int Slice []int
} }
) )
x := X{ x := X{
Ptr: &X{}, Ptr: &X{},
Map: map[string]int{"foo": 42}, Map: map[string]int{"foo": 42},
Slice: []int{1,2,3}, Slice: []int{1, 2, 3},
} }
p := x.Ptr p := x.Ptr

View File

@ -49,8 +49,8 @@ func TestListOptions(t *testing.T) {
// verify failing conversion // verify failing conversion
for i, failingObject := range []*metav1.ListOptions{ for i, failingObject := range []*metav1.ListOptions{
&metav1.ListOptions{LabelSelector: "a!!!"}, {LabelSelector: "a!!!"},
&metav1.ListOptions{FieldSelector: "a!!!"}, {FieldSelector: "a!!!"},
} { } {
out = &ListOptions{} out = &ListOptions{}
if err := scheme.Convert(failingObject, out, nil); err == nil { if err := scheme.Convert(failingObject, out, nil); err == nil {

View File

@ -29,28 +29,28 @@ import (
// Definte a number of test types. // Definte a number of test types.
type A struct { type A struct {
A int `json:"aa,omitempty"` A int `json:"aa,omitempty"`
B string `json:"ab,omitempty"` B string `json:"ab,omitempty"`
C bool `json:"ac,omitempty"` C bool `json:"ac,omitempty"`
} }
type B struct { type B struct {
A A `json:"ba"` A A `json:"ba"`
B string `json:"bb"` B string `json:"bb"`
C map[string]string `json:"bc"` C map[string]string `json:"bc"`
D []string `json:"bd"` D []string `json:"bd"`
} }
type C struct { type C struct {
A []A `json:"ca"` A []A `json:"ca"`
B B `json:",inline"` B B `json:",inline"`
C string `json:"cc"` C string `json:"cc"`
D *int64 `json:"cd"` D *int64 `json:"cd"`
E map[string]int `json:"ce"` E map[string]int `json:"ce"`
F []bool `json:"cf"` F []bool `json:"cf"`
G []int `json"cg"` G []int `json"cg"`
H float32 `json:ch"` H float32 `json:ch"`
I []interface{} `json:"ci"` I []interface{} `json:"ci"`
} }
type D struct { type D struct {
@ -62,15 +62,15 @@ type E struct {
} }
type F struct { type F struct {
A string `json:"fa"` A string `json:"fa"`
B map[string]string `json:"fb"` B map[string]string `json:"fb"`
C []A `json:"fc"` C []A `json:"fc"`
D int `json:"fd"` D int `json:"fd"`
E float32 `json:"fe"` E float32 `json:"fe"`
F []string `json:"ff"` F []string `json:"ff"`
G []int `json:"fg"` G []int `json:"fg"`
H []bool `json:"fh"` H []bool `json:"fh"`
I []float32 `json:"fi"` I []float32 `json:"fi"`
} }
// Implement runtime.Object to make types usable for tests. // Implement runtime.Object to make types usable for tests.
@ -142,7 +142,7 @@ func doRoundTrip(t *testing.T, item runtime.Object) {
func TestRoundTrip(t *testing.T) { func TestRoundTrip(t *testing.T) {
intVal := int64(42) intVal := int64(42)
testCases := []struct{ testCases := []struct {
obj runtime.Object obj runtime.Object
}{ }{
{ {
@ -250,10 +250,10 @@ func doUnrecognized(t *testing.T, jsonData string, item runtime.Object, expected
} }
func TestUnrecognized(t *testing.T) { func TestUnrecognized(t *testing.T) {
testCases := []struct{ testCases := []struct {
data string data string
obj runtime.Object obj runtime.Object
err error err error
}{ }{
{ {
data: "{\"da\":[3.0,\"3.0\",null]}", data: "{\"da\":[3.0,\"3.0\",null]}",
@ -265,15 +265,15 @@ func TestUnrecognized(t *testing.T) {
}, },
{ {
data: "{\"ea\":[null,null,null]}", data: "{\"ea\":[null,null,null]}",
obj: &E{}, obj: &E{},
}, },
{ {
data: "{\"ea\":[[],[null]]}", data: "{\"ea\":[[],[null]]}",
obj: &E{}, obj: &E{},
}, },
{ {
data: "{\"ea\":{\"a\":[],\"b\":null}}", data: "{\"ea\":{\"a\":[],\"b\":null}}",
obj: &E{}, obj: &E{},
}, },
{ {
data: "{\"fa\":\"fa\",\"fb\":{\"a\":\"a\"}}", data: "{\"fa\":\"fa\",\"fb\":{\"a\":\"a\"}}",

View File

@ -20,8 +20,8 @@ import (
"fmt" "fmt"
"reflect" "reflect"
"k8s.io/apimachinery/pkg/util/json"
"github.com/evanphx/json-patch" "github.com/evanphx/json-patch"
"k8s.io/apimachinery/pkg/util/json"
"k8s.io/apimachinery/pkg/util/mergepatch" "k8s.io/apimachinery/pkg/util/mergepatch"
) )

View File

@ -21,9 +21,9 @@ import (
"reflect" "reflect"
"testing" "testing"
"github.com/davecgh/go-spew/spew"
"github.com/evanphx/json-patch" "github.com/evanphx/json-patch"
"github.com/ghodss/yaml" "github.com/ghodss/yaml"
"github.com/davecgh/go-spew/spew"
"k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/json"
) )
@ -32,9 +32,9 @@ type FilterNullTestCases struct {
} }
type FilterNullTestCase struct { type FilterNullTestCase struct {
Description string Description string
OriginalObj map[string]interface{} OriginalObj map[string]interface{}
ExpectedWithNull map[string]interface{} ExpectedWithNull map[string]interface{}
ExpectedWithoutNull map[string]interface{} ExpectedWithoutNull map[string]interface{}
} }
@ -171,7 +171,6 @@ func TestKeepOrDeleteNullInObj(t *testing.T) {
} }
} }
type JSONMergePatchTestCases struct { type JSONMergePatchTestCases struct {
TestCases []JSONMergePatchTestCase TestCases []JSONMergePatchTestCase
} }
@ -622,10 +621,10 @@ func testPatchApplication(t *testing.T, original, patch, expected []byte, descri
func threeWayTestCaseToJSONOrFail(t *testing.T, c JSONMergePatchTestCase) ([]byte, []byte, []byte, []byte, []byte) { func threeWayTestCaseToJSONOrFail(t *testing.T, c JSONMergePatchTestCase) ([]byte, []byte, []byte, []byte, []byte) {
return testObjectToJSONOrFail(t, c.Original), return testObjectToJSONOrFail(t, c.Original),
testObjectToJSONOrFail(t, c.Modified), testObjectToJSONOrFail(t, c.Modified),
testObjectToJSONOrFail(t, c.Current), testObjectToJSONOrFail(t, c.Current),
testObjectToJSONOrFail(t, c.ThreeWay), testObjectToJSONOrFail(t, c.ThreeWay),
testObjectToJSONOrFail(t, c.Result) testObjectToJSONOrFail(t, c.Result)
} }
func testObjectToJSONOrFail(t *testing.T, o map[string]interface{}) []byte { func testObjectToJSONOrFail(t *testing.T, o map[string]interface{}) []byte {

View File

@ -23,8 +23,8 @@ import (
"strings" "strings"
"k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/json"
forkedjson "k8s.io/apimachinery/third_party/forked/golang/json"
"k8s.io/apimachinery/pkg/util/mergepatch" "k8s.io/apimachinery/pkg/util/mergepatch"
forkedjson "k8s.io/apimachinery/third_party/forked/golang/json"
) )
// An alternate implementation of JSON Merge Patch // An alternate implementation of JSON Merge Patch

View File

@ -22,8 +22,8 @@ import (
apitesting "k8s.io/apimachinery/pkg/api/testing" apitesting "k8s.io/apimachinery/pkg/api/testing"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
"k8s.io/apiserver/pkg/apis/example" "k8s.io/apiserver/pkg/apis/example"
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
) )
// overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic // overrideGenericFuncs override some generic fuzzer funcs from k8s.io/apiserver in order to have more realistic

View File

@ -21,10 +21,10 @@ import (
) )
type ( type (
ConditionStatus string ConditionStatus string
PodConditionType string PodConditionType string
PodPhase string PodPhase string
RestartPolicy string RestartPolicy string
) )
// Pod is a collection of containers, used as either input (create, update) or as output (list, get). // Pod is a collection of containers, used as either input (create, update) or as output (list, get).

View File

@ -23,4 +23,3 @@ import (
func addDefaultingFuncs(scheme *runtime.Scheme) error { func addDefaultingFuncs(scheme *runtime.Scheme) error {
return nil return nil
} }

View File

@ -21,10 +21,10 @@ import (
) )
type ( type (
ConditionStatus string ConditionStatus string
PodConditionType string PodConditionType string
PodPhase string PodPhase string
RestartPolicy string RestartPolicy string
) )
// Pod is a collection of containers, used as either input (create, update) or as output (list, get). // Pod is a collection of containers, used as either input (create, update) or as output (list, get).

View File

@ -17,24 +17,24 @@ limitations under the License.
package x509 package x509
import ( import (
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"encoding/pem" "encoding/pem"
"errors" "errors"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"reflect" "reflect"
"sort" "sort"
"testing" "testing"
"time" "time"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apiserver/pkg/authentication/authenticator" "k8s.io/apiserver/pkg/authentication/authenticator"
"k8s.io/apiserver/pkg/authentication/user" "k8s.io/apiserver/pkg/authentication/user"
) )
const ( const (
rootCACert = `-----BEGIN CERTIFICATE----- rootCACert = `-----BEGIN CERTIFICATE-----
MIIDOTCCAqKgAwIBAgIJAOoObf5kuGgZMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNV MIIDOTCCAqKgAwIBAgIJAOoObf5kuGgZMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhNeSBTdGF0ZTEQMA4GA1UEBxMHTXkgQ2l0eTEPMA0G BAYTAlVTMREwDwYDVQQIEwhNeSBTdGF0ZTEQMA4GA1UEBxMHTXkgQ2l0eTEPMA0G
A1UEChMGTXkgT3JnMRAwDgYDVQQLEwdNeSBVbml0MRAwDgYDVQQDEwdST09UIENB A1UEChMGTXkgT3JnMRAwDgYDVQQLEwdNeSBVbml0MRAwDgYDVQQDEwdST09UIENB
@ -56,7 +56,7 @@ H9oc7u5zhTGXeV8WPg==
-----END CERTIFICATE----- -----END CERTIFICATE-----
` `
selfSignedCert = `-----BEGIN CERTIFICATE----- selfSignedCert = `-----BEGIN CERTIFICATE-----
MIIDEzCCAnygAwIBAgIJAMaPaFbGgJN+MA0GCSqGSIb3DQEBBQUAMGUxCzAJBgNV MIIDEzCCAnygAwIBAgIJAMaPaFbGgJN+MA0GCSqGSIb3DQEBBQUAMGUxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhNeSBTdGF0ZTEQMA4GA1UEBxMHTXkgQ2l0eTEPMA0G BAYTAlVTMREwDwYDVQQIEwhNeSBTdGF0ZTEQMA4GA1UEBxMHTXkgQ2l0eTEPMA0G
A1UEChMGTXkgT3JnMRAwDgYDVQQLEwdNeSBVbml0MQ4wDAYDVQQDEwVzZWxmMTAe A1UEChMGTXkgT3JnMRAwDgYDVQQLEwdNeSBVbml0MQ4wDAYDVQQDEwVzZWxmMTAe
@ -77,7 +77,7 @@ ze3kOoP+iWSmTySHMSKVMppp0Xnls6t38mrsXtPuY8fGD2GS6VllaizMqc3wShNK
-----END CERTIFICATE----- -----END CERTIFICATE-----
` `
clientCNCert = `Certificate: clientCNCert = `Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: 1 (0x1) Serial Number: 1 (0x1)
@ -151,7 +151,7 @@ AjARBglghkgBhvhCAQEEBAMCB4AwDQYJKoZIhvcNAQELBQADgYEACLy0gKU7vpp4
i5fmaPPBNzzBFCaQoN3TAjrpwp5Z0kQ= i5fmaPPBNzzBFCaQoN3TAjrpwp5Z0kQ=
-----END CERTIFICATE-----` -----END CERTIFICATE-----`
clientDNSCert = `Certificate: clientDNSCert = `Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: 4 (0x4) Serial Number: 4 (0x4)
@ -224,7 +224,7 @@ gGolrD3igQXkiStVY5otSto7xJdeGulvg7gFSty9q7CgddAetcWN8/aS8VLSgWf8
b3TuSTdzCLz1JoZn9YIE/9tan/lr3y/1dWHypZELBVZb6NE211Z67X3lXyoIh8JI b3TuSTdzCLz1JoZn9YIE/9tan/lr3y/1dWHypZELBVZb6NE211Z67X3lXyoIh8JI
-----END CERTIFICATE-----` -----END CERTIFICATE-----`
clientEmailCert = `Certificate: clientEmailCert = `Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: 2 (0x2) Serial Number: 2 (0x2)
@ -299,7 +299,7 @@ BIaMiQ==
-----END CERTIFICATE----- -----END CERTIFICATE-----
` `
serverCert = `Certificate: serverCert = `Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: 7 (0x7) Serial Number: 7 (0x7)
@ -374,17 +374,17 @@ mFlG6tStAWz3TmydciZNdiEbeqHw5uaIYWj1zC5AdvFXBFue0ojIrJ5JtbTWccH9
-----END CERTIFICATE----- -----END CERTIFICATE-----
` `
/* /*
openssl genrsa -out ca.key 4096 openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 36500 \ openssl req -new -x509 -days 36500 \
-sha256 -key ca.key -extensions v3_ca \ -sha256 -key ca.key -extensions v3_ca \
-out ca.crt \ -out ca.crt \
-subj "/C=US/ST=My State/L=My City/O=My Org/O=My Org 1/O=My Org 2/CN=ROOT CA WITH GROUPS" -subj "/C=US/ST=My State/L=My City/O=My Org/O=My Org 1/O=My Org 2/CN=ROOT CA WITH GROUPS"
openssl x509 -in ca.crt -text openssl x509 -in ca.crt -text
*/ */
// A certificate with multiple organizations. // A certificate with multiple organizations.
caWithGroups = `Certificate: caWithGroups = `Certificate:
Data: Data:
Version: 3 (0x2) Version: 3 (0x2)
Serial Number: Serial Number:
@ -510,424 +510,424 @@ PKJQCs0CM0zkesktuLi/gFpuB0nEwyOgLg==
) )
func TestX509(t *testing.T) { func TestX509(t *testing.T) {
multilevelOpts := DefaultVerifyOptions() multilevelOpts := DefaultVerifyOptions()
multilevelOpts.Roots = x509.NewCertPool() multilevelOpts.Roots = x509.NewCertPool()
multilevelOpts.Roots.AddCert(getCertsFromFile(t, "root")[0]) multilevelOpts.Roots.AddCert(getCertsFromFile(t, "root")[0])
testCases := map[string]struct { testCases := map[string]struct {
Insecure bool Insecure bool
Certs []*x509.Certificate Certs []*x509.Certificate
Opts x509.VerifyOptions Opts x509.VerifyOptions
User UserConversion User UserConversion
ExpectUserName string ExpectUserName string
ExpectGroups []string ExpectGroups []string
ExpectOK bool ExpectOK bool
ExpectErr bool ExpectErr bool
}{ }{
"non-tls": { "non-tls": {
Insecure: true, Insecure: true,
ExpectOK: false, ExpectOK: false,
ExpectErr: false, ExpectErr: false,
}, },
"tls, no certs": { "tls, no certs": {
ExpectOK: false, ExpectOK: false,
ExpectErr: false, ExpectErr: false,
}, },
"self signed": { "self signed": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, selfSignedCert), Certs: getCerts(t, selfSignedCert),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectErr: true, ExpectErr: true,
}, },
"server cert": { "server cert": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, serverCert), Certs: getCerts(t, serverCert),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectErr: true, ExpectErr: true,
}, },
"server cert allowing non-client cert usages": { "server cert allowing non-client cert usages": {
Opts: x509.VerifyOptions{Roots: getRootCertPool(t)}, Opts: x509.VerifyOptions{Roots: getRootCertPool(t)},
Certs: getCerts(t, serverCert), Certs: getCerts(t, serverCert),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectUserName: "127.0.0.1", ExpectUserName: "127.0.0.1",
ExpectGroups: []string{"My Org"}, ExpectGroups: []string{"My Org"},
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"common name": { "common name": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectUserName: "client_cn", ExpectUserName: "client_cn",
ExpectGroups: []string{"My Org"}, ExpectGroups: []string{"My Org"},
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"ca with multiple organizations": { "ca with multiple organizations": {
Opts: x509.VerifyOptions{ Opts: x509.VerifyOptions{
Roots: getRootCertPoolFor(t, caWithGroups), Roots: getRootCertPoolFor(t, caWithGroups),
}, },
Certs: getCerts(t, caWithGroups), Certs: getCerts(t, caWithGroups),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectUserName: "ROOT CA WITH GROUPS", ExpectUserName: "ROOT CA WITH GROUPS",
ExpectGroups: []string{"My Org", "My Org 1", "My Org 2"}, ExpectGroups: []string{"My Org", "My Org 1", "My Org 2"},
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"empty dns": { "empty dns": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: DNSNameUserConversion, User: DNSNameUserConversion,
ExpectOK: false, ExpectOK: false,
ExpectErr: false, ExpectErr: false,
}, },
"dns": { "dns": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientDNSCert), Certs: getCerts(t, clientDNSCert),
User: DNSNameUserConversion, User: DNSNameUserConversion,
ExpectUserName: "client_dns.example.com", ExpectUserName: "client_dns.example.com",
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"empty email": { "empty email": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: EmailAddressUserConversion, User: EmailAddressUserConversion,
ExpectOK: false, ExpectOK: false,
ExpectErr: false, ExpectErr: false,
}, },
"email": { "email": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientEmailCert), Certs: getCerts(t, clientEmailCert),
User: EmailAddressUserConversion, User: EmailAddressUserConversion,
ExpectUserName: "client_email@example.com", ExpectUserName: "client_email@example.com",
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"custom conversion error": { "custom conversion error": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) { User: UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) {
return nil, false, errors.New("custom error") return nil, false, errors.New("custom error")
}), }),
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
"custom conversion success": { "custom conversion success": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) { User: UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) {
return &user.DefaultInfo{Name: "custom"}, true, nil return &user.DefaultInfo{Name: "custom"}, true, nil
}), }),
ExpectUserName: "custom", ExpectUserName: "custom",
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"future cert": { "future cert": {
Opts: x509.VerifyOptions{ Opts: x509.VerifyOptions{
CurrentTime: time.Now().Add(time.Duration(-100 * time.Hour * 24 * 365)), CurrentTime: time.Now().Add(time.Duration(-100 * time.Hour * 24 * 365)),
Roots: getRootCertPool(t), Roots: getRootCertPool(t),
}, },
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
"expired cert": { "expired cert": {
Opts: x509.VerifyOptions{ Opts: x509.VerifyOptions{
CurrentTime: time.Now().Add(time.Duration(100 * time.Hour * 24 * 365)), CurrentTime: time.Now().Add(time.Duration(100 * time.Hour * 24 * 365)),
Roots: getRootCertPool(t), Roots: getRootCertPool(t),
}, },
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
"multi-level, valid": { "multi-level, valid": {
Opts: multilevelOpts, Opts: multilevelOpts,
Certs: getCertsFromFile(t, "client-valid", "intermediate"), Certs: getCertsFromFile(t, "client-valid", "intermediate"),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectUserName: "My Client", ExpectUserName: "My Client",
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"multi-level, expired": { "multi-level, expired": {
Opts: multilevelOpts, Opts: multilevelOpts,
Certs: getCertsFromFile(t, "client-expired", "intermediate"), Certs: getCertsFromFile(t, "client-expired", "intermediate"),
User: CommonNameUserConversion, User: CommonNameUserConversion,
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
} }
for k, testCase := range testCases { for k, testCase := range testCases {
req, _ := http.NewRequest("GET", "/", nil) req, _ := http.NewRequest("GET", "/", nil)
if !testCase.Insecure { if !testCase.Insecure {
req.TLS = &tls.ConnectionState{PeerCertificates: testCase.Certs} req.TLS = &tls.ConnectionState{PeerCertificates: testCase.Certs}
} }
a := New(testCase.Opts, testCase.User) a := New(testCase.Opts, testCase.User)
user, ok, err := a.AuthenticateRequest(req) user, ok, err := a.AuthenticateRequest(req)
if testCase.ExpectErr && err == nil { if testCase.ExpectErr && err == nil {
t.Errorf("%s: Expected error, got none", k) t.Errorf("%s: Expected error, got none", k)
continue continue
} }
if !testCase.ExpectErr && err != nil { if !testCase.ExpectErr && err != nil {
t.Errorf("%s: Got unexpected error: %v", k, err) t.Errorf("%s: Got unexpected error: %v", k, err)
continue continue
} }
if testCase.ExpectOK != ok { if testCase.ExpectOK != ok {
t.Errorf("%s: Expected ok=%v, got %v", k, testCase.ExpectOK, ok) t.Errorf("%s: Expected ok=%v, got %v", k, testCase.ExpectOK, ok)
continue continue
} }
if testCase.ExpectOK { if testCase.ExpectOK {
if testCase.ExpectUserName != user.GetName() { if testCase.ExpectUserName != user.GetName() {
t.Errorf("%s: Expected user.name=%v, got %v", k, testCase.ExpectUserName, user.GetName()) t.Errorf("%s: Expected user.name=%v, got %v", k, testCase.ExpectUserName, user.GetName())
} }
groups := user.GetGroups() groups := user.GetGroups()
sort.Strings(testCase.ExpectGroups) sort.Strings(testCase.ExpectGroups)
sort.Strings(groups) sort.Strings(groups)
if !reflect.DeepEqual(testCase.ExpectGroups, groups) { if !reflect.DeepEqual(testCase.ExpectGroups, groups) {
t.Errorf("%s: Expected user.groups=%v, got %v", k, testCase.ExpectGroups, groups) t.Errorf("%s: Expected user.groups=%v, got %v", k, testCase.ExpectGroups, groups)
} }
} }
} }
} }
func TestX509Verifier(t *testing.T) { func TestX509Verifier(t *testing.T) {
multilevelOpts := DefaultVerifyOptions() multilevelOpts := DefaultVerifyOptions()
multilevelOpts.Roots = x509.NewCertPool() multilevelOpts.Roots = x509.NewCertPool()
multilevelOpts.Roots.AddCert(getCertsFromFile(t, "root")[0]) multilevelOpts.Roots.AddCert(getCertsFromFile(t, "root")[0])
testCases := map[string]struct { testCases := map[string]struct {
Insecure bool Insecure bool
Certs []*x509.Certificate Certs []*x509.Certificate
Opts x509.VerifyOptions Opts x509.VerifyOptions
AllowedCNs sets.String AllowedCNs sets.String
ExpectOK bool ExpectOK bool
ExpectErr bool ExpectErr bool
}{ }{
"non-tls": { "non-tls": {
Insecure: true, Insecure: true,
ExpectOK: false, ExpectOK: false,
ExpectErr: false, ExpectErr: false,
}, },
"tls, no certs": { "tls, no certs": {
ExpectOK: false, ExpectOK: false,
ExpectErr: false, ExpectErr: false,
}, },
"self signed": { "self signed": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, selfSignedCert), Certs: getCerts(t, selfSignedCert),
ExpectErr: true, ExpectErr: true,
}, },
"server cert disallowed": { "server cert disallowed": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, serverCert), Certs: getCerts(t, serverCert),
ExpectErr: true, ExpectErr: true,
}, },
"server cert allowing non-client cert usages": { "server cert allowing non-client cert usages": {
Opts: x509.VerifyOptions{Roots: getRootCertPool(t)}, Opts: x509.VerifyOptions{Roots: getRootCertPool(t)},
Certs: getCerts(t, serverCert), Certs: getCerts(t, serverCert),
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"valid client cert": { "valid client cert": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"valid client cert with wrong CN": { "valid client cert with wrong CN": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
AllowedCNs: sets.NewString("foo", "bar"), AllowedCNs: sets.NewString("foo", "bar"),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
"valid client cert with right CN": { "valid client cert with right CN": {
Opts: getDefaultVerifyOptions(t), Opts: getDefaultVerifyOptions(t),
AllowedCNs: sets.NewString("client_cn"), AllowedCNs: sets.NewString("client_cn"),
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"future cert": { "future cert": {
Opts: x509.VerifyOptions{ Opts: x509.VerifyOptions{
CurrentTime: time.Now().Add(-100 * time.Hour * 24 * 365), CurrentTime: time.Now().Add(-100 * time.Hour * 24 * 365),
Roots: getRootCertPool(t), Roots: getRootCertPool(t),
}, },
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
"expired cert": { "expired cert": {
Opts: x509.VerifyOptions{ Opts: x509.VerifyOptions{
CurrentTime: time.Now().Add(100 * time.Hour * 24 * 365), CurrentTime: time.Now().Add(100 * time.Hour * 24 * 365),
Roots: getRootCertPool(t), Roots: getRootCertPool(t),
}, },
Certs: getCerts(t, clientCNCert), Certs: getCerts(t, clientCNCert),
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
"multi-level, valid": { "multi-level, valid": {
Opts: multilevelOpts, Opts: multilevelOpts,
Certs: getCertsFromFile(t, "client-valid", "intermediate"), Certs: getCertsFromFile(t, "client-valid", "intermediate"),
ExpectOK: true, ExpectOK: true,
ExpectErr: false, ExpectErr: false,
}, },
"multi-level, expired": { "multi-level, expired": {
Opts: multilevelOpts, Opts: multilevelOpts,
Certs: getCertsFromFile(t, "client-expired", "intermediate"), Certs: getCertsFromFile(t, "client-expired", "intermediate"),
ExpectOK: false, ExpectOK: false,
ExpectErr: true, ExpectErr: true,
}, },
} }
for k, testCase := range testCases { for k, testCase := range testCases {
req, _ := http.NewRequest("GET", "/", nil) req, _ := http.NewRequest("GET", "/", nil)
if !testCase.Insecure { if !testCase.Insecure {
req.TLS = &tls.ConnectionState{PeerCertificates: testCase.Certs} req.TLS = &tls.ConnectionState{PeerCertificates: testCase.Certs}
} }
authCall := false authCall := false
auth := authenticator.RequestFunc(func(req *http.Request) (user.Info, bool, error) { auth := authenticator.RequestFunc(func(req *http.Request) (user.Info, bool, error) {
authCall = true authCall = true
return &user.DefaultInfo{Name: "innerauth"}, true, nil return &user.DefaultInfo{Name: "innerauth"}, true, nil
}) })
a := NewVerifier(testCase.Opts, auth, testCase.AllowedCNs) a := NewVerifier(testCase.Opts, auth, testCase.AllowedCNs)
user, ok, err := a.AuthenticateRequest(req) user, ok, err := a.AuthenticateRequest(req)
if testCase.ExpectErr && err == nil { if testCase.ExpectErr && err == nil {
t.Errorf("%s: Expected error, got none", k) t.Errorf("%s: Expected error, got none", k)
continue continue
} }
if !testCase.ExpectErr && err != nil { if !testCase.ExpectErr && err != nil {
t.Errorf("%s: Got unexpected error: %v", k, err) t.Errorf("%s: Got unexpected error: %v", k, err)
continue continue
} }
if testCase.ExpectOK != ok { if testCase.ExpectOK != ok {
t.Errorf("%s: Expected ok=%v, got %v", k, testCase.ExpectOK, ok) t.Errorf("%s: Expected ok=%v, got %v", k, testCase.ExpectOK, ok)
continue continue
} }
if testCase.ExpectOK { if testCase.ExpectOK {
if !authCall { if !authCall {
t.Errorf("%s: Expected inner auth called, wasn't", k) t.Errorf("%s: Expected inner auth called, wasn't", k)
continue continue
} }
if "innerauth" != user.GetName() { if "innerauth" != user.GetName() {
t.Errorf("%s: Expected user.name=%v, got %v", k, "innerauth", user.GetName()) t.Errorf("%s: Expected user.name=%v, got %v", k, "innerauth", user.GetName())
continue continue
} }
} else { } else {
if authCall { if authCall {
t.Errorf("%s: Expected inner auth not to be called, was", k) t.Errorf("%s: Expected inner auth not to be called, was", k)
continue continue
} }
} }
} }
} }
func getDefaultVerifyOptions(t *testing.T) x509.VerifyOptions { func getDefaultVerifyOptions(t *testing.T) x509.VerifyOptions {
options := DefaultVerifyOptions() options := DefaultVerifyOptions()
options.Roots = getRootCertPool(t) options.Roots = getRootCertPool(t)
return options return options
} }
func getRootCertPool(t *testing.T) *x509.CertPool { func getRootCertPool(t *testing.T) *x509.CertPool {
return getRootCertPoolFor(t, rootCACert) return getRootCertPoolFor(t, rootCACert)
} }
func getRootCertPoolFor(t *testing.T, certs ...string) *x509.CertPool { func getRootCertPoolFor(t *testing.T, certs ...string) *x509.CertPool {
pool := x509.NewCertPool() pool := x509.NewCertPool()
for _, cert := range certs { for _, cert := range certs {
pool.AddCert(getCert(t, cert)) pool.AddCert(getCert(t, cert))
} }
return pool return pool
} }
func getCertsFromFile(t *testing.T, names ...string) []*x509.Certificate { func getCertsFromFile(t *testing.T, names ...string) []*x509.Certificate {
certs := []*x509.Certificate{} certs := []*x509.Certificate{}
for _, name := range names { for _, name := range names {
filename := "testdata/" + name + ".pem" filename := "testdata/" + name + ".pem"
data, err := ioutil.ReadFile(filename) data, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
t.Fatalf("error reading %s: %v", filename, err) t.Fatalf("error reading %s: %v", filename, err)
} }
certs = append(certs, getCert(t, string(data))) certs = append(certs, getCert(t, string(data)))
} }
return certs return certs
} }
func getCert(t *testing.T, pemData string) *x509.Certificate { func getCert(t *testing.T, pemData string) *x509.Certificate {
pemBlock, _ := pem.Decode([]byte(pemData)) pemBlock, _ := pem.Decode([]byte(pemData))
cert, err := x509.ParseCertificate(pemBlock.Bytes) cert, err := x509.ParseCertificate(pemBlock.Bytes)
if err != nil { if err != nil {
t.Fatalf("Error parsing cert: %v", err) t.Fatalf("Error parsing cert: %v", err)
return nil return nil
} }
return cert return cert
} }
func getCerts(t *testing.T, pemData ...string) []*x509.Certificate { func getCerts(t *testing.T, pemData ...string) []*x509.Certificate {
certs := []*x509.Certificate{} certs := []*x509.Certificate{}
for _, pemData := range pemData { for _, pemData := range pemData {
certs = append(certs, getCert(t, pemData)) certs = append(certs, getCert(t, pemData))
} }
return certs return certs
} }

View File

@ -54,9 +54,9 @@ import (
"k8s.io/apiserver/pkg/apis/example" "k8s.io/apiserver/pkg/apis/example"
examplefuzzer "k8s.io/apiserver/pkg/apis/example/fuzzer" examplefuzzer "k8s.io/apiserver/pkg/apis/example/fuzzer"
examplev1 "k8s.io/apiserver/pkg/apis/example/v1" examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
"k8s.io/apiserver/pkg/endpoints/request"
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters" genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
genericapitesting "k8s.io/apiserver/pkg/endpoints/testing" genericapitesting "k8s.io/apiserver/pkg/endpoints/testing"
"k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/registry/rest"
"k8s.io/kubernetes/plugin/pkg/admission/admit" "k8s.io/kubernetes/plugin/pkg/admission/admit"

View File

@ -27,8 +27,8 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
"k8s.io/apiserver/pkg/endpoints/handlers" "k8s.io/apiserver/pkg/endpoints/handlers"
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
) )

View File

@ -30,9 +30,9 @@ import (
"github.com/pborman/uuid" "github.com/pborman/uuid"
utilnet "k8s.io/apimachinery/pkg/util/net" utilnet "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
authenticationapi "k8s.io/client-go/pkg/apis/authentication" authenticationapi "k8s.io/client-go/pkg/apis/authentication"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
) )
var _ http.ResponseWriter = &auditResponseWriter{} var _ http.ResponseWriter = &auditResponseWriter{}

View File

@ -23,8 +23,8 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
) )
// WithAuthorizationCheck passes all authorized requests on to handler, and returns a forbidden error otherwise. // WithAuthorizationCheck passes all authorized requests on to handler, and returns a forbidden error otherwise.

View File

@ -24,9 +24,9 @@ import (
"testing" "testing"
"k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
) )
func TestGetAuthorizerAttributes(t *testing.T) { func TestGetAuthorizerAttributes(t *testing.T) {

View File

@ -27,11 +27,11 @@ import (
"k8s.io/apiserver/pkg/authentication/serviceaccount" "k8s.io/apiserver/pkg/authentication/serviceaccount"
"k8s.io/apiserver/pkg/authentication/user" "k8s.io/apiserver/pkg/authentication/user"
"k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/authorization/authorizer"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/server/httplog" "k8s.io/apiserver/pkg/server/httplog"
"k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/api"
authenticationapi "k8s.io/client-go/pkg/apis/authentication" authenticationapi "k8s.io/client-go/pkg/apis/authentication"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
) )
// WithImpersonation is a filter that will inspect and check requests that attempt to change the user.Info for their requests // WithImpersonation is a filter that will inspect and check requests that attempt to change the user.Info for their requests

View File

@ -21,8 +21,8 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
) )
// WithRequestInfo attaches a RequestInfo to the context. // WithRequestInfo attaches a RequestInfo to the context.

View File

@ -30,8 +30,8 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
utilerrors "k8s.io/apimachinery/pkg/util/errors" utilerrors "k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/endpoints/handlers" "k8s.io/apiserver/pkg/endpoints/handlers"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/registry/rest"
) )

View File

@ -32,12 +32,12 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/httpstream"
"k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/metrics" "k8s.io/apiserver/pkg/endpoints/metrics"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest"
"k8s.io/apiserver/pkg/server/httplog" "k8s.io/apiserver/pkg/server/httplog"
proxyutil "k8s.io/apiserver/pkg/util/proxy" proxyutil "k8s.io/apiserver/pkg/util/proxy"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/registry/rest"
"github.com/golang/glog" "github.com/golang/glog"
) )

View File

@ -27,9 +27,9 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
"k8s.io/apiserver/pkg/registry/rest"
"k8s.io/apiserver/pkg/util/flushwriter" "k8s.io/apiserver/pkg/util/flushwriter"
"k8s.io/apiserver/pkg/util/wsstream" "k8s.io/apiserver/pkg/util/wsstream"
"k8s.io/apiserver/pkg/registry/rest"
) )
// WriteObject renders a returned runtime.Object to the response as a stream or an encoded object. If the object // WriteObject renders a returned runtime.Object to the response as a stream or an encoded object. If the object

View File

@ -38,15 +38,15 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/mergepatch" "k8s.io/apimachinery/pkg/util/mergepatch"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation" "k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
"k8s.io/apiserver/pkg/endpoints/request"
utiltrace "k8s.io/apiserver/pkg/util/trace"
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/registry/rest"
utiltrace "k8s.io/apiserver/pkg/util/trace"
) )
// ContextFunc returns a Context given a request - a context must be returned // ContextFunc returns a Context given a request - a context must be returned

View File

@ -35,10 +35,10 @@ import (
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/apiserver/pkg/registry/rest"
) )
type testPatchType struct { type testPatchType struct {

View File

@ -43,5 +43,5 @@ func init() {
// To add a new feature, define a key for it above and add it here. The features will be // To add a new feature, define a key for it above and add it here. The features will be
// available throughout Kubernetes binaries. // available throughout Kubernetes binaries.
var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{
StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta}, StreamingProxyRedirects: {Default: true, PreRelease: utilfeature.Beta},
} }

View File

@ -18,11 +18,11 @@ package registry
import ( import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage"
etcdstorage "k8s.io/apiserver/pkg/storage/etcd" etcdstorage "k8s.io/apiserver/pkg/storage/etcd"
"k8s.io/apiserver/pkg/storage/storagebackend" "k8s.io/apiserver/pkg/storage/storagebackend"
"k8s.io/apiserver/pkg/storage/storagebackend/factory" "k8s.io/apiserver/pkg/storage/storagebackend/factory"
"k8s.io/apiserver/pkg/registry/generic"
) )
var _ generic.StorageDecorator = StorageWithCacher var _ generic.StorageDecorator = StorageWithCacher

View File

@ -36,10 +36,10 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
genericapirequest "k8s.io/apiserver/pkg/endpoints/request" genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/storage"
storeerr "k8s.io/apiserver/pkg/storage/errors"
"k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/registry/rest"
"k8s.io/apiserver/pkg/storage"
storeerr "k8s.io/apiserver/pkg/storage/errors"
"github.com/golang/glog" "github.com/golang/glog"
) )

View File

@ -42,14 +42,14 @@ import (
"k8s.io/apiserver/pkg/apis/example" "k8s.io/apiserver/pkg/apis/example"
examplev1 "k8s.io/apiserver/pkg/apis/example/v1" examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
genericapirequest "k8s.io/apiserver/pkg/endpoints/request" genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/registry/rest"
"k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage"
etcdstorage "k8s.io/apiserver/pkg/storage/etcd" etcdstorage "k8s.io/apiserver/pkg/storage/etcd"
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing" etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
"k8s.io/apiserver/pkg/storage/names" "k8s.io/apiserver/pkg/storage/names"
"k8s.io/apiserver/pkg/storage/storagebackend/factory" "k8s.io/apiserver/pkg/storage/storagebackend/factory"
storagetesting "k8s.io/apiserver/pkg/storage/testing" storagetesting "k8s.io/apiserver/pkg/storage/testing"
"k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/registry/rest"
) )
var scheme = runtime.NewScheme() var scheme = runtime.NewScheme()

View File

@ -26,8 +26,8 @@ import (
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
apirequest "k8s.io/apiserver/pkg/endpoints/request"
apifilters "k8s.io/apiserver/pkg/endpoints/filters" apifilters "k8s.io/apiserver/pkg/endpoints/filters"
apirequest "k8s.io/apiserver/pkg/endpoints/request"
) )
func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *bool, disableCallsWgMutex *sync.Mutex, nonMutating, mutating int) *httptest.Server { func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *bool, disableCallsWgMutex *sync.Mutex, nonMutating, mutating int) *httptest.Server {

View File

@ -27,8 +27,8 @@ import (
"k8s.io/apimachinery/pkg/openapi" "k8s.io/apimachinery/pkg/openapi"
"k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/json"
"k8s.io/apiserver/pkg/util/trie"
genericmux "k8s.io/apiserver/pkg/server/mux" genericmux "k8s.io/apiserver/pkg/server/mux"
"k8s.io/apiserver/pkg/util/trie"
) )
const ( const (

View File

@ -44,7 +44,7 @@ type EtcdOptions struct {
func NewEtcdOptions(backendConfig *storagebackend.Config) *EtcdOptions { func NewEtcdOptions(backendConfig *storagebackend.Config) *EtcdOptions {
return &EtcdOptions{ return &EtcdOptions{
StorageConfig: *backendConfig, StorageConfig: *backendConfig,
DefaultStorageMediaType: "application/json", DefaultStorageMediaType: "application/json",
DeleteCollectionWorkers: 1, DeleteCollectionWorkers: 1,
EnableGarbageCollection: true, EnableGarbageCollection: true,
@ -135,7 +135,7 @@ func (f *simpleRestOptionsFactory) GetRESTOptions(resource schema.GroupResource)
} }
type storageFactoryRestOptionsFactory struct { type storageFactoryRestOptionsFactory struct {
Options EtcdOptions Options EtcdOptions
StorageFactory serverstorage.StorageFactory StorageFactory serverstorage.StorageFactory
} }

View File

@ -21,8 +21,8 @@ import (
"net/http" "net/http"
apimetrics "k8s.io/apiserver/pkg/endpoints/metrics" apimetrics "k8s.io/apiserver/pkg/endpoints/metrics"
etcdmetrics "k8s.io/apiserver/pkg/storage/etcd/metrics"
"k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/mux"
etcdmetrics "k8s.io/apiserver/pkg/storage/etcd/metrics"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
) )

View File

@ -21,8 +21,8 @@ import (
assetfs "github.com/elazarl/go-bindata-assetfs" assetfs "github.com/elazarl/go-bindata-assetfs"
"k8s.io/apiserver/pkg/server/routes/data/swagger"
"k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/mux"
"k8s.io/apiserver/pkg/server/routes/data/swagger"
) )
// SwaggerUI exposes files in third_party/swagger-ui/ under /swagger-ui. // SwaggerUI exposes files in third_party/swagger-ui/ under /swagger-ui.

View File

@ -23,21 +23,21 @@ import (
"k8s.io/apimachinery/pkg/apimachinery/announced" "k8s.io/apimachinery/pkg/apimachinery/announced"
"k8s.io/apimachinery/pkg/apimachinery/registered" "k8s.io/apimachinery/pkg/apimachinery/registered"
exampleinstall "k8s.io/apiserver/pkg/apis/example/install"
"k8s.io/apiserver/pkg/storage/storagebackend"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apiserver/pkg/apis/example" "k8s.io/apiserver/pkg/apis/example"
exampleinstall "k8s.io/apiserver/pkg/apis/example/install"
examplev1 "k8s.io/apiserver/pkg/apis/example/v1" examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/storage/storagebackend"
"k8s.io/apimachinery/pkg/runtime"
) )
var ( var (
v1GroupVersion = schema.GroupVersion{Group: "", Version: "v1"} v1GroupVersion = schema.GroupVersion{Group: "", Version: "v1"}
registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS")) registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS"))
announce = make(announced.APIGroupFactoryRegistry) announce = make(announced.APIGroupFactoryRegistry)
scheme = runtime.NewScheme() scheme = runtime.NewScheme()
codecs = serializer.NewCodecFactory(scheme) codecs = serializer.NewCodecFactory(scheme)
parameterCodec = runtime.NewParameterCodec(scheme) parameterCodec = runtime.NewParameterCodec(scheme)

View File

@ -29,9 +29,9 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/storage/storagebackend"
"k8s.io/apiserver/pkg/storage/etcd/etcdtest" "k8s.io/apiserver/pkg/storage/etcd/etcdtest"
"k8s.io/apiserver/pkg/storage/etcd/testing/testingcert" "k8s.io/apiserver/pkg/storage/etcd/testing/testingcert"
"k8s.io/apiserver/pkg/storage/storagebackend"
etcd "github.com/coreos/etcd/client" etcd "github.com/coreos/etcd/client"
"github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3"

View File

@ -26,8 +26,8 @@ import (
utilnet "k8s.io/apimachinery/pkg/util/net" utilnet "k8s.io/apimachinery/pkg/util/net"
"k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage"
"k8s.io/apiserver/pkg/storage/storagebackend"
"k8s.io/apiserver/pkg/storage/etcd" "k8s.io/apiserver/pkg/storage/etcd"
"k8s.io/apiserver/pkg/storage/storagebackend"
) )
func newETCD2Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { func newETCD2Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) {

View File

@ -18,8 +18,8 @@ package factory
import ( import (
"k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage"
"k8s.io/apiserver/pkg/storage/storagebackend"
"k8s.io/apiserver/pkg/storage/etcd3" "k8s.io/apiserver/pkg/storage/etcd3"
"k8s.io/apiserver/pkg/storage/storagebackend"
"github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3"
"github.com/coreos/etcd/pkg/transport" "github.com/coreos/etcd/pkg/transport"

View File

@ -33,8 +33,8 @@ import (
"k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apiserver/pkg/apis/example" "k8s.io/apiserver/pkg/apis/example"
examplev1 "k8s.io/apiserver/pkg/apis/example/v1" examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
"k8s.io/apiserver/pkg/storage/storagebackend"
"k8s.io/apiserver/pkg/storage/etcd/testing/testingcert" "k8s.io/apiserver/pkg/storage/etcd/testing/testingcert"
"k8s.io/apiserver/pkg/storage/storagebackend"
) )
var scheme = runtime.NewScheme() var scheme = runtime.NewScheme()

View File

@ -67,7 +67,7 @@ const (
// Values for PreRelease. // Values for PreRelease.
Alpha = prerelease("ALPHA") Alpha = prerelease("ALPHA")
Beta = prerelease("BETA") Beta = prerelease("BETA")
GA = prerelease("") GA = prerelease("")
) )
// FeatureGate parses and stores flag gates for known features from // FeatureGate parses and stores flag gates for known features from