web-dev-qa-db-ja.com

Puppetファイルリソースでリモートファイル(Githubなどから)を取得するにはどうすればよいですか?

file { 'leiningen': 
    path => '/home/vagrant/bin/lein',
    ensure => 'file',
    mode => 'a+x',
    source => 'https://raw.github.com/technomancy/leiningen/stable/bin/lein',
}

私のアイデアでしたが、Puppetはhttp://を知りません。見逃したpuppet://について何かありますか?

そうでない場合、最初に宣言的にファイルをフェッチしてからローカルソースとして使用する方法はありますか?

31
Profpatsch

http://docs.puppetlabs.com/references/latest/type.html#file によると、Puppet 4.4より前では、ファイルソースはpuppet:/のみを受け入れます。 /またはfile://URI。

Puppet 4.4+以降、 元のコードが可能になります

古いバージョンを使用している場合、Gitリポジトリ全体をプルダウンせずに目的を達成する1つの方法は、execリソースを使用することですファイルを取得します。

exec{'retrieve_leiningen':
  command => "/usr/bin/wget -q https://raw.github.com/technomancy/leiningen/stable/bin/lein -O /home/vagrant/bin/lein",
  creates => "/home/vagrant/bin/lein",
}

file{'/home/vagrant/bin/lein':
  mode => 0755,
  require => Exec["retrieve_leiningen"],
}

execの使用はやや嫌われますが、独自の型を作成するために効果的に使用できます。たとえば、上記のスニペットを使用して、独自のリソースタイプを作成できます。

define remote_file($remote_location=undef, $mode='0644'){
  exec{"retrieve_${title}":
    command => "/usr/bin/wget -q ${remote_location} -O ${title}",
    creates => $title,
  }

  file{$title:
    mode    => $mode,
    require => Exec["retrieve_${title}"],
  }
}

remote_file{'/home/vagrant/bin/lein':
  remote_location => 'https://raw.github.com/technomancy/leiningen/stable/bin/lein',
  mode            => '0755',
}
44
rdoyle

GitHubリポジトリを参照しているので、 Puppetlabs vcsrepo module を使用します。これにより、変更をフィードバックしたり、最新の状態を維持したりできるという利点が得られます。次を使用してPuppet Forgeからモジュールをインストールできます。

Sudo puppet module install puppetlabs/vcsrepo

次に、リポジトリを宣言し、ファイルリンクを使用して、ファイルを目的の場所に正確に配置します。

vcsrepo { '/opt/leiningen':
  ensure   => present,
  provider => git,
  source   => 'https://github.com/technomancy/leiningen.git',
  revision => 'stable',
}

file { "/usr/local/bin/lein": # or wherever you want the file to be
  ensure => symlink,
  target => '/opt/leiningen/bin/lein',
}

revisionパラメーターを使用して、リビジョン、タグ、または(ここで行うように)ブランチを指定できることに注意してください。

明らかに、ファイル宣言を省略し、PATHを更新して/opt/leiningen/bin/

14
spikeheap

Maestrodev-wgetモジュールが好きです。 Puppetlabs Forge にあります。

インストールは簡単です。私はvagrantをかなり頻繁に使用し、次のものを含む 'bootstrap.sh'ファイルを持っています。

puppet module install maestrodev-wget

次に、次のような問題があります。

include wget

wget::fetch { "download the jdk7 file":
  source             => 'https://a_path_to_our_internal_artifact_repo/Oracle/jdk7...',
  destination        => '/tmp/jdk7...',
  timeout            => 0,
  verbose            => true,
  nocheckcertificate => true,
}

その後、通常のようにクラスのファイルを使用します。ローカルのhttpsリポジトリから取得し、しばしばフラグを忘れてしまうため、nocheckcertificateフラグを追加しました。

著者は、アーティファクトリポジトリからファイルを取得するのにも非常に便利なmavenモジュールも作成します。

5
staylorx

Puppet 4.4以降では、httpソースからの基本的なファイル取得がサポートされていますが、組み込みのサポートは非​​常に基本的なものです。ファイルの取得は、Puppet Forgeのユーティリティタイプを使用して最適に解決されます。

そこにはいくつかのオプションがあります。すべてのプラットフォームで動作する高品質の承認済みモジュールは lwf/remote_file です。これは、Execラッパーとしてではなく、ネイティブPuppetタイプとして実装されます。

使用例:

remote_file { '/path/to/your/file':
  ensure     => present,
  source     => 'https://example.com/file.tar.gz',
  checksum   => 'd41d8cd98f00b204e9800998ecf8427e'
  proxy_Host => '192.168.12.40',
  proxy_port => 3128,
}

サポートされるその他の機能には、SSL検証要件を制御するHTTPヘッダーの受け渡し、および基本認証のユーザー名/パスワードの使用が含まれます。

3
Reid Vandewiele

Windowsのパペットユーザーの場合、 Powershellモジュールの とネイティブPowershell Invoke-WebRequestコマンド。

exec { 'C:/home/vagrant/bin/lein':
    command => 'Invoke-WebRequest "https://raw.github.com/technomancy/leiningen/stable/bin/lein" -OutFile "C:/home/vagrant/bin/lein"',
    provider => powershell,
    creates => 'C:/home/vagrant/bin/lein'
}
0
Aaron D