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 がこのコマンドを実行するときに値を提供します。HTTP プロキシ一覧の HTTP エントリは、Wget に設定済みまたは保持済みのプロキシ資格情報がない場合に、許可された公開アーティファクトのダウンロード用のプロキシ URL を提供できます。別の exec リソースが行うエクスポートは、その別のプロセスとその子孫でのみ有効です。二つのリソースを順序付けしても、一つ目のシェル環境が二つ目に持続するわけではありません。

このリソースの環境はリソースと一緒に保ちます。他の Puppet 操作は、マシン全体の Wget 起動ファイルを変更せずに、独自に設定された経路を使用できます。

関連記事