class Jisota::Provisioner

Reads configuration and runs it

Public Instance Methods

run(configuration, logger) click to toggle source
# File lib/jisota/provisioner.rb, line 5
def run(configuration, logger)
  packages = configuration.packages.merge(Jisota.global_packages) { |_, left, _| left }
  configuration.each_server do |server|
    run_server(server, configuration.ssh_engine, configuration.roles, packages, logger)
  end
end

Private Instance Methods

run_server(server, ssh, roles, packages, logger) click to toggle source
# File lib/jisota/provisioner.rb, line 14
def run_server(server, ssh, roles, packages, logger)
  ssh_options = { user: server.user, host: server.host }
  ssh_options[:keys] = [server.key] if server.key

  ssh.start(ssh_options) do |ssh_session|
    server.roles.each do |role_name|
      role = roles[role_name]
      context = ScriptContext.new(ssh_session: ssh_session, logger: logger, packages: packages)
      script = role.script_block.evaluate(context)
      script.execute(context)
    end
  end
end