一次在Puppet数组中使用两个变量

时间:2017-05-23 19:24:57

标签: puppet

我在Puppet中进行了each次迭代来安装Perl模块扩展:

$extensions_list = ["extension1",
                    "extension2",
                   ]
$extensions_list.each |$extls| {
  exec { $extls:
    path    => '/usr/local/bin/:/usr/bin/:/bin/',
    command => "wget http://search.cpan.org/CPAN/authors/id/B/BP/BPS/extension1-1.00.tar.gz",
  }
}

我希望它也可以考虑版本号,如:

$extensions_list = ["extension1", "1.00",
                    "extension2", "2.00",
                   ]
$extensions_list.each |$extls| {
  exec { $extls:
    path    => '/usr/local/bin/:/usr/bin/:/bin/',
    command => "wget http://search.cpan.org/CPAN/authors/id/B/BP/BPS/extension1-1.00.tar.gz",
  }
}

所以,我希望它能够在数组中使用前两个变量来安装第一个扩展,然后安装接下来的两个变量,然后安装它等等,因为我添加了新的扩展。这样我就可以将名称和版本号添加到我的数组中,然后依次安装它们。

1 个答案:

答案 0 :(得分:2)

  

我在Puppet中进行了each次迭代来安装Perl模块扩展:

嗯,不,不完全是。您有一个each运算符来声明与数组中每个元素对应的Exec资源。与您所说的潜在重要区别在于,在目录构建期间对操作进行评估,因此当时没有进行实际安装。

  

所以,我希望它能够在数组中使用前两个变量来安装第一个扩展,然后安装接下来的两个并安装它等等

您可以使用slice()函数将数组拆分为双元素数组的数组,并对其进行迭代。但是,考虑使用哈希而不是数组作为底层数据结构会更自然。例如:

$extensions_hash = {"extension1" => "1.00",
                    "extension2" => "2.00",
                   }
$extensions_hash.each |$extls, $extv| {
  exec { $extls:
    path    => '/usr/local/bin/:/usr/bin/:/bin/',
    command => "wget http://search.cpan.org/CPAN/authors/id/B/BP/BPS/$extls-$extv.tar.gz",
  }
}