class Naminori::Lb::Lvs

Public Class Methods

add_member(rip, service) click to toggle source
# File lib/naminori/lb/lvs.rb, line 6
def add_member(rip, service)
  transaction("add", rip, service) if service.healty?(rip) && exist_ip?(service.config.vip, service) && !exist_ip?(rip, service)
end
command_option(type, rip, service) click to toggle source
# File lib/naminori/lb/lvs.rb, line 33
def command_option(type, rip, service)
  case
  when type == "add"
    "--#{type}-server --#{service.config.protocol}-service #{service.config.vip}:#{service.config.port} -r #{rip}:#{service.config.port} #{method_option(service.config.method)}"
  when type == "delete"
    "--#{type}-server --#{service.config.protocol}-service #{service.config.vip}:#{service.config.port} -r #{rip}:#{service.config.port}"
  end
end
delete_member(rip, service) click to toggle source
# File lib/naminori/lb/lvs.rb, line 10
def delete_member(rip, service)
  transaction("delete", rip, service) if exist_ip?(rip, service)
end
exist_ip?(ip, service) click to toggle source
# File lib/naminori/lb/lvs.rb, line 20
def exist_ip?(ip, service)
  fetch_service(service).find do |line|
    line.match(/#{ip}/)
  end
end
fetch_service(service) click to toggle source
# File lib/naminori/lb/lvs.rb, line 26
def fetch_service(service)
  unless result = `ipvsadm -Ln --#{service.config.protocol}-service #{service.config.vip}:#{service.config.port}`.split("\n")
    raise "fetch errror!"
  end
  result 
end
method_option(method) click to toggle source
# File lib/naminori/lb/lvs.rb, line 42
def method_option(method)
  case
  when method == "gateway"
    "-g"
  when method == "nat"
    "-m"
  when method == "ip"
    "-i"
  end
end
transaction(type, rip, service) click to toggle source
# File lib/naminori/lb/lvs.rb, line 14
def transaction(type, rip, service)
  if system("ipvsadm #{command_option(type, rip, service)}")
    notify(type, rip, service)
  end
end