virtengine_api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.travis.yml +11 -0
- data/Gemfile +5 -0
- data/LICENSE +21 -0
- data/README.md +27 -0
- data/Rakefile +10 -0
- data/lib/megam/api.rb +329 -0
- data/lib/megam/api/accounts.rb +96 -0
- data/lib/megam/api/addons.rb +27 -0
- data/lib/megam/api/assemblies.rb +49 -0
- data/lib/megam/api/assembly.rb +56 -0
- data/lib/megam/api/backups.rb +57 -0
- data/lib/megam/api/balances.rb +45 -0
- data/lib/megam/api/billedhistories.rb +35 -0
- data/lib/megam/api/billingtransactions.rb +25 -0
- data/lib/megam/api/components.rb +24 -0
- data/lib/megam/api/credits.rb +34 -0
- data/lib/megam/api/disks.rb +44 -0
- data/lib/megam/api/domains.rb +25 -0
- data/lib/megam/api/errors.rb +29 -0
- data/lib/megam/api/eventsall.rb +36 -0
- data/lib/megam/api/eventsbilling.rb +35 -0
- data/lib/megam/api/eventscontainer.rb +35 -0
- data/lib/megam/api/eventsmarketplace.rb +35 -0
- data/lib/megam/api/eventsstorage.rb +24 -0
- data/lib/megam/api/eventsvm.rb +35 -0
- data/lib/megam/api/flavors.rb +56 -0
- data/lib/megam/api/license.rb +26 -0
- data/lib/megam/api/marketplaces.rb +68 -0
- data/lib/megam/api/organizations.rb +50 -0
- data/lib/megam/api/promos.rb +18 -0
- data/lib/megam/api/quotas.rb +47 -0
- data/lib/megam/api/rawimages.rb +36 -0
- data/lib/megam/api/reports.rb +24 -0
- data/lib/megam/api/requests.rb +36 -0
- data/lib/megam/api/sensors.rb +35 -0
- data/lib/megam/api/snapshots.rb +46 -0
- data/lib/megam/api/sshkeys.rb +35 -0
- data/lib/megam/api/subscriptions.rb +26 -0
- data/lib/megam/api/version.rb +6 -0
- data/lib/megam/core/account.rb +245 -0
- data/lib/megam/core/account_collection.rb +122 -0
- data/lib/megam/core/addons.rb +169 -0
- data/lib/megam/core/addons_collection.rb +121 -0
- data/lib/megam/core/assemblies.rb +191 -0
- data/lib/megam/core/assemblies_collection.rb +122 -0
- data/lib/megam/core/assembly.rb +226 -0
- data/lib/megam/core/assembly_collection.rb +122 -0
- data/lib/megam/core/backups.rb +259 -0
- data/lib/megam/core/backups_collection.rb +122 -0
- data/lib/megam/core/balances.rb +187 -0
- data/lib/megam/core/balances_collection.rb +121 -0
- data/lib/megam/core/billedhistories.rb +190 -0
- data/lib/megam/core/billedhistories_collection.rb +121 -0
- data/lib/megam/core/billingtransactions.rb +214 -0
- data/lib/megam/core/billingtransactions_collection.rb +122 -0
- data/lib/megam/core/components.rb +326 -0
- data/lib/megam/core/components_collection.rb +123 -0
- data/lib/megam/core/credits.rb +146 -0
- data/lib/megam/core/credits_collection.rb +121 -0
- data/lib/megam/core/disks.rb +199 -0
- data/lib/megam/core/disks_collection.rb +122 -0
- data/lib/megam/core/domain_collection.rb +122 -0
- data/lib/megam/core/domains.rb +118 -0
- data/lib/megam/core/error.rb +70 -0
- data/lib/megam/core/eventsall.rb +186 -0
- data/lib/megam/core/eventsall_collection.rb +122 -0
- data/lib/megam/core/eventsbilling.rb +174 -0
- data/lib/megam/core/eventsbilling_collection.rb +122 -0
- data/lib/megam/core/eventscontainer.rb +187 -0
- data/lib/megam/core/eventscontainer_collection.rb +122 -0
- data/lib/megam/core/eventsmarketplace.rb +187 -0
- data/lib/megam/core/eventsmarketplace_collection.rb +122 -0
- data/lib/megam/core/eventsstorage.rb +156 -0
- data/lib/megam/core/eventsstorage_collection.rb +122 -0
- data/lib/megam/core/eventsvm.rb +187 -0
- data/lib/megam/core/eventsvm_collection.rb +122 -0
- data/lib/megam/core/flavors.rb +294 -0
- data/lib/megam/core/flavors_collection.rb +121 -0
- data/lib/megam/core/json_compat.rb +289 -0
- data/lib/megam/core/konipai.rb +42 -0
- data/lib/megam/core/license.rb +101 -0
- data/lib/megam/core/license_collection.rb +122 -0
- data/lib/megam/core/log.rb +19 -0
- data/lib/megam/core/marketplace.rb +308 -0
- data/lib/megam/core/marketplace_collection.rb +123 -0
- data/lib/megam/core/monologger.rb +89 -0
- data/lib/megam/core/organizations.rb +142 -0
- data/lib/megam/core/organizations_collection.rb +121 -0
- data/lib/megam/core/promos.rb +145 -0
- data/lib/megam/core/quotas.rb +215 -0
- data/lib/megam/core/quotas_collection.rb +121 -0
- data/lib/megam/core/rawimages.rb +194 -0
- data/lib/megam/core/rawimages_collection.rb +121 -0
- data/lib/megam/core/reports.rb +176 -0
- data/lib/megam/core/reports_collection.rb +121 -0
- data/lib/megam/core/request.rb +197 -0
- data/lib/megam/core/request_collection.rb +121 -0
- data/lib/megam/core/rest_adapter.rb +44 -0
- data/lib/megam/core/sensors.rb +141 -0
- data/lib/megam/core/sensors_collection.rb +121 -0
- data/lib/megam/core/snapshots.rb +268 -0
- data/lib/megam/core/snapshots_collection.rb +122 -0
- data/lib/megam/core/sshkey.rb +173 -0
- data/lib/megam/core/sshkey_collection.rb +122 -0
- data/lib/megam/core/stuff.rb +22 -0
- data/lib/megam/core/subscriptions.rb +167 -0
- data/lib/megam/core/subscriptions_collection.rb +121 -0
- data/lib/megam/core/text.rb +87 -0
- data/lib/megam/core/text_formatter.rb +64 -0
- data/lib/megam/mixins/assemblies.rb +16 -0
- data/lib/megam/mixins/assembly.rb +59 -0
- data/lib/megam/mixins/common_deployable.rb +78 -0
- data/lib/megam/mixins/components.rb +182 -0
- data/lib/megam/mixins/megam_attributes.rb +30 -0
- data/lib/megam/mixins/outputs.rb +23 -0
- data/lib/megam/mixins/policies.rb +27 -0
- data/lib/megam_api.rb +1 -0
- data/megam_api.gemspec +26 -0
- data/test/mixins/test_assemblies.rb +113 -0
- data/test/mixins/test_assembly.rb +74 -0
- data/test/mixins/test_component.rb +19 -0
- data/test/test_accounts.rb +127 -0
- data/test/test_addons.rb +26 -0
- data/test/test_assemblies.rb +88 -0
- data/test/test_assembly.rb +37 -0
- data/test/test_backups.rb +29 -0
- data/test/test_balances.rb +38 -0
- data/test/test_billedhistories.rb +30 -0
- data/test/test_billingtranscations.rb +35 -0
- data/test/test_components.rb +42 -0
- data/test/test_credits.rb +28 -0
- data/test/test_disks.rb +25 -0
- data/test/test_domains.rb +29 -0
- data/test/test_eventsbilling.rb +30 -0
- data/test/test_eventscontainer.rb +26 -0
- data/test/test_eventsstorage.rb +12 -0
- data/test/test_eventsvm.rb +26 -0
- data/test/test_helper.rb +77 -0
- data/test/test_marketplaces.rb +38 -0
- data/test/test_organizations.rb +45 -0
- data/test/test_promos.rb +11 -0
- data/test/test_quotas.rb +33 -0
- data/test/test_reports.rb +32 -0
- data/test/test_requests.rb +95 -0
- data/test/test_sensors.rb +50 -0
- data/test/test_snapshots.rb +30 -0
- data/test/test_sshkeys.rb +50 -0
- data/test/test_subscriptions.rb +22 -0
- metadata +325 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
module Megam
|
2
|
+
class SubscriptionsCollection
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :iterator
|
6
|
+
def initialize
|
7
|
+
@subscriptions = Array.new
|
8
|
+
@subscriptions_by_name = Hash.new
|
9
|
+
@insert_after_idx = nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def all_subscriptions
|
13
|
+
@subscriptions
|
14
|
+
end
|
15
|
+
|
16
|
+
def [](index)
|
17
|
+
@subscriptions[index]
|
18
|
+
end
|
19
|
+
|
20
|
+
def []=(index, arg)
|
21
|
+
is_megam_subscriptions(arg)
|
22
|
+
@subscriptions[index] = arg
|
23
|
+
@subscriptions_by_name[arg.account_id] = index
|
24
|
+
end
|
25
|
+
|
26
|
+
def <<(*args)
|
27
|
+
args.flatten.each do |a|
|
28
|
+
is_megam_subscriptions(a)
|
29
|
+
@subscriptions << a
|
30
|
+
@subscriptions_by_name[a.account_id] =@subscriptions.length - 1
|
31
|
+
end
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
# 'push' is an alias method to <<
|
36
|
+
alias_method :push, :<<
|
37
|
+
|
38
|
+
def insert(subscriptions)
|
39
|
+
is_megam_subscriptions(subscriptions)
|
40
|
+
if @insert_after_idx
|
41
|
+
# in the middle of executing a run, so any predefs inserted now should
|
42
|
+
# be placed after the most recent addition done by the currently executing
|
43
|
+
# subscriptions
|
44
|
+
@subscriptions.insert(@insert_after_idx + 1, subscriptions)
|
45
|
+
# update name -> location mappings and register new subscriptions
|
46
|
+
@subscriptions_by_name.each_key do |key|
|
47
|
+
@subscriptions_by_name[key] += 1 if@subscriptions_by_name[key] > @insert_after_idx
|
48
|
+
end
|
49
|
+
@subscriptions_by_name[subscriptions.account_id] = @insert_after_idx + 1
|
50
|
+
@insert_after_idx += 1
|
51
|
+
else
|
52
|
+
@subscriptions << subscriptions
|
53
|
+
@subscriptions_by_name[subscriptions.account_id] =@subscriptions.length - 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def each
|
58
|
+
@subscriptions.each do |subscriptions|
|
59
|
+
yield subscriptions
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def each_index
|
64
|
+
@subscriptions.each_index do |i|
|
65
|
+
yield i
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def empty?
|
70
|
+
@subscriptions.empty?
|
71
|
+
end
|
72
|
+
|
73
|
+
def lookup(subscriptions)
|
74
|
+
lookup_by = nil
|
75
|
+
if Subscriptions.kind_of?(Megam::Subscriptions)
|
76
|
+
lookup_by = subscriptions.account_id
|
77
|
+
elsif subscriptions.kind_of?(String)
|
78
|
+
lookup_by = subscriptions
|
79
|
+
else
|
80
|
+
raise ArgumentError, "Must pass a Megam::Subscriptions or String to lookup"
|
81
|
+
end
|
82
|
+
res =@subscriptions_by_name[lookup_by]
|
83
|
+
unless res
|
84
|
+
raise ArgumentError, "Cannot find a subscriptions matching #{lookup_by} (did you define it first?)"
|
85
|
+
end
|
86
|
+
@subscriptions[res]
|
87
|
+
end
|
88
|
+
|
89
|
+
def to_s
|
90
|
+
@subscriptions.join(", ")
|
91
|
+
end
|
92
|
+
|
93
|
+
def for_json
|
94
|
+
to_a.map { |item| item.to_s }
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_json(*a)
|
98
|
+
Megam::JSONCompat.to_json(for_json, *a)
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.json_create(o)
|
102
|
+
collection = self.new()
|
103
|
+
o["results"].each do |subscriptions_list|
|
104
|
+
subscriptions_array = subscriptions_list.kind_of?(Array) ? subscriptions_list : [ subscriptions_list ]
|
105
|
+
subscriptions_array.each do |subscriptions|
|
106
|
+
collection.insert(subscriptions)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
collection
|
110
|
+
end
|
111
|
+
|
112
|
+
private
|
113
|
+
|
114
|
+
def is_megam_subscriptions(arg)
|
115
|
+
unless arg.kind_of?(Megam::Subscriptions)
|
116
|
+
raise ArgumentError, "Members must be Megam::subscriptions's"
|
117
|
+
end
|
118
|
+
true
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "megam/core/text_formatter"
|
2
|
+
module Megam
|
3
|
+
class Text
|
4
|
+
|
5
|
+
attr_reader :stdout
|
6
|
+
attr_reader :stderr
|
7
|
+
attr_reader :stdin
|
8
|
+
attr_reader :config
|
9
|
+
|
10
|
+
def initialize(stdout, stderr, stdin, config)
|
11
|
+
@stdout, @stderr, @stdin, @config = stdout, stderr, stdin, config
|
12
|
+
end
|
13
|
+
|
14
|
+
def highline
|
15
|
+
@highline ||= begin
|
16
|
+
require 'highline'
|
17
|
+
HighLine.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Summarize the data. Defaults to text format output,
|
22
|
+
# which may not be very summary-like
|
23
|
+
def summarize(data)
|
24
|
+
text_format(data)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Converts the +data+ to a String in the text format. Uses
|
28
|
+
# Chef::Knife::Core::TextFormatter
|
29
|
+
def text_format(data)
|
30
|
+
Megam::TextFormatter.new(data, self).formatted_data
|
31
|
+
end
|
32
|
+
|
33
|
+
def msg(message)
|
34
|
+
stdout.puts message
|
35
|
+
end
|
36
|
+
|
37
|
+
# Prints a message to stdout. Aliased as +info+ for compatibility with
|
38
|
+
# the logger API.
|
39
|
+
|
40
|
+
def info(message)
|
41
|
+
stdout.puts("#{color('INFO:', :green, :bold)} #{message}")
|
42
|
+
end
|
43
|
+
|
44
|
+
# Prints a msg to stderr. Used for warn, error, and fatal.
|
45
|
+
def err(message)
|
46
|
+
stderr.puts message
|
47
|
+
end
|
48
|
+
|
49
|
+
# Print a warning message
|
50
|
+
def warn(message)
|
51
|
+
err("#{color('WARNING:', :yellow, :bold)} #{message}")
|
52
|
+
end
|
53
|
+
|
54
|
+
# Print an error message
|
55
|
+
def error(message)
|
56
|
+
err("#{color('ERROR:', :red, :bold)} #{message}")
|
57
|
+
end
|
58
|
+
|
59
|
+
# Print a message describing a fatal error.
|
60
|
+
def fatal(message)
|
61
|
+
err("#{color('FATAL:', :red, :bold)} #{message}")
|
62
|
+
end
|
63
|
+
|
64
|
+
def color(string, *colors)
|
65
|
+
if color?
|
66
|
+
highline.color(string, *colors)
|
67
|
+
else
|
68
|
+
string
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Should colored output be used ?. When output is not to a
|
73
|
+
# terminal, colored output is never used
|
74
|
+
def color?
|
75
|
+
stdout.tty?
|
76
|
+
end
|
77
|
+
|
78
|
+
def list(*args)
|
79
|
+
highline.list(*args)
|
80
|
+
end
|
81
|
+
|
82
|
+
def pretty_print(data)
|
83
|
+
stdout.puts data
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Megam
|
2
|
+
class TextFormatter
|
3
|
+
|
4
|
+
attr_reader :data
|
5
|
+
attr_reader :ui
|
6
|
+
|
7
|
+
def initialize(data, ui)
|
8
|
+
@ui = ui
|
9
|
+
@data = if data.respond_to?(:display_hash)
|
10
|
+
data.display_hash
|
11
|
+
elsif data.kind_of?(Array)
|
12
|
+
data
|
13
|
+
elsif data.respond_to?(:to_hash)
|
14
|
+
data.to_hash
|
15
|
+
else
|
16
|
+
data
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def formatted_data
|
21
|
+
@formatted_data ||= text_format(data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def text_format(data)
|
25
|
+
buffer = ''
|
26
|
+
|
27
|
+
if data.respond_to?(:keys)
|
28
|
+
justify_width = data.keys.map {|k| k.to_s.size }.max.to_i + 1
|
29
|
+
data.sort.each do |key, value|
|
30
|
+
# key: ['value'] should be printed as key: value
|
31
|
+
if value.kind_of?(Array) && value.size == 1 && is_singleton(value[0])
|
32
|
+
value = value[0]
|
33
|
+
end
|
34
|
+
if is_singleton(value)
|
35
|
+
# Strings are printed as key: value.
|
36
|
+
justified_key = ui.color("#{key}:".ljust(justify_width), :cyan)
|
37
|
+
buffer << "#{justified_key} #{value}\n"
|
38
|
+
else
|
39
|
+
# Arrays and hashes get indented on their own lines.
|
40
|
+
buffer << ui.color("#{key}:\n", :cyan)
|
41
|
+
lines = text_format(value).split("\n")
|
42
|
+
lines.each { |line| buffer << " #{line}\n" }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
elsif data.kind_of?(Array)
|
46
|
+
data.each_index do |index|
|
47
|
+
item = data[index]
|
48
|
+
buffer << text_format(data[index])
|
49
|
+
# Separate items with newlines if it's an array of hashes or an
|
50
|
+
# array of arrays
|
51
|
+
buffer << "\n" if !is_singleton(data[index]) && index != data.size-1
|
52
|
+
end
|
53
|
+
else
|
54
|
+
buffer << "#{data}\n"
|
55
|
+
end
|
56
|
+
buffer
|
57
|
+
end
|
58
|
+
|
59
|
+
def is_singleton(value)
|
60
|
+
!(value.kind_of?(Array) || value.respond_to?(:keys))
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/assembly")
|
2
|
+
|
3
|
+
module Megam
|
4
|
+
class Mixins
|
5
|
+
class Assemblies
|
6
|
+
attr_reader :assembly
|
7
|
+
def initialize(params)
|
8
|
+
@assembly = Assembly.new(params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_hash
|
12
|
+
assembly.to_hash
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/common_deployable")
|
2
|
+
require File.expand_path("#{File.dirname(__FILE__)}/components")
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/outputs")
|
4
|
+
|
5
|
+
module Megam
|
6
|
+
class Mixins
|
7
|
+
class Assembly
|
8
|
+
attr_reader :id, :name, :components, :policies, :outputs, :envs, :mixins
|
9
|
+
DEFAULT_VERTICE_PREFIX = 'vertice'.freeze
|
10
|
+
DEFAULT_DOCKER_PREFIX = 'docker'.freeze
|
11
|
+
TORPEDO = 'TORPEDO'.freeze
|
12
|
+
def initialize(params)
|
13
|
+
params = Hash[params.map { |k, v| [k.to_sym, v] }]
|
14
|
+
@id = params[:id] || params[:assemblyID] || ''
|
15
|
+
@name = params[:assemblyname]
|
16
|
+
@mixins = CommonDeployable.new(params)
|
17
|
+
@outputs = Outputs.new(params)
|
18
|
+
@components = add_components(params)
|
19
|
+
@tosca_type = add_assembly_tosca_type(params)
|
20
|
+
@policies = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_hash
|
24
|
+
result = @mixins.to_hash
|
25
|
+
result[:id] = @id if @id
|
26
|
+
result[:name] = @name if @name
|
27
|
+
result[:components] = @components if @components
|
28
|
+
result[:outputs] = @outputs.to_array if @outputs
|
29
|
+
result[:policies] = @policies if @policies
|
30
|
+
result[:tosca_type] = @tosca_type if @tosca_type
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# If @components_enabled for type
|
37
|
+
def components_enabled?(params)
|
38
|
+
true if params[:cattype] != 'TORPEDO'.freeze
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_components(params)
|
42
|
+
if components_enabled?(params)
|
43
|
+
@components = Components.new(params).to_a
|
44
|
+
else
|
45
|
+
@components = []
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_assembly_tosca_type(params)
|
50
|
+
if params[:scm_name] == DEFAULT_DOCKER_PREFIX
|
51
|
+
@tosca_type = params[:scm_name] + ".#{TORPEDO.downcase}.#{params[:os_name].downcase}" if params[:os_name] != nil
|
52
|
+
else
|
53
|
+
@tosca_type = DEFAULT_VERTICE_PREFIX + ".#{TORPEDO.downcase}.#{params[:os_name].downcase}" if params[:os_name] != nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/megam_attributes")
|
2
|
+
|
3
|
+
module Megam
|
4
|
+
class Mixins
|
5
|
+
class CommonDeployable
|
6
|
+
include Nilavu::MegamAttributes
|
7
|
+
attr_reader :status, :state, :inputs
|
8
|
+
ATTRIBUTES = [
|
9
|
+
:status,
|
10
|
+
:state,
|
11
|
+
:inputs]
|
12
|
+
|
13
|
+
def attributes
|
14
|
+
ATTRIBUTES
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(params)
|
18
|
+
@status = 'initialized'
|
19
|
+
@state = 'initialized'
|
20
|
+
set_attributes(params)
|
21
|
+
@inputs = InputGroupData.new(params)
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_hash
|
26
|
+
h = {
|
27
|
+
status: status,
|
28
|
+
state: state,
|
29
|
+
inputs: inputs.to_hash
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class InputGroupData
|
35
|
+
include Nilavu::MegamAttributes
|
36
|
+
|
37
|
+
attr_reader :domain, :keypairoption, :root_password, :sshkey, :provider, :cpu, :ram, :hdd,
|
38
|
+
:version, :display_name, :password, :region, :flavor_id, :storage_hddtype,
|
39
|
+
:public_ipv4, :private_ipv4, :public_ipv6, :private_ipv6, :bitnami_username, :bitnami_password, :root_username, :backup, :backup_name, :backup_id, :quota_ids,:app_username, :app_password, :user_launch_patternname, :flavor_id
|
40
|
+
|
41
|
+
ATTRIBUTES = [
|
42
|
+
:domain,
|
43
|
+
:keypairoption,
|
44
|
+
:root_password,
|
45
|
+
:sshkey,
|
46
|
+
:provider,
|
47
|
+
:version,
|
48
|
+
:display_name,
|
49
|
+
:password,
|
50
|
+
:region,
|
51
|
+
:flavor_id,
|
52
|
+
:storage_hddtype,
|
53
|
+
:private_ipv4,
|
54
|
+
:public_ipv4,
|
55
|
+
:private_ipv6,
|
56
|
+
:public_ipv6,
|
57
|
+
:bitnami_password,
|
58
|
+
:bitnami_username,
|
59
|
+
:app_username,
|
60
|
+
:app_password,
|
61
|
+
:root_username,
|
62
|
+
:backup,
|
63
|
+
:backup_name,
|
64
|
+
:backup_id,
|
65
|
+
:quota_ids,
|
66
|
+
:user_launch_patternname,]
|
67
|
+
|
68
|
+
def attributes
|
69
|
+
ATTRIBUTES
|
70
|
+
end
|
71
|
+
|
72
|
+
def initialize(params)
|
73
|
+
set_attributes(params)
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/megam_attributes")
|
2
|
+
require File.expand_path("#{File.dirname(__FILE__)}/common_deployable")
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/outputs")
|
4
|
+
|
5
|
+
module Megam
|
6
|
+
class Mixins
|
7
|
+
class Components
|
8
|
+
attr_reader :mixins, :name, :repo, :related_components, :operations, :artifacts, :envs, :outputs, :id, :tosca_type
|
9
|
+
DEFAULT_VERTICE_PREFIX = 'vertice'.freeze
|
10
|
+
def initialize(params)
|
11
|
+
@mixins = CommonDeployable.new(params)
|
12
|
+
@id = params[:id] if params[:id]
|
13
|
+
@name = params[:componentname] || params[:name] || ''
|
14
|
+
@outputs = Outputs.new(params)
|
15
|
+
@operations = add_operations(params)
|
16
|
+
@related_components = add_related_components(params)
|
17
|
+
@artifacts = add_artifacts(params)
|
18
|
+
@repo = add_repo(params)
|
19
|
+
@envs = params[:envs]
|
20
|
+
@tosca_type = add_components_tosca_type(params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_hash
|
24
|
+
result = @mixins.to_hash
|
25
|
+
result[:id] = @id if @id
|
26
|
+
result[:name] = @name if @name
|
27
|
+
result[:artifacts] = @artifacts if @artifacts
|
28
|
+
result[:repo] = @repo if @repo
|
29
|
+
result[:operations] = @operations if @operations
|
30
|
+
result[:outputs] = @outputs.to_array if @outputs
|
31
|
+
result[:related_components] = @related_components if @related_components
|
32
|
+
result[:envs] = @envs if @envs
|
33
|
+
result[:tosca_type] = @tosca_type if @tosca_type
|
34
|
+
result.to_hash
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_a
|
38
|
+
[to_hash]
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def add_repo(params)
|
44
|
+
Repo.new(params).tohash
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_related_components(params)
|
48
|
+
@related_components = []
|
49
|
+
@related_components << "#{params[:bind_type]}" if params.key?(:bind_type)
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_operations(params)
|
53
|
+
operations = []
|
54
|
+
operations.push(create_operation(Operations::CI, Operations::CI_DESCRIPTON, params)) if params.key?(:scm_name) && params.key?(:scmtoken)
|
55
|
+
operations.push(create_operation(Operations::BIND, Operations::BIND_DESCRIPTON, params)) if params.key?(:bind_type)
|
56
|
+
operations
|
57
|
+
end
|
58
|
+
|
59
|
+
def create_operation(type, desc, params)
|
60
|
+
Operations.new(params, type, desc).tohash
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_artifacts(params)
|
64
|
+
Artifacts.new(params).tohash
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_components_tosca_type(params)
|
68
|
+
if params[:scm_name] !=nil
|
69
|
+
@tosca_type = params[:scm_name] + ".#{params[:cattype].downcase}.#{params[:mkp_name].downcase}" if params[:cattype] != nil && params[:mkp_name] != nil
|
70
|
+
else
|
71
|
+
@tosca_type = DEFAULT_VERTICE_PREFIX + ".#{params[:cattype].downcase}.#{params[:mkp_name].downcase}" if params[:cattype] != nil && params[:mkp_name] != nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
class Repo
|
78
|
+
include Nilavu::MegamAttributes
|
79
|
+
attr_reader :type, :source, :url, :oneclick, :branch
|
80
|
+
ATTRIBUTES = [
|
81
|
+
:type,
|
82
|
+
:source,
|
83
|
+
:oneclick,
|
84
|
+
:url,
|
85
|
+
:branch]
|
86
|
+
|
87
|
+
def attributes
|
88
|
+
ATTRIBUTES
|
89
|
+
end
|
90
|
+
|
91
|
+
def initialize(params)
|
92
|
+
set_attributes(params)
|
93
|
+
@type = params[:type] || ""
|
94
|
+
@source = params[:scm_name] || ""
|
95
|
+
@url = params[:source] || ""
|
96
|
+
@oneclick = params[:oneclick] || ""
|
97
|
+
@branch = params[:scmbranch] || ""
|
98
|
+
end
|
99
|
+
|
100
|
+
def tohash
|
101
|
+
{ rtype: @type,
|
102
|
+
source: @source,
|
103
|
+
oneclick: @oneclick,
|
104
|
+
url: @url,
|
105
|
+
branch: @branch
|
106
|
+
}
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
class Operations
|
111
|
+
include Nilavu::MegamAttributes
|
112
|
+
attr_reader :type, :desc, :prop, :status
|
113
|
+
|
114
|
+
ATTRIBUTES = [
|
115
|
+
:type,
|
116
|
+
:desc,
|
117
|
+
:prop,
|
118
|
+
:status]
|
119
|
+
|
120
|
+
def attributes
|
121
|
+
ATTRIBUTES
|
122
|
+
end
|
123
|
+
|
124
|
+
CI = 'CI'.freeze
|
125
|
+
CI_DESCRIPTON = 'always up to date code. sweet.'
|
126
|
+
NOTBOUND = "notbound".freeze
|
127
|
+
BIND = 'bind'.freeze
|
128
|
+
BIND_DESCRIPTON = 'bind. sweet.'
|
129
|
+
|
130
|
+
def initialize(params, type, desc)
|
131
|
+
@type = type
|
132
|
+
@desc = desc
|
133
|
+
@prop = prop(params)
|
134
|
+
end
|
135
|
+
|
136
|
+
def attributes
|
137
|
+
ATTRIBUTES
|
138
|
+
end
|
139
|
+
|
140
|
+
def tohash
|
141
|
+
{ operation_type: @type,
|
142
|
+
description: @desc,
|
143
|
+
properties: @prop,
|
144
|
+
status: NOTBOUND
|
145
|
+
}
|
146
|
+
end
|
147
|
+
|
148
|
+
# Key_name mismatch. Key_name is to be changed.
|
149
|
+
def prop(params)
|
150
|
+
op = []
|
151
|
+
op << { 'key' => 'type', 'value' => params[:scm_name] } if params.key?(:scm_name)
|
152
|
+
op << { 'key' => 'token', 'value' => params[:scmtoken] } if params.key?(:scmtoken)
|
153
|
+
op << { 'key' => 'username', 'value' => params[:scmowner] } if params.key?(:scmowner)
|
154
|
+
op << { 'key' => 'related_component', 'value' => params[:bind_type] } if params.key?(:bind_type)
|
155
|
+
op
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
class Artifacts
|
160
|
+
include Nilavu::MegamAttributes
|
161
|
+
ATTRIBUTES = [
|
162
|
+
:type,
|
163
|
+
:content,
|
164
|
+
:requirements]
|
165
|
+
|
166
|
+
def attributes
|
167
|
+
ATTRIBUTES
|
168
|
+
end
|
169
|
+
|
170
|
+
def initialize(params)
|
171
|
+
set_attributes(params)
|
172
|
+
end
|
173
|
+
|
174
|
+
def tohash
|
175
|
+
{ artifact_type: '',
|
176
|
+
content: '',
|
177
|
+
requirements: []
|
178
|
+
}
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|