Puppet 的 exec 资源有一个 environment 属性。把代理值放在调用下载器的资源上:

file { '/var/cache/myapp':
  ensure => directory,
}

exec { 'fetch-artifact':
  provider    => shell,
  command     => '/usr/bin/wget --tries=1 --timeout=20 -O /var/cache/myapp/artifact.part https://downloads.example.net/artifact-v1.bin && /usr/bin/mv /var/cache/myapp/artifact.part /var/cache/myapp/artifact-v1.bin',
  environment => [
    'http_proxy=http://proxy.example.net:8080',
    'https_proxy=http://proxy.example.net:8080',
  ],
  creates     => '/var/cache/myapp/artifact-v1.bin',
  require     => File['/var/cache/myapp'],
}

示例假定 Wget 和 mv 位于这些路径。传输失败会留下临时路径名;只有 Wget 成功后才会安装最终路径名。随后,只要已完成的带版本文件存在,creates 守卫就会跳过后续执行。

当 Puppet 运行此命令时,环境数组提供这些值。当 Wget 没有已配置或保留的代理凭据时,HTTP 代理列表中的 HTTP 条目可以为获准的公共制品下载提供代理 URL。由另一个 exec 资源执行的导出只在那个进程及其子进程中有效。对两个资源排序并不会让第一个的 shell 环境延续到第二个。

把这个资源的环境保留在该资源上。其他 Puppet 操作可以使用各自配置的路径,而无需更改机器范围的 Wget 启动文件。

相关文章