如何在 Puppet 中的 exec 命令资源中传递多个数组?

如何在 Puppet 中的 exec 命令资源中传递多个数组?

我想使用 Puppet 在默认密钥库中部署证书

我有两个文件root.crtintermediateca.crt由 puppet 管理

$alias=[rootca, intermediateca]
$filecert= ["/var/lib/certs/rootca", "/var/lib/certs/intermediateca.crt"]

 
'/var/lib/certs/root.crt':
      source => "puppet:///modules/${module_name}/sonarqube/${::env}/var/lib/certs/root.crt",
      mode   => '0644',
      notify => Exec['install_cert'];

    '/var/lib/certs/intermediateca.crt':
      source => "puppet:///modules/${module_name}/sonarqube/${::env}/var/lib/certs/intermediateca.crt",
      mode   => '0644',
      notify => Exec['install_cert'];

现在,对于每个文件,我想运行一个 exec 命令,该命令应将别名数组和 crt 文件作为 exec 命令资源中的参数。我试过了,但没有用

 exec {
    'install_cert':
      path => "/usr/bin",
      command => "keytool -importcert   -keystore ${keystore} -storepass ${storepass} -noprompt -trustcacerts",
      provider => linux,
      subscribe => File['/var/lib/certs/'],
      refreshonly => true;
  }

我不确定上面的代码是否正确。有人能帮忙吗?

答案1

粘贴的代码并不是真正有效的 Puppet 代码,很难猜出它应该做什么。正如评论中所建议的,“正确”的解决方案是使用java-ks 模块。 就像是:

java_ks { 'puppetca:truststore':
  ensure       => latest,
  certificate  => '"/var/lib/certs/intermediateca.crt',
  target       => '/var/lib/certs/rootca',
  password     => 'puppet',
  trustcacerts => true,
}

如果您想手动执行此类命令,您可以使用以下命令each来定义exec资源:

$alias = ['rootca', 'intermediateca']
$alias.each |String $cert| {
  exec {"some_command_${cert}":
    command = "/bin/some/binary --arg ${cert}"
  }
}

文件资源中的通知无法传递参数,它将仅执行在中定义的命令exec资源

file {'/var/lib/certs/root.crt':
  source => "...",
  notify => Exec['some_command_rootca'],
}

相关内容