lib/vagrant-vcloud/action/inventory_check.rb in vagrant-vcloud-0.1.2 vs lib/vagrant-vcloud/action/inventory_check.rb in vagrant-vcloud-0.2.0
- old
+ new
@@ -1,75 +1,81 @@
-require "etc"
-require "log4r"
+require 'etc'
module VagrantPlugins
module VCloud
module Action
class InventoryCheck
-
def initialize(app, env)
@app = app
- @logger = Log4r::Logger.new("vagrant_vcloud::action::inventory_check")
+ @logger = Log4r::Logger.new('vagrant_vcloud::action::inventory_check')
end
def call(env)
vcloud_check_inventory(env)
-
+
@app.call env
end
def vcloud_upload_box(env)
-
cfg = env[:machine].provider_config
cnx = cfg.vcloud_cnx.driver
- boxDir = env[:machine].box.directory.to_s
- boxFile = env[:machine].box.name.to_s
+ box_dir = env[:machine].box.directory.to_s
+ box_file = env[:machine].box.name.to_s
- boxOVF = "#{boxDir}/#{boxFile}.ovf"
+ box_ovf = "#{box_dir}/#{box_file}.ovf"
- # Still relying on ruby-progressbar because report_progress basically sucks.
-
- @logger.debug("OVF File: #{boxOVF}")
- uploadOVF = cnx.upload_ovf(
+ # Still relying on ruby-progressbar because report_progress
+ # basically sucks.
+ @logger.debug("OVF File: #{box_ovf}")
+ upload_ovf = cnx.upload_ovf(
cfg.vdc_id,
env[:machine].box.name.to_s,
- "Vagrant Box",
- boxOVF,
+ 'Vagrant Box',
+ box_ovf,
cfg.catalog_id,
{
- :progressbar_enable => true
- # FIXME: export chunksize as a parameter and lower the default to 1M.
- #:chunksize => 262144
+ :progressbar_enable => true,
+ :chunksize => (cfg.upload_chunksize || 1_048_576)
}
)
- env[:ui].info("Adding [#{env[:machine].box.name.to_s}] to Catalog [#{cfg.catalog_name}]")
- addOVFtoCatalog = cnx.wait_task_completion(uploadOVF)
+ env[:ui].info(
+ "Adding [#{env[:machine].box.name.to_s}] to " +
+ "Catalog [#{cfg.catalog_name}]"
+ )
+ add_ovf_to_catalog = cnx.wait_task_completion(upload_ovf)
- if !addOVFtoCatalog[:errormsg].nil?
- raise Errors::CatalogAddError, :message => addOVFtoCatalog[:errormsg]
+ unless add_ovf_to_catalog[:errormsg].nil?
+ fail Errors::CatalogAddError,
+ :message => add_ovf_to_catalog[:errormsg]
end
# Retrieve catalog_item ID
- cfg.catalog_item = cnx.get_catalog_item_by_name(cfg.catalog_id, env[:machine].box.name.to_s)
-
+ cfg.catalog_item = cnx.get_catalog_item_by_name(
+ cfg.catalog_id,
+ env[:machine].box.name.to_s
+ )
end
def vcloud_create_catalog(env)
cfg = env[:machine].provider_config
cnx = cfg.vcloud_cnx.driver
- catalogCreation = cnx.create_catalog(cfg.org_id, cfg.catalog_name, "Created by #{Etc.getlogin} running on #{Socket.gethostname.downcase} using vagrant-vcloud on #{Time.now.strftime("%B %d, %Y")}")
- cnx.wait_task_completion(catalogCreation[:task_id])
+ catalog_creation = cnx.create_catalog(
+ cfg.org_id,
+ cfg.catalog_name,
+ "Created by #{Etc.getlogin} " +
+ "running on #{Socket.gethostname.downcase} " +
+ "using vagrant-vcloud on #{Time.now.strftime("%B %d, %Y")}"
+ )
+ cnx.wait_task_completion(catalog_creation[:task_id])
- @logger.debug("Catalog Creation result: #{catalogCreation.inspect}")
-
+ @logger.debug("Catalog Creation result: #{catalog_creation.inspect}")
env[:ui].info("Catalog [#{cfg.catalog_name}] successfully created.")
- cfg.catalog_id = catalogCreation[:catalog_id]
-
+ cfg.catalog_id = catalog_creation[:catalog_id]
end
def vcloud_check_inventory(env)
# Will check each mandatory config value against the vCloud Director
# Instance and will setup the global environment config values
@@ -81,75 +87,96 @@
cfg.vdc = cnx.get_vdc_by_name(cfg.org, cfg.vdc_name)
cfg.vdc_id = cnx.get_vdc_id_by_name(cfg.org, cfg.vdc_name)
cfg.catalog = cnx.get_catalog_by_name(cfg.org, cfg.catalog_name)
-
cfg.catalog_id = cnx.get_catalog_id_by_name(cfg.org, cfg.catalog_name)
if cfg.catalog_id.nil?
env[:ui].warn("Catalog [#{cfg.catalog_name}] does not exist!")
user_input = env[:ui].ask(
- "Would you like to create the [#{cfg.catalog_name}] catalog?\nChoice (yes/no): "
+ "Would you like to create the [#{cfg.catalog_name}] catalog?\n" +
+ 'Choice (yes/no): '
)
- if user_input.downcase == "yes" || user_input.downcase == "y"
+ if user_input.downcase == 'yes' || user_input.downcase == 'y'
vcloud_create_catalog(env)
else
- env[:ui].error("Catalog not created, exiting...")
+ env[:ui].error('Catalog not created, exiting...')
# FIXME: wrong error message
- raise VagrantPlugins::VCloud::Errors::VCloudError,
- :message => "Catalog not available, exiting..."
+ raise VagrantPlugins::VCloud::Errors::VCloudError,
+ :message => 'Catalog not available, exiting...'
end
end
-
- @logger.debug("Getting catalog item with cfg.catalog_id: [#{cfg.catalog_id}] and machine name [#{env[:machine].box.name.to_s}]")
- cfg.catalog_item = cnx.get_catalog_item_by_name(cfg.catalog_id, env[:machine].box.name.to_s)
+ @logger.debug(
+ "Getting catalog item with cfg.catalog_id: [#{cfg.catalog_id}] " +
+ "and machine name [#{env[:machine].box.name.to_s}]"
+ )
+ cfg.catalog_item = cnx.get_catalog_item_by_name(
+ cfg.catalog_id,
+ env[:machine].box.name.to_s
+ )
+
@logger.debug("Catalog item is now #{cfg.catalog_item}")
+
+ # This only works with Org Admin role or higher
cfg.vdc_network_id = cfg.org[:networks][cfg.vdc_network_name]
+ if !cfg.vdc_network_id
+ # TEMP FIX: permissions issues at the Org Level for vApp authors
+ # to "view" Org vDC Networks but they can see them at the
+ # Organization vDC level (tsugliani)
+ cfg.vdc_network_id = cfg.vdc[:networks][cfg.vdc_network_name]
+ if !cfg.vdc_network_id
+ raise 'vCloud User credentials has insufficient privileges'
+ end
+ end
-
# Checking Catalog mandatory requirements
if !cfg.catalog_id
@logger.info("Catalog [#{cfg.catalog_name}] STILL does not exist!")
# FIXME: wrong error message
- raise VagrantPlugins::VCloud::Errors::VCloudError,
- :message => "Catalog not available, exiting..."
+ raise VagrantPlugins::VCloud::Errors::VCloudError,
+ :message => 'Catalog not available, exiting...'
else
@logger.info("Catalog [#{cfg.catalog_name}] exists")
end
if !cfg.catalog_item
- env[:ui].warn("Catalog item [#{env[:machine].box.name.to_s}] in Catalog [#{cfg.catalog_name}] does not exist!")
+ env[:ui].warn(
+ "Catalog item [#{env[:machine].box.name.to_s}] " +
+ "in Catalog [#{cfg.catalog_name}] does not exist!"
+ )
user_input = env[:ui].ask(
- "Would you like to upload the [#{env[:machine].box.name.to_s}] box to "\
- "[#{cfg.catalog_name}] Catalog?\nChoice (yes/no): "
+ "Would you like to upload the [#{env[:machine].box.name.to_s}] " +
+ "box to [#{cfg.catalog_name}] Catalog?\n" +
+ 'Choice (yes/no): '
)
- if user_input.downcase == "yes" || user_input.downcase == "y"
+ if user_input.downcase == 'yes' || user_input.downcase == 'y'
env[:ui].info("Uploading [#{env[:machine].box.name.to_s}]...")
vcloud_upload_box(env)
else
- env[:ui].error("Catalog item not available, exiting...")
+ env[:ui].error('Catalog item not available, exiting...')
# FIXME: wrong error message
- raise VagrantPlugins::VCloud::Errors::VCloudError,
- :message => "Catalog item not available, exiting..."
-
+ raise VagrantPlugins::VCloud::Errors::VCloudError,
+ :message => 'Catalog item not available, exiting...'
end
else
- @logger.info("Using catalog item [#{env[:machine].box.name.to_s}] in Catalog [#{cfg.catalog_name}]...")
+ @logger.info(
+ "Using catalog item [#{env[:machine].box.name.to_s}] " +
+ "in Catalog [#{cfg.catalog_name}]..."
+ )
end
end
-
end
end
end
end