Class: CloudManager::Configuration::Service::EC2

Inherits:
AbstractService show all
Defined in:
lib/cloud_manager/configuration/service/ec2.rb

Overview

Service class, that handles Amazon EC2 services configuration.

Since:

  • 0.1.0

Instance Attribute Summary collapse

Attributes inherited from AbstractService

#base_configuration

Instance Method Summary collapse

Constructor Details

#initialize(config, default_region, base_configuration) ⇒ EC2

Returns a new instance of EC2 service.

Initializes the configured machines, the AWS EC2 client and resource.

Parameters:

  • config (Hash)

    the EC2 service configuration

  • default_region (String)

    the default AWS region

  • base_configuration (Configuration)

    the base Configuration object that holds this service

Since:

  • 0.1.0



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 38

def initialize(config, default_region, base_configuration)
  super(base_configuration)

  @default_region = default_region
  @config = config
  @client = @default_region ? Aws::EC2::Client.new(region: @default_region) : Aws::EC2::Client.new
  @resource = Aws::EC2::Resource.new(client: @client)
  @machines = {}

  @config.each do |machine_alias, machine_config|
    @machines[machine_alias] = EC2Machine.new(machine_alias, machine_config, self)
  end
end

Instance Attribute Details

#clientAws::EC2::Client (readonly)

Returns:

Since:

  • 0.1.0



21
22
23
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 21

def client
  @client
end

#configHash (readonly)

Returns the service configuration.

Returns:

  • (Hash)

    the service configuration.

Since:

  • 0.1.0



15
16
17
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 15

def config
  @config
end

#default_regionString

Returns the default region.

Returns:

  • (String)

    the default region

Since:

  • 0.1.0



27
28
29
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 27

def default_region
  @default_region
end

#machinesHash (readonly)

Returns the machine objects.

Returns:

  • (Hash)

    the machine objects.

Since:

  • 0.1.0



18
19
20
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 18

def machines
  @machines
end

#resourceAws::EC2::Resource (readonly)

Returns the AWS EC2 resource, created for the client – docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Resource.html.

Returns:

Since:

  • 0.1.0



24
25
26
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 24

def resource
  @resource
end

Instance Method Details

#dns_names_of(machine_alias) ⇒ Array<String>

Returns the DNS name list for the given machine.

Parameters:

  • machine_alias (String)

Returns:

  • (Array<String>)

    DNS names of the given machine

Since:

  • 0.1.0



86
87
88
89
90
91
92
93
94
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 86

def dns_names_of(machine_alias)
  dns_names = []

  if @machines.has_key?(machine_alias)
    dns_names.concat(@machines[machine_alias].dns_names)
  end

  dns_names
end

#instance_idsArray<String> (private)

Returns the AWS EC2 instance id list for all machines

Returns:

  • (Array<String>)

    the instance ids

Since:

  • 0.1.0



101
102
103
104
105
106
107
108
109
110
111
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 101

def instance_ids
  ids = []

  @machines.each do |_machine_alias, machine|
    machine.instances.each do |machine_instance|
      ids.push(machine_instance.id)
    end
  end

  ids
end

#ips_of(machine_alias) ⇒ Array<String>

Returns the IP list for the given machine.

Parameters:

  • machine_alias (String)

Returns:

  • (Array<String>)

    IPs of the given machine

Since:

  • 0.1.0



72
73
74
75
76
77
78
79
80
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 72

def ips_of(machine_alias)
  ips = []

  if @machines.has_key?(machine_alias)
    ips.concat(@machines[machine_alias].ips)
  end

  ips
end

#managevoid

This method returns an undefined value.

Starts the configured AWS services.

Since:

  • 0.1.0



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/cloud_manager/configuration/service/ec2.rb', line 55

def manage
  # start every machine
  @machines.each do |machine_alias, machine|
    puts '    - managing machine ' + machine_alias
    machine.start
  end

  # wait until all machines are running
  print '    - waiting all machines to start... '
  @client.wait_until(:instance_running, {instance_ids: instance_ids})
  puts 'OK'
end