1

我正在寻找基于主机名前缀的角色,但遇到了一些问题。Ruby 对我来说是新的,尽管我已经广泛地寻找解决方案,但我仍然感到困惑。

主机名如下所示:

  • 工作服务器-01
  • 家庭服务器-01

这是我写的:

require 'facter'
Facter.add('host_role') do
setcode do
    hostname_array = Facter.value(:hostname).split('-')
    first_in_array = hostname_array.first
    first_in_array.each do |x|
      if x =~ /^(home|work)/
        role = '"#{x}" server'
    end
    role
end
end

我想在我的角色分配中使用变量插值,但我觉得使用 case 语句和 'when' 是不正确的。请记住,我是 Ruby 新手。

有人对我如何实现我的目标有任何想法吗?

4

1 回答 1

2

模式匹配主机名事实

以下是您的代码的相对 DRY 重构:

require 'facter'

Facter.add :host_role do
  setcode do
    location = case Facter.value(:hostname)
               when /home/ then $&
               when /work/ then $&
               else 'unknown'
               end
    '%s server' % location
  end
end

大多数情况下,它只是查找正则表达式匹配,并将匹配的值分配给位置,然后将其作为格式化字符串的一部分返回。

在我的系统上,主机名与“home”或“work”都不匹配,所以我正确地得到:

Facter.value :host_role
#=> "unknown server"
于 2014-09-03T22:48:25.470 回答