56 lines
1.4 KiB
Ruby
56 lines
1.4 KiB
Ruby
class Mrsk::Configuration
|
|
attr_accessor :service, :image, :servers, :env, :ssh_user
|
|
|
|
def self.load_file(file)
|
|
if file.exist?
|
|
new **YAML.load_file(file).symbolize_keys!
|
|
else
|
|
raise "Configuration file not found in #{file}"
|
|
end
|
|
end
|
|
|
|
def initialize(service:, image:, servers:, env: {}, ssh_user: "root")
|
|
@service, @image, @servers, @env, @ssh_user = service, image, servers, env, ssh_user
|
|
end
|
|
|
|
def servers
|
|
ENV["SERVERS"] || @servers
|
|
end
|
|
|
|
def version
|
|
@version ||= ENV["VERSION"] || `git rev-parse HEAD`.strip
|
|
end
|
|
|
|
def image_with_version
|
|
"#{image}:#{version}"
|
|
end
|
|
|
|
def service_with_version
|
|
"#{service}-#{version}"
|
|
end
|
|
|
|
def envs
|
|
parameterize "-e", \
|
|
{ "RAILS_MASTER_KEY" => master_key }.merge(env)
|
|
end
|
|
|
|
def labels
|
|
parameterize "--label", \
|
|
"service" => service,
|
|
"traefik.http.routers.#{service}.rule" => "'PathPrefix(`/`)'",
|
|
"traefik.http.services.#{service}.loadbalancer.healthcheck.path" => "/up",
|
|
"traefik.http.services.#{service}.loadbalancer.healthcheck.interval" => "1s",
|
|
"traefik.http.middlewares.#{service}.retry.attempts" => "3",
|
|
"traefik.http.middlewares.#{service}.retry.initialinterval" => "500ms"
|
|
end
|
|
|
|
private
|
|
def parameterize(param, hash)
|
|
hash.collect { |k, v| "#{param} #{k}=#{v}" }.join(" ")
|
|
end
|
|
|
|
def master_key
|
|
ENV["RAILS_MASTER_KEY"] || File.read(Rails.root.join("config/master.key"))
|
|
end
|
|
end
|