diff options
author | Christopher Baines <mail@cbaines.net> | 2018-03-27 23:04:41 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2018-04-03 21:58:55 +0100 |
commit | 94f9e2a768327479c8b2da99cd57ac717cf1589a (patch) | |
tree | 819c093f8fb7c37c6017ede36db4f01854a8bcc8 /app/jobs/govuk_guix/build_job.rb | |
parent | fa06e98228d8dd80a46622c9f393bb90e680d254 (diff) | |
download | govuk-mini-environment-admin-94f9e2a768327479c8b2da99cd57ac717cf1589a.tar govuk-mini-environment-admin-94f9e2a768327479c8b2da99cd57ac717cf1589a.tar.gz |
Add domains to backends, and rework build jobs
Add a domain to the libvirt and AWS Terraform backends. Along the way,
improve the backend controllers and views, and rework the build jobs,
simplifying them in to a single new class GovukGuix::BuildJob, which
uses configuration from the respective backend.
Diffstat (limited to 'app/jobs/govuk_guix/build_job.rb')
-rw-r--r-- | app/jobs/govuk_guix/build_job.rb | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/app/jobs/govuk_guix/build_job.rb b/app/jobs/govuk_guix/build_job.rb new file mode 100644 index 0000000..d09fc68 --- /dev/null +++ b/app/jobs/govuk_guix/build_job.rb @@ -0,0 +1,55 @@ +class GovukGuix::BuildJob < GovukGuix::Job + DEFAULT_ARGUMENTS = { + 'rails-environment' => 'production', + 'use-high-ports' => 'false', + 'fallback' => true + }.freeze + + @retry_interval = 30 + + def run(mini_environment_id, services, arguments) + logger.info(self.class) do + "Building mini environment #{mini_environment_id}" + end + + mini_environment = MiniEnvironment.find(mini_environment_id) + + output = run_command( + "#{mini_environment.govuk_guix_revision.store_path}/bin/govuk", + 'system', + 'build', + *hash_to_arguments( + DEFAULT_ARGUMENTS.merge(arguments) + ), + *signon_user_arguments(mini_environment.signon_users), + *services + ) + + build_output = output.last.strip + logger.debug(self.class) { "build_output: #{build_output}" } + + mini_environment.update( + backend_data: { + build_output: build_output + } + ) + end + + def signon_user_to_sexp(signon_user) + keys = %w(name email role) + + sexp_contents = keys.zip( + signon_user.values_at(*keys) + ).map do |(key, value)| + "#:#{key} \"#{value}\"" + end + + "(#{sexp_contents.join(' ')})" + end + + def signon_user_arguments(signon_users) + signon_users.map do |signon_user| + "--signon-user=#{signon_user_to_sexp(signon_user)}" + end + end +end |