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
data/bin/umbreo.json
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
{
|
2
|
+
"name": "apache",
|
3
|
+
"parameters": [
|
4
|
+
{
|
5
|
+
"name": "version",
|
6
|
+
"displayed": "Version",
|
7
|
+
"description": "",
|
8
|
+
"default": "latest",
|
9
|
+
"type": "string",
|
10
|
+
"scope": ""
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "service_ensure",
|
14
|
+
"displayed": "Service Ensure",
|
15
|
+
"description": "",
|
16
|
+
"default": "running",
|
17
|
+
"type": "string",
|
18
|
+
"scope": ""
|
19
|
+
},
|
20
|
+
{
|
21
|
+
"name": "service_enable",
|
22
|
+
"displayed": "Service Enable",
|
23
|
+
"description": "",
|
24
|
+
"default": true,
|
25
|
+
"type": "boolean",
|
26
|
+
"scope": ""
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"informations": {
|
30
|
+
"display_name": "Apache Web Server",
|
31
|
+
"data": {
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
data/lib/umbreo.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Gem Dependencies
|
2
|
+
require 'typhoeus'
|
3
|
+
require 'byebug'
|
4
|
+
require 'json'
|
5
|
+
require 'base64'
|
6
|
+
require 'rainbow'
|
7
|
+
require 'parseconfig'
|
8
|
+
require 'terminal-table'
|
9
|
+
|
10
|
+
# Active Support
|
11
|
+
require 'active_support/all'
|
12
|
+
|
13
|
+
# Library Code
|
14
|
+
require 'umbreo/version'
|
15
|
+
|
16
|
+
require 'umbreo/helpers/table'
|
17
|
+
require 'umbreo/helpers/alert_message'
|
18
|
+
require 'umbreo/helpers/error_exception'
|
19
|
+
require 'umbreo/helpers/file_generator'
|
20
|
+
require 'umbreo/helpers/json_base_convert'
|
21
|
+
|
22
|
+
require 'umbreo/models/authentication'
|
23
|
+
require 'umbreo/models/configuration'
|
24
|
+
require 'umbreo/models/instance'
|
25
|
+
require 'umbreo/models/module'
|
26
|
+
require 'umbreo/models/profile'
|
27
|
+
require 'umbreo/models/cloud_provider'
|
28
|
+
require 'umbreo/models/provider'
|
29
|
+
require 'umbreo/models/digital_ocean_provider'
|
30
|
+
require 'umbreo/models/amazon_web_service_provider'
|
31
|
+
require 'umbreo/models/google_compute_engine_provider'
|
32
|
+
require 'umbreo/models/openstack_provider'
|
33
|
+
require 'umbreo/models/xenserver_provider'
|
34
|
+
require 'umbreo/models/blueprint'
|
35
|
+
require 'umbreo/models/system'
|
36
|
+
require 'umbreo/models/stack'
|
37
|
+
require 'umbreo/models/umbreo_stack_template'
|
38
|
+
require 'umbreo/models/service_provider'
|
39
|
+
require 'umbreo/models/service'
|
40
|
+
|
41
|
+
# Add requires for other files you add to your project here, so
|
42
|
+
# you just need to require this one file in your bin file
|
43
|
+
|
44
|
+
module Umbreo
|
45
|
+
|
46
|
+
SERVER_END_POINT = "https://beta.umbreo.com"
|
47
|
+
FILE_CONFIG = `eval echo ~$USER`.delete("\n") + "/.umbreoconfig"
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Helpers
|
3
|
+
class AlertMessage
|
4
|
+
|
5
|
+
def self.show_success_message(message, inline = false)
|
6
|
+
if inline
|
7
|
+
Rainbow(message).green
|
8
|
+
else
|
9
|
+
puts Rainbow(message).green
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.show_error_message(message, inline = false)
|
14
|
+
if inline
|
15
|
+
Rainbow(message).red.bright
|
16
|
+
else
|
17
|
+
puts Rainbow(message).red.bright
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.show_information_message(message, inline = false)
|
22
|
+
if inline
|
23
|
+
Rainbow(message).cyan
|
24
|
+
else
|
25
|
+
puts Rainbow(message).cyan
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.show_content_success_message(message, inline = false)
|
30
|
+
if inline
|
31
|
+
yield.gsub("#message", Rainbow(message).green)
|
32
|
+
else
|
33
|
+
puts yield.gsub("#message", Rainbow(message).green)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.show_content_error_message(message, inline = false)
|
38
|
+
if inline
|
39
|
+
yield.gsub("#message", Rainbow(message).red.bright)
|
40
|
+
else
|
41
|
+
puts yield.gsub("#message", Rainbow(message).red.bright)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.show_content_information_message(message, inline = false)
|
46
|
+
if inline
|
47
|
+
yield.gsub("#message", Rainbow(message).cyan)
|
48
|
+
else
|
49
|
+
puts yield.gsub("#message", Rainbow(message).cyan)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.show_error_exception(e)
|
54
|
+
puts Rainbow("An error of type #{e.class} happened.").red.bright
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Helpers
|
3
|
+
|
4
|
+
class JsonBaseConvert
|
5
|
+
|
6
|
+
def self.encode(source)
|
7
|
+
if source.is_a? Hash
|
8
|
+
Base64.strict_encode64(source.to_json)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.decode(source)
|
13
|
+
if source.is_a? String
|
14
|
+
JSON.parse Base64.strict_decode64(source)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# used by umbreo_service_client/master.json
|
19
|
+
def self.encode_service_param(source)
|
20
|
+
Base64.strict_decode64(source)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.decode_service_param(source)
|
24
|
+
Base64.strict_decode64(source)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Helpers
|
3
|
+
class Table
|
4
|
+
|
5
|
+
def self.table_callback_retrieve_data(data, title)
|
6
|
+
if data.present?
|
7
|
+
rows = []
|
8
|
+
data.each do |data|
|
9
|
+
data = data['name'].present? ? data['name'] : data
|
10
|
+
rows << [ data ]
|
11
|
+
end
|
12
|
+
table = Terminal::Table.new :title => title, :headings => ['Name'], :rows => rows
|
13
|
+
puts table
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.show_table(data, title, headings = [])
|
18
|
+
if data.present?
|
19
|
+
rows = []
|
20
|
+
data.each do |data|
|
21
|
+
|
22
|
+
sub_arr = data.is_a?(Array) ? data : data.to_a
|
23
|
+
cell = []
|
24
|
+
|
25
|
+
if data.is_a? Array
|
26
|
+
sub_arr.each do |arr|
|
27
|
+
cell << arr
|
28
|
+
end
|
29
|
+
else
|
30
|
+
sub_arr.each do |arr|
|
31
|
+
cell << arr[1]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
rows << cell
|
36
|
+
end
|
37
|
+
|
38
|
+
table = Terminal::Table.new :title => title, :headings => headings, :rows => rows
|
39
|
+
puts table
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,260 @@
|
|
1
|
+
module Umbreo
|
2
|
+
module Models
|
3
|
+
class AmazonWebServiceProvider
|
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 image of amazon web service
|
21
|
+
#
|
22
|
+
def aws_image_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/amazon_web_services/image_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.show_table(data['images'], "List AWS Image", ['Image Name', 'Image ID'])
|
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 size of amazon web service
|
51
|
+
#
|
52
|
+
def aws_size_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/amazon_web_services/size_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['sizes'], "List AWS Size", ['Size Name', 'Size 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 size of amazon web service
|
81
|
+
#
|
82
|
+
def region_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/amazon_web_services/region_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.table_callback_retrieve_data(data['regions'], "List AWS Region")
|
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 size of amazon web service
|
111
|
+
#
|
112
|
+
def keypairs_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/amazon_web_services/keypair_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['keypairs'], "List AWS Keypair")
|
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 size of amazon web service
|
141
|
+
#
|
142
|
+
def security_group_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/amazon_web_services/security_group_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['security_groups'], "List AWS Security Group")
|
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/digital_ocean_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 = "amazon_web_service_provider"
|
191
|
+
Helpers::FileGenerator.create(name_file, user_provider)
|
192
|
+
Helpers::AlertMessage.show_success_message("Success export amazon web service 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/amazon_web_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
|