class Rudy::Routines::Startup

Public Instance Methods

execute() click to toggle source

Startup routines run in the following order:

  • before dependencies

  • before_local (if present)

  • Startup instances

  • Set hostname

  • all other actions

  • after dependencies

# File lib/rudy/routines/startup.rb, line 22
def execute
  
  if run?
    Rudy::Routines::Handlers::Depends.execute_all @before, @argv
    
    li " Executing routine: #{@name} ".att(:reverse), ""
    ld "[this is a generic routine]" if @routine.empty?
    
    if @routine.has_key? :before_local
      handler = Rudy::Routines.get_handler :local
      Rudy::Routines.rescue {
        handler.execute(:local, @routine.delete(:before_local), nil, @@lbox, @argv)
      }
    end
    
    Rudy::Routines.rescue {
      unless Rudy::Routines::Handlers::Group.exists? 
        Rudy::Routines::Handlers::Group.create
      end
      # Run this every startup incase the ip address has changed. 
      # If there's an exception it's probably b/c the address is
      # already authorized for port 22. 
      Rudy::Routines::Handlers::Group.authorize rescue nil
    }
    
    Rudy::Routines.rescue {
      unless Rudy::Routines::Handlers::Keypair.exists? 
        Rudy::Routines::Handlers::Keypair.create
      end
    }
    
  end
  
  ## li Rudy::Routines.machine_separator(machine.name, machine.awsid)
  
  # If this is a testrun we won't create new instances
  # we'll just grab the list of machines in this group. 
  # NOTE: Expect errors if there are no machines.
  Rudy::Routines.rescue {
    @machines = run? ? Rudy::Machines.create : Rudy::Machines.list
    @@rset = Rudy::Routines::Handlers::RyeTools.create_set @machines
  }
  
  
  Rudy::Routines.rescue {
    if !Rudy::Routines::Handlers::Host.is_running? @@rset
      a = @@rset.boxes.select { |box| !box.stash.instance_running? }
      raise GroupNotRunning, a
    end
  }
  
  # This is important b/c the machines will not 
  # have DNS info until after they are running. 
  # This will also assign elastic IP addresses. 
  Rudy::Routines.rescue { Rudy::Routines::Handlers::Host.update_dns @@rset }
  
  Rudy::Routines.rescue {
    if !Rudy::Routines::Handlers::Host.is_available? @@rset
      a = @@rset.boxes.select { |box| !box.stash.instance_available? }
      raise GroupNotAvailable, a
    end
  }
  Rudy::Routines.rescue {
    Rudy::Routines::Handlers::Host.set_hostname @@rset      
  }
  
  if run?
    # This is the meat of the sandwich
    Rudy::Routines.runner @routine, @@rset, @@lbox, @argv

    Rudy::Routines.rescue {
      Rudy::Routines::Handlers::Depends.execute_all @after, @argv
    }
    
  end
  
  @machines
end
init(*args) click to toggle source
# File lib/rudy/routines/startup.rb, line 11
def init(*args)
  @routine ||= {}
end
raise_early_exceptions() click to toggle source

Called by generic_machine_runner

# File lib/rudy/routines/startup.rb, line 102
def raise_early_exceptions
  raise NoMachinesConfig unless @@config.machines
  # There's no keypair check here because Rudy::Machines will create one 
  raise MachineGroupNotDefined, current_machine_group unless known_machine_group?
    
  unless (1..MAX_INSTANCES).member?(current_machine_count)
    raise "Instance count must be more than 0, less than #{MAX_INSTANCES}"
  end
  
  # If this is a testrun, we don't create instances anyway so
  # it doesn't matter if there are already instances running.
  if run? && !@@global.force
    if @@global.position.nil?
      raise MachineGroupAlreadyRunning, current_machine_group if Rudy::Machines.running?
      #raise MachineGroupMetadataExists, current_machine_group if Rudy::Machines.exists?
    else
      if Rudy::Machines.running? @@global.position
        m = Rudy::Machine.new @@global.position
        raise MachineAlreadyRunning, m.name 
      end
    end
  end
  
  if @routine
    bad = @routine.keys - @@allowed_actions
    raise UnsupportedActions.new(@name, bad) unless bad.empty?
  end
end