class Cyoi::Providers::Clients::OpenStackProviderClient
Public Instance Methods
associate_ip_address_with_server(ip_address, server)
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 32 def associate_ip_address_with_server(ip_address, server) address = fog_compute.addresses.find { |a| a.ip == ip_address } address.server = server end
configuration()
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 106 def configuration configuration = Fog.symbolize_credentials(attributes.credentials) configuration[:provider] = "OpenStack" if attributes.credentials.openstack_region && attributes.credentials.openstack_region.empty? configuration.delete(:openstack_region) end configuration end
create_and_attach_volume(name, disk_size, server, device)
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 92 def create_and_attach_volume(name, disk_size, server, device) volume = fog_compute.volumes.create(:name => name, :description => "", :size => disk_size, :availability_zone => server.availability_zone) volume.wait_for { volume.status == 'available' } volume.attach(server.id, device) volume.wait_for { volume.status == 'in-use' } end
delete_security_group_and_servers(sg_name)
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 102 def delete_security_group_and_servers(sg_name) raise "not implemented yet" end
find_server_device(server, device)
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 87 def find_server_device(server, device) va = fog_compute.get_server_volumes(server.id).body['volumeAttachments'] va.find { |v| v["device"] == device } end
fog_network()
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 127 def fog_network @fog_network ||= Fog::Network.new(configuration) rescue Fog::Errors::NotFound nil end
fog_storage()
click to toggle source
May throw odd exception if OpenStack doesn’t support Swift, like:
NoMethodError: undefined method `join' for "object-store":String
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 117 def fog_storage @fog_storage ||= Fog::Storage.new(configuration) end
ip_addresses_assigned_to_servers()
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 63 def ip_addresses_assigned_to_servers fog_compute.servers.map {|s| s.addresses}.map {|address_hash| address_hash.map {|name, addrs| addrs}}.flatten.map {|addr| addr["addr"]} end
ip_permissions(sg)
click to toggle source
Hook method for FogProviderClient#create_security_group
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 68 def ip_permissions(sg) sg.security_group_rules end
networks?()
click to toggle source
@return [boolean] true if target OpenStack running Neutron networks
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 11 def networks? fog_network end
next_available_ip_in_subnet(subnet)
click to toggle source
@return [String] IP that is available for a new VM to use allocation_pools look like: “allocation_pools” => [{“start”=>“192.168.101.2”, “end”=>“192.168.101.254”}]
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 54 def next_available_ip_in_subnet(subnet) ip = IPAddr.new(subnet.allocation_pools.first["start"]) skip_ips = ip_addresses_assigned_to_servers while skip_ips.include?(ip.to_s) ip = ip.succ end ip.to_s end
openstack_constants()
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 133 def openstack_constants Cyoi::Providers::Constants::OpenStackConstants end
port_open?(ip_permissions, port_range, protocol, ip_range)
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 72 def port_open?(ip_permissions, port_range, protocol, ip_range) ip_permissions && ip_permissions.find do |ip| ip.ip_protocol == protocol \ && ip.ip_range["cidr"] == ip_range \ && ip.from_port <= port_range.min \ && ip.to_port >= port_range.max end end
provision_public_ip_address(options={})
click to toggle source
@return [String] provisions a new public IP address in target region
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 20 def provision_public_ip_address(options={}) pool_name = options.delete("pool_name") pool_name ||= begin pool = fog_compute.addresses.get_address_pools.first pool["name"] end address = fog_compute.addresses.create(:pool => pool_name) address.ip rescue NoMethodError print "No Public IP Found" end
setup_fog_connection()
click to toggle source
Construct a Fog::Compute object Uses attributes
which normally originates from settings.provider
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 123 def setup_fog_connection @fog_compute = Fog::Compute.new(configuration) end
subnets()
click to toggle source
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 15 def subnets fog_network.subnets end
unallocated_floating_ip_addresses(options={})
click to toggle source
@return [Array] of IPs that are not allocated to a server Defaults to the first address pool unless “pool_name” is provided in options
# File lib/cyoi/providers/clients/openstack_provider_client.rb, line 40 def unallocated_floating_ip_addresses(options={}) pool_name = options.delete("pool_name") pool_name ||= begin pool = fog_compute.addresses.get_address_pools.first pool["name"] end fog_compute.addresses. select { |a| a.pool == pool_name && a.instance_id.nil? }. map(&:ip) end