Class: Saklient::Cloud::Resources::LoadBalancer

Inherits:
Appliance show all
Defined in:
lib/saklient/cloud/resources/load_balancer.rb

Overview

ロードバランサの実体1つに対応し, 属性の取得や操作を行うためのクラス.

Instance Attribute Summary collapse

Attributes inherited from Appliance

#availability, #clazz, #description, #icon, #id, #ifaces, #name, #plan_id, #raw_annotation, #raw_settings, #raw_settings_hash, #service_class, #status, #swytch_id, #tags

Attributes inherited from Resource

#client

Instance Method Summary collapse

Methods inherited from Appliance

#_class_name, #_id, #apply, #boot, #get_swytch, #reboot, #reload, #save, #shutdown, #sleep_until_down, #sleep_until_up, #sleep_while_creating, #stop

Methods inherited from Resource

#_class_name, #_id, #api_deserialize, #api_serialize, create_with, #destroy, #dump, #exists, #request_retry, #set_param

Constructor Details

#initialize(client, obj, wrapped = false) ⇒ LoadBalancer

Returns a new instance of LoadBalancer.

Parameters:



135
136
137
138
139
140
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 135

def initialize(client, obj, wrapped = false)
  super(client, obj, wrapped)
  Saklient::Util::validate_type(client, 'Saklient::Cloud::Client')
  Saklient::Util::validate_type(wrapped, 'bool')
  self.raw_annotation = {} if (self.raw_annotation).nil?
end

Instance Attribute Details

#default_routeString

デフォルトルート

Returns:

  • (String)


61
62
63
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 61

def default_route
  @default_route
end

#mask_lenFixnum

マスク長

Returns:

  • (Fixnum)


91
92
93
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 91

def mask_len
  @mask_len
end

#virtual_ipsArray<LbVirtualIp> (readonly)

仮想IPアドレス Saklient::Cloud::Resources::LbVirtualIp の配列

Returns:



37
38
39
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 37

def virtual_ips
  @virtual_ips
end

#vridFixnum

VRID

Returns:

  • (Fixnum)


121
122
123
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 121

def vrid
  @vrid
end

Instance Method Details

#add_virtual_ip(settings = nil) ⇒ LbVirtualIp

仮想IPアドレス設定を追加します.

Parameters:

  • settings (any) (defaults to: nil)

    設定オブジェクト

Returns:



221
222
223
224
225
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 221

def add_virtual_ip(settings = nil)
  ret = Saklient::Cloud::Resources::LbVirtualIp.new(settings)
  @_virtual_ips << ret
  return ret
end

#clear_virtual_ipsLoadBalancer

Returns:



210
211
212
213
214
215
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 210

def clear_virtual_ips
  while 0 < @_virtual_ips.length do
    @_virtual_ips.pop()
  end
  return self
end

#get_default_routeString

Returns:

  • (String)


45
46
47
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 45

def get_default_route
  return Saklient::Util::get_by_path(self.raw_annotation, 'Network.DefaultRoute')
end

#get_mask_lenFixnum

Returns:

  • (Fixnum)

Raises:



73
74
75
76
77
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 73

def get_mask_len
  maskLen = Saklient::Util::get_by_path(self.raw_annotation, 'Network.NetworkMaskLen')
  raise Saklient::Errors::SaklientException.new('invalid_data', 'Data of the resource is invalid') if (maskLen).nil?
  return (maskLen).to_s().to_i(10)
end

#get_virtual_ip_by_address(address) ⇒ LbVirtualIp

指定したIPアドレスにマッチする仮想IPアドレス設定を取得します.

Parameters:

  • address (String)

Returns:



231
232
233
234
235
236
237
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 231

def get_virtual_ip_by_address(address)
  Saklient::Util::validate_type(address, 'String')
  for vip in @_virtual_ips
    return vip if vip.virtual_ip_address == address
  end
  return nil
end

#get_virtual_ipsArray<LbVirtualIp>

Returns:



30
31
32
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 30

def get_virtual_ips
  return @_virtual_ips
end

#get_vridFixnum

Returns:

  • (Fixnum)

Raises:



103
104
105
106
107
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 103

def get_vrid
  vrid = Saklient::Util::get_by_path(self.raw_annotation, 'VRRP.VRID')
  raise Saklient::Errors::SaklientException.new('invalid_data', 'Data of the resource is invalid') if (vrid).nil?
  return (vrid).to_s().to_i(10)
end

#reload_statusLoadBalancer

監視対象サーバのステータスを最新の状態に更新します.

Returns:



242
243
244
245
246
247
248
249
250
251
252
253
254
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 242

def reload_status
  result = request_retry('GET', _api_path + '/' + Saklient::Util::url_encode(_id) + '/status')
  if !(result).nil? && (!result.nil? && result.key?(:LoadBalancer))
    vips = result[:LoadBalancer]
    for vipDyn in vips
      vipStr = vipDyn[:VirtualIPAddress]
      vip = get_virtual_ip_by_address(vipStr)
      next if (vip).nil?
      vip.update_status(vipDyn[:Servers])
    end
  end
  return self
end

#set_default_route(v) ⇒ String

Parameters:

  • v (String)

Returns:

  • (String)


52
53
54
55
56
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 52

def set_default_route(v)
  Saklient::Util::validate_type(v, 'String')
  Saklient::Util::set_by_path(self.raw_annotation, 'Network.DefaultRoute', v)
  return v
end

#set_initial_params(swytch, vrid, realIps, isHighSpec = false) ⇒ LoadBalancer

Parameters:

  • swytch (Swytch)
  • vrid (Fixnum)
  • realIps (Array<String>)
  • isHighSpec (bool) (defaults to: false)

Returns:



184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 184

def set_initial_params(swytch, vrid, realIps, isHighSpec = false)
  Saklient::Util::validate_type(swytch, 'Saklient::Cloud::Resources::Swytch')
  Saklient::Util::validate_type(vrid, 'Fixnum')
  Saklient::Util::validate_type(realIps, 'Array')
  Saklient::Util::validate_type(isHighSpec, 'bool')
  annot = self.raw_annotation
  self.vrid = vrid
  Saklient::Util::set_by_path(annot, 'Switch.ID', swytch._id)
  if !(swytch.ipv4_nets).nil? && 0 < swytch.ipv4_nets.length
    net = swytch.ipv4_nets[0]
    self.default_route = net.default_route
    self.mask_len = net.mask_len
  else
    self.default_route = swytch.user_default_route
    self.mask_len = swytch.user_mask_len
  end
  servers = []
  for ip in realIps
    servers << { IPAddress: ip }
  end
  Saklient::Util::set_by_path(annot, 'Servers', servers)
  self.plan_id = isHighSpec ? 2 : 1
  return self
end

#set_mask_len(v) ⇒ Fixnum

Parameters:

  • v (Fixnum)

Returns:

  • (Fixnum)


82
83
84
85
86
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 82

def set_mask_len(v)
  Saklient::Util::validate_type(v, 'Fixnum')
  Saklient::Util::set_by_path(self.raw_annotation, 'Network.NetworkMaskLen', v)
  return v
end

#set_vrid(v) ⇒ Fixnum

Parameters:

  • v (Fixnum)

Returns:

  • (Fixnum)


112
113
114
115
116
# File 'lib/saklient/cloud/resources/load_balancer.rb', line 112

def set_vrid(v)
  Saklient::Util::validate_type(v, 'Fixnum')
  Saklient::Util::set_by_path(self.raw_annotation, 'VRRP.VRID', v)
  return v
end