mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Pass runtime.Object to Helper.Create/Replace
This commit is contained in:
		@@ -140,12 +140,7 @@ func RunAutoscale(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Serialize the object with the annotation applied.
 | 
						object, err = resource.NewHelper(hpa.Client, hpa.Mapping).Create(namespace, false, object)
 | 
				
			||||||
	data, err := hpa.Mapping.Codec.Encode(object)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	object, err = resource.NewHelper(hpa.Client, hpa.Mapping).Create(namespace, false, data)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -112,13 +112,7 @@ func RunCreate(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *C
 | 
				
			|||||||
			return cmdutil.AddSourceToErr("creating", info.Source, err)
 | 
								return cmdutil.AddSourceToErr("creating", info.Source, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Serialize the object with the annotation applied.
 | 
							obj, err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, info.Object)
 | 
				
			||||||
		data, err := info.Mapping.Codec.Encode(info.Object)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return cmdutil.AddSourceToErr("creating", info.Source, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		obj, err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, data)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return cmdutil.AddSourceToErr("creating", info.Source, err)
 | 
								return cmdutil.AddSourceToErr("creating", info.Source, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,11 +207,7 @@ func RunExpose(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Serialize the object with the annotation applied.
 | 
						// Serialize the object with the annotation applied.
 | 
				
			||||||
	data, err := info.Mapping.Codec.Encode(object)
 | 
						object, err = resource.NewHelper(info.Client, info.Mapping).Create(namespace, false, object)
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	object, err = resource.NewHelper(info.Client, info.Mapping).Create(namespace, false, data)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,12 +134,7 @@ func RunReplace(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []st
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Serialize the object with the annotation applied.
 | 
							// Serialize the object with the annotation applied.
 | 
				
			||||||
		data, err := info.Mapping.Codec.Encode(info.Object)
 | 
							obj, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, true, info.Object)
 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return cmdutil.AddSourceToErr("replacing", info.Source, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		obj, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, true, data)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return cmdutil.AddSourceToErr("replacing", info.Source, err)
 | 
								return cmdutil.AddSourceToErr("replacing", info.Source, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -226,13 +221,7 @@ func forceReplace(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []
 | 
				
			|||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Serialize the object with the annotation applied.
 | 
							obj, err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, info.Object)
 | 
				
			||||||
		data, err := info.Mapping.Codec.Encode(info.Object)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		obj, err := resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, true, data)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -376,13 +376,7 @@ func createGeneratedObject(f *cmdutil.Factory, cmd *cobra.Command, generator kub
 | 
				
			|||||||
			return nil, "", nil, nil, err
 | 
								return nil, "", nil, nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Serialize the object with the annotation applied.
 | 
							obj, err = resource.NewHelper(client, mapping).Create(namespace, false, info.Object)
 | 
				
			||||||
		data, err := mapping.Codec.Encode(info.Object)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, "", nil, nil, err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		obj, err = resource.NewHelper(client, mapping).Create(namespace, false, data)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return nil, "", nil, nil, err
 | 
								return nil, "", nil, nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -414,12 +414,7 @@ func UpdateObject(info *resource.Info, updateFn func(runtime.Object) error) (run
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data, err := helper.Codec.Encode(info.Object)
 | 
						if _, err := helper.Replace(info.Namespace, info.Name, true, info.Object); err != nil {
 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if _, err := helper.Replace(info.Namespace, info.Name, true, data); err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,37 +99,26 @@ func (m *Helper) Delete(namespace, name string) error {
 | 
				
			|||||||
		Error()
 | 
							Error()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Helper) Create(namespace string, modify bool, data []byte) (runtime.Object, error) {
 | 
					func (m *Helper) Create(namespace string, modify bool, obj runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	if modify {
 | 
						if modify {
 | 
				
			||||||
		obj, err := m.Codec.Decode(data)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			// We don't know how to check a version on this object, but create it anyway
 | 
					 | 
				
			||||||
			return m.createResource(m.RESTClient, m.Resource, namespace, data)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Attempt to version the object based on client logic.
 | 
							// Attempt to version the object based on client logic.
 | 
				
			||||||
		version, err := m.Versioner.ResourceVersion(obj)
 | 
							version, err := m.Versioner.ResourceVersion(obj)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			// We don't know how to clear the version on this object, so send it to the server as is
 | 
								// We don't know how to clear the version on this object, so send it to the server as is
 | 
				
			||||||
			return m.createResource(m.RESTClient, m.Resource, namespace, data)
 | 
								return m.createResource(m.RESTClient, m.Resource, namespace, obj)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if version != "" {
 | 
							if version != "" {
 | 
				
			||||||
			if err := m.Versioner.SetResourceVersion(obj, ""); err != nil {
 | 
								if err := m.Versioner.SetResourceVersion(obj, ""); err != nil {
 | 
				
			||||||
				return nil, err
 | 
									return nil, err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			newData, err := m.Codec.Encode(obj)
 | 
					 | 
				
			||||||
			if err != nil {
 | 
					 | 
				
			||||||
				return nil, err
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			data = newData
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return m.createResource(m.RESTClient, m.Resource, namespace, data)
 | 
						return m.createResource(m.RESTClient, m.Resource, namespace, obj)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Helper) createResource(c RESTClient, resource, namespace string, data []byte) (runtime.Object, error) {
 | 
					func (m *Helper) createResource(c RESTClient, resource, namespace string, obj runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	return c.Post().NamespaceIfScoped(namespace, m.NamespaceScoped).Resource(resource).Body(data).Do().Get()
 | 
						return c.Post().NamespaceIfScoped(namespace, m.NamespaceScoped).Resource(resource).Body(obj).Do().Get()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (m *Helper) Patch(namespace, name string, pt api.PatchType, data []byte) (runtime.Object, error) {
 | 
					func (m *Helper) Patch(namespace, name string, pt api.PatchType, data []byte) (runtime.Object, error) {
 | 
				
			||||||
	return m.RESTClient.Patch(pt).
 | 
						return m.RESTClient.Patch(pt).
 | 
				
			||||||
@@ -141,27 +130,21 @@ func (m *Helper) Patch(namespace, name string, pt api.PatchType, data []byte) (r
 | 
				
			|||||||
		Get()
 | 
							Get()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Helper) Replace(namespace, name string, overwrite bool, data []byte) (runtime.Object, error) {
 | 
					func (m *Helper) Replace(namespace, name string, overwrite bool, obj runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	c := m.RESTClient
 | 
						c := m.RESTClient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	obj, err := m.Codec.Decode(data)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		// 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.
 | 
						// Attempt to version the object based on client logic.
 | 
				
			||||||
	version, err := m.Versioner.ResourceVersion(obj)
 | 
						version, err := m.Versioner.ResourceVersion(obj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// We don't know how to version this object, so send it to the server as is
 | 
							// We don't know how to version this object, so send it to the server as is
 | 
				
			||||||
		return m.replaceResource(c, m.Resource, namespace, name, data)
 | 
							return m.replaceResource(c, m.Resource, namespace, name, obj)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if version == "" && overwrite {
 | 
						if version == "" && overwrite {
 | 
				
			||||||
		// Retrieve the current version of the object to overwrite the server object
 | 
							// 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()
 | 
							serverObj, err := c.Get().Namespace(namespace).Resource(m.Resource).Name(name).Do().Get()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			// The object does not exist, but we want it to be created
 | 
								// The object does not exist, but we want it to be created
 | 
				
			||||||
			return m.replaceResource(c, m.Resource, namespace, name, data)
 | 
								return m.replaceResource(c, m.Resource, namespace, name, obj)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		serverVersion, err := m.Versioner.ResourceVersion(serverObj)
 | 
							serverVersion, err := m.Versioner.ResourceVersion(serverObj)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@@ -170,16 +153,11 @@ func (m *Helper) Replace(namespace, name string, overwrite bool, data []byte) (r
 | 
				
			|||||||
		if err := m.Versioner.SetResourceVersion(obj, serverVersion); err != nil {
 | 
							if err := m.Versioner.SetResourceVersion(obj, serverVersion); err != nil {
 | 
				
			||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		newData, err := m.Codec.Encode(obj)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		data = newData
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return m.replaceResource(c, m.Resource, namespace, name, data)
 | 
						return m.replaceResource(c, m.Resource, namespace, name, obj)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Helper) replaceResource(c RESTClient, resource, namespace, name string, data []byte) (runtime.Object, error) {
 | 
					func (m *Helper) replaceResource(c RESTClient, resource, namespace, name string, obj runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	return c.Put().NamespaceIfScoped(namespace, m.NamespaceScoped).Resource(resource).Name(name).Body(data).Do().Get()
 | 
						return c.Put().NamespaceIfScoped(namespace, m.NamespaceScoped).Resource(resource).Name(name).Body(obj).Do().Get()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -170,7 +170,10 @@ func TestHelperCreate(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Modify: true,
 | 
								Modify: true,
 | 
				
			||||||
			Object: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "10"}},
 | 
								Object: &api.Pod{
 | 
				
			||||||
 | 
									ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "10"},
 | 
				
			||||||
 | 
									Spec:       apitesting.DeepEqualSafePodSpec(),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
			ExpectObject: &api.Pod{
 | 
								ExpectObject: &api.Pod{
 | 
				
			||||||
				ObjectMeta: api.ObjectMeta{Name: "foo"},
 | 
									ObjectMeta: api.ObjectMeta{Name: "foo"},
 | 
				
			||||||
				Spec:       apitesting.DeepEqualSafePodSpec(),
 | 
									Spec:       apitesting.DeepEqualSafePodSpec(),
 | 
				
			||||||
@@ -194,11 +197,7 @@ func TestHelperCreate(t *testing.T) {
 | 
				
			|||||||
			Versioner:       testapi.Default.MetadataAccessor(),
 | 
								Versioner:       testapi.Default.MetadataAccessor(),
 | 
				
			||||||
			NamespaceScoped: true,
 | 
								NamespaceScoped: true,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		data := []byte{}
 | 
							_, err := modifier.Create("bar", test.Modify, test.Object)
 | 
				
			||||||
		if test.Object != nil {
 | 
					 | 
				
			||||||
			data = []byte(runtime.EncodeOrDie(testapi.Default.Codec(), test.Object))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		_, err := modifier.Create("bar", test.Modify, data)
 | 
					 | 
				
			||||||
		if (err != nil) != test.Err {
 | 
							if (err != nil) != test.Err {
 | 
				
			||||||
			t.Errorf("%d: unexpected error: %t %v", i, test.Err, err)
 | 
								t.Errorf("%d: unexpected error: %t %v", i, test.Err, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -218,7 +217,7 @@ func TestHelperCreate(t *testing.T) {
 | 
				
			|||||||
			expect = []byte(runtime.EncodeOrDie(testapi.Default.Codec(), test.ExpectObject))
 | 
								expect = []byte(runtime.EncodeOrDie(testapi.Default.Codec(), test.ExpectObject))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if !reflect.DeepEqual(expect, body) {
 | 
							if !reflect.DeepEqual(expect, body) {
 | 
				
			||||||
			t.Errorf("%d: unexpected body: %s", i, string(body))
 | 
								t.Errorf("%d: unexpected body: %s (expected %s)", i, string(body), string(expect))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -413,7 +412,10 @@ func TestHelperReplace(t *testing.T) {
 | 
				
			|||||||
			Req: expectPut,
 | 
								Req: expectPut,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Object: &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}},
 | 
								Object: &api.Pod{
 | 
				
			||||||
 | 
									ObjectMeta: api.ObjectMeta{Name: "foo"},
 | 
				
			||||||
 | 
									Spec:       apitesting.DeepEqualSafePodSpec(),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
			ExpectObject: &api.Pod{
 | 
								ExpectObject: &api.Pod{
 | 
				
			||||||
				ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "10"},
 | 
									ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "10"},
 | 
				
			||||||
				Spec:       apitesting.DeepEqualSafePodSpec(),
 | 
									Spec:       apitesting.DeepEqualSafePodSpec(),
 | 
				
			||||||
@@ -449,11 +451,7 @@ func TestHelperReplace(t *testing.T) {
 | 
				
			|||||||
			Versioner:       testapi.Default.MetadataAccessor(),
 | 
								Versioner:       testapi.Default.MetadataAccessor(),
 | 
				
			||||||
			NamespaceScoped: true,
 | 
								NamespaceScoped: true,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		data := []byte{}
 | 
							_, err := modifier.Replace("bar", "foo", test.Overwrite, test.Object)
 | 
				
			||||||
		if test.Object != nil {
 | 
					 | 
				
			||||||
			data = []byte(runtime.EncodeOrDie(testapi.Default.Codec(), test.Object))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		_, err := modifier.Replace("bar", "foo", test.Overwrite, data)
 | 
					 | 
				
			||||||
		if (err != nil) != test.Err {
 | 
							if (err != nil) != test.Err {
 | 
				
			||||||
			t.Errorf("%d: unexpected error: %t %v", i, test.Err, err)
 | 
								t.Errorf("%d: unexpected error: %t %v", i, test.Err, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user