virtengine_api 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +11 -0
  4. data/Gemfile +5 -0
  5. data/LICENSE +21 -0
  6. data/README.md +27 -0
  7. data/Rakefile +10 -0
  8. data/lib/megam/api.rb +329 -0
  9. data/lib/megam/api/accounts.rb +96 -0
  10. data/lib/megam/api/addons.rb +27 -0
  11. data/lib/megam/api/assemblies.rb +49 -0
  12. data/lib/megam/api/assembly.rb +56 -0
  13. data/lib/megam/api/backups.rb +57 -0
  14. data/lib/megam/api/balances.rb +45 -0
  15. data/lib/megam/api/billedhistories.rb +35 -0
  16. data/lib/megam/api/billingtransactions.rb +25 -0
  17. data/lib/megam/api/components.rb +24 -0
  18. data/lib/megam/api/credits.rb +34 -0
  19. data/lib/megam/api/disks.rb +44 -0
  20. data/lib/megam/api/domains.rb +25 -0
  21. data/lib/megam/api/errors.rb +29 -0
  22. data/lib/megam/api/eventsall.rb +36 -0
  23. data/lib/megam/api/eventsbilling.rb +35 -0
  24. data/lib/megam/api/eventscontainer.rb +35 -0
  25. data/lib/megam/api/eventsmarketplace.rb +35 -0
  26. data/lib/megam/api/eventsstorage.rb +24 -0
  27. data/lib/megam/api/eventsvm.rb +35 -0
  28. data/lib/megam/api/flavors.rb +56 -0
  29. data/lib/megam/api/license.rb +26 -0
  30. data/lib/megam/api/marketplaces.rb +68 -0
  31. data/lib/megam/api/organizations.rb +50 -0
  32. data/lib/megam/api/promos.rb +18 -0
  33. data/lib/megam/api/quotas.rb +47 -0
  34. data/lib/megam/api/rawimages.rb +36 -0
  35. data/lib/megam/api/reports.rb +24 -0
  36. data/lib/megam/api/requests.rb +36 -0
  37. data/lib/megam/api/sensors.rb +35 -0
  38. data/lib/megam/api/snapshots.rb +46 -0
  39. data/lib/megam/api/sshkeys.rb +35 -0
  40. data/lib/megam/api/subscriptions.rb +26 -0
  41. data/lib/megam/api/version.rb +6 -0
  42. data/lib/megam/core/account.rb +245 -0
  43. data/lib/megam/core/account_collection.rb +122 -0
  44. data/lib/megam/core/addons.rb +169 -0
  45. data/lib/megam/core/addons_collection.rb +121 -0
  46. data/lib/megam/core/assemblies.rb +191 -0
  47. data/lib/megam/core/assemblies_collection.rb +122 -0
  48. data/lib/megam/core/assembly.rb +226 -0
  49. data/lib/megam/core/assembly_collection.rb +122 -0
  50. data/lib/megam/core/backups.rb +259 -0
  51. data/lib/megam/core/backups_collection.rb +122 -0
  52. data/lib/megam/core/balances.rb +187 -0
  53. data/lib/megam/core/balances_collection.rb +121 -0
  54. data/lib/megam/core/billedhistories.rb +190 -0
  55. data/lib/megam/core/billedhistories_collection.rb +121 -0
  56. data/lib/megam/core/billingtransactions.rb +214 -0
  57. data/lib/megam/core/billingtransactions_collection.rb +122 -0
  58. data/lib/megam/core/components.rb +326 -0
  59. data/lib/megam/core/components_collection.rb +123 -0
  60. data/lib/megam/core/credits.rb +146 -0
  61. data/lib/megam/core/credits_collection.rb +121 -0
  62. data/lib/megam/core/disks.rb +199 -0
  63. data/lib/megam/core/disks_collection.rb +122 -0
  64. data/lib/megam/core/domain_collection.rb +122 -0
  65. data/lib/megam/core/domains.rb +118 -0
  66. data/lib/megam/core/error.rb +70 -0
  67. data/lib/megam/core/eventsall.rb +186 -0
  68. data/lib/megam/core/eventsall_collection.rb +122 -0
  69. data/lib/megam/core/eventsbilling.rb +174 -0
  70. data/lib/megam/core/eventsbilling_collection.rb +122 -0
  71. data/lib/megam/core/eventscontainer.rb +187 -0
  72. data/lib/megam/core/eventscontainer_collection.rb +122 -0
  73. data/lib/megam/core/eventsmarketplace.rb +187 -0
  74. data/lib/megam/core/eventsmarketplace_collection.rb +122 -0
  75. data/lib/megam/core/eventsstorage.rb +156 -0
  76. data/lib/megam/core/eventsstorage_collection.rb +122 -0
  77. data/lib/megam/core/eventsvm.rb +187 -0
  78. data/lib/megam/core/eventsvm_collection.rb +122 -0
  79. data/lib/megam/core/flavors.rb +294 -0
  80. data/lib/megam/core/flavors_collection.rb +121 -0
  81. data/lib/megam/core/json_compat.rb +289 -0
  82. data/lib/megam/core/konipai.rb +42 -0
  83. data/lib/megam/core/license.rb +101 -0
  84. data/lib/megam/core/license_collection.rb +122 -0
  85. data/lib/megam/core/log.rb +19 -0
  86. data/lib/megam/core/marketplace.rb +308 -0
  87. data/lib/megam/core/marketplace_collection.rb +123 -0
  88. data/lib/megam/core/monologger.rb +89 -0
  89. data/lib/megam/core/organizations.rb +142 -0
  90. data/lib/megam/core/organizations_collection.rb +121 -0
  91. data/lib/megam/core/promos.rb +145 -0
  92. data/lib/megam/core/quotas.rb +215 -0
  93. data/lib/megam/core/quotas_collection.rb +121 -0
  94. data/lib/megam/core/rawimages.rb +194 -0
  95. data/lib/megam/core/rawimages_collection.rb +121 -0
  96. data/lib/megam/core/reports.rb +176 -0
  97. data/lib/megam/core/reports_collection.rb +121 -0
  98. data/lib/megam/core/request.rb +197 -0
  99. data/lib/megam/core/request_collection.rb +121 -0
  100. data/lib/megam/core/rest_adapter.rb +44 -0
  101. data/lib/megam/core/sensors.rb +141 -0
  102. data/lib/megam/core/sensors_collection.rb +121 -0
  103. data/lib/megam/core/snapshots.rb +268 -0
  104. data/lib/megam/core/snapshots_collection.rb +122 -0
  105. data/lib/megam/core/sshkey.rb +173 -0
  106. data/lib/megam/core/sshkey_collection.rb +122 -0
  107. data/lib/megam/core/stuff.rb +22 -0
  108. data/lib/megam/core/subscriptions.rb +167 -0
  109. data/lib/megam/core/subscriptions_collection.rb +121 -0
  110. data/lib/megam/core/text.rb +87 -0
  111. data/lib/megam/core/text_formatter.rb +64 -0
  112. data/lib/megam/mixins/assemblies.rb +16 -0
  113. data/lib/megam/mixins/assembly.rb +59 -0
  114. data/lib/megam/mixins/common_deployable.rb +78 -0
  115. data/lib/megam/mixins/components.rb +182 -0
  116. data/lib/megam/mixins/megam_attributes.rb +30 -0
  117. data/lib/megam/mixins/outputs.rb +23 -0
  118. data/lib/megam/mixins/policies.rb +27 -0
  119. data/lib/megam_api.rb +1 -0
  120. data/megam_api.gemspec +26 -0
  121. data/test/mixins/test_assemblies.rb +113 -0
  122. data/test/mixins/test_assembly.rb +74 -0
  123. data/test/mixins/test_component.rb +19 -0
  124. data/test/test_accounts.rb +127 -0
  125. data/test/test_addons.rb +26 -0
  126. data/test/test_assemblies.rb +88 -0
  127. data/test/test_assembly.rb +37 -0
  128. data/test/test_backups.rb +29 -0
  129. data/test/test_balances.rb +38 -0
  130. data/test/test_billedhistories.rb +30 -0
  131. data/test/test_billingtranscations.rb +35 -0
  132. data/test/test_components.rb +42 -0
  133. data/test/test_credits.rb +28 -0
  134. data/test/test_disks.rb +25 -0
  135. data/test/test_domains.rb +29 -0
  136. data/test/test_eventsbilling.rb +30 -0
  137. data/test/test_eventscontainer.rb +26 -0
  138. data/test/test_eventsstorage.rb +12 -0
  139. data/test/test_eventsvm.rb +26 -0
  140. data/test/test_helper.rb +77 -0
  141. data/test/test_marketplaces.rb +38 -0
  142. data/test/test_organizations.rb +45 -0
  143. data/test/test_promos.rb +11 -0
  144. data/test/test_quotas.rb +33 -0
  145. data/test/test_reports.rb +32 -0
  146. data/test/test_requests.rb +95 -0
  147. data/test/test_sensors.rb +50 -0
  148. data/test/test_snapshots.rb +30 -0
  149. data/test/test_sshkeys.rb +50 -0
  150. data/test/test_subscriptions.rb +22 -0
  151. metadata +325 -0
@@ -0,0 +1,122 @@
1
+ module Megam
2
+ class AssembliesCollection
3
+ include Enumerable
4
+
5
+ attr_reader :iterator
6
+ def initialize
7
+ @assemblies = Array.new
8
+ @assemblies_by_name = Hash.new
9
+ @insert_after_idx = nil
10
+ end
11
+
12
+ def all_assemblies
13
+ @assemblies
14
+ end
15
+
16
+ def [](index)
17
+ @assemblies[index]
18
+ end
19
+
20
+ def []=(index, arg)
21
+ is_megam_assemblies(arg)
22
+ @assemblies[index] = arg
23
+ @assemblies_by_name[arg.assembies_name] = index
24
+ end
25
+
26
+ def <<(*args)
27
+ args.flatten.each do |a|
28
+ is_megam_assemblies(a)
29
+ @assemblies << a
30
+ @assemblies_by_name[a.name] = @assemblies.length - 1
31
+ end
32
+ self
33
+ end
34
+
35
+ # 'push' is an alias method to <<
36
+ alias_method :push, :<<
37
+
38
+ def insert(assemblies)
39
+ is_megam_assemblies(assemblies)
40
+ if @insert_after_idx
41
+ # in the middle of executing a run, so any nodes inserted now should
42
+ # be placed after the most recent addition done by the currently executing
43
+ # node
44
+ @assemblies.insert(@insert_after_idx + 1, assemblies)
45
+ # update name -> location mappings and register new node
46
+ @assemblies_by_name.each_key do |key|
47
+ @assemblies_by_name[key] += 1 if @assemblies_by_name[key] > @insert_after_idx
48
+ end
49
+ @assemblies_by_name[assemblies.name] = @insert_after_idx + 1
50
+ @insert_after_idx += 1
51
+ else
52
+ @assemblies << assemblies
53
+ @assemblies_by_name[assemblies.name] = @assemblies.length - 1
54
+ end
55
+ end
56
+
57
+ def each
58
+ @assemblies.each do |assemblies|
59
+ yield assemblies
60
+ end
61
+ end
62
+
63
+ def each_index
64
+ @assemblies.each_index do |i|
65
+ yield i
66
+ end
67
+ end
68
+
69
+ def empty?
70
+ @assemblies.empty?
71
+ end
72
+
73
+ def lookup(assemblies)
74
+ lookup_by = nil
75
+ if assemblies.kind_of?(Megam::Assemblies)
76
+ lookup_by = assemblies.name
77
+ elsif assemblies.kind_of?(String)
78
+ lookup_by = assemblies
79
+ else
80
+ raise ArgumentError, "Must pass a Megam::Assemblies or String to lookup"
81
+ end
82
+ res = @assemblies_by_name[lookup_by]
83
+ unless res
84
+ raise ArgumentError, "Cannot find a node matching #{lookup_by} (did you define it first?)"
85
+ end
86
+ @assemblies[res]
87
+ end
88
+
89
+ def to_s
90
+ @assemblies.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 |assemblies_list|
104
+ assemblies_array = assemblies_list.kind_of?(Array) ? assemblies_list : [ assemblies_list ]
105
+ assemblies_array.each do |assemblies|
106
+ collection.insert(assemblies)
107
+
108
+ end
109
+ end
110
+ collection
111
+ end
112
+
113
+ private
114
+
115
+ def is_megam_assemblies(arg)
116
+ unless arg.kind_of?(Megam::Assemblies)
117
+ raise ArgumentError, "Members must be Megam::Assemblies's"
118
+ end
119
+ true
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,226 @@
1
+ module Megam
2
+ class Assembly < Megam::RestAdapter
3
+ def initialize(o)
4
+ @id = nil
5
+ @asms_id = nil
6
+ @name = nil
7
+ @components = []
8
+ @tosca_type = nil
9
+ @policies = []
10
+ @inputs = []
11
+ @outputs = []
12
+ @status = nil
13
+ @state = nil
14
+ @created_at = nil
15
+ super(o)
16
+ end
17
+
18
+ def assembly
19
+ self
20
+ end
21
+
22
+ def id(arg = nil)
23
+ if !arg.nil?
24
+ @id = arg
25
+ else
26
+ @id
27
+ end
28
+ end
29
+
30
+ def asms_id(arg=nil)
31
+ if arg != nil
32
+ @asms_id = arg
33
+ else
34
+ @asms_id
35
+ end
36
+ end
37
+
38
+ def name(arg = nil)
39
+ if !arg.nil?
40
+ @name = arg
41
+ else
42
+ @name
43
+ end
44
+ end
45
+
46
+ def tosca_type(arg = nil)
47
+ if !arg.nil?
48
+ @tosca_type = arg
49
+ else
50
+ @tosca_type
51
+ end
52
+ end
53
+
54
+ def components(arg = [])
55
+ if arg != []
56
+ @components = arg
57
+ else
58
+ @components
59
+ end
60
+ end
61
+
62
+ def policies(arg = [])
63
+ if arg != []
64
+ @policies = arg
65
+ else
66
+ @policies
67
+ end
68
+ end
69
+
70
+ def inputs(arg = [])
71
+ if arg != []
72
+ @inputs = arg
73
+ else
74
+ @inputs
75
+ end
76
+ end
77
+
78
+ def outputs(arg = [])
79
+ if arg != []
80
+ @outputs = arg
81
+ else
82
+ @outputs
83
+ end
84
+ end
85
+
86
+ def status(arg = nil)
87
+ if !arg.nil?
88
+ @status = arg
89
+ else
90
+ @status
91
+ end
92
+ end
93
+
94
+ def state(arg = nil)
95
+ if !arg.nil?
96
+ @state = arg
97
+ else
98
+ @state
99
+ end
100
+ end
101
+
102
+ def created_at(arg = nil)
103
+ if !arg.nil?
104
+ @created_at = arg
105
+ else
106
+ @created_at
107
+ end
108
+ end
109
+
110
+ def error?
111
+ crocked = true if some_msg.key?(:msg_type) && some_msg[:msg_type] == 'error'
112
+ end
113
+
114
+ # Transform the ruby obj -> to a Hash
115
+ def to_hash
116
+ index_hash = {}
117
+ index_hash['json_claz'] = self.class.name
118
+ index_hash['id'] = id
119
+ index_hash["asms_id"] = asms_id
120
+ index_hash['name'] = name
121
+ index_hash['components'] = components
122
+ index_hash['tosca_type'] = tosca_type
123
+ index_hash['policies'] = policies
124
+ index_hash['inputs'] = inputs
125
+ index_hash['outputs'] = outputs
126
+ index_hash['status'] = status
127
+ index_hash['state'] = state
128
+ index_hash['created_at'] = created_at
129
+ index_hash
130
+ end
131
+
132
+ # Serialize this object as a hash: called from JsonCompat.
133
+ # Verify if this called from JsonCompat during testing.
134
+ def to_json(*a)
135
+ for_json.to_json(*a)
136
+ end
137
+
138
+ def for_json
139
+ result = {
140
+ 'id' => id,
141
+ 'name' => name,
142
+ 'components' => components,
143
+ 'tosca_type' => tosca_type,
144
+ 'policies' => policies,
145
+ 'inputs' => inputs,
146
+ 'outputs' => outputs,
147
+ 'status' => status,
148
+ 'state' => state,
149
+ 'created_at' => created_at
150
+ }
151
+
152
+ result
153
+ end
154
+
155
+ def self.json_create(o)
156
+ asm = new({})
157
+ asm.id(o['id']) if o.key?('id')
158
+ asm.asms_id(o["asms_id"]) if o.has_key?("asms_id")
159
+ asm.name(o['name']) if o.key?('name')
160
+ asm.components(o['components']) if o.key?('components')
161
+ asm.tosca_type(o['tosca_type']) if o.key?('tosca_type')
162
+ asm.policies(o['policies']) if o.key?('policies') # this will be an array? can hash store array?
163
+ asm.inputs(o['inputs']) if o.key?('inputs')
164
+ asm.outputs(o['outputs']) if o.key?('outputs')
165
+ asm.status(o['status']) if o.key?('status')
166
+ asm.state(o['state']) if o.key?('state')
167
+ asm.created_at(o['created_at']) if o.key?('created_at')
168
+ asm
169
+ end
170
+
171
+ def self.from_hash(o)
172
+ asm = new(o)
173
+ asm.from_hash(o)
174
+ asm
175
+ end
176
+
177
+ def from_hash(o)
178
+ @id = o['id'] if o.key?('id')
179
+ @asms_id = o["asms_id"] if o.has_key?("asms_id")
180
+ @name = o['name'] if o.key?('name')
181
+ @components = o['components'] if o.key?('components')
182
+ @tosca_type = o['tosca_type'] if o.key?('tosca_type')
183
+ @policies = o['policies'] if o.key?('policies')
184
+ @inputs = o['inputs'] if o.key?('inputs')
185
+ @outputs = o['outputs'] if o.key?('outputs')
186
+ @status = o['status'] if o.key?('status')
187
+ @state = o['state'] if o.key?('state')
188
+ @created_at = o['created_at'] if o.key?('created_at')
189
+ self
190
+ end
191
+
192
+ def self.show(params)
193
+ asm = new(params)
194
+ asm.megam_rest.get_one_assembly(params['id'])
195
+ end
196
+
197
+ def self.update(params)
198
+ asm = from_hash(params)
199
+ asm.update
200
+ end
201
+
202
+ def self.upgrade(params)
203
+ asm = from_hash(params)
204
+ asm.megam_rest.upgrade_assembly(params['id'])
205
+ end
206
+
207
+ def self.list(params)
208
+ asm = self.new(params)
209
+ asm.megam_rest.list_assembly
210
+ end
211
+
212
+ def self.remove(params)
213
+ asm = self.new(params)
214
+ asm.megam_rest.delete_assembly(params['id'], params['asms_id'])
215
+ end
216
+
217
+ # Create the node via the REST API
218
+ def update
219
+ megam_rest.update_assembly(to_hash)
220
+ end
221
+
222
+ def to_s
223
+ Megam::Stuff.styled_hash(to_hash)
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,122 @@
1
+ module Megam
2
+ class AssemblyCollection
3
+ include Enumerable
4
+
5
+ attr_reader :iterator
6
+ def initialize
7
+ @assemblys = Array.new
8
+ @assemblys_by_name = Hash.new
9
+ @insert_after_idx = nil
10
+ end
11
+
12
+ def all_assemblys
13
+ @assemblys
14
+ end
15
+
16
+ def [](index)
17
+ @assemblys[index]
18
+ end
19
+
20
+ def []=(index, arg)
21
+ is_megam_assemblys(arg)
22
+ @assemblys[index] = arg
23
+ @assemblys_by_name[arg.name] = index
24
+ end
25
+
26
+ def <<(*args)
27
+ args.flatten.each do |a|
28
+ is_megam_assemblys(a)
29
+ @assemblys << a
30
+ @assemblys_by_name[a.name] = @assemblys.length - 1
31
+ end
32
+ self
33
+ end
34
+
35
+ # 'push' is an alias method to <<
36
+ alias_method :push, :<<
37
+
38
+ def insert(assemblys)
39
+ is_megam_assemblys(assemblys)
40
+ if @insert_after_idx
41
+ # in the middle of executing a run, so any nodes inserted now should
42
+ # be placed after the most recent addition done by the currently executing
43
+ # node
44
+ @assemblys.insert(@insert_after_idx + 1, assemblys)
45
+ # update name -> location mappings and register new node
46
+ @assemblys_by_name.each_key do |key|
47
+ @assemblys_by_name[key] += 1 if @assemblys_by_name[key] > @insert_after_idx
48
+ end
49
+ @assemblys_by_name[assemblys.name] = @insert_after_idx + 1
50
+ @insert_after_idx += 1
51
+ else
52
+ @assemblys << assemblys
53
+ @assemblys_by_name[assemblys.name] = @assemblys.length - 1
54
+ end
55
+ end
56
+
57
+ def each
58
+ @assemblys.each do |assemblys|
59
+ yield assemblys
60
+ end
61
+ end
62
+
63
+ def each_index
64
+ @assemblys.each_index do |i|
65
+ yield i
66
+ end
67
+ end
68
+
69
+ def empty?
70
+ @assemblys.empty?
71
+ end
72
+
73
+ def lookup(assemblys)
74
+ lookup_by = nil
75
+ if assemblys.kind_of?(Megam::Assembly)
76
+ lookup_by = assemblys.name
77
+ elsif assemblys.kind_of?(String)
78
+ lookup_by = assemblys
79
+ else
80
+ raise ArgumentError, "Must pass a Megam::Assemblies or String to lookup"
81
+ end
82
+ res = @assemblys_by_name[lookup_by]
83
+ unless res
84
+ raise ArgumentError, "Cannot find a node matching #{lookup_by} (did you define it first?)"
85
+ end
86
+ @assemblys[res]
87
+ end
88
+
89
+ def to_s
90
+ @assemblys.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 |assemblys_list|
104
+ assemblys_array = assemblys_list.kind_of?(Array) ? assemblys_list : [ assemblys_list ]
105
+ assemblys_array.each do |assemblys|
106
+ collection.insert(assemblys)
107
+
108
+ end
109
+ end
110
+ collection
111
+ end
112
+
113
+ private
114
+
115
+ def is_megam_assemblys(arg)
116
+ unless arg.kind_of?(Megam::Assembly)
117
+ raise ArgumentError, "Members must be Megam::Assembly's"
118
+ end
119
+ true
120
+ end
121
+ end
122
+ end