我有两个寄存器变量,第一个循环,而第二个则仅使用索引号循环。
我放置了这个{{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的原始磁盘。
答案 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