mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Adding support for deployments to unversioned client
This commit is contained in:
		
							
								
								
									
										106
									
								
								pkg/client/unversioned/deployment.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								pkg/client/unversioned/deployment.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2015 The Kubernetes Authors 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 unversioned
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/expapi"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/fields"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/labels"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/watch"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeploymentsNamespacer has methods to work with Deployment resources in a namespace
 | 
				
			||||||
 | 
					type DeploymentsNamespacer interface {
 | 
				
			||||||
 | 
						Deployments(namespace string) DeploymentInterface
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeploymentInterface has methods to work with Deployment resources.
 | 
				
			||||||
 | 
					type DeploymentInterface interface {
 | 
				
			||||||
 | 
						List(label labels.Selector, field fields.Selector) (*expapi.DeploymentList, error)
 | 
				
			||||||
 | 
						Get(name string) (*expapi.Deployment, error)
 | 
				
			||||||
 | 
						Delete(name string, options *api.DeleteOptions) error
 | 
				
			||||||
 | 
						Create(Deployment *expapi.Deployment) (*expapi.Deployment, error)
 | 
				
			||||||
 | 
						Update(Deployment *expapi.Deployment) (*expapi.Deployment, error)
 | 
				
			||||||
 | 
						Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// deployments implements DeploymentInterface
 | 
				
			||||||
 | 
					type deployments struct {
 | 
				
			||||||
 | 
						client *ExperimentalClient
 | 
				
			||||||
 | 
						ns     string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// newDeployments returns a Deployments
 | 
				
			||||||
 | 
					func newDeployments(c *ExperimentalClient, namespace string) *deployments {
 | 
				
			||||||
 | 
						return &deployments{
 | 
				
			||||||
 | 
							client: c,
 | 
				
			||||||
 | 
							ns:     namespace,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// List takes label and field selectors, and returns the list of Deployments that match those selectors.
 | 
				
			||||||
 | 
					func (c *deployments) List(label labels.Selector, field fields.Selector) (result *expapi.DeploymentList, err error) {
 | 
				
			||||||
 | 
						result = &expapi.DeploymentList{}
 | 
				
			||||||
 | 
						err = c.client.Get().Namespace(c.ns).Resource("deployments").LabelsSelectorParam(label).FieldsSelectorParam(field).Do().Into(result)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get takes name of the deployment, and returns the corresponding deployment object, and an error if there is any.
 | 
				
			||||||
 | 
					func (c *deployments) Get(name string) (result *expapi.Deployment, err error) {
 | 
				
			||||||
 | 
						result = &expapi.Deployment{}
 | 
				
			||||||
 | 
						err = c.client.Get().Namespace(c.ns).Resource("deployments").Name(name).Do().Into(result)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Delete takes name of the deployment and deletes it. Returns an error if one occurs.
 | 
				
			||||||
 | 
					func (c *deployments) Delete(name string, options *api.DeleteOptions) error {
 | 
				
			||||||
 | 
						if options == nil {
 | 
				
			||||||
 | 
							return c.client.Delete().Namespace(c.ns).Resource("deployments").Name(name).Do().Error()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						body, err := api.Scheme.EncodeToVersion(options, c.client.APIVersion())
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return c.client.Delete().Namespace(c.ns).Resource("deployments").Name(name).Body(body).Do().Error()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Create takes the representation of a deployment and creates it.  Returns the server's representation of the deployment, and an error, if there is any.
 | 
				
			||||||
 | 
					func (c *deployments) Create(deployment *expapi.Deployment) (result *expapi.Deployment, err error) {
 | 
				
			||||||
 | 
						result = &expapi.Deployment{}
 | 
				
			||||||
 | 
						err = c.client.Post().Namespace(c.ns).Resource("deployments").Body(deployment).Do().Into(result)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Update takes the representation of a deployment and updates it. Returns the server's representation of the deployment, and an error, if there is any.
 | 
				
			||||||
 | 
					func (c *deployments) Update(deployment *expapi.Deployment) (result *expapi.Deployment, err error) {
 | 
				
			||||||
 | 
						result = &expapi.Deployment{}
 | 
				
			||||||
 | 
						err = c.client.Put().Namespace(c.ns).Resource("deployments").Name(deployment.Name).Body(deployment).Do().Into(result)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Watch returns a watch.Interface that watches the requested deployments.
 | 
				
			||||||
 | 
					func (c *deployments) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
 | 
				
			||||||
 | 
						return c.client.Get().
 | 
				
			||||||
 | 
							Prefix("watch").
 | 
				
			||||||
 | 
							Namespace(c.ns).
 | 
				
			||||||
 | 
							Resource("deployments").
 | 
				
			||||||
 | 
							Param("resourceVersion", resourceVersion).
 | 
				
			||||||
 | 
							LabelsSelectorParam(label).
 | 
				
			||||||
 | 
							FieldsSelectorParam(field).
 | 
				
			||||||
 | 
							Watch()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										152
									
								
								pkg/client/unversioned/deployment_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								pkg/client/unversioned/deployment_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2015 The Kubernetes Authors 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 unversioned
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/expapi"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/expapi/testapi"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/fields"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/labels"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getDeploymentsResoureName() string {
 | 
				
			||||||
 | 
						return "deployments"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDeploymentCreate(t *testing.T) {
 | 
				
			||||||
 | 
						ns := api.NamespaceDefault
 | 
				
			||||||
 | 
						deployment := expapi.Deployment{
 | 
				
			||||||
 | 
							ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
								Name:      "abc",
 | 
				
			||||||
 | 
								Namespace: ns,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c := &testClient{
 | 
				
			||||||
 | 
							Request: testRequest{
 | 
				
			||||||
 | 
								Method: "POST",
 | 
				
			||||||
 | 
								Path:   testapi.ResourcePath(getDeploymentsResoureName(), ns, ""),
 | 
				
			||||||
 | 
								Query:  buildQueryValues(nil),
 | 
				
			||||||
 | 
								Body:   &deployment,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: Response{StatusCode: 200, Body: &deployment},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := c.Setup().Deployments(ns).Create(&deployment)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c.Validate(t, response, err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDeploymentGet(t *testing.T) {
 | 
				
			||||||
 | 
						ns := api.NamespaceDefault
 | 
				
			||||||
 | 
						deployment := &expapi.Deployment{
 | 
				
			||||||
 | 
							ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
								Name:      "abc",
 | 
				
			||||||
 | 
								Namespace: ns,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c := &testClient{
 | 
				
			||||||
 | 
							Request: testRequest{
 | 
				
			||||||
 | 
								Method: "GET",
 | 
				
			||||||
 | 
								Path:   testapi.ResourcePath(getDeploymentsResoureName(), ns, "abc"),
 | 
				
			||||||
 | 
								Query:  buildQueryValues(nil),
 | 
				
			||||||
 | 
								Body:   nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: Response{StatusCode: 200, Body: deployment},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						response, err := c.Setup().Deployments(ns).Get("abc")
 | 
				
			||||||
 | 
						c.Validate(t, response, err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDeploymentList(t *testing.T) {
 | 
				
			||||||
 | 
						ns := api.NamespaceDefault
 | 
				
			||||||
 | 
						deploymentList := &expapi.DeploymentList{
 | 
				
			||||||
 | 
							Items: []expapi.Deployment{
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
										Name:      "foo",
 | 
				
			||||||
 | 
										Namespace: ns,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c := &testClient{
 | 
				
			||||||
 | 
							Request: testRequest{
 | 
				
			||||||
 | 
								Method: "GET",
 | 
				
			||||||
 | 
								Path:   testapi.ResourcePath(getDeploymentsResoureName(), ns, ""),
 | 
				
			||||||
 | 
								Query:  buildQueryValues(nil),
 | 
				
			||||||
 | 
								Body:   nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: Response{StatusCode: 200, Body: deploymentList},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						response, err := c.Setup().Deployments(ns).List(labels.Everything(), fields.Everything())
 | 
				
			||||||
 | 
						c.Validate(t, response, err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDeploymentUpdate(t *testing.T) {
 | 
				
			||||||
 | 
						ns := api.NamespaceDefault
 | 
				
			||||||
 | 
						deployment := &expapi.Deployment{
 | 
				
			||||||
 | 
							ObjectMeta: api.ObjectMeta{
 | 
				
			||||||
 | 
								Name:            "abc",
 | 
				
			||||||
 | 
								Namespace:       ns,
 | 
				
			||||||
 | 
								ResourceVersion: "1",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c := &testClient{
 | 
				
			||||||
 | 
							Request: testRequest{
 | 
				
			||||||
 | 
								Method: "PUT",
 | 
				
			||||||
 | 
								Path:   testapi.ResourcePath(getDeploymentsResoureName(), ns, "abc"),
 | 
				
			||||||
 | 
								Query:  buildQueryValues(nil),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: Response{StatusCode: 200, Body: deployment},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						response, err := c.Setup().Deployments(ns).Update(deployment)
 | 
				
			||||||
 | 
						c.Validate(t, response, err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDeploymentDelete(t *testing.T) {
 | 
				
			||||||
 | 
						ns := api.NamespaceDefault
 | 
				
			||||||
 | 
						c := &testClient{
 | 
				
			||||||
 | 
							Request: testRequest{
 | 
				
			||||||
 | 
								Method: "DELETE",
 | 
				
			||||||
 | 
								Path:   testapi.ResourcePath(getDeploymentsResoureName(), ns, "foo"),
 | 
				
			||||||
 | 
								Query:  buildQueryValues(nil),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: Response{StatusCode: 200},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						err := c.Setup().Deployments(ns).Delete("foo", nil)
 | 
				
			||||||
 | 
						c.Validate(t, nil, err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDeploymentWatch(t *testing.T) {
 | 
				
			||||||
 | 
						c := &testClient{
 | 
				
			||||||
 | 
							Request: testRequest{
 | 
				
			||||||
 | 
								Method: "GET",
 | 
				
			||||||
 | 
								Path:   testapi.ResourcePathWithPrefix("watch", getDeploymentsResoureName(), "", ""),
 | 
				
			||||||
 | 
								Query:  url.Values{"resourceVersion": []string{}},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: Response{StatusCode: 200},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_, err := c.Setup().Deployments(api.NamespaceAll).Watch(labels.Everything(), fields.Everything(), "")
 | 
				
			||||||
 | 
						c.Validate(t, nil, err)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -35,6 +35,7 @@ type ExperimentalInterface interface {
 | 
				
			|||||||
	HorizontalPodAutoscalersNamespacer
 | 
						HorizontalPodAutoscalersNamespacer
 | 
				
			||||||
	ScaleNamespacer
 | 
						ScaleNamespacer
 | 
				
			||||||
	DaemonsNamespacer
 | 
						DaemonsNamespacer
 | 
				
			||||||
 | 
						DeploymentsNamespacer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ExperimentalClient is used to interact with experimental Kubernetes features.
 | 
					// ExperimentalClient is used to interact with experimental Kubernetes features.
 | 
				
			||||||
@@ -85,6 +86,10 @@ func (c *ExperimentalClient) Daemons(namespace string) DaemonInterface {
 | 
				
			|||||||
	return newDaemons(c, namespace)
 | 
						return newDaemons(c, namespace)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *ExperimentalClient) Deployments(namespace string) DeploymentInterface {
 | 
				
			||||||
 | 
						return newDeployments(c, namespace)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewExperimental creates a new ExperimentalClient for the given config. This client
 | 
					// NewExperimental creates a new ExperimentalClient for the given config. This client
 | 
				
			||||||
// provides access to experimental Kubernetes features.
 | 
					// provides access to experimental Kubernetes features.
 | 
				
			||||||
// Experimental features are not supported and may be changed or removed in
 | 
					// Experimental features are not supported and may be changed or removed in
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user