Нужно сослаться из первой переменной регистра на вторую переменную, используя только номер индекса - PullRequest
0 голосов
/ 10 июля 2019

У меня есть две переменные регистра, я зацикливаюсь на первой, и мне нужно зациклить на второй, используя только индексный номер.

Я поставил это {{y.results[0].stdout}}, но, конечно, оно остается только на первоймассив.

Я хочу зациклить регистр y так же, как индекс регистра x.

- shell: |
         if [[ $(fdisk -l /dev/{{raw_prefix}}{{item}} |  grep '/dev/{{raw_prefix}}{{item}}{{partition}}' | wc -l) = 0 ]]; then fdisk -l /dev/{{raw_prefix}}{{item}} | grep 'Disk /dev' | awk '{print $3}' ; fi 
      ignore_errors: true
      register: x
      with_items: "{{letters}}"

- shell: |
         if [[ $(fdisk -l /dev/{{raw_prefix}}{{item}} |  grep '/dev/{{raw_prefix}}{{item}}{{partition}}' | wc -l) = 0 ]]; then fdisk -l /dev/{{raw_prefix}}{{item}} | grep 'Disk /dev' | awk '{print $4}' ; fi 
      ignore_errors: true
      register: y
      with_items: "{{letters}}"

- shell: echo {{item.stdout}} - {{y.results[????].stdout}}
  with_items: "{{x.results}}"

Например:

x[0].stdout=10    y[0].stdout=MB
x[1].stdout=5     y[1].stdout=GB

Таким образом, вывод должен быть:

10 - МБ 5 - ГБ

По сути, я создаю сборник пьес для разметки, чтобы я мог определить сырой диск 10 ГБ.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я знаю это, но я пытаюсь выполнить цикл от sdb до sdx, вы не знаете, сколько там дисков. Таким образом, чтобы захватить все 10 (awk $ 3), вы должны fdisk -l (совместим со всеми версиями redhat), поэтому мне также нужно захватить GB (awk $ 4). Но я понял, что это сложно. Так что я не могу сделать это с циклом _items, я сделаю это жестко закодировать это как

  • shell: echo {{x.results [0] .item.stdout}} - {{y.results [0] .stdout}} >> {{pre_check_logs}}

  • shell: echo {{x.results [1] .item.stdout}} - {{y.results [1] .stdout}} >> {{pre_check_logs}}

Кстати, это github,

https://github.com/rv-ansible/disk_mgnt.git

0 голосов
/ 10 июля 2019

Если вы просто заинтересованы в выводе, измените оператор if, используйте awk 'OFS=" - "; {print $3, $4}'. Не нужно регистрировать х и у. Одна задача обеспечит требуемый результат.

- shell: |
         if [[ $(fdisk -l /dev/{{raw_prefix}}{{item}} |  grep '/dev/{{raw_prefix}}{{item}}{{partition}}' | wc -l) = 0 ]]; then fdisk -l /dev/{{raw_prefix}}{{item}} | grep 'Disk /dev' | awk 'OFS=" - "; {print $3, $4}' ; fi 
      ignore_errors: true
      with_items: "{{letters}}"
...