Class: Pwrake::HostMap

Inherits:
Hash
  • Object
show all
Defined in:
lib/pwrake/option/host_map.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arg = nil) ⇒ HostMap



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/pwrake/option/host_map.rb', line 113

def initialize(arg=nil)
  @host_map = {}
  @by_id = []
  @by_name = {}
  @is_local = false
  @ipmatch_for_name = {}
  @@hostmap = self
  case arg
  when /\.yaml$/
    read_yaml(arg)
  when String
    read_host(arg)
  when Integer
    parse_hosts(["localhost #{arg}"])
  when NilClass
    parse_hosts(["localhost 1"])
  else
    raise ArgumentError, "arg=#{arg.inspect}"
  end

  # local check
  if @by_id.size == 1
    if @by_id[0].local?
      @is_local = true
    end
  end
end

Instance Attribute Details

#by_idObject (readonly)

Returns the value of attribute by_id.



140
141
142
# File 'lib/pwrake/option/host_map.rb', line 140

def by_id
  @by_id
end

#by_nameObject (readonly)

Returns the value of attribute by_name.



140
141
142
# File 'lib/pwrake/option/host_map.rb', line 140

def by_name
  @by_name
end

Class Method Details

.ipmatch_for_name(name) ⇒ Object



109
110
111
# File 'lib/pwrake/option/host_map.rb', line 109

def self.ipmatch_for_name(name)
  @@hostmap.ipmatch_for_name(name)
end

Instance Method Details

#group_core_weightObject



158
159
160
161
162
163
164
# File 'lib/pwrake/option/host_map.rb', line 158

def group_core_weight
  a = []
  self.each do |sub,list|
    list.each{|h| (a[h.group] ||= []) << h.weight}
  end
  a
end

#group_hostsObject



150
151
152
153
154
155
156
# File 'lib/pwrake/option/host_map.rb', line 150

def group_hosts
  a = []
  self.each do |sub,list|
    list.each{|h| (a[h.group] ||= []) << h.name}
  end
  a
end

#group_weight_sumObject



166
167
168
169
170
171
172
# File 'lib/pwrake/option/host_map.rb', line 166

def group_weight_sum
  a = []
  self.each do |sub,list|
    list.each{|h| a[h.group] = (a[h.group]||0) + h.weight}
  end
  a
end

#host_countObject



146
147
148
# File 'lib/pwrake/option/host_map.rb', line 146

def host_count
  @by_id.size
end

#ipmatch_for_name(node) ⇒ Object



174
175
176
177
178
179
180
181
182
183
184
# File 'lib/pwrake/option/host_map.rb', line 174

def ipmatch_for_name(node)
  unless a = @ipmatch_for_name[node]
    @ipmatch_for_name[node] = a = []
    ip = IPSocket.getaddress(node)
    @by_id.each_with_index do |h,id|
      a << id if h.ipaddr.include?(ip)
    end
    Log.debug "node:#{node} hosts:#{a.map{|id|@by_id[id].name}.inspect}"
  end
  a
end

#local?Boolean



142
143
144
# File 'lib/pwrake/option/host_map.rb', line 142

def local?
  @is_local
end