cloudbox-server 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. data/.yardopts +3 -0
  2. data/README.md +17 -0
  3. data/bin/cb-cluster-allocate +5 -0
  4. data/bin/cb-cluster-create +5 -0
  5. data/bin/cb-cluster-delete +5 -0
  6. data/bin/cb-cluster-desallocate +5 -0
  7. data/bin/cb-cluster-info +5 -0
  8. data/bin/cb-cluster-ls +5 -0
  9. data/bin/cb-node-destroy +5 -0
  10. data/bin/cb-node-detach +6 -0
  11. data/bin/cb-node-info +5 -0
  12. data/bin/cb-node-install +5 -0
  13. data/bin/cb-node-ls +5 -0
  14. data/bin/cb-service-add +5 -0
  15. data/bin/cb-service-component-add +5 -0
  16. data/bin/cb-service-component-delete +5 -0
  17. data/bin/cb-service-component-detach +5 -0
  18. data/bin/cb-service-conf-apply +5 -0
  19. data/bin/cb-service-conf-create +5 -0
  20. data/bin/cb-service-conf-get +5 -0
  21. data/bin/cb-service-conf-ls +5 -0
  22. data/bin/cb-service-follow-request +5 -0
  23. data/bin/cb-service-info +5 -0
  24. data/bin/cb-service-install +5 -0
  25. data/bin/cb-service-ls +5 -0
  26. data/bin/cb-service-start +5 -0
  27. data/bin/cb-service-stop +5 -0
  28. data/lib/command.rb +61 -0
  29. data/lib/command/ambari_add_host.rb +19 -0
  30. data/lib/command/ambari_cluster_command.rb +26 -0
  31. data/lib/command/ambari_cluster_component_command.rb +26 -0
  32. data/lib/command/ambari_cluster_component_host_command.rb +26 -0
  33. data/lib/command/ambari_cluster_create.rb +19 -0
  34. data/lib/command/ambari_cluster_host_command.rb +27 -0
  35. data/lib/command/ambari_cluster_list.rb +20 -0
  36. data/lib/command/ambari_cluster_service_command.rb +26 -0
  37. data/lib/command/ambari_cluster_service_host_command.rb +26 -0
  38. data/lib/command/ambari_command.rb +21 -0
  39. data/lib/command/ambari_create_cluster_configuration.rb +39 -0
  40. data/lib/command/ambari_get_cluster_configuration.rb +29 -0
  41. data/lib/command/ambari_host_list.rb +19 -0
  42. data/lib/command/ambari_install_cluster.rb +19 -0
  43. data/lib/command/ambari_install_component.rb +19 -0
  44. data/lib/command/ambari_install_host.rb +19 -0
  45. data/lib/command/ambari_install_host_component.rb +19 -0
  46. data/lib/command/ambari_install_host_components.rb +19 -0
  47. data/lib/command/ambari_install_service_components.rb +19 -0
  48. data/lib/command/ambari_service_add.rb +27 -0
  49. data/lib/command/ambari_service_component_add.rb +21 -0
  50. data/lib/command/ambari_service_component_delete.rb +21 -0
  51. data/lib/command/ambari_service_component_detach.rb +21 -0
  52. data/lib/command/ambari_service_component_info.rb +29 -0
  53. data/lib/command/ambari_service_conf_apply.rb +31 -0
  54. data/lib/command/ambari_service_conf_ls.rb +30 -0
  55. data/lib/command/ambari_service_delete.rb +21 -0
  56. data/lib/command/ambari_service_info.rb +20 -0
  57. data/lib/command/ambari_service_list.rb +21 -0
  58. data/lib/command/ambari_start_cluster.rb +19 -0
  59. data/lib/command/ambari_start_component.rb +19 -0
  60. data/lib/command/ambari_start_host.rb +19 -0
  61. data/lib/command/ambari_start_host_component.rb +19 -0
  62. data/lib/command/ambari_start_host_components.rb +19 -0
  63. data/lib/command/ambari_start_service_components.rb +19 -0
  64. data/lib/command/ambari_stop_cluster.rb +19 -0
  65. data/lib/command/ambari_stop_component.rb +19 -0
  66. data/lib/command/ambari_stop_host.rb +19 -0
  67. data/lib/command/ambari_stop_host_component.rb +19 -0
  68. data/lib/command/ambari_stop_host_components.rb +19 -0
  69. data/lib/command/ambari_stop_service_components.rb +19 -0
  70. data/lib/command/basic_command.rb +44 -0
  71. data/lib/command/cluster_create.rb +50 -0
  72. data/lib/command/cluster_delete.rb +30 -0
  73. data/lib/command/cluster_info.rb +30 -0
  74. data/lib/command/cluster_ls.rb +30 -0
  75. data/lib/command/crowbar_cluster_allocate.rb +42 -0
  76. data/lib/command/crowbar_command.rb +30 -0
  77. data/lib/command/crowbar_get_barclamps_list.rb +30 -0
  78. data/lib/command/crowbar_node_command.rb +21 -0
  79. data/lib/command/crowbar_node_list.rb +40 -0
  80. data/lib/command/crowbar_vcluster_command.rb +20 -0
  81. data/lib/command/filter.rb +15 -0
  82. data/lib/command/node_destroy.rb +58 -0
  83. data/lib/command/node_detach.rb +44 -0
  84. data/lib/command/node_info.rb +27 -0
  85. data/lib/command/node_install.rb +46 -0
  86. data/lib/command/node_reinstall.rb +44 -0
  87. data/lib/command/state_filter.rb +16 -0
  88. data/lib/common.rb +11 -0
  89. data/lib/common/cb-lib-node-erase-hard-disk.sh +29 -0
  90. data/lib/common/cloudbox_exceptions.rb +631 -0
  91. data/lib/common/cloudbox_logger.rb +81 -0
  92. data/lib/common/cloudbox_logger_mock.rb +43 -0
  93. data/lib/common/color.rb +267 -0
  94. data/lib/common/config_properties.rb +2027 -0
  95. data/lib/common/services_description.rb +192 -0
  96. data/lib/exec.rb +35 -0
  97. data/lib/exec/check_parameter.rb +208 -0
  98. data/lib/exec/cluster_allocate.rb +163 -0
  99. data/lib/exec/cluster_create.rb +99 -0
  100. data/lib/exec/cluster_delete.rb +38 -0
  101. data/lib/exec/cluster_desallocate.rb +37 -0
  102. data/lib/exec/cluster_info.rb +177 -0
  103. data/lib/exec/cluster_ls.rb +150 -0
  104. data/lib/exec/command_option.rb +222 -0
  105. data/lib/exec/executable_command.rb +194 -0
  106. data/lib/exec/node_destroy.rb +101 -0
  107. data/lib/exec/node_detach.rb +98 -0
  108. data/lib/exec/node_info.rb +280 -0
  109. data/lib/exec/node_install.rb +234 -0
  110. data/lib/exec/node_ls.rb +160 -0
  111. data/lib/exec/service_add.rb +224 -0
  112. data/lib/exec/service_component_add.rb +39 -0
  113. data/lib/exec/service_component_delete.rb +37 -0
  114. data/lib/exec/service_component_detach.rb +37 -0
  115. data/lib/exec/service_conf_apply.rb +57 -0
  116. data/lib/exec/service_conf_create.rb +80 -0
  117. data/lib/exec/service_conf_get.rb +165 -0
  118. data/lib/exec/service_conf_ls.rb +103 -0
  119. data/lib/exec/service_follow_request.rb +49 -0
  120. data/lib/exec/service_info.rb +346 -0
  121. data/lib/exec/service_install.rb +87 -0
  122. data/lib/exec/service_ls.rb +124 -0
  123. data/lib/exec/service_start.rb +110 -0
  124. data/lib/exec/service_stop.rb +112 -0
  125. data/lib/receiver.rb +14 -0
  126. data/lib/receiver/ambari_receiver.rb +812 -0
  127. data/lib/receiver/ambari_rest_api_connector.rb +599 -0
  128. data/lib/receiver/basic_receiver.rb +28 -0
  129. data/lib/receiver/connector.rb +28 -0
  130. data/lib/receiver/crowbar_receiver.rb +588 -0
  131. data/lib/receiver/crowbar_rest_api_connector.rb +518 -0
  132. data/lib/receiver/crowbar_shell_api.rb +643 -0
  133. data/lib/receiver/rest_api_connector.rb +275 -0
  134. data/resources/ambari-configurations/HBASE/default_hbase-site +33 -0
  135. data/resources/ambari-configurations/HDFS/default_hdfs-site +49 -0
  136. data/resources/ambari-configurations/HIVE/default_hive-site +33 -0
  137. data/resources/ambari-configurations/MAPREDUCE/default_mapred-site +72 -0
  138. data/resources/ambari-configurations/OOZIE/default_oozie-site +28 -0
  139. data/resources/ambari-configurations/WEBHCAT/default_webhcat-site +18 -0
  140. data/resources/ambari-configurations/ZOOKEEPER/default_zookeeper-site +8 -0
  141. data/resources/ambari-configurations/default_core-site +22 -0
  142. data/resources/ambari-configurations/default_global +141 -0
  143. data/resources/cloudbox-server.conf +10 -0
  144. data/spec/common/services_description.rb +130 -0
  145. data/spec/exec/check_parameter.rb +152 -0
  146. data/spec/exec/command_option_spec.rb +97 -0
  147. metadata +328 -0
@@ -0,0 +1,599 @@
1
+ # This file is part of cloudbox-server project
2
+ # Author: tnoguer (INGENSI)
3
+
4
+ require 'json'
5
+ require 'receiver/rest_api_connector'
6
+
7
+ module Receiver
8
+ # Class linking to the Ambari Rest API.
9
+ # @author tnoguer
10
+ class AmbariRestAPIConnector < RestApiConnector
11
+
12
+ public
13
+ # Default constructor.
14
+ # @raise [ArgumentError] If the value of the arguments are nil or invalid.
15
+ # @author tnoguer
16
+ # @todo Change the conf file path to a relative path
17
+ def initialize(logger = nil)
18
+ file = File.new(File.dirname(__FILE__) + "/../../resources/cloudbox-server.conf", "r")
19
+ json = file.read()
20
+ conf = JSON.parse(json)
21
+ super(conf["ambari_server_ip"], conf["ambari_server_port"], "BASIC", conf["ambari_user"], conf["ambari_password"], 10000, logger)
22
+ @logger.info("Receiver::AmbariRestAPIConnector initialize the parameters...")
23
+ end
24
+
25
+ public
26
+ # Create a configuration into a cluster.
27
+ # @param cluster_name The name of the cluster.
28
+ # @param configuration_type The type of the configuration to add.
29
+ # @param configuration_tag The tag of the configuration to add.
30
+ # @param properties The hash of properties for the configuration. (ex: {"Property 1" => "value", "Property 2" => "value"})
31
+ # @return The http response.
32
+ # @raise [ArgumentError] If any argument is nil.
33
+ # @raise [HTTPError] If the request is invalid.
34
+ # @author tnoguer
35
+ def create_configuration(cluster_name, configuration_type, configuration_tag, properties)
36
+ if cluster_name == nil || configuration_type == nil || configuration_tag == nil || properties == nil
37
+ raise(ArgumentError, 'Arguments can\'t be nil!')
38
+ end
39
+
40
+ body = {"type" => configuration_type,
41
+ "tag" => configuration_tag,
42
+ "Config" => {
43
+ "cluster_name" => cluster_name
44
+ },
45
+ "properties" => {}
46
+ }
47
+ body["properties"].update(properties)
48
+ return launch_request("POST", "/api/v1/clusters/#{cluster_name}/configurations", body.to_json)
49
+ end
50
+
51
+ public
52
+ # Create and apply a configuration into a cluster.
53
+ # @param cluster_name The name of the cluster.
54
+ # @param configuration_type The type of the configuration to add.
55
+ # @param configuration_tag The tag of the configuration to add.
56
+ # @param properties The hash of properties for the configuration. (ex: {"Property 1" => "value", "Property 2" => "value"})
57
+ # @return The http response.
58
+ # @raise [ArgumentError] If any argument is nil.
59
+ # @raise [HTTPError] If the request is invalid.
60
+ # @author tnoguer
61
+ def create_apply_configuration(cluster_name, configuration_type, configuration_tag, properties)
62
+ if cluster_name == nil || configuration_type == nil || configuration_tag == nil || properties == nil
63
+ raise(ArgumentError, 'Arguments can\'t be nil!')
64
+ end
65
+ body = {"Clusters" => {
66
+ "desired_config" => {
67
+ "type" => configuration_type.to_s,
68
+ "tag" => configuration_tag.to_s,
69
+ "properties" => {}
70
+ }
71
+ }}
72
+ body['Clusters']['desired_config']['properties'].update(properties)
73
+ return launch_request("PUT", "/api/v1/clusters/#{cluster_name}", body.to_json)
74
+ end
75
+
76
+ public
77
+ # Apply a configuration into a cluster.
78
+ # @param cluster_name The name of the cluster.
79
+ # @param configuration_type The type of the configuration to add.
80
+ # @param configuration_tag The tag of the configuration to add.
81
+ # @return The http response.
82
+ # @raise [ArgumentError] If any argument is nil.
83
+ # @raise [HTTPError] If the request is invalid.
84
+ # @author tnoguer
85
+ def apply_configuration(cluster_name, configuration_type, configuration_tag)
86
+ if cluster_name == nil || configuration_type == nil || configuration_tag == nil
87
+ raise(ArgumentError, 'Arguments can\'t be nil!')
88
+ end
89
+
90
+ body = {"Clusters" => {
91
+ "desired_config" => {
92
+ "type" => configuration_type,
93
+ "tag" => configuration_tag
94
+ }
95
+ }}
96
+
97
+ return launch_request("PUT", "/api/v1/clusters/#{cluster_name}", body.to_json)
98
+ end
99
+
100
+ public
101
+ # Defines a new cluster.
102
+ # @param cluster_name The name of the cluster to be defined.
103
+ # @param cluster_version The version of the cluster to be created.
104
+ # @return The http response.
105
+ # @raise [ArgumentError] If any argument is nil.
106
+ # @raise [HTTPError] If the request is invalid.add
107
+ # @author tnoguer
108
+ def define_cluster(cluster_name, cluster_version)
109
+ if cluster_name == nil || cluster_version == nil
110
+ raise(ArgumentError, 'Arguments can\'t be nil!')
111
+ end
112
+
113
+ return launch_request("POST", "/api/v1/clusters/#{cluster_name}", "{\"Clusters\": {\"version\" : \"#{cluster_version}\"}}")
114
+ end
115
+
116
+ public
117
+ # Deletes a new cluster.
118
+ # @param cluster_name The name of the cluster to be deleted.
119
+ # @return The http response.
120
+ # @raise [ArgumentError] If any argument is nil.
121
+ # @raise [HTTPError] If the request is invalid.
122
+ # @author tnoguer
123
+ def delete_cluster(cluster_name)
124
+ if cluster_name == nil
125
+ raise(ArgumentError, 'Arguments can\'t be nil!')
126
+ end
127
+
128
+ return launch_request("DELETE", "/api/v1/clusters/#{cluster_name}")
129
+ end
130
+
131
+ public
132
+ # Shows the services of a cluster.
133
+ # @param cluster_name The name of the cluster.
134
+ # @return The http response.
135
+ # @raise [ArgumentError] If any argument is nil.
136
+ # @raise [HTTPError] If the request is invalid.
137
+ # @author tnoguer
138
+ def show_cluster_services(cluster_name)
139
+ if cluster_name == nil
140
+ raise(ArgumentError, 'Arguments can\'t be nil!')
141
+ end
142
+
143
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/services")
144
+ end
145
+
146
+ public
147
+ # Launches a GET request on a specifique configuration.
148
+ # @param cluster_name The name of the cluster.
149
+ # @param type The type of configuration.
150
+ # @param tag The tag ot configuration.
151
+ # @return The http response.
152
+ # @raise [ArgumentError] If any argument is nil.
153
+ # @raise [HTTPError] If the request is invalid.
154
+ # @author tnoguer
155
+ def get_cluster_configuration(cluster_name, type, tag)
156
+ if cluster_name == nil || type == nil || tag == nil
157
+ raise(ArgumentError, 'Arguments can\'t be nil!')
158
+ end
159
+
160
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/configurations?type=#{type}&tag=#{tag}")
161
+ end
162
+
163
+ public
164
+ # Shows the requests of a cluster.
165
+ # @param cluster_name The name of the cluster.
166
+ # @return The http response.
167
+ # @raise [ArgumentError] If any argument is nil.
168
+ # @raise [HTTPError] If the request is invalid.
169
+ # @author tnoguer
170
+ def show_requests(cluster_name)
171
+ if cluster_name == nil
172
+ raise(ArgumentError, 'Arguments can\'t be nil!')
173
+ end
174
+
175
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/requests")
176
+ end
177
+
178
+ public
179
+ # Shows the information of a request.
180
+ # @param cluster_name The name of the cluster.
181
+ # @param request_id The ID of the request.
182
+ # @return The http response.
183
+ # @raise [ArgumentError] If any argument is nil.
184
+ # @raise [HTTPError] If the request is invalid.
185
+ # @author tnoguer
186
+ def show_request(cluster_name, request_id)
187
+ if cluster_name == nil || request_id == nil
188
+ raise(ArgumentError, 'Arguments can\'t be nil!')
189
+ end
190
+
191
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/requests/#{request_id}?fields=tasks/*")
192
+ end
193
+
194
+
195
+ public
196
+ # Shows the information of a cluster.
197
+ # @param cluster_name The name of the cluster.
198
+ # @param show_host True to show the detail of the hosts. False otherwise.
199
+ # @param show_components True to show the detail of the components. False otherwise.
200
+ # @return The http response.
201
+ # @raise [ArgumentError] If any argument is nil.
202
+ # @raise [HTTPError] If the request is invalid.
203
+ # @author tnoguer
204
+ def show_cluster(cluster_name, show_host=false, show_components=false)
205
+ if cluster_name == nil
206
+ raise(ArgumentError, 'Arguments can\'t be nil!')
207
+ end
208
+
209
+ show_host = false unless show_host
210
+ show_components = false unless show_components
211
+ fields = "?fields=*"
212
+ fields += ",services/*" if show_components
213
+ fields += ",services/components/*" if show_host
214
+
215
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}#{fields}")
216
+ end
217
+
218
+ public
219
+ # Shows the list of clusters.
220
+ # @return The http response.
221
+ # @raise [HTTPError] If the request is invalid.
222
+ # @author tnoguer
223
+ def list_clusters
224
+ return launch_request("GET", "/api/v1/clusters")
225
+ end
226
+
227
+ public
228
+ # Adds a component to an host.
229
+ # @param cluster_name The name of the cluster.
230
+ # @param host_name The name of the host.
231
+ # @param component_name The name of the component to add.
232
+ # @return The http response.
233
+ # @raise [ArgumentError] If any argument is nil.
234
+ # @raise [HTTPError] If the request is invalid.
235
+ # @author tnoguer
236
+ def add_host_component(cluster_name, host_name, component_name)
237
+ if cluster_name == nil || host_name == nil || component_name == nil
238
+ raise(ArgumentError, 'Arguments can\'t be nil!')
239
+ end
240
+
241
+ return launch_request("POST", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}/host_components/#{component_name}")
242
+ end
243
+
244
+ public
245
+ # Deletes a component from an host.
246
+ # @param cluster_name The name of the cluster.
247
+ # @param host_name The name of the host.
248
+ # @param component_name The name of the component to delete.
249
+ # @return The http response.
250
+ # @raise [ArgumentError] If any argument is nil.
251
+ # @raise [HTTPError] If the request is invalid.
252
+ # @author tnoguer
253
+ def delete_host_component(cluster_name, host_name, component_name)
254
+ if host_name == nil || component_name == nil || cluster_name == nil
255
+ raise(ArgumentError, 'Arguments can\'t be nil!')
256
+ end
257
+
258
+ return launch_request("DELETE", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}/host_components/#{component_name}")
259
+ end
260
+
261
+ public
262
+ # Deletes an host.
263
+ # @param cluster_name The name of the cluster.
264
+ # @param host_name The name of the host to delete.
265
+ # @return The http response.
266
+ # @raise [ArgumentError] If any argument is nil.
267
+ # @raise [HTTPError] If the request is invalid.
268
+ # @author tnoguer
269
+ def delete_host(cluster_name, host_name)
270
+ if host_name == nil || cluster_name == nil
271
+ raise(ArgumentError, 'Arguments can\'t be nil!')
272
+ end
273
+
274
+ return launch_request("DELETE", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}")
275
+ end
276
+
277
+ public
278
+ # Installs a component of an host.
279
+ # @param cluster_name The name of the cluster.
280
+ # @param host_name The name of the host.
281
+ # @param component_name The name of the component to install.
282
+ # @return The http response.
283
+ # @raise [ArgumentError] If any argument is nil.
284
+ # @raise [HTTPError] If the request is invalid.
285
+ # @author tnoguer
286
+ def install_host_component(cluster_name, host_name, component_name)
287
+ return set_status_host_component(cluster_name, host_name, component_name, "INSTALLED")
288
+ end
289
+
290
+ public
291
+ # Starts a component of an host.
292
+ # @param cluster_name The name of the cluster.
293
+ # @param host_name The name of the host.
294
+ # @param component_name The name of the component to start.
295
+ # @return The http response.
296
+ # @raise [ArgumentError] If any argument is nil.
297
+ # @raise [HTTPError] If the request is invalid.
298
+ # @author tnoguer
299
+ def start_host_component(cluster_name, host_name, component_name)
300
+ return set_status_host_component(cluster_name, host_name, component_name, "STARTED")
301
+ end
302
+
303
+ public
304
+ # Stops a component of an host.
305
+ # @param cluster_name The name of the cluster.
306
+ # @param host_name The name of the host.
307
+ # @param component_name The name of the component to stop.
308
+ # @return The http response.
309
+ # @raise [ArgumentError] If any argument is nil.
310
+ # @raise [HTTPError] If the request is invalid.
311
+ # @author tnoguer
312
+ def stop_host_component(cluster_name, host_name, component_name)
313
+ return set_status_host_component(cluster_name, host_name, component_name, "INSTALLED")
314
+ end
315
+
316
+ public
317
+ # Detachs a component of an host.
318
+ # @param cluster_name The name of the cluster.
319
+ # @param host_name The name of the host.
320
+ # @param component_name The name of the component to detach.
321
+ # @return The http response.
322
+ # @raise [ArgumentError] If any argument is nil.
323
+ # @raise [HTTPError] If the request is invalid.
324
+ # @author tnoguer0
325
+ def detach_host_component(cluster_name, host_name, component_name)
326
+ return set_status_host_component(cluster_name, host_name, component_name, "MAINTENANCE")
327
+ end
328
+
329
+ private
330
+ # Set the status of a component of an host.
331
+ # @param cluster_name The name of the cluster.
332
+ # @param host_name The name of the host.
333
+ # @param component_name The name of the component.
334
+ # @param status The status to set. (INSTALLED, STARTED, MAINTENANCE)
335
+ # @return The http response.
336
+ # @raise [ArgumentError] If any argument is nil.
337
+ # @raise [HTTPError] If the request is invalid.
338
+ # @author tnoguer
339
+ def set_status_host_component(cluster_name, host_name, component_name, status)
340
+ if host_name == nil || component_name == nil || cluster_name == nil || status == nil
341
+ raise(ArgumentError, 'Arguments can\'t be nil!')
342
+ end
343
+
344
+ return launch_request("PUT", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}/host_components/#{component_name}",
345
+ "{ \"HostRoles\" : { \"state\" : \"#{status}\"}}")
346
+ end
347
+
348
+ public
349
+ # Adds an host.
350
+ # @param cluster_name The name of the cluster.
351
+ # @param host_name The name of the host to add.
352
+ # @return The http response.
353
+ # @raise [ArgumentError] If any argument is nil.
354
+ # @raise [HTTPError] If the request is invalid.
355
+ # @author tnoguer
356
+ def add_host(cluster_name, host_name)
357
+ if host_name == nil || cluster_name == nil
358
+ raise(ArgumentError, 'Arguments can\'t be nil!')
359
+ end
360
+
361
+ return launch_request("POST", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}")
362
+ end
363
+
364
+ #public
365
+ # Creates and applies a configuration to an host from a configuration file.
366
+ # @param cluster_name The name of the cluster.
367
+ # @param host_name The name of the host.
368
+ # @param configuration_type The type of the configuration to add.
369
+ # @param configuration_tag The tag of the configuration to add.
370
+ # @param file_path The path to the file containing the properties of the configuration.
371
+ # @return The http response.
372
+ # @raise [ArgumentError] If any argument is nil.
373
+ # @raise [HTTPError] If the request is invalid.
374
+ # @author tnoguer
375
+ #def configure_host(cluster_name, host_name, configuration_type, configuration_tag, file_path)
376
+ # if file_path == nil || cluster_name == nil || host_name == nil || configuration_type == nil || configuration_tag == nil
377
+ # raise(ArgumentError, 'Arguments can\'t be nil!')
378
+ # end
379
+ #
380
+ # config = {:Clusters => {:desired_configs => {:type => configuration_type, :tag => configuration_tag, :properties => {}}}}
381
+ # config[:Clusters][:desired_configs][:properties].update(xml2json(file_path))
382
+ # config = config.to_json
383
+ #
384
+ # return launch_request("PUT", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}", config)
385
+ #end
386
+
387
+ public
388
+ # Shows information of an host.
389
+ # @param cluster_name The name of the cluster.
390
+ # @param host_name The name of the host.
391
+ # @return The http response.
392
+ # @raise [ArgumentError] If any argument is nil.
393
+ # @raise [HTTPError] If the request is invalid.
394
+ # @author tnoguer
395
+ def show_host(cluster_name, host_name)
396
+ if host_name == nil || cluster_name == nil
397
+ raise(ArgumentError, 'Arguments can\'t be nil!')
398
+ end
399
+
400
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/hosts/#{host_name}?fields=*,host_components/*")
401
+ end
402
+
403
+ public
404
+ # Adds a component to a service.
405
+ # @param cluster_name The name of the cluster.
406
+ # @param service_name The name of the service.
407
+ # @param component_name The name of the component to add.
408
+ # @return The http response.
409
+ # @raise [ArgumentError] If any argument is nil.
410
+ # @raise [HTTPError] If the request is invalid.
411
+ # @author tnoguer
412
+ def add_service_component(cluster_name, service_name, component_name)
413
+ if service_name == nil || component_name == nil || cluster_name == nil
414
+ raise(ArgumentError, 'Arguments can\'t be nil!')
415
+ end
416
+
417
+ return launch_request("POST", "/api/v1/clusters/#{cluster_name}/services/#{service_name}/components/#{component_name}")
418
+
419
+ end
420
+
421
+ public
422
+ # Defines a new service.
423
+ # @param cluster_name The name of the cluster.
424
+ # @param service_name The name of the service to define.
425
+ # @return The http response.
426
+ # @raise [ArgumentError] If any argument is nil.
427
+ # @raise [HTTPError] If the request is invalid.
428
+ # @author tnoguer
429
+ def define_service(cluster_name, service_name)
430
+ if service_name == nil || cluster_name == nil
431
+ raise(ArgumentError, 'Arguments can\'t be nil!')
432
+ end
433
+
434
+ return launch_request("POST", "/api/v1/clusters/#{cluster_name}/services/#{service_name}")
435
+ end
436
+
437
+ public
438
+ # Deletes a service.
439
+ # @param cluster_name The name of the cluster.
440
+ # @param service_name The name of the service to delete.
441
+ # @return The http response.
442
+ # @raise [ArgumentError] If any argument is nil.
443
+ # @raise [HTTPError] If the request is invalid.
444
+ # @author tnoguer
445
+ def delete_service(cluster_name, service_name)
446
+ if service_name == nil || cluster_name == nil
447
+ raise(ArgumentError, 'Arguments can\'t be nil!')
448
+ end
449
+
450
+ return launch_request("DELETE", "/api/v1/clusters/#{cluster_name}/services/#{service_name}")
451
+ end
452
+
453
+ public
454
+ # Installs a service.
455
+ # @param cluster_name The name of the cluster.
456
+ # @param service_name The name of the service to install.
457
+ # @return The http response.
458
+ # @raise [ArgumentError] If any argument is nil.
459
+ # @raise [HTTPError] If the request is invalid.
460
+ # @author tnoguer
461
+ def install_service(cluster_name, service_name)
462
+ return set_status_service(cluster_name, service_name, "INSTALLED")
463
+ end
464
+
465
+ public
466
+ # Starts a service.
467
+ # @param cluster_name The name of the cluster.
468
+ # @param service_name The name of the service to start.
469
+ # @return The http response.
470
+ # @raise [ArgumentError] If any argument is nil.
471
+ # @raise [HTTPError] If the request is invalid.
472
+ # @author tnoguer
473
+ def start_service(cluster_name, service_name)
474
+ return set_status_service(cluster_name, service_name, "STARTED")
475
+ end
476
+
477
+ public
478
+ # Stops a service.
479
+ # @param cluster_name The name of the cluster.
480
+ # @param service_name The name of the service to stop.
481
+ # @return The http response.
482
+ # @raise [ArgumentError] If any argument is nil.
483
+ # @raise [HTTPError] If the request is invalid.
484
+ # @author tnoguer
485
+ def stop_service(cluster_name, service_name)
486
+ return set_status_service(cluster_name, service_name, "INSTALLED")
487
+ end
488
+
489
+ private
490
+ # Set the status of a service.
491
+ # @param cluster_name The name of the cluster.
492
+ # @param service_name The name of the service.
493
+ # @param status The status to set. (INSTALLED STARTED)
494
+ # @return The http response.
495
+ # @raise [ArgumentError] If any argument is nil.
496
+ # @raise [HTTPError] If the request is invalid.
497
+ # @author tnoguer
498
+ def set_status_service(cluster_name, service_name, status)
499
+ if service_name == nil || cluster_name == nil
500
+ raise(ArgumentError, 'Arguments can\'t be nil!')
501
+ end
502
+
503
+ return launch_request("PUT", "/api/v1/clusters/#{cluster_name}/services/#{service_name}",
504
+ "{\"ServiceInfo\": {\"state\" : \"#{status}\"}}")
505
+ end
506
+
507
+ public
508
+ # Installs a type of components of a service.
509
+ # @param cluster_name The name of the cluster.
510
+ # @param service_name The name of the service.
511
+ # @param component_name The name of the components to install.
512
+ # @return The http response.
513
+ # @raise [ArgumentError] If any argument is nil.
514
+ # @raise [HTTPError] If the request is invalid.
515
+ # @author tnoguer
516
+ def install_service_components(cluster_name, service_name, component_name)
517
+ return set_status_service_components(cluster_name, service_name, component_name, "INSTALLED")
518
+ end
519
+
520
+ public
521
+ # Starts a type of components of a service.
522
+ # @param cluster_name The name of the cluster.
523
+ # @param service_name The name of the service.
524
+ # @param component_name The name of the components to start.
525
+ # @return The http response.
526
+ # @raise [ArgumentError] If any argument is nil.
527
+ # @raise [HTTPError] If the request is invalid.
528
+ # @author tnoguer
529
+ def start_service_components(cluster_name, service_name, component_name)
530
+ return set_status_service_components(cluster_name, service_name, component_name, "STARTED")
531
+ end
532
+
533
+ public
534
+ # Stops a type of components of a service.
535
+ # @param cluster_name The name of the cluster.
536
+ # @param service_name The name of the service.
537
+ # @param component_name The name of the components to stops.
538
+ # @return The http response.
539
+ # @raise [ArgumentError] If any argument is nil.
540
+ # @raise [HTTPError] If the request is invalid.
541
+ # @author tnoguer
542
+ def stop_service_components(cluster_name, service_name, component_name)
543
+ return set_status_service_components(cluster_name, service_name, component_name, "INSTALLED")
544
+ end
545
+
546
+ private
547
+ # Set the status of a type of components of a service.
548
+ # @param cluster_name The name of the cluster.
549
+ # @param service_name The name of the service.
550
+ # @param component_name The name of the components.
551
+ # @param status The status to set. (INSTALLED STARTED)
552
+ # @return The http response.
553
+ # @raise [ArgumentError] If any argument is nil.
554
+ # @raise [HTTPError] If the request is invalid.
555
+ # @author tnoguer
556
+ def set_status_service_components(cluster_name, service_name, component_name, status)
557
+ if service_name == nil || cluster_name == nil || component_name == nil || status == nil
558
+ raise(ArgumentError, 'Arguments can\'t be nil!')
559
+ end
560
+
561
+ return launch_request("PUT", "/api/v1/clusters/#{cluster_name}/services/#{service_name}/components/#{component_name}",
562
+ "{\"ServiceComponentInfo\": {\"state\" : \"#{status}\"}}")
563
+ end
564
+
565
+ public
566
+ # Shows information of a type of components of a service.
567
+ # @param cluster_name The name of the cluster.
568
+ # @param service_name The name of the service.
569
+ # @param component_name The name of the components.
570
+ # @return The http response.
571
+ # @raise [ArgumentError] If any argument is nil.
572
+ # @raise [HTTPError] If the request is invalid.
573
+ # @author tnoguer
574
+ def show_service_components(cluster_name, service_name, component_name)
575
+ if service_name == nil || cluster_name == nil ||component_name == nil
576
+ raise(ArgumentError, 'Arguments can\'t be nil!')
577
+ end
578
+
579
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/services/#{service_name}/components/#{component_name}?fields=host_components/*")
580
+ end
581
+
582
+ public
583
+ # Shows the list of service of a cluster.
584
+ # @param cluster_name The name of the cluster.
585
+ # @param service_name The name of the service.
586
+ # @return The http response.
587
+ # @raise [ArgumentError] If any argument is nil.
588
+ # @raise [HTTPError] If the request is invalid.
589
+ # @author tnoguer
590
+ def show_service(cluster_name, service_name)
591
+ if service_name == nil || cluster_name == nil
592
+ raise(ArgumentError, 'Arguments can\'t be nil!')
593
+ end
594
+
595
+ return launch_request("GET", "/api/v1/clusters/#{cluster_name}/services/#{service_name}?fields=*,components/ServiceComponentInfo,components/host_components/*")
596
+ end
597
+
598
+ end
599
+ end