Class: VCloudSdk::Catalog

Inherits:
Object
  • Object
show all
Includes:
Infrastructure
Defined in:
lib/ruby_vcloud_sdk/catalog.rb

Constant Summary

Constants included from Infrastructure

Infrastructure::ERROR_STATUSES, Infrastructure::SUCCESS_STATUS

Instance Method Summary collapse

Constructor Details

#initialize(session, link) ⇒ Catalog

Returns a new instance of Catalog.



10
11
12
13
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 10

def initialize(session, link)
  @session = session
  @link = link
end

Instance Method Details

#delete_all_itemsObject



63
64
65
66
67
68
69
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 63

def delete_all_items
  admin_xml.catalog_items.map do |link|
    Config.logger.info "Deleting catalog item \"#{link.name}\""
    delete_item_by_link(link)
  end
  self
end

#delete_item_by_name_and_type(name, item_type = nil) ⇒ Object



54
55
56
57
58
59
60
61
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 54

def delete_item_by_name_and_type(name, item_type = nil)
  link = find_item_link(name)
  item = VCloudSdk::CatalogItem.new(@session, link)

  check_item_type(item, item_type)
  delete_item_by_link(link)
  self
end

#find_item(name, item_type = nil) ⇒ Object

Find catalog item from catalog by name and type. If item_type is set to nil, returns catalog item as long as its name match. Raises an exception if catalog is not found. Raises ObjectNotFoundError if an item matching the name and type is not found. Otherwise, returns the catalog item.



40
41
42
43
44
45
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 40

def find_item(name, item_type = nil)
  link = find_item_link(name)
  item = VCloudSdk::CatalogItem.new(@session, link)
  check_item_type(item, item_type)
  item
end

#find_media_by_name(name) ⇒ Object



103
104
105
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 103

def find_media_by_name(name)
  find_item(name, Xml::MEDIA_TYPE[:MEDIA])
end

#find_vapp_template_by_name(name) ⇒ Object



135
136
137
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 135

def find_vapp_template_by_name(name)
  find_item(name, Xml::MEDIA_TYPE[:VAPP_TEMPLATE])
end

#idObject



19
20
21
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 19

def id
  @link.href_id
end

#instantiate_vapp_template(template_name, vdc_name, vapp_name, description = nil, disk_locality = nil, network_config = nil) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 139

def instantiate_vapp_template(template_name, vdc_name, vapp_name,
    description = nil, disk_locality = nil, network_config = nil)

  instantiate_vapp_params = create_instantiate_vapp_params(
      template_name, vapp_name, description, disk_locality, network_config)

  vdc = find_vdc_by_name vdc_name

  vapp = connection.post(vdc.instantiate_vapp_template_link,
                         instantiate_vapp_params)
  vapp.running_tasks.each do |task|
    begin
      monitor_task(task, @session.time_limit[:instantiate_vapp_template])
    rescue ApiError => e
      Config.logger.error(e, "Instantiate vApp template #{vapp_name} " +
          "failed. Task #{task.operation} did not complete successfully.")
      raise e
    end
  end

  vdc = find_vdc_by_name vdc_name # Refresh information about vdc
  vdc.find_vapp_by_name vapp_name
end

#item_exists?(name, item_type = nil) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 47

def item_exists?(name, item_type = nil)
  items.any? do |item|
    item.name == name &&
      (item_type.nil? || item.type == item_type)
  end
end

#itemsObject



23
24
25
26
27
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 23

def items
  admin_xml.catalog_items.map do |item|
    VCloudSdk::CatalogItem.new(@session, item)
  end
end

#list_itemsObject



29
30
31
32
33
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 29

def list_items
  admin_xml.catalog_items.map do |item_link|
    item_link.name
  end
end

#nameObject



15
16
17
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 15

def name
  admin_xml.name
end

#upload_media(vdc_name, media_name, file, storage_profile_name = nil, image_type = "iso") ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 71

def upload_media(
    vdc_name,
    media_name,
    file,
    storage_profile_name = nil,
    image_type = "iso")

  if item_exists?(media_name)
    fail CloudError,
         "Catalog Item '#{media_name}' already exists in catalog #{name}"
  end

  Config.logger.info %Q{
     Uploading file #{file}
     as media #{media_name} of type #{image_type}
     to catalog #{name}, storage profile #{storage_profile_name}, vdc #{vdc_name}
  }

  media_file = file.is_a?(String) ? File.new(file, "rb") : file

  vdc = find_vdc_by_name vdc_name

  storage_profile = vdc.storage_profile_xml_node storage_profile_name

  media = upload_media_params media_name, vdc, media_file, image_type, storage_profile

  media = upload_media_file media, media_file

  add_item(media)
  find_media_by_name(media_name)
end

#upload_vapp_template(vdc_name, template_name, directory, storage_profile_name = nil) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/ruby_vcloud_sdk/catalog.rb', line 107

def upload_vapp_template(
    vdc_name,
    template_name,
    directory,
    storage_profile_name = nil)
  if item_exists?(template_name)
    fail CloudError,
         "vApp template '#{template_name}' already exists in catalog #{name}"
  end

  vdc = find_vdc_by_name vdc_name

  storage_profile = vdc.storage_profile_xml_node storage_profile_name

  Config.logger.info "Uploading vApp #{template_name} to #{vdc.name}"
  vapp_template = upload_vapp_template_params(template_name, vdc, storage_profile)

  vapp_template = upload_vapp_files(vapp_template, ovf_directory(directory))

  validate_vapp_template_tasks vapp_template

  Config.logger.info %Q{
    Template #{template_name} uploaded, adding to catalog #{name}.
  }
  add_item(vapp_template)
  find_vapp_template_by_name(template_name)
end