class Anjou::LaunchInstance
Constants
- LAUNCH_TIMEOUT_SECONDS
Public Class Methods
create_and_launch_instance(users=[], host_user: nil)
click to toggle source
# File lib/anjou/launch_instance.rb, line 9 def create_and_launch_instance(users=[], host_user: nil) host_user ||= users.first users << host_user unless users.include? host_user guard_enough users ensure_volumes_for users ensure_authorized_keys_for users user_data = Anjou::InstanceUserData.render_mime 'install-ruby', 'install-mosh' create_instance_for(host_user, user_data).tap do |instance| attach users, instance users.each do |user| home = Anjou::UserHome.new user, instance.dns_name puts "Creating login for #{user}..." home.create_linux_user puts "Mounting home directory for #{user}..." home.mount_home_dir puts "Installing authorized_keys for #{user}..." home.install_authorized_keys @authorized_keys[user] end end end
Private Class Methods
attach(users, instance)
click to toggle source
# File lib/anjou/launch_instance.rb, line 76 def attach users, instance users.each do |user| puts "Attaching user volume for #{user} to #{instance.dns_name}" ec2.attach user, instance end end
create_instance_for(host_user, user_data)
click to toggle source
# File lib/anjou/launch_instance.rb, line 47 def create_instance_for host_user, user_data puts "Creating Anjou instance for host user #{host_user}..." instance = ec2.create_instance username: host_user, user_data: user_data timeout_seconds = LAUNCH_TIMEOUT_SECONDS until instance.status == :running do raise "instance failed to start after #{LAUNCH_TIMEOUT_SECONDS}" if timeout_seconds <= 0 sleep 1; timeout_seconds -= 1 end puts "Anjou instance started at #{instance.dns_name} :)" instance end
ec2()
click to toggle source
# File lib/anjou/launch_instance.rb, line 39 def ec2 @@ec2 ||= Anjou::EC2.new end
ensure_volumes_for(users)
click to toggle source
# File lib/anjou/launch_instance.rb, line 60 def ensure_volumes_for users users.each do |user| unless ec2.user_volume_for(user) puts "Creating user volume for #{user}" ec2.create_user_volume(username: user) end end end
guard_enough(users)
click to toggle source
# File lib/anjou/launch_instance.rb, line 43 def guard_enough users raise "You must provide at least one user for this pairing workstation!" unless users.size > 0 end