class RSpecSystem::NodeSet::Openstack
Constants
- CONFIG_KEYS
- PROVIDER_TYPE
Attributes
vmconf[RW]
Public Class Methods
new(name, config, custom_prefabs_path, options)
click to toggle source
Calls superclass method
RSpecSystem::NodeSet::Base::new
# File lib/rspec-system/node_set/openstack.rb, line 23 def initialize(name, config, custom_prefabs_path, options) super @vmconf = read_config @now = Time.now.strftime '%Y%m%d-%H:%M:%S.%L' RSpec.configuration.rs_storage[:nodes] ||= {} end
Public Instance Methods
compute()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 77 def compute @compute || @compute = Fog::Compute.new({ :provider => :openstack, :openstack_username => vmconf[:username], :openstack_api_key => vmconf[:api_key], :openstack_auth_url => vmconf[:endpoint], }) end
connect()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 46 def connect nodes.each do |k,v| server = RSpec.configuration.rs_storage[:nodes][k][:server] before = Time.new.to_i while true begin server.wait_for(5) { ready? } break rescue ::Fog::Errors::TimeoutError raise if Time.new.to_i - before > vmconf[:node_timeout] log.info "Timeout connecting to instance, trying again..." end end chan = ssh_connect(:host => k, :user => 'root', :net_ssh_options => { :keys => vmconf[:ssh_keys].split(':'), :host_name => server.addresses[vmconf[:network_name]].first['addr'], :paranoid => false }) RSpec.configuration.rs_storage[:nodes][k][:ssh] = chan end end
launch()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 30 def launch nodes.each do |k,v| storage = RSpec.configuration.rs_storage[:nodes][k] ||= {} options = { :flavor_ref => flavor.id, :image_ref => image.id, :name => "#{k}-#{@now}", :key_name => vmconf[:keypair_name] } options[:nics] = [{'net_id' => nic.id}] if vmconf[:network_name] log.info "Launching openstack instance #{k}" result = compute.servers.create options storage[:server] = result end end
network()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 86 def network @network || @network = Fog::Network.new({ :provider => :openstack, :openstack_username => vmconf[:username], :openstack_api_key => vmconf[:api_key], :openstack_auth_url => vmconf[:endpoint], }) end
teardown()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 69 def teardown nodes.keys.each do |k| server = RSpec.configuration.rs_storage[:nodes][k][:server] log.info "Destroying server #{server.name}" server.destroy end end
Private Instance Methods
flavor()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 96 def flavor log.info "Looking up flavor #{vmconf[:flavor_name]}" compute.flavors.find { |x| x.name == vmconf[:flavor_name] } || raise("Couldn't find flavor: #{vmconf[:flavor_name]}") end
image()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 101 def image log.info "Looking up image #{vmconf[:image_name]}" compute.images.find { |x| x.name == vmconf[:image_name] } || raise("Couldn't find image: #{vmconf[:image_name]}") end
nic()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 106 def nic log.info "Looking up network #{vmconf[:network_name]}" network.networks.find { |x| x.name == vmconf[:network_name] } || raise("Couldn't find network: #{vmconf[:network_name]}") end
read_config()
click to toggle source
# File lib/rspec-system/node_set/openstack.rb, line 111 def read_config conf = ENV.inject({}) do |memo,(k,v)| if k =~ /^RS_OPENSTACK_(.+)/ var = $1.downcase.to_sym memo[var] = v if ([var] & CONFIG_KEYS).any? end memo end conf[:node_timeout] = conf[:node_timeout].to_i unless conf[:node_timeout].nil? conf end