module Morpheus::Cli::InfrastructureHelper

Mixin for Morpheus::Cli command classes Provides common methods for infrastructure management

Public Class Methods

included(klass) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 8
def self.included(klass)
  klass.send :include, Morpheus::Cli::PrintHelper
end

Public Instance Methods

cloud_type_for_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 141
def cloud_type_for_id(id)
  return get_available_cloud_types().find { |z| z['id'].to_i == id.to_i}
end
cloud_type_for_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 145
def cloud_type_for_name(name)
  types = get_available_cloud_types(true, {'name' => name})
  return types.find { |z| z['code'].downcase == name.downcase} || types.find { |z| z['name'].downcase == name.downcase}
end
cloud_type_for_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 133
def cloud_type_for_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return cloud_type_for_id(val)
  else
    return cloud_type_for_name(val)
  end
end
clouds_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 18
def clouds_interface
  # @api_client.clouds
  raise "#{self.class} has not defined @clouds_interface" if @clouds_interface.nil?
  @clouds_interface
end
find_cloud_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 106
def find_cloud_by_id(id)
  json_results = clouds_interface.get(id.to_i)
  if json_results['zone'].empty?
    print_red_alert "Cloud not found by id #{id}"
    exit 1
  end
  cloud = json_results['zone']
  return cloud
end
find_cloud_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 116
def find_cloud_by_name(name)
  json_results = clouds_interface.list({name: name})
  if json_results['zones'].empty?
    print_red_alert "Cloud not found by name #{name}"
    exit 1
  end
  cloud = json_results['zones'][0]
  return cloud
end
find_cloud_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 98
def find_cloud_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_cloud_by_id(val)
  else
    return find_cloud_by_name(val)
  end
end
find_group_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 74
def find_group_by_id(id)
  begin
    json_response = groups_interface.get(id.to_i)
    return json_response['group']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Group not found by id #{id}"
      exit 1
    else
      raise e
    end
  end
end
find_group_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 88
def find_group_by_name(name)
  json_results = groups_interface.list({name: name})
  if json_results['groups'].empty?
    print_red_alert "Group not found by name #{name}"
    exit 1
  end
  group = json_results['groups'][0]
  return group
end
find_group_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 66
def find_group_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_group_by_id(val)
  else
    return find_group_by_name(val)
  end
end
find_network_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 161
def find_network_by_id(id)
  begin
    json_response = networks_interface.get(id.to_i)
    return json_response['network']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Network not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_network_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 175
def find_network_by_name(name)
  json_response = networks_interface.list({name: name.to_s})
  networks = json_response['networks']
  if networks.empty?
    print_red_alert "Network not found by name #{name}"
    return nil
  elsif networks.size > 1
    print_red_alert "#{networks.size} networks found by name #{name}"
    rows = networks.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    network = networks[0]
    # merge in tenants map
    if json_response['tenants'] && json_response['tenants'][network['id']]
      network['tenants'] = json_response['tenants'][network['id']]
    end
    return network
  end
end
find_network_by_name_or_id(val) click to toggle source

Networks

# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 153
def find_network_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_network_by_id(val)
  else
    return find_network_by_name(val)
  end
end
find_network_group_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 326
def find_network_group_by_id(id)
  begin
    json_response = network_groups_interface.get(id.to_i)
    return json_response['networkGroup']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Network Group not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_network_group_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 340
def find_network_group_by_name(name)
  json_response = network_groups_interface.list({name: name.to_s})
  network_groups = json_response['networkGroups']
  if network_groups.empty?
    print_red_alert "Network Group not found by name #{name}"
    return nil
  elsif network_groups.size > 1
    print_red_alert "#{network_groups.size} network groups found by name #{name}"
    # print_networks_table(networks, {color: red})
    rows = network_groups.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    return network_groups[0]
  end
end
find_network_group_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 318
def find_network_group_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_network_group_by_id(val)
  else
    return find_network_group_by_name(val)
  end
end
find_network_server_type_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 718
def find_network_server_type_by_id(id)
  begin
    json_response = @network_server_types_interface.get(id.to_i)
    return json_response['networkServerType']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Network Server Type not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_network_server_type_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 732
def find_network_server_type_by_name(name)
  json_response = @network_server_types_interface.list({name: name.to_s})
  network_server_types = json_response['networkServerTypes']
  if network_server_types.empty?
    print_red_alert "Network Server Type not found by name #{name}"
    return nil
  elsif network_server_types.size > 1
    print_red_alert "#{network_server_types.size} network server types found by name #{name}"
    # print_networks_table(networks, {color: red})
    rows = network_server_types.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :code, :name], {color:red})
    return nil
  else
    return network_server_types[0]
  end
end
find_network_server_type_by_name_or_code(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 751
def find_network_server_type_by_name_or_code(name)
  json_response = @network_server_types_interface.list({phrase: name.to_s, max: 100})
  downcase_name = name.to_s.downcase
  network_server_types = json_response['networkServerTypes'].select { |it| 
      it['code'].to_s.downcase == downcase_name || it['name'].to_s.downcase == downcase_name 
  }
  if network_server_types.empty?
    print_red_alert "Network Server Type not found by name or code '#{name}'"
    return nil
  elsif network_server_types.size > 1
    print_red_alert "#{network_server_types.size} network server types found with name or code '#{name}'"
    # print_networks_table(networks, {color: red})
    rows = network_server_types.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :code, :name], {color:red})
    return nil
  else
    return network_server_types[0]
  end
end
find_network_server_type_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 708
def find_network_server_type_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_network_server_type_by_id(val)
  else
    # always find by code too
    #return find_network_server_type_by_name(val)
    return find_network_server_type_by_name_or_code(val)
  end
end
find_network_type_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 206
def find_network_type_by_id(id)
  begin
    json_response = network_types_interface.get(id.to_i)
    return json_response['networkType']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Network Type not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_network_type_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 220
def find_network_type_by_name(name)
  json_response = network_types_interface.list({name: name.to_s})
  network_types = json_response['networkTypes']
  if network_types.empty?
    print_red_alert "Network Type not found by name #{name}"
    return network_types
  elsif network_types.size > 1
    print_red_alert "#{network_types.size} network types found by name #{name}"
    rows = network_types.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    return network_types[0]
  end
end
find_network_type_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 198
def find_network_type_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_network_type_by_id(val)
  else
    return find_network_type_by_name(val)
  end
end
find_resource_pool_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 367
def find_resource_pool_by_id(id)
  begin
    json_response = resource_pools_interface.get_without_cloud(id.to_i)
    return json_response['resourcePool']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Resource Pool not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_resource_pool_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 381
def find_resource_pool_by_name(name)
  json_response = resource_pools_interface.list_without_cloud({name: name.to_s})
  resource_pools = json_response['resourcePools']
  if resource_pools.empty?
    print_red_alert "Resource Pool not found by name #{name}"
    return nil
  elsif resource_pools.size > 1
    print_red_alert "#{resource_pools.size} resource pools found by name #{name}"
    rows = resource_pools.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    return resource_pools[0]
  end
end
find_resource_pool_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 359
def find_resource_pool_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_resource_pool_by_id(val)
  else
    return find_resource_pool_by_name(val)
  end
end
find_resource_pool_group_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 407
def find_resource_pool_group_by_id(id)
  begin
    json_response = resource_pool_groups_interface.get(id.to_i)
    return json_response['resourcePoolGroup']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Resource Pool Group not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_resource_pool_group_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 421
def find_resource_pool_group_by_name(name)
  json_response = resource_pool_groups_interface.list({name: name.to_s})
  resource_pool_groups = json_response['resourcePoolGroups']
  if resource_pool_groups.empty?
    print_red_alert "Resource Pool Group not found by name #{name}"
    return nil
  elsif resource_pool_groups.size > 1
    print_red_alert "#{resource_pool_groups.size} resource pool groups found by name #{name}"
    rows = resource_pool_groups.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    return resource_pool_groups[0]
  end
end
find_resource_pool_group_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 399
def find_resource_pool_group_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_resource_pool_group_by_id(val)
  else
    return find_resource_pool_group_by_name(val)
  end
end
find_subnet_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 246
def find_subnet_by_id(id)
  begin
    json_response = subnets_interface.get(id.to_i)
    return json_response['subnet']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Subnet not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_subnet_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 260
def find_subnet_by_name(name)
  json_response = subnets_interface.list({name: name.to_s})
  subnets = json_response['subnets']
  if subnets.empty?
    print_red_alert "Subnet not found by name #{name}"
    return nil
  elsif subnets.size > 1
    print_red_alert "#{subnets.size} subnets found by name #{name}"
    rows = subnets.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    return subnets[0]
  end
end
find_subnet_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 238
def find_subnet_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_subnet_by_id(val)
  else
    return find_subnet_by_name(val)
  end
end
find_subnet_type_by_id(id) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 286
def find_subnet_type_by_id(id)
  begin
    json_response = subnet_types_interface.get(id.to_i)
    return json_response['subnetType']
  rescue RestClient::Exception => e
    if e.response && e.response.code == 404
      print_red_alert "Subnet Type not found by id #{id}"
      return nil
    else
      raise e
    end
  end
end
find_subnet_type_by_name(name) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 300
def find_subnet_type_by_name(name)
  json_response = subnet_types_interface.list({name: name.to_s})
  subnet_types = json_response['subnetTypes']
  if subnet_types.empty?
    print_red_alert "Subnet Type not found by name #{name}"
    return subnet_types
  elsif subnet_types.size > 1
    print_red_alert "#{subnet_types.size} subnet types found by name #{name}"
    rows = subnet_types.collect do |it|
      {id: it['id'], name: it['name']}
    end
    puts as_pretty_table(rows, [:id, :name], {color:red})
    return nil
  else
    return subnet_types[0]
  end
end
find_subnet_type_by_name_or_id(val) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 278
def find_subnet_type_by_name_or_id(val)
  if val.to_s =~ /\A\d{1,}\Z/
    return find_subnet_type_by_id(val)
  else
    return find_subnet_type_by_name(val)
  end
end
format_network_pool_server_status(network_pool_server, return_color=cyan) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 669
def format_network_pool_server_status(network_pool_server, return_color=cyan)
  out = ""
  status_string = network_pool_server['status']
  if status_string.nil? || status_string.empty? || status_string == "unknown"
    out << "#{white}UNKNOWN#{network_pool_server['statusMessage'] ? "#{return_color} - #{network_pool_server['statusMessage']}" : ''}#{return_color}"
  # elsif network_pool_server['enabled'] == false
  #   out << "#{red}DISABLED#{network_pool_server['statusMessage'] ? "#{return_color} - #{network_pool_server['statusMessage']}" : ''}#{return_color}"
  elsif status_string == 'ok'
    out << "#{green}#{status_string.upcase}#{return_color}"
  elsif status_string == 'error' || status_string == 'offline'
    out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{network_pool_server['statusMessage'] ? "#{return_color} - #{network_pool_server['statusMessage']}" : ''}#{return_color}"
  else
    out << "#{yellow}#{status_string.upcase}#{return_color}"
  end
  out
end
get_available_cloud_types(refresh=false, params = {}) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 126
def get_available_cloud_types(refresh=false, params = {})
  if !@available_cloud_types || refresh
    @available_cloud_types = clouds_interface.cloud_types({max:1000}.deep_merge(params))['zoneTypes']
  end
  return @available_cloud_types
end
groups_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 12
def groups_interface
  # @api_client.groups
  raise "#{self.class} has not defined @groups_interface" if @groups_interface.nil?
  @groups_interface
end
network_groups_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 36
def network_groups_interface
  # @api_client.network_groups
  raise "#{self.class} has not defined @network_groups_interface" if @network_groups_interface.nil?
  @network_groups_interface
end
network_pool_server_column_definitions(options) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 644
def network_pool_server_column_definitions(options)
  {
    "ID" => 'id',
    "Name" => lambda {|it| it['name'] },
    "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
    "URL" => lambda {|it| it['serviceUrl'] },
    "App ID" => lambda {|it| it['config'] ? it['config']['appId'] : nil },
    "Credentials" => lambda {|it| it['credential'] ? (it['credential']['type'] == 'local' ? '(Local)' : it['credential']['name']) : nil },
    "Username" => lambda {|it| it['serviceUsername'] },
    "Password" => lambda {|it| it['servicePassword'] },
    "Throttle Rate" => lambda {|it| it['serviceThrottleRate'] },
    "Disable SSL SNI" => lambda {|it| format_boolean it['ignoreSsl'] },
    "Inventory Existing" => lambda {|it| format_boolean(it['config'] ? it['config']['inventoryExisting'] : nil) },
    "IP Mode" => lambda {|it| it['serviceMode'] },
    "Network Filter" => lambda {|it| it['networkFilter'] },
    "Zone Filter" => lambda {|it| it['zoneFilter'] },
    "Tenant Match" => lambda {|it| it['tenantMatch'] },
    "Extra Attributes" => lambda {|it| it['config'] ? it['config']['extraAttributes'] : nil },
    "Enabled" => lambda {|it| format_boolean(it['enabled']) },
    "Status" => lambda {|it| format_network_pool_server_status(it) },
    "Date Created" => lambda {|it| format_local_dt(it['dateCreated']) },
    "Last Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
  }
end
network_pool_server_list_column_definitions(options) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 631
def network_pool_server_list_column_definitions(options)
  {
    "ID" => 'id',
    "Name" => lambda {|it| it['name'] },
    "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
    "URL" => lambda {|it| it['serviceUrl'] },
    "Enabled" => lambda {|it| format_boolean(it['enabled']) },
    "Status" => lambda {|it| format_network_pool_server_status(it) },
    "Date Created" => lambda {|it| format_local_dt(it['dateCreated']) },
    "Last Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
  }
end
network_pool_server_type_column_definitions(options) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 694
def network_pool_server_type_column_definitions(options)
  {
    "ID" => 'id',
    "Name" => 'name',
    "Code" => 'code',
    # "Integration Code" => 'integrationCode',
    "Description" => 'description',
    "Enabled" => lambda {|it| format_boolean(it['enabled']) },
    "Selectable" => lambda {|it| format_boolean(it['selectable']) },
    "Plugin" => lambda {|it| format_boolean(it['isPlugin']) },
    "Embedded" => lambda {|it| format_boolean(it['isEmbedded']) },
  }
end
network_pool_server_type_list_column_definitions(options) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 686
def network_pool_server_type_list_column_definitions(options)
  {
    "ID" => 'id',
    "Name" => 'name',
    "Code" => 'code',
  }
end
network_server_type_column_definitions(options) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 783
def network_server_type_column_definitions(options)
  {
    "ID" => 'id',
    "Name" => 'name',
    "Code" => 'code',
    "Description" => 'description',
    "Enabled" => lambda {|it| format_boolean(it['enabled']) },
    "Selectable" => lambda {|it| format_boolean(it['selectable']) },
    "Creatable" => lambda {|it| format_boolean(it['creatable']) },
    "Plugin" => lambda {|it| format_boolean(it['isPlugin']) },
    "Embedded" => lambda {|it| format_boolean(it['isEmbedded']) },
    #"Integration Code" => lambda {|it| it['integrationCode'] },
    "Networks" => lambda {|it| format_boolean(it['hasNetworks']) },
    "Gateways" => lambda {|it| format_boolean(it['hasGateways']) },
    "DHCP Servers" => lambda {|it| format_boolean(it['hasDhcpServers']) },
    "DHCP Relays" => lambda {|it| format_boolean(it['hasDhcpRelays']) },
    # "Route Tables" => lambda {|it| format_boolean(it['hasRouteTables']) },
    "Routers" => lambda {|it| format_boolean(it['hasRouters']) },
    "Switches" => lambda {|it| format_boolean(it['hasSwitches']) },
    "Firewall" => lambda {|it| format_boolean(it['hasFirewall']) },
    "Security Groups" => lambda {|it| format_boolean(it['hasSecurityGroups']) },
    "Load Balancers" => lambda {|it| format_boolean(it['hasLoadBalancers']) },
    # "Security Code" => lambda {|it| it['securityCode'] },
    # "User Visible" => lambda {|it| format_boolean(it['userVisible']) },
  }
end
network_server_type_list_column_definitions(options) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 773
def network_server_type_list_column_definitions(options)
  {
    "ID" => 'id',
    "Name" => 'name',
    "Code" => 'code',
    "Description" => 'description',
    "Enabled" => lambda {|it| format_boolean(it['enabled']) }
  }
end
network_types_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 54
def network_types_interface
  # @api_client.network_types
  raise "#{self.class} has not defined @network_types_interface" if @network_types_interface.nil?
  @network_types_interface
end
networks_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 24
def networks_interface
  # @api_client.networks
  raise "#{self.class} has not defined @networks_interface" if @networks_interface.nil?
  @networks_interface
end
prompt_for_network(network_id, options={}, required=true, field_name='network', field_label='Network') click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 439
def prompt_for_network(network_id, options={}, required=true, field_name='network', field_label='Network')
  # Prompt for a Network, text input that searches by name or id
  network = nil
  still_prompting = true
  while still_prompting do
    v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => field_name, 'type' => 'text', 'fieldLabel' => field_label, 'required' => required, 'description' => 'Network name or ID.'}], network_id ? {(field_name) => network_id} : {})
    network_id = v_prompt['network']
    begin
      network = find_network_by_name_or_id(network_id)
    rescue SystemExit => cmdexit
    end
    if options[:no_prompt]
      still_prompting = false
    else
      still_prompting = network ? false : true
    end
    if still_prompting
      network_id = nil
    end
  end
  return {success:!!network, network: network}
end
prompt_for_networks(params, options={}, api_client=nil, api_params={}) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 462
def prompt_for_networks(params, options={}, api_client=nil, api_params={})
  # Networks
  network_list = nil
  network_ids = nil
  still_prompting = true
  if params['networks'].nil?
    still_prompting = true
    while still_prompting do
      v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'networks', 'type' => 'text', 'fieldLabel' => 'Networks', 'required' => false, 'description' => 'Networks to include, comma separated list of names or IDs.'}], options[:options])
      unless v_prompt['networks'].to_s.empty?
        network_list = v_prompt['networks'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
      end
      network_ids = []
      bad_ids = []
      if network_list && network_list.size > 0
        network_list.each do |it|
          found_network = nil
          begin
            found_network = find_network_by_name_or_id(it)
          rescue SystemExit => cmdexit
          end
          if found_network
            network_ids << found_network['id']
          else
            bad_ids << it
          end
        end
      end
      still_prompting = bad_ids.empty? ? false : true
    end
  else
    network_list = params['networks']
    still_prompting = false
    network_ids = []
    bad_ids = []
    if network_list && network_list.size > 0
      network_list.each do |it|
        found_network = nil
        begin
          found_network = find_network_by_name_or_id(it)
        rescue SystemExit => cmdexit
        end
        if found_network
          network_ids << found_network['id']
        else
          bad_ids << it
        end
      end
    end
    if !bad_ids.empty?
      return {success:false, msg:"Networks not found: #{bad_ids}"}
    end
  end
  return {success:true, data: network_ids}
end
prompt_for_pools(params, options={}, api_client=nil, api_params={}) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 575
def prompt_for_pools(params, options={}, api_client=nil, api_params={})
  # Pools
  pool_list = nil
  pool_ids = nil
  still_prompting = true
  if params['pools'].nil?
    still_prompting = true
    while still_prompting do
      v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'pools', 'type' => 'text', 'fieldLabel' => 'Pools', 'required' => false, 'description' => 'Pools to include, comma separated list of names or IDs.'}], options[:options])
      unless v_prompt['pools'].to_s.empty?
        pool_list = v_prompt['pools'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
      end
      pool_ids = []
      bad_ids = []
      if pool_list && pool_list.size > 0
        pool_list.each do |it|
          found_pool = nil
          begin
            found_pool = find_resource_pool_by_name_or_id(it) 
          rescue SystemExit => cmdexit
          end
          if found_pool
            pool_ids << found_pool['id']
          else
            bad_ids << it
          end
        end
      end
      still_prompting = bad_ids.empty? ? false : true
    end
  else
    pool_list = params['pools']
    still_prompting = false
    pool_ids = []
    bad_ids = []
    if pool_list && pool_list.size > 0
      pool_list.each do |it|
        found_pool = nil
        begin
          found_pool = find_resource_pool_by_name_or_id(it)
        rescue SystemExit => cmdexit
        end
        if found_pool
          pool_ids << found_pool['id']
        else
          bad_ids << it
        end
      end
    end
    if !bad_ids.empty?
      return {success:false, msg:"Pools not found: #{bad_ids}"}
    end
  end
  return {success:true, data: pool_ids}
end
prompt_for_subnets(params, options={}, api_client=nil, api_params={}) click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 518
def prompt_for_subnets(params, options={}, api_client=nil, api_params={})
  # todo: make this a generic method now please.
  # Subnets
  record_list = nil
  record_ids = nil
  still_prompting = true
  if params['subnets'].nil?
    still_prompting = true
    while still_prompting do
      v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'subnets', 'type' => 'text', 'fieldLabel' => 'Subnets', 'required' => false, 'description' => 'Subnets to include, comma separated list of names or IDs.'}], options[:options])
      unless v_prompt['subnets'].to_s.empty?
        record_list = v_prompt['subnets'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
      end
      record_ids = []
      bad_ids = []
      if record_list && record_list.size > 0
        record_list.each do |it|
          found_record = nil
          begin
            found_record = find_subnet_by_name_or_id(it)
          rescue SystemExit => cmdexit
          end
          if found_record
            record_ids << found_record['id']
          else
            bad_ids << it
          end
        end
      end
      still_prompting = bad_ids.empty? ? false : true
    end
  else
    record_list = params['subnets']
    still_prompting = false
    record_ids = []
    bad_ids = []
    if record_list && record_list.size > 0
      record_list.each do |it|
        found_subnet = nil
        begin
          found_subnet = find_subnet_by_name_or_id(it)
        rescue SystemExit => cmdexit
        end
        if found_subnet
          record_ids << found_subnet['id']
        else
          bad_ids << it
        end
      end
    end
    if !bad_ids.empty?
      return {success:false, msg:"Subnets not found: #{bad_ids}"}
    end
  end
  return {success:true, data: record_ids}
end
resource_pool_groups_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 42
def resource_pool_groups_interface
  # @api_client.resource_pool_groups
  raise "#{self.class} has not defined @resource_pool_groups_interface" if @resource_pool_groups_interface.nil?
  @resource_pool_groups_interface
end
resource_pools_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 48
def resource_pools_interface
  # @api_client.resource_pool_groups
  raise "#{self.class} has not defined @cloud_resource_pools_interface" if @cloud_resource_pools_interface.nil?
  @cloud_resource_pools_interface
end
subnet_types_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 60
def subnet_types_interface
  # @api_client.subnet_types
  raise "#{self.class} has not defined @subnet_types_interface" if @subnet_types_interface.nil?
  @subnet_types_interface
end
subnets_interface() click to toggle source
# File lib/morpheus/cli/mixins/infrastructure_helper.rb, line 30
def subnets_interface
  # @api_client.subnets
  raise "#{self.class} has not defined @subnets_interface" if @subnets_interface.nil?
  @subnets_interface
end