class Formatron::CloudFormation::Template::VPC::Subnet::Instance::Setup

Adds setup scripts to an instance rubocop:disable Metrics/ClassLength

Public Class Methods

new( setup:, sub_domain:, hosted_zone_name:, os:, wait_condition_handle: ) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/formatron/cloud_formation/template/vpc/subnet/instance/setup.rb, line 13
def initialize(
  setup:,
  sub_domain:,
  hosted_zone_name:,
  os:,
  wait_condition_handle:
)
  @setup = setup
  @wait_condition_handle = wait_condition_handle
  @sub_domain = sub_domain
  @hosted_zone_name = hosted_zone_name
  @scripts = @setup.script unless @setup.nil?
  @variables = @setup.variable unless @setup.nil?
  @os = os
end

Public Instance Methods

merge(instance:) click to toggle source

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize

# File lib/formatron/cloud_formation/template/vpc/subnet/instance/setup.rb, line 32
def merge(instance:)
  env = {}
  @variables.each do |key, value|
    env[key] = value.value
  end unless @variables.nil?
  if @os.eql? 'windows'
    script_key = 'script-0'
    script = "C:\\formatron\\#{script_key}.bat"
    files = {}
    commands = {}
    @scripts.each_index do |index|
      script_key = "script-#{index}"
      script = "C:\\formatron\\#{script_key}.bat"
      files[script] = {
        content: @scripts[index]
      }
      commands[script_key] = {
        command: script,
        env: env
      }
    end unless @scripts.nil?
    setup_script_index = @scripts.nil? ? 0 : @scripts.length
    signal_script_index = setup_script_index + 1
    script_key = "script-#{setup_script_index}"
    script = "C:\\formatron\\#{script_key}.bat"
    files[script] = {
      content: Scripts.windows_common(
        sub_domain: @sub_domain,
        hosted_zone_name: @hosted_zone_name
      )
    }
    commands[script_key] = {
      command: script,
      env: env,
      waitAfterCompletion: 'forever'
    }
    script_key = "script-#{signal_script_index}"
    script = "C:\\formatron\\#{script_key}.bat"
    files[script] = {
      content: Scripts.windows_signal(
        wait_condition_handle: @wait_condition_handle
      )
    }
    commands[script_key] = {
      command: script,
      env: env
    }
  else
    script_key = 'script-0'
    script = "/tmp/formatron/#{script_key}.sh"
    files = {
      "#{script}" => {
        content: Scripts.linux_common(
          sub_domain: @sub_domain,
          hosted_zone_name: @hosted_zone_name
        ),
        mode: '000755',
        owner: 'root',
        group: 'root'
      }
    }
    commands = {
      "#{script_key}" => {
        command: script,
        env: env
      }
    }
    @scripts.each_index do |index|
      script_key = "script-#{index + 1}"
      script = "/tmp/formatron/#{script_key}.sh"
      files[script] = {
        content: @scripts[index],
        mode: '000755',
        owner: 'root',
        group: 'root'
      }
      commands[script_key] = {
        command: script,
        env: env
      }
    end unless @scripts.nil?
  end
  instance[:Metadata] = {
    Comment1: 'Create setup scripts',
    'AWS::CloudFormation::Init' => {
      config: {
        files: files,
        commands: commands
      }
    }
  }
end