Class: CemAcpt::ImageBuilder::TerraformBuilder
- Inherits:
-
Object
- Object
- CemAcpt::ImageBuilder::TerraformBuilder
- Includes:
- Logging
- Defined in:
- lib/cem_acpt/image_builder.rb
Overview
This class builds test node images using Terraform NOTE: There is a huge amount of overlap between this class and CemAcpt::Provision::Terraform. This isn’t ideal, but there are enough differences that a new class was needed. This should be refactored in the future.
Constant Summary collapse
- DEFAULT_PLAN_NAME =
'testplan.tfplan'
- DEFAULT_VARS_FILE =
'imagevars.json'
Constants included from Logging
Instance Attribute Summary collapse
-
#duration ⇒ Object
readonly
Returns the value of attribute duration.
-
#exit_code ⇒ Object
readonly
Returns the value of attribute exit_code.
Instance Method Summary collapse
-
#initialize(config) ⇒ TerraformBuilder
constructor
A new instance of TerraformBuilder.
- #run ⇒ Object
Methods included from Logging
current_log_config, #current_log_config, current_log_format, #current_log_format, #current_log_level, current_log_level, included, #logger, logger, new_log_config, #new_log_config, new_log_formatter, #new_log_formatter, #new_log_level, new_log_level, #new_logger, new_logger, verbose?, #verbose?
Constructor Details
#initialize(config) ⇒ TerraformBuilder
Returns a new instance of TerraformBuilder.
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/cem_acpt/image_builder.rb', line 42 def initialize(config) @config = config @image_terraform_dir = File.join(config.get('terraform.dir'), 'image', config.get('platform.name')) @exec = CemAcpt::ImageBuilder::Exec.new_exec(@config) @environment = new_environment(@config) @all_tfvars = { node_data: {} } @linux_tfvars = { node_data: {} } @windows_tfvars = { node_data: {} } @duration = 0 @exit_code = 1 @private_key = nil @public_key = nil end |
Instance Attribute Details
#duration ⇒ Object (readonly)
Returns the value of attribute duration.
40 41 42 |
# File 'lib/cem_acpt/image_builder.rb', line 40 def duration @duration end |
#exit_code ⇒ Object (readonly)
Returns the value of attribute exit_code.
40 41 42 |
# File 'lib/cem_acpt/image_builder.rb', line 40 def exit_code @exit_code end |
Instance Method Details
#run ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/cem_acpt/image_builder.rb', line 56 def run @start_time = Time.now logger.start_ci_group("CemAcptImage v#{CemAcpt::VERSION} run started at #{@start_time}") @all_tfvars = new_tfvars(@config) @linux_tfvars, @windows_tfvars = divide_tfvars_by_os(@all_tfvars) image_types = [] image_types << [@linux_tfvars, 'linux'] unless no_linux? image_types << [@windows_tfvars, 'windows'] unless no_windows? return dry_run(image_types) if @config.get('dry_run') @working_dir = new_working_dir logger.info('CemAcpt::ImageBuilder') { "Using working directory: #{@working_dir}..." } keep_terminal_alive save_vars_to_file!('linux', @linux_tfvars) save_vars_to_file!('windows', @windows_tfvars) terraform_init image_types.each do |tfvars, os_str| terraform_plan(os_str, tfvars, DEFAULT_PLAN_NAME) begin terraform_apply(os_str, DEFAULT_PLAN_NAME) output = JSON.parse(terraform_output(os_str, 'node-data', json: true)) output.each do |instance_name, data| logger.info('CemAcpt::ImageBuilder') { "Stopping instance #{instance_name}..." } @exec.run('compute', 'instances', 'stop', instance_name) unless @config.get('no_build_images') deprecate_old_images_in_family(data['image_family']) create_image_from_disk(data['disk_link'], image_name_from_image_family(data['image_family']), data['image_family']) end @exit_code = 0 end ensure terraform_destroy(os_str, tfvars) unless @config.get('no_destroy_nodes') end end rescue StandardError => e logger.error('CemAcpt::ImageBuilder') { "Image builder failed with error: #{e}" } logger.verbose('CemAcpt::ImageBuilder') { e.backtrace.join("\n") } @exit_code = 1 ensure if @start_time @duration = Time.now - @start_time else @duration = 0 end logger.end_ci_group end |