resource资源如何在不编译的情况下检查the主上的数据源?

时间:2018-11-17 03:16:45

标签: puppet

我正在编写一个伪造的Ceph部署模块,需要在管理节点上生成密钥并将其分发给监视节点。我已经编写了服务器端函数以在密钥生成后检索它们,但只希望在它们存在后才分发它们。

  • 管理节点的清单会生成群集密钥
  • 监视和管理节点的清单需要包括这些密钥作为文件资源
  • 如果清单尚未生成密钥,则清单应该不会编译(或生成过多的日志量)
  • 文件资源需要命名,因为它们是其他资源的必备条件

n.b。这些示例来自Puppet3,因此没有Ruby派发:(

什么是收集和分配密钥的纯哲学方法?

示例代码: 清单/admin_node.pp:

exec { "make_${cluster[name]}_${name}_keyring":
    command     => "/usr/bin/ceph-authtool --create-keyring ${ring[file]} --gen-key -n ${ring[name]} ${ring[auth]}",
    require     => [ File[$confdir, $bootdir], Package['ceph-common'], ],
    creates     => $ring[file],
}

lib / puppet / parser / functions / get_remote_file.rb:

module Puppet::Parser::Functions
    newfunction(:get_remote_file, :type => :rvalue) do |args|
        return "Error 3: " + args.length.to_s + " arguments were provided to get_remote_file.rb.  Required is 3 to 5." if args.length < 3 or args.length > 5
        remote_host = args[0]
        remote_path = args[1]
        local_path  = args[2]
        local_user  = (args.length > 3) ? 'runuser -l ' + args[3] + ' ' : ''
        remote_user = (args.length > 4) ? args[4] + '@' : ''

        # Is the file already down?
        return 0 if File.exist?(local_path)

        `"#{local_user}bash -c 'scp #{remote_user}#{remote_host}:#{remote_path} #{local_path} 2> /dev/null'"`
        return $?.exitstatus
    end
end

清单/monitor_node.pp:

unless file_exists($master_key) {
    get_remote_file($adm_node, $monitor_keyring, $master_key)
}
exec { "check_${cluster[name]}.mon.keyring":
    command => '/bin/yes',
    onlyif  => "/usr/bin/test -e $master_key",
}
file { "$libdir/${cluster[name]}.mon.keyring":
    ensure  => $f_action,
    source  => "puppet:///modules/ceph$libdir/${cluster[name]}.mon.keyring",
    require => Exec["check_${cluster[name]}.mon.keyring"],
}

感谢您提供有关如何解决此问题的任何想法。我了解这在Puppet中没有激励。什么是好的方法?

0 个答案:

没有答案