Merge pull request #10468 from caesarxuchao/add-cmd-replace
Add command "kubectl replace"
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user