我想知道是否有一种资源可以使用Chef资源从远程下载多个文件。我要使用:

remote_file 'Download remote file' do
  path /opt/
  source http:///xxx
  mode '0644'
  action :create
end


...一个文件。如果我想在同一位置使用不同的URL下载多个文件怎么办?或如何修改此资源以进行具有不同URL的多次下载?

这是我在配方中添加属性的方式:在属性中

node['file']['name'].each do |pkg|
    remote_file "path/plugins/#{pkg}" do
        source "node['file']['url']/#{pkg}"
        action :create
    end
end


评论

请参阅remote_directory资源和文档:docs.chef.io/resource_remote_directory.html

@Tensibai我看不到具有多个URL的任何内容

抱歉,我确实错过了这一点,循环听起来很麻烦,您必须指定早期的h文件BTW。我会尝试回答,但可能会出现错字

#1 楼

那么这样的事情:

%w{
        mysql-community-common-5.7.16-1.el7.x86_64.rpm
        mysql-community-libs-5.7.16-1.el7.x86_64.rpm
        mysql-community-client-5.7.16-1.el7.x86_64.rpm
        mysql-community-server-5.7.16-1.el7.x86_64.rpm
}.each do |pkg|
        remote_file "/tmp/#{pkg}" do
          source "https://s3.amazonaws.com/tmp/mysql/#{pkg}"
        end

       rpm_package pkg do
        source "/tmp/#{pkg}"
        action :install
      end
end


另一种方式:

urllist = {
  { 'url': 'http://some.url1/', 'path': '/some/path1/', 'filename': 'some.file' },
  { 'url': 'https://some.url2/', 'path': '/some/path2/', 'filename': 'another.file'}
}

urllist.each do |urlinfo|
  remote_file "#{urlinfo['path']}/#{urlinfo['filename']}" do
    source "#{urlinfo['url']}/#{urlinfo['filename']}"
    owner 'someowner'
    group 'somegroup'
    mode 0755
  end
end


评论


看起来很棒@柏林。有没有我可以设置安装路径的方法。我想在Jenkins的指定路径中安装一些插件,例如:'/ opt / XXX / plugins /'。我想将这些插件下载到plugins文件夹中,但有时它说插件存在但其文件夹中

– Pandey
17年4月27日在20:03

@柏林对我有用。我有什么办法可以为您提到的rpm写属性

– Pandey
17年4月27日在20:12

mysql-community-common-5.7.16-1.el7.x86_64.rpm mysql-community-libs-5.7.16-1.el7.x86_64.rpm mysql-community-client-5.7.16-1.el7.x86_64。 rpm mysql-community-server-5.7.16-1.el7.x86_64.rpm如何将其写为属性

– Pandey
17年4月27日在20:26

参见下面的@Tensibai答案attribute / default.rb,这是您要寻找的吗?

–柏林
17-4-27在20:29



@berlin以获取信息,您可以粘贴缩进的代码,选择它,然后按代码按钮({})或ctrl + k可以缩进具有4个空格的块并保持原始格式

–滕西拜
17年4月27日在20:43

#2 楼

对于这种情况,我要做的是将节点属性哈希用于键值映射,如下所示:

attributes/default.rb

default['namespace']['files']['file1']='http://server1/path/source_fileX'
default['namespace']['files']['file2']='http://server2/path/source_fileY'



default['namespace']['files']={'file1' => 'http://server1/path/source_fileX',
'file2'=>'http://server2/path/source_fileY'}


然后在配方中:节点属性是哈希结构的优点。

如果您当然可以设置完整路径而不仅仅是文件名,并且避免在配方remote_file中使用字符串插值。 br />