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

Using variables in Puppet array two at a time

我在 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",
  }
}

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

I have an each iteration in Puppet to install Perl module extensions:

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

So, I'd like it to be able to take the first two variables in the array to install the first extension and then the next two and install that and so on

您可以使用 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",
  }
}