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://
的某些内容吗?
如果没有,是否有办法先声明获取文件然后将其用作本地源?
答案 0 :(得分:43)
在Puppet 4.4之前,根据http://docs.puppetlabs.com/references/latest/type.html#file,文件来源只接受 puppet:// 或 file:// URI。
从Puppet 4.4+开始,your original code would be possible。
如果您使用的是旧版本,那么在不拉下整个Git存储库的情况下实现您想要做的事情的一种方法是使用 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',
}
答案 1 :(得分:14)
当您引用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/
。
答案 2 :(得分:5)
我喜欢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,
}
然后我像平常一样使用我班级中的文件。我添加了nocheckcertificate标志,因为我从我们的本地https repo中取出,我经常忘记该标志。
作者还制作了一个非常棒的maven模块,也可用于从工件存储库中获取文件。
答案 3 :(得分:2)
虽然Puppet 4.4和更新版支持从http源检索基本文件,但内置支持非常非常基本。使用Puppet Forge中的实用程序类型可以最好地解决文件检索问题。
有一些选择。适用于所有平台的高质量认可模块是lwf/remote_file。这是作为本机Puppet类型而不是Exec包装器实现的。
使用示例:
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标头,以及使用基本身份验证用户名/密码。
答案 4 :(得分:0)
对于Windows puppet用户,您可以使用Powershell module's和本机Powershell grep -ro '".*"' . | grep [A-Za-z0-9]{7} | less
命令。
Invoke-WebRequest