Thanks a ton for the explanation and for helping to fix the issue. I will 
keep the yaml library in mind.

On Monday, 11 April 2022 at 15:44:58 UTC+10 sam.a....@gmail.com wrote:

> I skipped over to that package, and the doc says it converts from yaml to 
> json, and the marshals/unmarshals. I tried changing your snippet to use 
> struct tags with the key name as "json" instead of "yaml", and it 
> immediately behaved as expected: https://goplay.tools/snippet/PSZtr1YErD8
>
> While you're fine to use it like you are, the package you're using is a 
> wrapper around another tool, pkg.go.dev/gopkg.in/yaml.v2, using that tool 
> to convert to/from json, and then using encode/json to marshal/unmarshal. 
> The benefit would be using common marshal/unmarshal handlers and one set of 
> struct tags. Meanwhile, you're not interacting with both yaml and json, so 
> I suggest actually changing the tool you're using to support yaml directly.
>
> 1. Simple fix: replace `yaml:"<fieldname>"` with `json:"<fieldname>"`
> 2. Better fix that might break some code: use gopkg.in/yaml.v2 instead of 
> github.com/ghodss/yaml, to avoid unexpected behavior, such as what you 
> observed.
>
> On Sunday, April 10, 2022 at 11:53:57 PM UTC-5 vika...@gmail.com wrote:
>
>> I am new to GoLang and looking to join two keys (rules) from two 
>> different Yamls.
>>
>> I have been able to join the keys but I found that Unmarshal changes the 
>> keys (example apiVersion to APIVersion, and kind to Kind).
>>
>> Overall, my goal is to have a valid Kubernetes YAML manifest. This is 
>> what I have attempted so far https://goplay.tools/snippet/zWYDjnTeA0Q 
>>
>> ## 
>> package main
>>
>> import (
>> "fmt"
>>
>> "github.com/InVisionApp/conjungo"
>> "github.com/ghodss/yaml"
>> )
>>
>> type ClusterRole struct {
>> APIVersion string `yaml:"apiVersion"`
>> Kind string `yaml:"kind"`
>> Metadata struct {
>> Name string `yaml:"name"`
>> } `yaml:"metadata"`
>> Rules []struct {
>> APIGroups []string `yaml:"apiGroups"`
>> Resources []string `yaml:"resources"`
>> Verbs []string `yaml:"verbs"`
>> } `yaml:"rules"`
>> }
>>
>> func main() {
>>
>> yaml1 := `
>> ---
>> apiVersion: rbac.authorization.k8s.io/v1
>> kind: ClusterRole
>> metadata:
>> name: role1
>> rules:
>> - apiGroups:
>> - ""
>> resources:
>> - services
>> verbs:
>> - create
>> - delete
>> - apiGroups:
>> - apiregistration.k8s.io
>> resources:
>> - apiservices
>> verbs:
>> - create
>> - delete
>> `
>>
>> yaml2 := `
>> ---
>> apiVersion: rbac.authorization.k8s.io/v1
>> kind: ClusterRole
>> metadata:
>> name: role2
>> rules:
>> - apiGroups:
>> - ""
>> resources:
>> - secrets
>> - events.k8s.io
>> verbs:
>> - list
>> - watch
>> - apiGroups:
>> - metrics.k8s.io
>> resources:
>> - nodes
>> - bindings
>> verbs:
>> - get
>> `
>>
>> var role1 ClusterRole
>> yaml.Unmarshal([]byte(yaml1), &role1)
>> fmt.Printf("\n## ROLE1\n %v", role1)
>>
>> var role2 ClusterRole
>> yaml.Unmarshal([]byte(yaml2), &role2)
>> fmt.Printf("\n\n## ROLE2\n %v", role2)
>>
>> conjungo.Merge(&role1, role2, nil)
>>
>> // Struct to Marshal
>> y, err := yaml.Marshal(role1)
>> if err != nil {
>> fmt.Printf("\nerr: %v\n", err)
>> return
>> }
>> fmt.Printf("\n\n## MERGED ROLE\n %v", string(y))
>> }
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/dc371393-dff6-491d-96f7-7ae943ce384an%40googlegroups.com.

Reply via email to