Sha256: 50d942fd4abf2dfb9d6a916def324e8823e983bf1df557d773f4ced4f625f575

Contents?: true

Size: 1.34 KB

Versions: 3

Compression:

Stored size: 1.34 KB

Contents

require "foreman/configuration"
require "foreman/export"

class Foreman::Export::Upstart

  attr_reader :engine

  def initialize(engine)
    @engine = engine
  end

  def export(app)
    FileUtils.mkdir_p "/etc/foreman"
    FileUtils.mkdir_p "/etc/init"

    config = Foreman::Configuration.new(app)

    write_file "/etc/init/#{app}.conf", <<-UPSTART_MASTER
pre-start script

bash << "EOF"
  mkdir -p /var/log/#{app}

  if [ -f /etc/foreman/#{app}.conf ]; then
    source /etc/foreman/#{app}.conf
  fi

  for process in $( echo "$#{app}_processes" ); do
    process_count_config="#{app}_$process"
    process_count=${!process_count_config}

    for ((i=1; i<=${process_count:=1}; i+=1)); do
      start #{app}-$process NUM=$i
    done
  done
EOF

end script
    UPSTART_MASTER

    engine.processes.values.each do |process|
      write_file "/etc/init/#{app}-#{process.name}.conf", <<-UPSTART_CHILD
instance $NUM
stop on stopping #{app}
respawn

chdir #{engine.directory}
exec #{process.command} >>/var/log/#{app}/#{process.name}.log 2>&1
      UPSTART_CHILD
    end

    engine.processes.each do |name, process|
      config.scale(name, 1)
    end
    config.write
  end

private ######################################################################

  def write_file(filename, contents)
    File.open(filename, "w") do |file|
      file.puts contents
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
foreman-0.2.0 lib/foreman/export/upstart.rb
foreman-0.1.0 lib/foreman/export/upstart.rb
foreman-0.0.2 lib/foreman/export/upstart.rb