umbreo_cli 1.0.141
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.
- checksums.yaml +7 -0
- data/.env +2 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +106 -0
- data/README.md +1625 -0
- data/Rakefile +44 -0
- data/bin/manifests/init.pp +20 -0
- data/bin/umbreo +1684 -0
- data/bin/umbreo.json +34 -0
- data/lib/umbreo.rb +49 -0
- data/lib/umbreo/helpers/alert_message.rb +58 -0
- data/lib/umbreo/helpers/error_exception.rb +15 -0
- data/lib/umbreo/helpers/file_generator.rb +13 -0
- data/lib/umbreo/helpers/json_base_convert.rb +30 -0
- data/lib/umbreo/helpers/table.rb +45 -0
- data/lib/umbreo/models/amazon_web_service_provider.rb +260 -0
- data/lib/umbreo/models/authentication.rb +99 -0
- data/lib/umbreo/models/blueprint.rb +241 -0
- data/lib/umbreo/models/cloud_provider.rb +143 -0
- data/lib/umbreo/models/configuration.rb +98 -0
- data/lib/umbreo/models/digital_ocean_provider.rb +204 -0
- data/lib/umbreo/models/google_compute_engine_provider.rb +232 -0
- data/lib/umbreo/models/instance.rb +170 -0
- data/lib/umbreo/models/module.rb +61 -0
- data/lib/umbreo/models/openstack_provider.rb +260 -0
- data/lib/umbreo/models/profile.rb +61 -0
- data/lib/umbreo/models/provider.rb +164 -0
- data/lib/umbreo/models/service.rb +244 -0
- data/lib/umbreo/models/service_provider.rb +185 -0
- data/lib/umbreo/models/stack.rb +181 -0
- data/lib/umbreo/models/system.rb +43 -0
- data/lib/umbreo/models/umbreo_stack_template.rb +163 -0
- data/lib/umbreo/models/xenserver_provider.rb +200 -0
- data/lib/umbreo/version.rb +3 -0
- data/manifests/init.pp +20 -0
- data/manifests1/init.pp +9 -0
- data/umbreo.gemspec +28 -0
- metadata +241 -0
@@ -0,0 +1,170 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Models
|
3
|
+
class Instance
|
4
|
+
|
5
|
+
#
|
6
|
+
# list deployment type of instance
|
7
|
+
#
|
8
|
+
DEPLOYMENT_TYPE = ["test", "manual", "provider"]
|
9
|
+
|
10
|
+
def initialize(credentials = {}, name_or_id = nil)
|
11
|
+
if credentials.present?
|
12
|
+
@email = credentials[:email]
|
13
|
+
@api_key = credentials[:api_key]
|
14
|
+
@endpoint = credentials[:end_point] || SERVER_END_POINT
|
15
|
+
end
|
16
|
+
|
17
|
+
@name_or_id = name_or_id
|
18
|
+
@errors = []
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# retrieve data instance
|
23
|
+
#
|
24
|
+
def retrieve_data(filter = {})
|
25
|
+
Helpers::ErrorException.rescue do
|
26
|
+
data = Typhoeus.get(
|
27
|
+
"#{@endpoint}/api/v1/instances",
|
28
|
+
body: {
|
29
|
+
authenticate_token: @api_key,
|
30
|
+
email: @email,
|
31
|
+
filter: filter
|
32
|
+
}
|
33
|
+
)
|
34
|
+
|
35
|
+
@data = JSON.parse data.response_body
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# callback for retrieve data
|
41
|
+
#
|
42
|
+
def all(filter = {})
|
43
|
+
@errors << "Please choose correct one of regiter type |all, registered, unregistered|" if ["registered", "unregistered"].exclude?(filter[:register_type]) && filter[:register_type].present?
|
44
|
+
@errors << "Please choose correct one of type deployment |all, #{DEPLOYMENT_TYPE.join(", ")}|" if DEPLOYMENT_TYPE.exclude?(filter[:type]) && filter[:type].present?
|
45
|
+
@errors << "Please choose correct one of cloud provider |all, #{CloudProvider::CLOUDS.join(", ")}|" if CloudProvider::CLOUDS.exclude?(filter[:provider]) && filter[:provider].present?
|
46
|
+
@errors << "Search keyword is required." if filter[:keyword].blank? && filter[:search]
|
47
|
+
|
48
|
+
if valid?
|
49
|
+
retrieve_data(filter)
|
50
|
+
|
51
|
+
if @data['user_nodes'].present?
|
52
|
+
Helpers::Table.show_table(@data['user_nodes'], "List My Instance#{ (' | Page: ' + filter[:page].to_s) if @data['total_page'] > 1 }", ['ID', 'Name', 'Hostname', 'Description'])
|
53
|
+
else
|
54
|
+
Helpers::AlertMessage.show_error_message(@data["message"])
|
55
|
+
end
|
56
|
+
else
|
57
|
+
Helpers::AlertMessage.show_error_message(error)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# get instance data
|
63
|
+
#
|
64
|
+
def show
|
65
|
+
@errors << "ID or Name is required." if @name_or_id.blank?
|
66
|
+
|
67
|
+
if valid?
|
68
|
+
Helpers::ErrorException.rescue do
|
69
|
+
data = Typhoeus.get(
|
70
|
+
"#{@endpoint}/api/v1/instances/show",
|
71
|
+
body: {
|
72
|
+
authenticate_token: @api_key,
|
73
|
+
email: @email,
|
74
|
+
name_or_id: @name_or_id
|
75
|
+
}
|
76
|
+
)
|
77
|
+
|
78
|
+
@data = JSON.parse data.response_body
|
79
|
+
|
80
|
+
if @data['success']
|
81
|
+
type = @data['type_deployment'] == 'barebone' ? 'manual' : @data['type_deployment']
|
82
|
+
Helpers::AlertMessage.show_content_information_message(@data['id']) { "ID: #message" }
|
83
|
+
Helpers::AlertMessage.show_content_information_message(@data['name']) { "Name: #message" }
|
84
|
+
Helpers::AlertMessage.show_content_information_message(@data['description']) { "Description: #message" }
|
85
|
+
Helpers::AlertMessage.show_content_information_message(@data['role']) { "Blueprint: #message" }
|
86
|
+
Helpers::AlertMessage.show_content_information_message(type) { "Deployment type: #message" }
|
87
|
+
Helpers::AlertMessage.show_content_information_message(@data['hostname']) { "Hostname: #message" }
|
88
|
+
Helpers::AlertMessage.show_content_information_message(Date.parse(@data['created_at']).to_s) { "Created At: #message" }
|
89
|
+
else
|
90
|
+
Helpers::AlertMessage.show_error_message(@data['message'])
|
91
|
+
end
|
92
|
+
end
|
93
|
+
else
|
94
|
+
Helpers::AlertMessage.show_error_message(error)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# deploy blueprint
|
100
|
+
#
|
101
|
+
def deploy(parameters = {})
|
102
|
+
|
103
|
+
@error << "Name is required" if parameters[:name].blank?
|
104
|
+
@error << "Blueprint Json file is required" if parameters[:blueprint].blank?
|
105
|
+
@error << "Deployment type is required" if parameters[:type].blank?
|
106
|
+
@error << "Compute Provider Json file is required" if parameters[:provider].blank? && parameters[:type] == "provider"
|
107
|
+
|
108
|
+
file_parameter = {}
|
109
|
+
|
110
|
+
[:blueprint, :service_logging, :service_monitoring, :service_backup, :provider].each do |file_name|
|
111
|
+
file_path = parameters[file_name]
|
112
|
+
|
113
|
+
if file_path.present?
|
114
|
+
begin
|
115
|
+
file = File.open(file_path, "r")
|
116
|
+
content = file.read
|
117
|
+
json = JSON.parse(content)
|
118
|
+
file_parameter[file_name] = Helpers::JsonBaseConvert.encode(json)
|
119
|
+
rescue
|
120
|
+
@errors << "Error on #{ file_path } file. Please check again."
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
if valid?
|
126
|
+
Helpers::ErrorException.rescue do
|
127
|
+
|
128
|
+
response = Typhoeus.post(
|
129
|
+
"#{@endpoint}/api/v1/instances/deploy",
|
130
|
+
body: {
|
131
|
+
authenticate_token: @api_key,
|
132
|
+
email: @email,
|
133
|
+
name: parameters[:name],
|
134
|
+
description: parameters[:desc],
|
135
|
+
type: parameters[:type],
|
136
|
+
custom: parameters[:custom],
|
137
|
+
file_parameter: file_parameter
|
138
|
+
}
|
139
|
+
)
|
140
|
+
|
141
|
+
@response = JSON.parse response.response_body
|
142
|
+
|
143
|
+
if @response["success"]
|
144
|
+
Helpers::AlertMessage.show_success_message(@response["message"])
|
145
|
+
else
|
146
|
+
Helpers::AlertMessage.show_error_message(@response["message"])
|
147
|
+
end
|
148
|
+
end
|
149
|
+
else
|
150
|
+
Helpers::AlertMessage.show_error_message(error)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
#
|
155
|
+
# Check no error from validation
|
156
|
+
#
|
157
|
+
def valid?
|
158
|
+
@errors.blank?
|
159
|
+
end
|
160
|
+
|
161
|
+
#
|
162
|
+
# Get first error
|
163
|
+
#
|
164
|
+
def error
|
165
|
+
@errors.first
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Models
|
3
|
+
class Module
|
4
|
+
|
5
|
+
def initialize(credentials = {})
|
6
|
+
if credentials.present?
|
7
|
+
@email = credentials[:email]
|
8
|
+
@api_key = credentials[:api_key]
|
9
|
+
@endpoint = credentials[:end_point] || SERVER_END_POINT
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def retrieve_data(filter = {})
|
14
|
+
Helpers::ErrorException.rescue do
|
15
|
+
data = Typhoeus.get(
|
16
|
+
"#{@endpoint}/api/v1/modules",
|
17
|
+
body: {
|
18
|
+
authenticate_token: @api_key,
|
19
|
+
email: @email,
|
20
|
+
filter: filter
|
21
|
+
}
|
22
|
+
)
|
23
|
+
|
24
|
+
@data = JSON.parse data.response_body
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def all(filter = {})
|
29
|
+
@errors << "Search keyword is required." if filter[:keyword].blank? && filter[:search]
|
30
|
+
|
31
|
+
if valid?
|
32
|
+
retrieve_data(filter)
|
33
|
+
|
34
|
+
if @data['umbreo_modules'].present?
|
35
|
+
page = " | Page: #{filter[:page]} of #{@data['total_page']} pages"
|
36
|
+
Helpers::Table.show_table(@data['umbreo_modules'], "List Module#{ page if @data['total_page'] > 1 }", ['ID', 'Name', 'Description'])
|
37
|
+
else
|
38
|
+
Helpers::AlertMessage.show_error_message(@data["message"])
|
39
|
+
end
|
40
|
+
else
|
41
|
+
Helpers::AlertMessage.show_error_message(error)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Check no error from validation
|
47
|
+
#
|
48
|
+
def valid?
|
49
|
+
@errors.blank?
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# Get first error
|
54
|
+
#
|
55
|
+
def error
|
56
|
+
@errors.first
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,260 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Models
|
3
|
+
class OpenstackProvider
|
4
|
+
|
5
|
+
#
|
6
|
+
# init params which required for create cloud provider
|
7
|
+
#
|
8
|
+
def initialize(credentials = {}, name_or_id = nil)
|
9
|
+
if credentials.present?
|
10
|
+
@email = credentials[:email]
|
11
|
+
@api_key = credentials[:api_key]
|
12
|
+
@endpoint = credentials[:end_point] || SERVER_END_POINT
|
13
|
+
end
|
14
|
+
|
15
|
+
@errors = []
|
16
|
+
@name_or_id = name_or_id
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# get list size of openstack
|
21
|
+
#
|
22
|
+
def zone_list
|
23
|
+
@errors << "ID or Name provider is required." if @name_or_id.blank?
|
24
|
+
|
25
|
+
if valid?
|
26
|
+
Helpers::ErrorException.rescue do
|
27
|
+
data = Typhoeus.get(
|
28
|
+
"#{@endpoint}/api/v1/openstack_services/zone_list",
|
29
|
+
body: {
|
30
|
+
authenticate_token: @api_key,
|
31
|
+
email: @email,
|
32
|
+
id: @name_or_id
|
33
|
+
}
|
34
|
+
)
|
35
|
+
|
36
|
+
data = JSON.parse data.response_body
|
37
|
+
|
38
|
+
if data['success']
|
39
|
+
Helpers::Table.table_callback_retrieve_data(data['zones'], "List Openstack Zone")
|
40
|
+
else
|
41
|
+
Helpers::AlertMessage.show_error_message(data['message'])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
else
|
45
|
+
Helpers::AlertMessage.show_error_message(error)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# get list flavor of openstack
|
51
|
+
#
|
52
|
+
def flavor_list
|
53
|
+
@errors << "ID or Name provider is required." if @name_or_id.blank?
|
54
|
+
|
55
|
+
if valid?
|
56
|
+
Helpers::ErrorException.rescue do
|
57
|
+
data = Typhoeus.get(
|
58
|
+
"#{@endpoint}/api/v1/openstack_services/flavor_list",
|
59
|
+
body: {
|
60
|
+
authenticate_token: @api_key,
|
61
|
+
email: @email,
|
62
|
+
id: @name_or_id
|
63
|
+
}
|
64
|
+
)
|
65
|
+
|
66
|
+
data = JSON.parse data.response_body
|
67
|
+
|
68
|
+
if data['success']
|
69
|
+
Helpers::Table.show_table(data['flavors'], "List Openstack Flavor", ['Flavor Name', 'Flavor ID'])
|
70
|
+
else
|
71
|
+
Helpers::AlertMessage.show_error_message(data['message'])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
else
|
75
|
+
Helpers::AlertMessage.show_error_message(error)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#
|
80
|
+
# get list image of openstack
|
81
|
+
#
|
82
|
+
def image_list
|
83
|
+
@errors << "ID or Name provider is required." if @name_or_id.blank?
|
84
|
+
|
85
|
+
if valid?
|
86
|
+
Helpers::ErrorException.rescue do
|
87
|
+
data = Typhoeus.get(
|
88
|
+
"#{@endpoint}/api/v1/openstack_services/image_list",
|
89
|
+
body: {
|
90
|
+
authenticate_token: @api_key,
|
91
|
+
email: @email,
|
92
|
+
id: @name_or_id
|
93
|
+
}
|
94
|
+
)
|
95
|
+
|
96
|
+
data = JSON.parse data.response_body
|
97
|
+
|
98
|
+
if data['success']
|
99
|
+
Helpers::Table.show_table(data['images'], "List Openstack Image", ['Flavor Image', 'Flavor ID'])
|
100
|
+
else
|
101
|
+
Helpers::AlertMessage.show_error_message(data['message'])
|
102
|
+
end
|
103
|
+
end
|
104
|
+
else
|
105
|
+
Helpers::AlertMessage.show_error_message(error)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# get list group of openstack
|
111
|
+
#
|
112
|
+
def group_list
|
113
|
+
@errors << "ID or Name provider is required." if @name_or_id.blank?
|
114
|
+
|
115
|
+
if valid?
|
116
|
+
Helpers::ErrorException.rescue do
|
117
|
+
data = Typhoeus.get(
|
118
|
+
"#{@endpoint}/api/v1/openstack_services/group_list",
|
119
|
+
body: {
|
120
|
+
authenticate_token: @api_key,
|
121
|
+
email: @email,
|
122
|
+
id: @name_or_id
|
123
|
+
}
|
124
|
+
)
|
125
|
+
|
126
|
+
data = JSON.parse data.response_body
|
127
|
+
|
128
|
+
if data['success']
|
129
|
+
Helpers::Table.table_callback_retrieve_data(data['groups'], "List Openstack Group")
|
130
|
+
else
|
131
|
+
Helpers::AlertMessage.show_error_message(data['message'])
|
132
|
+
end
|
133
|
+
end
|
134
|
+
else
|
135
|
+
Helpers::AlertMessage.show_error_message(error)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
# get list keypair of openstack
|
141
|
+
#
|
142
|
+
def keypair_list
|
143
|
+
@errors << "ID or Name provider is required." if @name_or_id.blank?
|
144
|
+
|
145
|
+
if valid?
|
146
|
+
Helpers::ErrorException.rescue do
|
147
|
+
data = Typhoeus.get(
|
148
|
+
"#{@endpoint}/api/v1/openstack_services/keypair_list",
|
149
|
+
body: {
|
150
|
+
authenticate_token: @api_key,
|
151
|
+
email: @email,
|
152
|
+
id: @name_or_id
|
153
|
+
}
|
154
|
+
)
|
155
|
+
|
156
|
+
data = JSON.parse data.response_body
|
157
|
+
|
158
|
+
if data['success']
|
159
|
+
Helpers::Table.table_callback_retrieve_data(data['keypairs'], "List Openstack Keypair")
|
160
|
+
else
|
161
|
+
Helpers::AlertMessage.show_error_message(data['message'])
|
162
|
+
end
|
163
|
+
end
|
164
|
+
else
|
165
|
+
Helpers::AlertMessage.show_error_message(error)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
#
|
170
|
+
# get json credential file
|
171
|
+
#
|
172
|
+
def export
|
173
|
+
@errors << "ID or Slug is required." if @name_or_id.blank?
|
174
|
+
|
175
|
+
if valid?
|
176
|
+
Helpers::ErrorException.rescue do
|
177
|
+
data = Typhoeus.get(
|
178
|
+
"#{@endpoint}/api/v1/openstack_services/export",
|
179
|
+
body: {
|
180
|
+
authenticate_token: @api_key,
|
181
|
+
email: @email,
|
182
|
+
id: @name_or_id
|
183
|
+
}
|
184
|
+
)
|
185
|
+
|
186
|
+
data = JSON.parse data.response_body rescue nil
|
187
|
+
user_provider = data["user_provider"]
|
188
|
+
|
189
|
+
if user_provider.present?
|
190
|
+
name_file = "openstack_provider"
|
191
|
+
Helpers::FileGenerator.create(name_file, user_provider)
|
192
|
+
Helpers::AlertMessage.show_success_message("Success export openstack provider. Your file is saved on json file with name #{name_file}.json")
|
193
|
+
else
|
194
|
+
Helpers::AlertMessage.show_error_message(data["message"])
|
195
|
+
end
|
196
|
+
end
|
197
|
+
else
|
198
|
+
Helpers::AlertMessage.show_error_message(error)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
#
|
203
|
+
# check valid json params
|
204
|
+
#
|
205
|
+
def validate(file_path)
|
206
|
+
@errors << "File directory is required." if file_path.blank?
|
207
|
+
|
208
|
+
begin
|
209
|
+
file = File.open(file_path, "r")
|
210
|
+
content = file.read
|
211
|
+
json = JSON.parse(content)
|
212
|
+
encode = Helpers::JsonBaseConvert.encode(json)
|
213
|
+
rescue
|
214
|
+
@errors << "Error on file. Please check again."
|
215
|
+
end
|
216
|
+
|
217
|
+
@errors << "Content of file is required." if content.blank?
|
218
|
+
|
219
|
+
if valid?
|
220
|
+
Helpers::ErrorException.rescue do
|
221
|
+
|
222
|
+
response = Typhoeus.get(
|
223
|
+
"#{@endpoint}/api/v1/openstack_services/validate",
|
224
|
+
body: {
|
225
|
+
authenticate_token: @api_key,
|
226
|
+
email: @email,
|
227
|
+
content: encode
|
228
|
+
}
|
229
|
+
)
|
230
|
+
|
231
|
+
@response = JSON.parse response.response_body
|
232
|
+
|
233
|
+
if @response["success"]
|
234
|
+
Helpers::AlertMessage.show_success_message(@response["message"])
|
235
|
+
else
|
236
|
+
Helpers::AlertMessage.show_error_message(@response["message"])
|
237
|
+
end
|
238
|
+
end
|
239
|
+
else
|
240
|
+
Helpers::AlertMessage.show_error_message(error)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
#
|
245
|
+
# check no errors
|
246
|
+
#
|
247
|
+
def valid?
|
248
|
+
@errors.blank?
|
249
|
+
end
|
250
|
+
|
251
|
+
#
|
252
|
+
# call errors
|
253
|
+
#
|
254
|
+
def error
|
255
|
+
@errors.first
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|