Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4b68374

Browse files
author
Kris
committed
Make kubectl create use dynamic clients
1 parent 0fe1783 commit 4b68374

3 files changed

Lines changed: 42 additions & 13 deletions

File tree

pkg/kubectl/cmd/create.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"k8s.io/kubernetes/pkg/kubectl"
2828
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2929
"k8s.io/kubernetes/pkg/kubectl/resource"
30+
"k8s.io/kubernetes/pkg/runtime"
3031
)
3132

3233
// CreateOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of
@@ -107,8 +108,11 @@ func RunCreate(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *C
107108
return err
108109
}
109110

110-
mapper, typer := f.Object(cmdutil.GetIncludeThirdPartyAPIs(cmd))
111-
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), f.Decoder(true)).
111+
mapper, typer, err := f.UnstructuredObject()
112+
if err != nil {
113+
return err
114+
}
115+
r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.UnstructuredClientForMapping), runtime.UnstructuredJSONScheme).
112116
Schema(schema).
113117
ContinueOnError().
114118
NamespaceParam(cmdNamespace).DefaultNamespace().

pkg/kubectl/cmd/create_test.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"net/http"
2222
"testing"
2323

24+
"k8s.io/kubernetes/pkg/client/typed/dynamic"
2425
"k8s.io/kubernetes/pkg/client/unversioned/fake"
2526
)
2627

@@ -40,14 +41,15 @@ func TestCreateObject(t *testing.T) {
4041
_, _, rc := testData()
4142
rc.Items[0].Name = "redis-master-controller"
4243

43-
f, tf, codec, ns := NewAPIFactory()
44+
f, tf, codec, _ := NewAPIFactory()
45+
ns := dynamic.ContentConfig().NegotiatedSerializer
4446
tf.Printer = &testPrinter{}
4547
tf.Client = &fake.RESTClient{
4648
NegotiatedSerializer: ns,
4749
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
4850
switch p, m := req.URL.Path, req.Method; {
49-
case p == "/namespaces/test/replicationcontrollers" && m == "POST":
50-
return &http.Response{StatusCode: 201, Header: defaultHeader(), Body: objBody(codec, &rc.Items[0])}, nil
51+
case p == "/namespaces/test/replicationcontrollers" && m == http.MethodPost:
52+
return &http.Response{StatusCode: http.StatusCreated, Header: defaultHeader(), Body: objBody(codec, &rc.Items[0])}, nil
5153
default:
5254
t.Fatalf("unexpected request: %#v\n%#v", req.URL, req)
5355
return nil, nil
@@ -72,16 +74,17 @@ func TestCreateMultipleObject(t *testing.T) {
7274
initTestErrorHandler(t)
7375
_, svc, rc := testData()
7476

75-
f, tf, codec, ns := NewAPIFactory()
77+
f, tf, codec, _ := NewAPIFactory()
78+
ns := dynamic.ContentConfig().NegotiatedSerializer
7679
tf.Printer = &testPrinter{}
7780
tf.Client = &fake.RESTClient{
7881
NegotiatedSerializer: ns,
7982
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
8083
switch p, m := req.URL.Path, req.Method; {
81-
case p == "/namespaces/test/services" && m == "POST":
82-
return &http.Response{StatusCode: 201, Header: defaultHeader(), Body: objBody(codec, &svc.Items[0])}, nil
83-
case p == "/namespaces/test/replicationcontrollers" && m == "POST":
84-
return &http.Response{StatusCode: 201, Header: defaultHeader(), Body: objBody(codec, &rc.Items[0])}, nil
84+
case p == "/namespaces/test/services" && m == http.MethodPost:
85+
return &http.Response{StatusCode: http.StatusCreated, Header: defaultHeader(), Body: objBody(codec, &svc.Items[0])}, nil
86+
case p == "/namespaces/test/replicationcontrollers" && m == http.MethodPost:
87+
return &http.Response{StatusCode: http.StatusCreated, Header: defaultHeader(), Body: objBody(codec, &rc.Items[0])}, nil
8588
default:
8689
t.Fatalf("unexpected request: %#v\n%#v", req.URL, req)
8790
return nil, nil
@@ -108,14 +111,15 @@ func TestCreateDirectory(t *testing.T) {
108111
_, _, rc := testData()
109112
rc.Items[0].Name = "name"
110113

111-
f, tf, codec, ns := NewAPIFactory()
114+
f, tf, codec, _ := NewAPIFactory()
115+
ns := dynamic.ContentConfig().NegotiatedSerializer
112116
tf.Printer = &testPrinter{}
113117
tf.Client = &fake.RESTClient{
114118
NegotiatedSerializer: ns,
115119
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
116120
switch p, m := req.URL.Path, req.Method; {
117-
case p == "/namespaces/test/replicationcontrollers" && m == "POST":
118-
return &http.Response{StatusCode: 201, Header: defaultHeader(), Body: objBody(codec, &rc.Items[0])}, nil
121+
case p == "/namespaces/test/replicationcontrollers" && m == http.MethodPost:
122+
return &http.Response{StatusCode: http.StatusCreated, Header: defaultHeader(), Body: objBody(codec, &rc.Items[0])}, nil
119123
default:
120124
t.Fatalf("unexpected request: %#v\n%#v", req.URL, req)
121125
return nil, nil

pkg/kubectl/cmd/get_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
apitesting "k8s.io/kubernetes/pkg/api/testing"
3434
"k8s.io/kubernetes/pkg/api/unversioned"
3535
"k8s.io/kubernetes/pkg/client/restclient"
36+
"k8s.io/kubernetes/pkg/client/typed/discovery"
3637
"k8s.io/kubernetes/pkg/client/unversioned/fake"
3738
"k8s.io/kubernetes/pkg/runtime"
3839
"k8s.io/kubernetes/pkg/runtime/serializer"
@@ -89,6 +90,26 @@ func testData() (*api.PodList, *api.ServiceList, *api.ReplicationControllerList)
8990
return pods, svc, rc
9091
}
9192

93+
func testDynamicResources() []*discovery.APIGroupResources {
94+
return []*discovery.APIGroupResources{
95+
{
96+
Group: unversioned.APIGroup{
97+
Versions: []unversioned.GroupVersionForDiscovery{
98+
{Version: "v1"},
99+
},
100+
PreferredVersion: unversioned.GroupVersionForDiscovery{Version: "v1"},
101+
},
102+
VersionedResources: map[string][]unversioned.APIResource{
103+
"v1": {
104+
{Name: "pods", Namespaced: true, Kind: "Pod"},
105+
{Name: "services", Namespaced: true, Kind: "Service"},
106+
{Name: "replicationcontrollers", Namespaced: true, Kind: "ReplicationController"},
107+
},
108+
},
109+
},
110+
}
111+
}
112+
92113
func testComponentStatusData() *api.ComponentStatusList {
93114
good := api.ComponentStatus{
94115
Conditions: []api.ComponentCondition{

0 commit comments

Comments
 (0)