class F5::Cli::Pool

Public Instance Methods

disable(pool, *members) click to toggle source
# File lib/f5/cli/application.rb, line 302
def disable(pool, *members)
  set = pool_members(pool).select do |m|
    members.include? m[:address]
  end

  response = client.LocalLB.Pool.set_member_session_enabled_state(
    pool_names: { item: [ pool ] },
    members: { item: [ set ] },
    session_states: { item: [ set.map { "STATE_DISABLED" } ] }
  )

  if options[:force]
    response = client.LocalLB.Pool.set_member_monitor_state(
      pool_names: { item: [ pool ] },
      members: { item: [ set ] },
      monitor_states: { item: [ set.map { "STATE_DISABLED" } ] }
    )
  end
end
enable(pool, *members) click to toggle source
# File lib/f5/cli/application.rb, line 281
def enable(pool, *members)
  set = pool_members(pool).select do |m|
    members.include? m[:address]
  end

  response = client.LocalLB.Pool.set_member_session_enabled_state(
    pool_names: { item: [ pool ] },
    members: { item: [ set ] },
    session_states: { item: [ set.map { "STATE_ENABLED" } ] }
  )

  response = client.LocalLB.Pool.set_member_monitor_state(
    pool_names: { item: [ pool ] },
    members: { item: [ set ] },
    monitor_states: { item: [ set.map { "STATE_ENABLED" } ] }
  )

end
list() click to toggle source
# File lib/f5/cli/application.rb, line 225
def list
  response = client.LocalLB.Pool.get_list

  pools = Array(response[:item])
  if pools.empty?
    puts "No pools found"
  else
    pools.each do |p|
      puts p
    end
  end
end
setconnections(pool, *members) click to toggle source
# File lib/f5/cli/application.rb, line 335
def setconnections(pool, *members)
  set = address_port_list_from_pool(pool, members)
  response = client.LocalLB.Pool.set_member_connection_limit(
    pool_names: { item: [ pool ] },
    members: { item: [ set ] },
    limits: { item: [ set.map { options[:limit] } ] }
  )
end
setratio(pool, *members) click to toggle source
# File lib/f5/cli/application.rb, line 324
def setratio(pool, *members)
  set = address_port_list_from_pool(pool, members)
  response = client.LocalLB.Pool.set_member_ratio(
    pool_names: { item: [ pool ] },
    members: { item: [ set ] },
    ratios: { item: [ set.map { options[:ratio] } ] }
  )
end
show(pool) click to toggle source
# File lib/f5/cli/application.rb, line 239
def show(pool)
  members = pool_members(pool)
  if members.empty?
    puts "Pool #{pool} is empty"
  else
    members.each do |member|
      puts "#{member[:address]}:#{member[:port]}"
    end
  end
end
status(pool) click to toggle source
# File lib/f5/cli/application.rb, line 251
def status(pool)
  members = pool_members(pool)
  response = client.LocalLB.Pool.get_member_object_status(
    pool_names: { item: [ pool ] },
    members: { item: [ members ] }
  )
  statuses = response[:item][:item]
  statuses = [ statuses ] if statuses.is_a? Hash

  response = client.LocalLB.Pool.get_all_member_statistics(
    pool_names: { item: [ pool ] }
  )

  stats = response[:item][:statistics][:item]
  stats = [ stats ] if stats.is_a? Hash

  connections = stats.map do |host|
    stats = host[:statistics][:item]
    c = stats.find { |stat| stat[:type] == "STATISTIC_SERVER_SIDE_CURRENT_CONNECTIONS" }
    c[:value][:high].to_i * (2<<32) + c[:value][:low].to_i
  end

  puts "%20s %25s %25s %25s" % ["Address", "Availability", "Enabled", "Current Connections"]
  statuses.each_with_index do |s, idx|
    puts "%20s %25s %25s %25s" % [ members[idx][:address], s[:availability_status].split(/_/).last, s[:enabled_status].split(/_/).last, connections[idx]]
  end

end

Private Instance Methods

address_port_list_from_pool(pool, members) click to toggle source
# File lib/f5/cli/application.rb, line 346
def address_port_list_from_pool(pool, members)
  pool_members(pool).select do |m|
    members.include?(m[:address]) || members.include?(m[:address].gsub(%r{^/Common/}, ''))
  end
end
pool_members(pool) click to toggle source
# File lib/f5/cli/application.rb, line 352
def pool_members(pool)
  response = client.LocalLB.Pool.get_member_v2(pool_names: { item: [ pool ] } )

  members = response[:item][:item]
  members = [ members ] if members.is_a? Hash

  members.map { |m| { address: m[:address], port: m[:port] } }
end