Module: Sitefull::Provider::Amazon

Includes:
Networking
Defined in:
lib/sitefull-cloud/provider/amazon.rb,
lib/sitefull-cloud/provider/amazon/networking.rb

Defined Under Namespace

Modules: Networking

Constant Summary collapse

REQUIRED_OPTIONS =
%w(role_arn session_name).freeze
MACHINE_TYPES =
%w(t2.nano t2.micro t2.small t2.medium t2.large m4.large m4.xlarge m4.2xlarge m4.4xlarge m4.10xlarge m3.medium m3.large m3.xlarge m3.2xlarge).freeze
DEFAULT_REGION =
'us-east-1'.freeze
WAIT =
2.freeze
INSTANCE_RUNNING_STATE =
'running'.freeze

Constants included from Networking

Networking::SUBNET_CIDR_BLOCK, Networking::TEMPLATE_TAG, Networking::VPC_CIDR_BLOCK

Instance Method Summary collapse

Instance Method Details

#connectionObject



21
22
23
# File 'lib/sitefull-cloud/provider/amazon.rb', line 21

def connection
  @connection ||= Aws::EC2::Client.new(region: options[:region], credentials: credentials)
end

#create_firewall_rulesObject



50
51
52
# File 'lib/sitefull-cloud/provider/amazon.rb', line 50

def create_firewall_rules
  setup_security_group
end

#create_instance(_name, machine_type, image, network_id, key) ⇒ Object



55
56
57
58
59
60
61
# File 'lib/sitefull-cloud/provider/amazon.rb', line 55

def create_instance(_name, machine_type, image, network_id, key)
  instance = connection.run_instances(image_id: image, instance_type: machine_type,
                                      subnet_id: network_id, key_name: key.name,
                                      security_group_ids: [security_group.group_id], min_count: 1, max_count: 1).instances.first
  sleep WAIT unless instance(instance.instance_id).state.name == INSTANCE_RUNNING_STATE
  instance.instance_id
end

#create_key(name) ⇒ Object



45
46
47
48
# File 'lib/sitefull-cloud/provider/amazon.rb', line 45

def create_key(name)
  connection.import_key_pair(key_name: name, public_key_material: "ssh-rsa #{key_data[:public_key]}")
  OpenStruct.new(key_data)
end

#create_networkObject



38
39
40
41
42
43
# File 'lib/sitefull-cloud/provider/amazon.rb', line 38

def create_network
  setup_vpc
  setup_internet_gateway
  setup_routing
  subnet.subnet_id
end

#images(os) ⇒ Object



33
34
35
36
# File 'lib/sitefull-cloud/provider/amazon.rb', line 33

def images(os)
  filters = [{ name: 'name', values: ["#{os}*", "#{os.downcase}*"] }, { name: 'is-public', values: ['true'] }, { name: 'virtualization-type', values: ['hvm'] }]
  connection.describe_images(filters: filters).images.select { |i| i.image_owner_alias.nil? }.map { |i| OpenStruct.new(id: i.image_id, name: i.name) }
end

#instance_data(instance_id) ⇒ Object



63
64
65
# File 'lib/sitefull-cloud/provider/amazon.rb', line 63

def instance_data(instance_id)
  OpenStruct.new(id: instance_id, public_ip: instance(instance_id).public_ip_address)
end

#machine_types(_) ⇒ Object



29
30
31
# File 'lib/sitefull-cloud/provider/amazon.rb', line 29

def machine_types(_)
  MACHINE_TYPES.map { |mt| OpenStruct.new(id: mt, name: mt) }
end

#process(options = {}) ⇒ Object



16
17
18
19
# File 'lib/sitefull-cloud/provider/amazon.rb', line 16

def process(options = {})
  options[:region] ||= DEFAULT_REGION
  options
end

#regionsObject



25
26
27
# File 'lib/sitefull-cloud/provider/amazon.rb', line 25

def regions
  @regions ||= connection.describe_regions.regions.map { |r| OpenStruct.new(id: r.region_name, name: r.region_name) }
end

#valid?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/sitefull-cloud/provider/amazon.rb', line 67

def valid?
  !connection.nil?
end