1 votes

Ansible : changer la valeur d'un élément dans vvsets.yml

Je cherche à remplacer la valeur de l'élément par le nom du stockage stockageA. 1. fichier vvsets.yml.

vvsets: [{'key': 'lun.101', 'value': ['server001']}, {'key': 'lun.101', 'value': ['server001']}, {'key': 'lun.201', 'value': ['server002']}, {'key': 'lun.301', 'value': ['server003']}]

2. fichier main.yml.

    tasks:
      - name: A
          include_vars: vvsets.yml

      - set_fact:
          vvsets: "{{ vvsets | combine(new_item, recursive=true) }}"
        vars:
          new_item: { 'value': 'storageA' }
        loop: "{{ vvsets }}"
  1. Sortie.

    TASK [set_fact] ok: [localhost] => (item={'key': 'lun.101', 'value': ['server001']}) => { "ansible_facts": { "vvsets": { "key": "lun.301", "value": "storageA" } }, "ansible_loop_var": "item", "changed": false, "item": { "key": "lun.101", "value": [ "server001" ] } } ok: [localhost] => (item={'key': 'lun.101', 'value': ['server001']}) => { "ansible_facts": { "vvsets": { "key": "lun.301", "value": "storageA" } }, "ansible_loop_var": "item", "changed": false, "item": { "key": "lun.101", "value": [ "server001" ] } } ok: [localhost] => (item={'key': 'lun.201', 'value': ['server002']}) => { "ansible_facts": { "vvsets": { "key": "lun.301", "value": "storageA" } }, "ansible_loop_var": "item", "changed": false, "item": { "key": "lun.201", "value": [ "server002" ] } } ok: [localhost] => (item={'key': 'lun.301', 'value': ['server003']}) => { "ansible_facts": { "vvsets": { "key": "lun.301", "value": "storageA" } }, "ansible_loop_var": "item", "changed": false, "item": { "key": "lun.301", "value": [ "server003" ] } }

  2. D'après les résultats obtenus, il n'y a qu'un dernier changement. Il semble que les 3 premiers soient contournés. Voici la nouvelle liste attendue.

    vvsets:

    • 'key': 'lun.101' 'value': ['storageA']
    • 'key': 'lun.101' 'value': ['storageA']
    • 'key': 'lun.201' 'value': ['storageA']
    • 'key': 'lun.301' 'value': ['storageA']

2voto

Lorem ipsum Points 812

Le problème dans votre manuel de jeu est le suivant :

vvsets: "{{ vvsets | combine(new_item, recursive=true) }}"

Ceci ne renverra que le dernier élément modifié.

Le Playbook ci-dessous fera le travail à votre place.

---
  - name: "Playing with Ansible and Git"
    hosts: localhost
    connection: local
    tasks:
      - name: A
        include_vars: vvsets.yml

      - set_fact:
          vvsets_new: []

      - set_fact:
          vvsets_new: "{{ vvsets_new + [new_value] }}"
        vars:
          new_item: { 'value': 'storageA'}
          new_value: "{{ item | combine(new_item) }}"
        loop: "{{ vvsets }}"

      - debug:
         msg: "{{ vvsets_new | list }}"

Salida:

TASK [debug] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        {
            "key": "lun.101",
            "value": "storageA"
        },
        {
            "key": "lun.101",
            "value": "storageA"
        },
        {
            "key": "lun.201",
            "value": "storageA"
        },
        {
            "key": "lun.301",
            "value": "storageA"
        }
    ]
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X