Merge pull request #10468 from caesarxuchao/add-cmd-replace

Add command "kubectl replace"
This commit is contained in:
Alex Robinson
2015-06-29 16:06:33 -07:00
16 changed files with 101 additions and 189 deletions

View File

@@ -143,27 +143,27 @@ func (m *Helper) Patch(namespace, name string, pt api.PatchType, data []byte) (r
Get()
}
func (m *Helper) Update(namespace, name string, overwrite bool, data []byte) (runtime.Object, error) {
func (m *Helper) Replace(namespace, name string, overwrite bool, data []byte) (runtime.Object, error) {
c := m.RESTClient
obj, err := m.Codec.Decode(data)
if err != nil {
// We don't know how to handle this object, but update it anyway
return m.updateResource(c, m.Resource, namespace, name, data)
// We don't know how to handle this object, but replace it anyway
return m.replaceResource(c, m.Resource, namespace, name, data)
}
// Attempt to version the object based on client logic.
version, err := m.Versioner.ResourceVersion(obj)
if err != nil {
// We don't know how to version this object, so send it to the server as is
return m.updateResource(c, m.Resource, namespace, name, data)
return m.replaceResource(c, m.Resource, namespace, name, data)
}
if version == "" && overwrite {
// Retrieve the current version of the object to overwrite the server object
serverObj, err := c.Get().Namespace(namespace).Resource(m.Resource).Name(name).Do().Get()
if err != nil {
// The object does not exist, but we want it to be created
return m.updateResource(c, m.Resource, namespace, name, data)
return m.replaceResource(c, m.Resource, namespace, name, data)
}
serverVersion, err := m.Versioner.ResourceVersion(serverObj)
if err != nil {
@@ -179,9 +179,9 @@ func (m *Helper) Update(namespace, name string, overwrite bool, data []byte) (ru
data = newData
}
return m.updateResource(c, m.Resource, namespace, name, data)
return m.replaceResource(c, m.Resource, namespace, name, data)
}
func (m *Helper) updateResource(c RESTClient, resource, namespace, name string, data []byte) (runtime.Object, error) {
func (m *Helper) replaceResource(c RESTClient, resource, namespace, name string, data []byte) (runtime.Object, error) {
return c.Put().NamespaceIfScoped(namespace, m.NamespaceScoped).Resource(resource).Name(name).Body(data).Do().Get()
}

View File

@@ -363,7 +363,7 @@ func TestHelperList(t *testing.T) {
}
}
func TestHelperUpdate(t *testing.T) {
func TestHelperReplace(t *testing.T) {
expectPut := func(req *http.Request) bool {
if req.Method != "PUT" {
t.Errorf("unexpected method: %#v", req)
@@ -457,7 +457,7 @@ func TestHelperUpdate(t *testing.T) {
if test.Object != nil {
data = []byte(runtime.EncodeOrDie(testapi.Codec(), test.Object))
}
_, err := modifier.Update("bar", "foo", test.Overwrite, data)
_, err := modifier.Replace("bar", "foo", test.Overwrite, data)
if (err != nil) != test.Err {
t.Errorf("%d: unexpected error: %t %v", i, test.Err, err)
}