Yaml: рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рджрд┐рд╕ре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: go-yaml/yaml

рдбреЗрдЯрд╛ рд╣реИ

-
  ip: 192.168.1.1
  role: master
-
  ip: 192.168.1.2
  role: node
-
  ip: 192.168.1.3
  role: node

рд╕рдВрд░рдЪрдирд╛ рд╣реИ

type NODE struct {
    node []struct {
        ipaddr string
        role   string
    } `yaml:",flow"`
}

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛрдб рд╣реИ

    n := NODE{}

    err := yaml.Unmarshal([]byte(data), &n)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t:\n%v\n\n", n)

рддреЛ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд infos рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рд╛:

2016/12/14 17:13:39 error: yaml: unmarshal errors:
  line 2: cannot unmarshal !!seq into main.NODE

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреБрдЫ рдШрдВрдЯреЛрдВ рддрдХ рдЗрд╕рд╕реЗ рдЬреВрдЭрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ 5 рдорд┐рдирдЯ рдмрд╛рдж рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ!) https://github.com/go-yaml/yaml/issues/101#issuecomment -178792007 рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдереА рдПрдХ рдмрдбрд╝реА рдорджрджред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ Ansible рдХреА requirements.yaml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

---
- src: franklinkim.php5-newrelic
- src: geerlingguy.composer
- src: geerlingguy.java
- src: geerlingguy.nginx
- src: geerlingguy.nodejs
- src: geerlingguy.php
- src: geerlingguy.php-versions
- src: geerlingguy.rabbitmq
- src: geerlingguy.solr
- src: newrelic.newrelic-infra

- name: mycustomrole
  src: [email protected]:foo/bar.git
  scm: git
  version: master

- src: https://github.com/nickhammond/ansible-logrotate
  name: nickhammond.logrotate

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдереА, рдЬреЛ рд╕рд╣реА рдереА:

type AnsibleSource struct {
    Source  string  `yaml:"src"`
    Name    *string `yaml:"name,omitempty"`
    Type    *string `yaml:"scm,omitempty"`
    Version *string `yaml:"version,omitempty"`
}

рд▓реЗрдХрд┐рди рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЕрдиреБрдХреНрд░рдо рдХреЛ рдареАрдХ рд╕реЗ рдЕрдирдорд░реНрд╢рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ cannot unmarshal !!seq рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ) рдореБрдЭреЗ рдЗрд╕реЗ var out []AnsibleSource рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирдорд░реНрд╢рд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ :

    source, err := ioutil.ReadFile(ansibleRequirements.Path)
    if err != nil {
        return
    }

    var out []AnsibleSource

    err = yaml.Unmarshal(source, &out)
    if err != nil {
        return
    }

    fmt.Println(requirements)

рдордирд╛рдЗрдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛ!

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@vanloswang рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛?

@ alexforever86 рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдХреБрдЫ рдШрдВрдЯреЛрдВ рддрдХ рдЗрд╕рд╕реЗ рдЬреВрдЭрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ 5 рдорд┐рдирдЯ рдмрд╛рдж рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ!) https://github.com/go-yaml/yaml/issues/101#issuecomment -178792007 рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдереА рдПрдХ рдмрдбрд╝реА рдорджрджред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ Ansible рдХреА requirements.yaml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

---
- src: franklinkim.php5-newrelic
- src: geerlingguy.composer
- src: geerlingguy.java
- src: geerlingguy.nginx
- src: geerlingguy.nodejs
- src: geerlingguy.php
- src: geerlingguy.php-versions
- src: geerlingguy.rabbitmq
- src: geerlingguy.solr
- src: newrelic.newrelic-infra

- name: mycustomrole
  src: [email protected]:foo/bar.git
  scm: git
  version: master

- src: https://github.com/nickhammond/ansible-logrotate
  name: nickhammond.logrotate

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдереА, рдЬреЛ рд╕рд╣реА рдереА:

type AnsibleSource struct {
    Source  string  `yaml:"src"`
    Name    *string `yaml:"name,omitempty"`
    Type    *string `yaml:"scm,omitempty"`
    Version *string `yaml:"version,omitempty"`
}

рд▓реЗрдХрд┐рди рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЕрдиреБрдХреНрд░рдо рдХреЛ рдареАрдХ рд╕реЗ рдЕрдирдорд░реНрд╢рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ cannot unmarshal !!seq рддреНрд░реБрдЯрд┐ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ) рдореБрдЭреЗ рдЗрд╕реЗ var out []AnsibleSource рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдирдорд░реНрд╢рд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ :

    source, err := ioutil.ReadFile(ansibleRequirements.Path)
    if err != nil {
        return
    }

    var out []AnsibleSource

    err = yaml.Unmarshal(source, &out)
    if err != nil {
        return
    }

    fmt.Println(requirements)

рдордирд╛рдЗрдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

thallgren picture thallgren  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

johscheuer picture johscheuer  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

michaelsauter picture michaelsauter  ┬╖  28рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

moul picture moul  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zubairhamed picture zubairhamed  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ