diff options
author | Christopher Baines <mail@cbaines.net> | 2018-06-21 20:52:14 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2018-06-21 20:52:14 +0100 |
commit | cd2ff0508ea3488248ae904e7eb1dc10c84a0ea3 (patch) | |
tree | e7fbf596fcbafbc3e3f50711c94080d8f72eff64 | |
parent | e14f9f452347417a4cf565ce3a0b084fe479e076 (diff) | |
download | govuk-mini-environment-admin-cd2ff0508ea3488248ae904e7eb1dc10c84a0ea3.tar govuk-mini-environment-admin-cd2ff0508ea3488248ae904e7eb1dc10c84a0ea3.tar.gz |
Split MiniEnvironmentMethods out of TerraformLibvirt
Separate the mini environment related methods in to a module, to make
both more readable.
-rw-r--r-- | app/models/backends/terraform_libvirt.rb | 76 | ||||
-rw-r--r-- | app/models/backends/terraform_libvirt/mini_environment_methods.rb | 95 |
2 files changed, 97 insertions, 74 deletions
diff --git a/app/models/backends/terraform_libvirt.rb b/app/models/backends/terraform_libvirt.rb index a6cde5e..c0eda51 100644 --- a/app/models/backends/terraform_libvirt.rb +++ b/app/models/backends/terraform_libvirt.rb @@ -33,6 +33,8 @@ require 'ruby_terraform' class Backends::TerraformLibvirt < ApplicationRecord + include MiniEnvironmentMethods + has_many :mini_environments, as: :backend self.table_name = 'terraform_libvirt_backends' @@ -45,50 +47,6 @@ class Backends::TerraformLibvirt < ApplicationRecord "#{self.class.name}=#{id}" end - def build(mini_environment) - slug = mini_environment.name.parameterize - - GovukGuix::BuildJob.enqueue( - mini_environment.id, - services: mini_environment.services.map(&:build_argument_string), - arguments: { - type: 'vm-image-and-system', - app_domain: "#{slug}.#{domain}", - web_domain: "www.#{slug}.#{domain}", - # Assume that this is a local environment, and not externally - # accessible - use_https: 'development', - http_ports_mode: 'standard', - host_name: "#{slug}.#{domain}", - admin_environment_label: mini_environment.name, - signon_instance_name: slug, - use_error_pages: 'true', - origin_basic_auth: "#{slug}=#{slug}", - data_snapshot: mini_environment.data_snapshot.try(:store_path) - }.compact - ) - end - - def start(mini_environment) - logger.info "Setting up #{mini_environment.name}" - - within_terraform_working_directory(mini_environment) do - RubyTerraform.apply( - vars: terraform_variables(mini_environment), - auto_approve: true - ) - end - end - - def destroy(mini_environment) - within_terraform_working_directory(mini_environment) do - RubyTerraform.destroy( - vars: terraform_variables(mini_environment), - force: true - ) - end - end - def deploy_backend TerraformWorkingDirectory.new( terraform_state_id, @@ -111,34 +69,4 @@ class Backends::TerraformLibvirt < ApplicationRecord def terraform_state_id "backend/terraform_libvirt/#{id}" end - - def within_terraform_working_directory(mini_environment, &block) - TerraformWorkingDirectory.new( - "mini_environment/#{mini_environment.id}", - 'terraform/libvirt/mini_environment' - ).within_working_directory(&block) - end - - def signon_url(mini_environment) - "https://signon.#{mini_environment.name.parameterize}.#{domain}" - end - - def terraform_variables(mini_environment) - slug = mini_environment.name.parameterize - - { - uri: uri, - machine_name: slug, - host_name: "#{slug}.#{domain}", - vm_image_and_system: mini_environment.backend_data['build_output'], - backend_remote_state_address: ( - 'http://localhost:3000' + - Rails - .application - .routes - .url_helpers - .terraform_http_backend_path(terraform_state_id) - ) - } - end end diff --git a/app/models/backends/terraform_libvirt/mini_environment_methods.rb b/app/models/backends/terraform_libvirt/mini_environment_methods.rb new file mode 100644 index 0000000..38e8809 --- /dev/null +++ b/app/models/backends/terraform_libvirt/mini_environment_methods.rb @@ -0,0 +1,95 @@ +# GOV.UK Mini Environment Admin +# Copyright © 2018 Christopher Baines <mail@cbaines.net> +# +# This file is part of the GOV.UK Mini Environment Admin. +# +# The GOV.UK Mini Environment Admin is free software: you can +# redistribute it and/or modify it under the terms of the GNU Affero +# General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later +# version. +# +# The GOV.UK Mini Environment Admin is distributed in the hope that it +# will be useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with the GOV.UK Mini Environment Admin. If not, see +# <http://www.gnu.org/licenses/>. + +module Backends::TerraformLibvirt::MiniEnvironmentMethods + def build(mini_environment) + slug = mini_environment.name.parameterize + + GovukGuix::BuildJob.enqueue( + mini_environment.id, + services: mini_environment.services.map(&:build_argument_string), + arguments: { + type: 'vm-image-and-system', + app_domain: "#{slug}.#{domain}", + web_domain: "www.#{slug}.#{domain}", + # Assume that this is a local environment, and not externally + # accessible + use_https: 'development', + http_ports_mode: 'standard', + host_name: "#{slug}.#{domain}", + admin_environment_label: mini_environment.name, + signon_instance_name: slug, + use_error_pages: 'true', + origin_basic_auth: "#{slug}=#{slug}", + data_snapshot: mini_environment.data_snapshot.try(:store_path) + }.compact + ) + end + + def start(mini_environment) + logger.info "Setting up #{mini_environment.name}" + + within_terraform_working_directory(mini_environment) do + RubyTerraform.apply( + vars: terraform_variables(mini_environment), + auto_approve: true + ) + end + end + + def destroy(mini_environment) + within_terraform_working_directory(mini_environment) do + RubyTerraform.destroy( + vars: terraform_variables(mini_environment), + force: true + ) + end + end + + def within_terraform_working_directory(mini_environment, &block) + TerraformWorkingDirectory.new( + "mini_environment/#{mini_environment.id}", + 'terraform/libvirt/mini_environment' + ).within_working_directory(&block) + end + + def signon_url(mini_environment) + "https://signon.#{mini_environment.name.parameterize}.#{domain}" + end + + def terraform_variables(mini_environment) + slug = mini_environment.name.parameterize + + { + uri: uri, + machine_name: slug, + host_name: "#{slug}.#{domain}", + vm_image_and_system: mini_environment.backend_data['build_output'], + backend_remote_state_address: ( + 'http://localhost:3000' + + Rails + .application + .routes + .url_helpers + .terraform_http_backend_path(terraform_state_id) + ) + } + end +end |