木偶:在目录下"iterate"所有转速并安装



我不是一个真正的木偶专家,现在正在寻找一个' proper puppet'的方式来安装一组本地rpm ?

所以,我有一个本地目录,我放了一些rpm,我想安装-因此我定义了一个资源来复制rpm文件并安装它

define package_local(
$source = $name,
$rpmdirpuppet = "puppet:///modules/my_lib/rpmdir",
$rpmdirlocal = "/var/package/"
)
{
file{"${rpmdirlocal}":
  path => $rpmdirlocal,
  ensure => "directory",
}->
  file {"${rpmdirlocal}/${source}":
    source => "${rpmdirpuppet}/${source}",
path => "${rpmdirlocal}/${source}",
  }->
  package {"${rpmdirlocal}/${source}":
    provider => "rpm",
    source => "${rpmdirlocal}/${source}",
    require => File["${rpmdirlocal}/${source}"],
    }
}

现在我想"迭代"目录中的所有rpm,并一次复制/安装它们。我可以在hiera中定义所有文件,并使用create_resources"遍历"它们。但是,由于我的rpm-dir中只有rpm,所以我想我实际上不需要单独命名所有文件。所以,我想知道在my_lib/{files}/rpmdir中复制和安装所有rpm的最佳方法是什么?

谢谢你的想法。托马斯。

我以前也做过类似的事情。

您需要在服务器上编写解析器来定义一个新函数。类似于modules/extras/lib/puppet/parser/functions/get_files.rb

module Puppet::Parser::Functions
  newfunction(:get_files, :type => :rvalue) do |args|
    raise ArgumentError, ("get_files(): wrong number of arguments (#{args.length}; must be path on master)") if args.length != 1
    dir = args[0]
    files = Dir.glob("#{dir}/**/*").select {|f| File.file? f}.map!{|f| f.sub!("#{dir}/","")}
    p files
    files
  end
end

然后在你的清单中,你可以得到puppet服务器目录下的文件数组:

$module_path=get_module_path(${caller_module_name})
$rpms=get_files("${module_path}/files")

接下来需要一个定义的类型或迭代。(下面是手写的,可以编译也可以不编译)

define localrpm (
  $rpm,
  $localdir = '/tmp'
) {
  $package_name = regsubst($rpm,'.rpm$','')
  file {"$localdir/$rpm":
    ensure => file,
    source => "puppet:///modules/${caller_module_name}/$rpm"
  } ->
  package {"$package_name":
    ensure   => installed,
    provider => rpm,
    source   => "$localdir/$rpm"
  }
}

然后安装:

localrpm{$rpms: }

然而,现实是,这是一个糟糕的解决方案。rpm可以被命名为任何东西。因此,您必须确保puppetserver上的文件名与包名完全匹配(文件名中没有版本或任何内容)。

它也不会解析任何依赖项。

一个更健壮的解决方案是递归地将目录复制到代理(如您所暗示的),并使用refreshonly命令运行'createrepo',并添加一个url为'dir:///path/to/local/rpms'的新存储库

然后你可以像平常一样安装包。

当然,最好的解决方案是将rpm添加到适当的存储库中。

没有什么可以阻止您在puppetserver上托管文件,并在端口80上向apache添加vhost。

相关内容

  • 没有找到相关文章

最新更新