首页 > 解决方案 > 需要仅使用索引号从第一个寄存器变量引用到第二个变量

问题描述

我有两个寄存器变量,我循环第一个,我需要只使用索引号循环第二个。

我放了这个{{y.results[0].stdout}},但当然它只停留在第一个数组上。

我想在与寄存器 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 '{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 的原始磁盘。

标签: ansibleansible-2.x

解决方案


我知道,但我想做的是从 sdb 循环到 sdx,你不知道那里有多少磁盘。因此,要捕获所有 10 个(awk $3),您必须使用 fdisk -l(与所有版本的 redhat 兼容),所以我还需要捕获 GB(awk $4)。但我发现这很难。所以我不能用_items循环来做,我要做的就是硬编码它,

  • 外壳:回声 {{x.results[0].item.stdout}} - {{y.results[0].stdout}} >> {{pre_check_logs}}

  • 外壳:回声 {{x.results[1].item.stdout}} - {{y.results[1].stdout}} >> {{pre_check_logs}}

顺便说一下这是github,

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


推荐阅读