Class: OneviewSDK::ImageStreamer::API300::ArtifactBundle

Inherits:
Resource show all
Defined in:
lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb

Overview

Artifacts Bundle resource implementation for Image Streamer

Constant Summary collapse

ACCEPTED_FORMATS =

Supported upload extensions

%w[.zip .ZIP].freeze
BASE_URI =
'/rest/artifact-bundles'.freeze
BACKUPS_URI =
"#{BASE_URI}/backups".freeze
BACKUPS_ARCHIVE_URI =
"#{BACKUPS_URI}/archive".freeze

Constants inherited from Resource

Resource::DEFAULT_REQUEST_HEADER, Resource::UNIQUE_IDENTIFIERS

Instance Attribute Summary

Attributes inherited from Resource

#api_version, #client, #data, #logger

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Resource

#==, #[], #[]=, build_query, #create, #create!, #deep_merge!, #delete, #each, #eql?, #exists?, find_by, find_with_pagination, from_file, get_all, get_all_with_query, #like?, #refresh, #retrieve!, schema, #schema, #set, #set_all, #to_file

Constructor Details

#initialize(client, params = {}, api_ver = nil) ⇒ ArtifactBundle

Create a resource object, associate it with a client, and set its properties.



29
30
31
32
33
34
35
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 29

def initialize(client, params = {}, api_ver = nil)
  super
  @data['buildPlans']      ||= []
  @data['planScripts']     ||= []
  @data['deploymentPlans'] ||= []
  @data['goldenImages']    ||= []
end

Class Method Details

.create_backup(client, deployment_group) ⇒ Hash

Creates a backup bundle with all the artifacts present on the appliance.



68
69
70
71
72
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 68

def self.create_backup(client, deployment_group)
  ensure_resource!(deployment_group)
  response = client.rest_post(BACKUPS_URI, 'body' => { 'deploymentGroupURI' => deployment_group['uri'] })
  client.response_handler(response)
end

.create_backup_from_file!(client, deployment_group, file_path, artifact_name = nil, timeout = OneviewSDK::Rest::READ_TIMEOUT) ⇒ Hash

Creates a backup bundle from the zip file and extract all the artifacts present in the uploaded file

If there are any artifacts existing, they will be removed before the extract operation.


81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 81

def self.create_backup_from_file!(client, deployment_group, file_path, artifact_name = nil, timeout = OneviewSDK::Rest::READ_TIMEOUT)
  ensure_resource!(deployment_group)
  ensure_file_path_extension!(file_path)

  file_name = if artifact_name && !artifact_name.empty?
                artifact_name + File.extname(file_path)
              else
                File.basename(file_path)
              end

  params = { 'deploymentGrpUri' => deployment_group['uri'] }
  client.upload_file(file_path, BACKUPS_ARCHIVE_URI, { 'file_name' => file_name, 'body' => params }, timeout)
end

.create_from_file(client, file_path, artifact_name, timeout = OneviewSDK::Rest::READ_TIMEOUT) ⇒ OneviewSDK::ImageStreamer::API300::ArtifactBundle

Creates an artifact bundle resource from the file that is uploaded from admin’s local drive



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 43

def self.create_from_file(client, file_path, artifact_name, timeout = OneviewSDK::Rest::READ_TIMEOUT)
  ensure_file_path_extension!(file_path)

  file_name = artifact_name.dup
  if file_name && !file_name.empty?
    file_name += File.extname(file_path)
  else
    file_name = File.basename(file_path)
  end

  body = client.upload_file(file_path, BASE_URI, { 'file_name' => file_name }, timeout)
  ArtifactBundle.new(client, body)
end

.download_backup(client, local_drive_path, bundle_backup) ⇒ Boolean

Download the backup bundle

Raises:



100
101
102
103
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 100

def self.download_backup(client, local_drive_path, bundle_backup)
  raise IncompleteResource, "Missing required attribute 'downloadURI'" unless bundle_backup['downloadURI']
  client.download_file(bundle_backup['downloadURI'], local_drive_path)
end

.ensure_file_path_extension!(file_path) ⇒ Object

Fail unless file extension of file_path is in ACCEPTED_FORMATS array

Raises:



196
197
198
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 196

def self.ensure_file_path_extension!(file_path)
  raise InvalidFormat, "File extension should be #{ACCEPTED_FORMATS}" unless ACCEPTED_FORMATS.include?(File.extname(file_path))
end

.ensure_resource!(resource) ⇒ Object

Fail unless resource can be retrieved

Raises:



191
192
193
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 191

def self.ensure_resource!(resource)
  raise IncompleteResource, "The resource #{resource.class} can not be retrieved. Ensure it can be retrieved." unless resource.retrieve!
end

.extract_backup(client, deployment_group, bundle_backup) ⇒ Boolean

Extracts the existing backup bundle on the appliance and creates all the artifacts.

If there are any artifacts existing, they will be removed before the extract operation.

Raises:



111
112
113
114
115
116
117
118
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 111

def self.extract_backup(client, deployment_group, bundle_backup)
  ensure_resource!(deployment_group)
  raise IncompleteResource, "Missing required attribute 'uri' of backup bundle" unless bundle_backup['uri']
  id = bundle_backup['uri'].split('/').last
  response = client.rest_put("#{BACKUPS_URI}/#{id}", 'body' => { 'deploymentGroupURI' => deployment_group['uri'] })
  client.response_handler(response)
  true
end

.get_backups(client) ⇒ Array<ArtifactBundle>

Gets the backup bundles created



60
61
62
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 60

def self.get_backups(client)
  find_by(client, {}, BACKUPS_URI)
end

Instance Method Details

#add_build_plan(resource, read_only = true) ⇒ Object

Add a Build Plan to this ArtifactBundle

Raises:

  • (RuntimeError)

    if the BuildPlan uri is not set or it is not valid



162
163
164
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 162

def add_build_plan(resource, read_only = true)
  add_resource(resource, 'buildPlans', read_only)
end

#add_deployment_plan(resource, read_only = true) ⇒ Object

Add a Deployment Plan to this ArtifactBundle

Raises:

  • (RuntimeError)

    if the DeploymentPlans uri is not set or it is not valid



178
179
180
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 178

def add_deployment_plan(resource, read_only = true)
  add_resource(resource, 'deploymentPlans', read_only)
end

#add_golden_image(resource, read_only = true) ⇒ Object

Add a Golden Image to this ArtifactBundle

Raises:

  • (RuntimeError)

    if the GoldenImage uri is not set or it is not valid



186
187
188
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 186

def add_golden_image(resource, read_only = true)
  add_resource(resource, 'goldenImages', read_only)
end

#add_plan_script(resource, read_only = true) ⇒ Object

Add a Plan Script to this ArtifactBundle

Raises:

  • (RuntimeError)

    if the PlanScripts uri is not set or it is not valid



170
171
172
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 170

def add_plan_script(resource, read_only = true)
  add_resource(resource, 'planScripts', read_only)
end

#download(local_drive_path) ⇒ Boolean

Downloads the content of the selected artifact bundle to the admin’s local drive.

Raises:



153
154
155
156
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 153

def download(local_drive_path)
  raise IncompleteResource, "Missing required attribute 'downloadURI'" unless @data['downloadURI']
  client.download_file(@data['downloadURI'], local_drive_path)
end

#extract(force = true) ⇒ Boolean

Extracts the artifact bundle and creates the artifacts on the appliance

Raises:



142
143
144
145
146
147
148
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 142

def extract(force = true)
  ensure_uri
  options = { 'Content-Type' => 'text/plain' }
  response = @client.rest_put(@data['uri'] + "?extract=true&forceImport=#{force}", options)
  @client.response_handler(response)
  true
end

#updateObject

Method is not available

Raises:



122
123
124
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 122

def update(*)
  unavailable_method
end

#update_name(new_name) ⇒ Boolean

Update the name of Artifact Bundle

Raises:



130
131
132
133
134
135
136
# File 'lib/oneview-sdk/image-streamer/resource/api300/artifact_bundle.rb', line 130

def update_name(new_name)
  ensure_uri
  response = @client.rest_put(@data['uri'], 'body' => { 'name' => new_name, 'type' => 'ArtifactsBundle' })
  @client.response_handler(response)
  @data['name'] = new_name
  true
end