aboutsummaryrefslogtreecommitdiff
path: root/app/jobs
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-02-18 11:23:41 +0000
committerChristopher Baines <mail@cbaines.net>2018-03-29 07:41:09 +0100
commitbc1ffc5214ab3f563b60523d9c349fab7974e634 (patch)
tree1caa1ed8bf2fb96c4d340aeffd53cd50a8799980 /app/jobs
parent700b8b0a112fa976b9850418a7f0c71d95b6dd79 (diff)
downloadgovuk-mini-environment-admin-bc1ffc5214ab3f563b60523d9c349fab7974e634.tar
govuk-mini-environment-admin-bc1ffc5214ab3f563b60523d9c349fab7974e634.tar.gz
Add some govuk-guix related jobs
And various other views and routes.
Diffstat (limited to 'app/jobs')
-rw-r--r--app/jobs/destroy_job.rb1
-rw-r--r--app/jobs/govuk_guix/build_job.rb33
-rw-r--r--app/jobs/govuk_guix/fetch_revision_job.rb49
-rw-r--r--app/jobs/govuk_guix/job.rb24
-rw-r--r--app/jobs/start_job.rb (renamed from app/jobs/setup_job.rb)6
5 files changed, 110 insertions, 3 deletions
diff --git a/app/jobs/destroy_job.rb b/app/jobs/destroy_job.rb
index 7f13fdd..2bc72c1 100644
--- a/app/jobs/destroy_job.rb
+++ b/app/jobs/destroy_job.rb
@@ -12,6 +12,7 @@ class DestroyJob < TerraformJob
aws_region: 'eu-west-1',
slug: @mini_environment.name.parameterize,
ssh_public_key: ssh_public_key,
+ start_command: @mini_environment.start_command
},
force: true
)
diff --git a/app/jobs/govuk_guix/build_job.rb b/app/jobs/govuk_guix/build_job.rb
new file mode 100644
index 0000000..381a717
--- /dev/null
+++ b/app/jobs/govuk_guix/build_job.rb
@@ -0,0 +1,33 @@
+require 'ruby_terraform'
+require 'open3'
+
+class GovukGuix::BuildJob < GovukGuix::Job
+ @retry_interval = 30
+
+ def run(mini_environment_id)
+ logger.info "GovukGuix::BuildJob: Building mini environment #{mini_environment_id}"
+
+ mini_environment = MiniEnvironment.find(mini_environment_id)
+
+ slug = mini_environment.name.parameterize
+
+ command = [
+ "#{mini_environment.govuk_guix_revision.store_path}/bin/govuk",
+ "system",
+ "build",
+ "--rails-environment=production",
+ "--app-domain=#{slug}.aws.cbaines.net",
+ "--web-domain=www.#{slug}.aws.cbaines.net",
+ "--use-high-ports=false",
+ "--use-https=certbot",
+ "--fallback",
+ ]
+
+ run_command(command) do |output|
+ store_path = output.last.strip
+ logger.debug("GovukGuix::BuildJob: start_command: #{store_path}")
+
+ mini_environment.update(start_command: store_path)
+ end
+ end
+end
diff --git a/app/jobs/govuk_guix/fetch_revision_job.rb b/app/jobs/govuk_guix/fetch_revision_job.rb
new file mode 100644
index 0000000..b1cb171
--- /dev/null
+++ b/app/jobs/govuk_guix/fetch_revision_job.rb
@@ -0,0 +1,49 @@
+require 'ruby_terraform'
+require 'git'
+require 'open3'
+
+class GovukGuix::FetchRevisionJob < GovukGuix::Job
+ @retry_interval = 30
+
+ def run(commit_hash)
+ repository.fetch
+
+ repository.checkout(commit_hash)
+
+ command = [
+ "#{repository_directory}/guix-pre-inst-env",
+ "guix",
+ "build",
+ "-e",
+ "(begin (use-modules (gds packages govuk)) (current-govuk-guix))"
+ ]
+
+ run_command(command) do |output|
+ store_path = output.last.strip
+ logger.debug("FetchRevisionJob: store_path: #{store_path}")
+
+ GovukGuix::Revision.create(
+ commit_hash: commit_hash,
+ store_path: store_path
+ )
+ end
+ end
+
+ def repository
+ @_repository ||= begin
+ if File.exists? repository_directory
+ Git.open(repository_directory, :log => Rails.logger)
+ else
+ Git.clone(repository_remote_location, repository_directory)
+ end
+ end
+ end
+
+ def repository_directory
+ 'tmp/cache/govuk-guix'
+ end
+
+ def repository_remote_location
+ 'git@git.cbaines.net:gds/govuk-guix'
+ end
+end
diff --git a/app/jobs/govuk_guix/job.rb b/app/jobs/govuk_guix/job.rb
new file mode 100644
index 0000000..0161cb1
--- /dev/null
+++ b/app/jobs/govuk_guix/job.rb
@@ -0,0 +1,24 @@
+class GovukGuix::Job < Que::Job
+ def run_command(command)
+ logger.debug("#{self.class}: Running command #{command}")
+
+ Open3.popen2e(*command) do |stdin, stdout_and_stderr, wait_thr|
+ logger.info("#{self.class}: commmand running, pid #{wait_thr.pid}")
+
+ output = []
+ stdout_and_stderr.each_line do |line|
+ logger.debug("#{self.class}: #{line}")
+ output << line
+ end
+
+ exit_status = wait_thr.value
+ unless exit_status == 0
+ logger.error("#{self.class}: failed, exit status #{exit_status}")
+
+ raise "#{output.join}\n"
+ end
+
+ yield(output)
+ end
+ end
+end
diff --git a/app/jobs/setup_job.rb b/app/jobs/start_job.rb
index 6791dd6..ec17732 100644
--- a/app/jobs/setup_job.rb
+++ b/app/jobs/start_job.rb
@@ -1,10 +1,10 @@
require 'ruby_terraform'
-class SetupJob < TerraformJob
+class StartJob < TerraformJob
@retry_interval = 30
def run_terraform
- puts "Setting up #{@mini_environment.name}"
+ logger.info "Setting up #{@mini_environment.name}"
Dir.chdir('terraform/aws') do
RubyTerraform.init(
@@ -15,11 +15,11 @@ class SetupJob < TerraformJob
)
RubyTerraform.apply(
- directory: 'mini_environment',
vars: {
aws_region: 'eu-west-1',
slug: @mini_environment.name.parameterize,
ssh_public_key: ssh_public_key,
+ start_command: @mini_environment.start_command
},
auto_approve: true
)