需要仅使用索引号从第一个寄存器变量引用到第二个变量

时间:2019-07-10 03:54:13

标签: ansible ansible-2.x

我有两个寄存器变量,第一个循环,而第二个则仅使用索引号循环。

我放置了这个{{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-MB 5-GB

基本上,我正在创建分区剧本,以便可以确定10GB的原始磁盘。

2 个答案:

答案 0 :(得分:0)

如果仅对输出感兴趣,请更改if语句,请使用awk 'OFS=" - "; {print $3, $4}'。无需注册x和y。一项任务将提供所需的输出。

- 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}}"

答案 1 :(得分:0)

我知道,但是我想做的是从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