class Opsmgr::Renderer::AWS

Constants

BASE_RENDERER_FIELDS

Attributes

region[R]
stack_name[R]

Public Class Methods

new(settings_file_contents) click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 43
def initialize(settings_file_contents)
  @settings_file_contents = settings_file_contents
  settings = YAML.load(@settings_file_contents)
  @vm_configs = settings.fetch('vm_shepherd').fetch('vm_configs')
  @stack_name = settings.fetch('vm_shepherd').fetch('env_config').fetch('stack_name')
  @region = settings.fetch('vm_shepherd').fetch('env_config').fetch('region')

  ::AWS.config(
    access_key_id: settings.fetch('vm_shepherd').fetch('env_config').fetch('aws_access_key'),
    secret_access_key: settings.fetch('vm_shepherd').fetch('env_config').fetch('aws_secret_key'),
    region: region,
  )
  @cloud_formation = ::AWS::CloudFormation.new
  @ec2 = ::AWS::EC2.new

  @custom_renderer_fields = settings.fetch('custom_renderer_fields', [])
  setup_custom_renderer_field_methods! unless @custom_renderer_fields.empty?
end

Public Instance Methods

previous_version_public_ip() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 93
def previous_version_public_ip
  previous_version_elastic_ip ? previous_version_elastic_ip.public_ip : nil
end
release_candidate_public_ip() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 89
def release_candidate_public_ip
  ops_manager_elastic_ip ? ops_manager_elastic_ip.public_ip : nil
end
rendered_settings() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 73
def rendered_settings
  render(@settings_file_contents)
end
s3_endpoint() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 82
def s3_endpoint
  {
    'us-east-1' => 'https://s3.amazonaws.com',
    'us-west-1' => 'https://s3-us-west-1.amazonaws.com',
  }[region]
end
setup_custom_renderer_field_methods!() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 62
def setup_custom_renderer_field_methods!
  @custom_renderer_fields.each do |property|
    method_body = proc do
      # convert my_custom_key to MyCustomKey to match AWS format
      output(property.camelize)
    end

    self.class.send(:define_method, property.to_sym, &method_body)
  end
end
vms_security_group_name() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 77
def vms_security_group_name
  security_group = @ec2.security_groups.find { |g| g.id == vms_security_group_id }
  security_group ? security_group.name : ''
end

Private Instance Methods

find_vm_instance(vm_name_token) click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 129
def find_vm_instance(vm_name_token)
  @ec2.instances.find do |instance|
    instance.tags.to_h['Name'] == find_vm_name(vm_name_token) && instance.status == :running
  end
end
find_vm_name(vm_name_token) click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 135
def find_vm_name(vm_name_token)
  @vm_configs.find { |config| config.fetch('vm_name').match(vm_name_token) }.fetch('vm_name')
end
ops_manager_elastic_ip() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 113
def ops_manager_elastic_ip
  @ops_manager_elastic_ip ||= ops_manager_instance ? ops_manager_instance.elastic_ip : nil
end
ops_manager_instance() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 117
def ops_manager_instance
  @ops_manager_instance ||= find_vm_instance('RELEASE-CANDIATE')
end
output(key) click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 99
def output(key)
  output = outputs.detect { |o| o.key == key }
  return output.value unless output.nil?
  ''
rescue ::AWS::CloudFormation::Errors::ValidationError
  ''
end
outputs() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 107
def outputs
  @outputs ||= @cloud_formation.stacks[@stack_name].outputs
rescue ::AWS::CloudFormation::Errors::ValidationError
  @outputs = {}
end
previous_version_elastic_ip() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 121
def previous_version_elastic_ip
  @previous_version_elastic_ip ||= previous_version_instance ? previous_version_instance.elastic_ip : nil
end
previous_version_instance() click to toggle source
# File lib/opsmgr/renderer/aws.rb, line 125
def previous_version_instance
  @previous_version_instance ||= find_vm_instance('PREVIOUS-VERSION')
end