Module: Cloudkeeper::Aws::BackendExecutor

Included in:
CoreConnector
Defined in:
lib/cloudkeeper/aws/backend_executor.rb

Overview

Module handling complex operations on cloud backend

Instance Method Summary collapse

Instance Method Details

#change_tags(appliance) ⇒ Object



43
44
45
46
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 43

def change_tags(appliance)
  image = cloud.find_appliance(appliance.identifier)
  cloud.set_tags(ProtoHelper.appliance_to_tags(appliance), image.image_id)
end

#deregister_expired_appliancesObject



66
67
68
69
70
71
72
73
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 66

def deregister_expired_appliances
  images = cloud.search_images(FilterHelper.cloudkeeper_instance)
  appliances = images.map { |image| ProtoHelper.appliance_from_tags(image.tags) }
  appliances.keep_if { |appliance| appliance.expiration_date <= Time.now.to_i }

  logger.debug { "Expired appliances #{appliances.map(&:identifier).inspect}" }
  appliances.each { |expired| deregister_image(expired) }
end

#deregister_image(appliance) ⇒ Object



32
33
34
35
36
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 32

def deregister_image(appliance)
  logger.debug { "Deregistering appliance #{appliance.identifier}" }
  image = cloud.find_appliance(appliance.identifier)
  cloud.deregister_image(image.image_id)
end

#deregister_image_list(image_list_identifier) ⇒ Object



48
49
50
51
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 48

def deregister_image_list(image_list_identifier)
  images = cloud.search_images(FilterHelper.image_list(image_list_identifier.image_list_identifier))
  images.each { |image| cloud.deregister_image(image.image_id) }
end

#fetch_appliances(image_list_identifier) ⇒ Object



61
62
63
64
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 61

def fetch_appliances(image_list_identifier)
  images = cloud.search_images(FilterHelper.image_list(image_list_identifier.image_list_identifier))
  images.map { |image| ProtoHelper.appliance_from_tags(image.tags) }
end

#list_image_listsObject



53
54
55
56
57
58
59
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 53

def list_image_lists
  images = cloud.search_images(FilterHelper.all_image_lists)
  image_list_identifiers = images.map do |image|
    image.tags.find { |tag| tag['key'] == FilterHelper::TAG_APPLIANCE_IMAGE_LIST_IDENTIFIER }['value']
  end
  image_list_identifiers.uniq.map { |ili| CloudkeeperGrpc::ImageListIdentifier.new(image_list_identifier: ili) }
end

#modify_appliance(appliance) ⇒ Object



38
39
40
41
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 38

def modify_appliance(appliance)
  deregister_image(appliance)
  register_appliance(appliance)
end

#register_appliance(appliance) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 24

def register_appliance(appliance)
  upload_appliance(appliance)
  image_id = cloud.poll_import_task(cloud.start_import_image(appliance))
  cloud.set_tags(ProtoHelper.appliance_to_tags(appliance), image_id)
ensure
  cloud.delete_data(appliance.identifier)
end

#upload_appliance(appliance) ⇒ Object



19
20
21
22
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 19

def upload_appliance(appliance)
  upload_remote_appliance(appliance) if appliance.image.mode == :REMOTE
  upload_local_appliance(appliance) if appliance.image.mode == :LOCAL
end

#upload_local_appliance(appliance) ⇒ Object



5
6
7
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 5

def upload_local_appliance(appliance)
  cloud.upload_file(appliance.identifier, appliance.image.location)
end

#upload_remote_appliance(appliance) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/cloudkeeper/aws/backend_executor.rb', line 9

def upload_remote_appliance(appliance)
  cloud.upload_data(appliance.identifier) do |write_stream|
    ImageDownloader.download(appliance.image.location,
                             appliance.image.username,
                             appliance.image.password) do |image_segment|
                               write_stream << image_segment
                             end
  end
end