我试图解析一个 yaml 文件并只更新一个属性,问题是类型是RAW,当我更新一个字段时它会更新整个对象,
我想要的是仅更新 NatIPNamesfromtest1到test2,但不更改(10000)的值minPortsPerVM我该怎么做?
这是山药
apiVersion: core.gardener.cloud/v1beta1
kind: Shoot
metadata:
name: test
namespace: ns
spec:
provider:
type: aaa
infrastructureConfig:
apiVersion: gcp.provider.extensions.gardener.cloud/v1alpha1
kind: InfrastructureConfig
networks:
cloudNAT:
minPortsPerVM: 10000
natIPNames:
- name: test1
这是代码
package main
import (
"encoding/json"
"fmt"
gcpv1alpha1 "github.com/gardener/gardener-extension-provider-gcp/pkg/apis/gcp/v1alpha1"
"github.com/gardener/gardener/pkg/apis/core/v1beta1"
"io/ioutil"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/yaml"
)
func main() {
shoot, e := parseShoot("test.yaml")
if e != nil {
fmt.Println(e)
}
shoot.Spec.Provider.InfrastructureConfig.Raw = encode(&gcpv1alpha1.InfrastructureConfig{
Networks: gcpv1alpha1.NetworkConfig{
CloudNAT: &gcpv1alpha1.CloudNAT{
//MinPortsPerVM: ,
NatIPNames: []gcpv1alpha1.NatIPName{
{Name: "test2"},
},
},
},
})
fmt.Println(shoot.Spec.Provider.InfrastructureConfig)
}
func parseShoot(path string) (*v1beta1.Shoot, error) {
var shootSpec *v1beta1.Shoot
bytes, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(bytes, &shootSpec)
if err != nil {
return nil, err
}
return shootSpec, nil
}
func encode(obj runtime.Object) []byte {
data, _ := json.Marshal(obj)
return data
}
茅侃侃