crowbar-client 1.0.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 (232) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +6 -0
  3. data/LICENSE +202 -0
  4. data/README.md +49 -0
  5. data/bin/crowbar +37 -0
  6. data/lib/crowbar-client.rb +17 -0
  7. data/lib/crowbar/client.rb +82 -0
  8. data/lib/crowbar/client/app.rb +60 -0
  9. data/lib/crowbar/client/app/barclamp.rb +77 -0
  10. data/lib/crowbar/client/app/base.rb +97 -0
  11. data/lib/crowbar/client/app/batch.rb +100 -0
  12. data/lib/crowbar/client/app/entry.rb +121 -0
  13. data/lib/crowbar/client/app/host_ip.rb +65 -0
  14. data/lib/crowbar/client/app/interface.rb +63 -0
  15. data/lib/crowbar/client/app/network.rb +35 -0
  16. data/lib/crowbar/client/app/node.rb +451 -0
  17. data/lib/crowbar/client/app/proposal.rb +300 -0
  18. data/lib/crowbar/client/app/repository.rb +149 -0
  19. data/lib/crowbar/client/app/reset.rb +58 -0
  20. data/lib/crowbar/client/app/role.rb +140 -0
  21. data/lib/crowbar/client/app/virtual_ip.rb +65 -0
  22. data/lib/crowbar/client/command.rb +54 -0
  23. data/lib/crowbar/client/command/barclamp.rb +26 -0
  24. data/lib/crowbar/client/command/barclamp/list.rb +64 -0
  25. data/lib/crowbar/client/command/base.rb +55 -0
  26. data/lib/crowbar/client/command/batch.rb +29 -0
  27. data/lib/crowbar/client/command/batch/build.rb +36 -0
  28. data/lib/crowbar/client/command/batch/export.rb +36 -0
  29. data/lib/crowbar/client/command/host_ip.rb +29 -0
  30. data/lib/crowbar/client/command/host_ip/allocate.rb +50 -0
  31. data/lib/crowbar/client/command/host_ip/deallocate.rb +42 -0
  32. data/lib/crowbar/client/command/interface.rb +29 -0
  33. data/lib/crowbar/client/command/interface/disable.rb +42 -0
  34. data/lib/crowbar/client/command/interface/enable.rb +50 -0
  35. data/lib/crowbar/client/command/node.rb +74 -0
  36. data/lib/crowbar/client/command/node/allocate.rb +48 -0
  37. data/lib/crowbar/client/command/node/delete.rb +44 -0
  38. data/lib/crowbar/client/command/node/hardware.rb +48 -0
  39. data/lib/crowbar/client/command/node/identify.rb +48 -0
  40. data/lib/crowbar/client/command/node/list.rb +71 -0
  41. data/lib/crowbar/client/command/node/powercycle.rb +48 -0
  42. data/lib/crowbar/client/command/node/poweroff.rb +48 -0
  43. data/lib/crowbar/client/command/node/poweron.rb +48 -0
  44. data/lib/crowbar/client/command/node/reboot.rb +48 -0
  45. data/lib/crowbar/client/command/node/reinstall.rb +48 -0
  46. data/lib/crowbar/client/command/node/rename.rb +44 -0
  47. data/lib/crowbar/client/command/node/reset.rb +48 -0
  48. data/lib/crowbar/client/command/node/role.rb +44 -0
  49. data/lib/crowbar/client/command/node/show.rb +67 -0
  50. data/lib/crowbar/client/command/node/shutdown.rb +48 -0
  51. data/lib/crowbar/client/command/node/status.rb +71 -0
  52. data/lib/crowbar/client/command/node/transition.rb +44 -0
  53. data/lib/crowbar/client/command/proposal.rb +44 -0
  54. data/lib/crowbar/client/command/proposal/commit.rb +50 -0
  55. data/lib/crowbar/client/command/proposal/create.rb +130 -0
  56. data/lib/crowbar/client/command/proposal/delete.rb +48 -0
  57. data/lib/crowbar/client/command/proposal/dequeue.rb +48 -0
  58. data/lib/crowbar/client/command/proposal/edit.rb +129 -0
  59. data/lib/crowbar/client/command/proposal/list.rb +68 -0
  60. data/lib/crowbar/client/command/proposal/show.rb +71 -0
  61. data/lib/crowbar/client/command/repository.rb +38 -0
  62. data/lib/crowbar/client/command/repository/activate.rb +44 -0
  63. data/lib/crowbar/client/command/repository/activate_all.rb +42 -0
  64. data/lib/crowbar/client/command/repository/deactivate.rb +44 -0
  65. data/lib/crowbar/client/command/repository/deactivate_all.rb +42 -0
  66. data/lib/crowbar/client/command/repository/list.rb +71 -0
  67. data/lib/crowbar/client/command/reset.rb +29 -0
  68. data/lib/crowbar/client/command/reset/nodes.rb +36 -0
  69. data/lib/crowbar/client/command/reset/proposal.rb +36 -0
  70. data/lib/crowbar/client/command/role.rb +29 -0
  71. data/lib/crowbar/client/command/role/list.rb +70 -0
  72. data/lib/crowbar/client/command/role/show.rb +70 -0
  73. data/lib/crowbar/client/command/virtual_ip.rb +29 -0
  74. data/lib/crowbar/client/command/virtual_ip/allocate.rb +50 -0
  75. data/lib/crowbar/client/command/virtual_ip/deallocate.rb +42 -0
  76. data/lib/crowbar/client/config.rb +178 -0
  77. data/lib/crowbar/client/filter.rb +33 -0
  78. data/lib/crowbar/client/filter/array.rb +29 -0
  79. data/lib/crowbar/client/filter/base.rb +41 -0
  80. data/lib/crowbar/client/filter/hash.rb +33 -0
  81. data/lib/crowbar/client/filter/subset.rb +45 -0
  82. data/lib/crowbar/client/formatter.rb +33 -0
  83. data/lib/crowbar/client/formatter/array.rb +49 -0
  84. data/lib/crowbar/client/formatter/base.rb +47 -0
  85. data/lib/crowbar/client/formatter/hash.rb +51 -0
  86. data/lib/crowbar/client/formatter/nested.rb +134 -0
  87. data/lib/crowbar/client/mixin.rb +30 -0
  88. data/lib/crowbar/client/mixin/barclamp.rb +41 -0
  89. data/lib/crowbar/client/mixin/filter.rb +33 -0
  90. data/lib/crowbar/client/mixin/format.rb +56 -0
  91. data/lib/crowbar/client/request.rb +57 -0
  92. data/lib/crowbar/client/request/barclamp.rb +26 -0
  93. data/lib/crowbar/client/request/barclamp/list.rb +35 -0
  94. data/lib/crowbar/client/request/base.rb +71 -0
  95. data/lib/crowbar/client/request/batch.rb +29 -0
  96. data/lib/crowbar/client/request/batch/build.rb +33 -0
  97. data/lib/crowbar/client/request/batch/export.rb +33 -0
  98. data/lib/crowbar/client/request/host_ip.rb +29 -0
  99. data/lib/crowbar/client/request/host_ip/allocate.rb +50 -0
  100. data/lib/crowbar/client/request/host_ip/deallocate.rb +48 -0
  101. data/lib/crowbar/client/request/interface.rb +29 -0
  102. data/lib/crowbar/client/request/interface/disable.rb +48 -0
  103. data/lib/crowbar/client/request/interface/enable.rb +48 -0
  104. data/lib/crowbar/client/request/node.rb +47 -0
  105. data/lib/crowbar/client/request/node/action.rb +39 -0
  106. data/lib/crowbar/client/request/node/delete.rb +38 -0
  107. data/lib/crowbar/client/request/node/list.rb +37 -0
  108. data/lib/crowbar/client/request/node/rename.rb +47 -0
  109. data/lib/crowbar/client/request/node/role.rb +47 -0
  110. data/lib/crowbar/client/request/node/show.rb +38 -0
  111. data/lib/crowbar/client/request/node/status.rb +36 -0
  112. data/lib/crowbar/client/request/node/transition.rb +48 -0
  113. data/lib/crowbar/client/request/party.rb +79 -0
  114. data/lib/crowbar/client/request/proposal.rb +47 -0
  115. data/lib/crowbar/client/request/proposal/commit.rb +40 -0
  116. data/lib/crowbar/client/request/proposal/create.rb +46 -0
  117. data/lib/crowbar/client/request/proposal/delete.rb +39 -0
  118. data/lib/crowbar/client/request/proposal/dequeue.rb +40 -0
  119. data/lib/crowbar/client/request/proposal/edit.rb +47 -0
  120. data/lib/crowbar/client/request/proposal/list.rb +38 -0
  121. data/lib/crowbar/client/request/proposal/show.rb +39 -0
  122. data/lib/crowbar/client/request/proposal/template.rb +39 -0
  123. data/lib/crowbar/client/request/repository.rb +38 -0
  124. data/lib/crowbar/client/request/repository/activate.rb +46 -0
  125. data/lib/crowbar/client/request/repository/activate_all.rb +37 -0
  126. data/lib/crowbar/client/request/repository/deactivate.rb +46 -0
  127. data/lib/crowbar/client/request/repository/deactivate_all.rb +37 -0
  128. data/lib/crowbar/client/request/repository/list.rb +36 -0
  129. data/lib/crowbar/client/request/reset.rb +29 -0
  130. data/lib/crowbar/client/request/reset/nodes.rb +33 -0
  131. data/lib/crowbar/client/request/reset/proposal.rb +33 -0
  132. data/lib/crowbar/client/request/role.rb +29 -0
  133. data/lib/crowbar/client/request/role/list.rb +38 -0
  134. data/lib/crowbar/client/request/role/show.rb +39 -0
  135. data/lib/crowbar/client/request/virtual_ip.rb +29 -0
  136. data/lib/crowbar/client/request/virtual_ip/allocate.rb +50 -0
  137. data/lib/crowbar/client/request/virtual_ip/deallocate.rb +48 -0
  138. data/lib/crowbar/client/util.rb +27 -0
  139. data/lib/crowbar/client/util/editor.rb +107 -0
  140. data/lib/crowbar/client/util/runner.rb +77 -0
  141. data/lib/crowbar/client/version.rb +33 -0
  142. data/spec/crowbar/client/app_spec.rb +21 -0
  143. data/spec/crowbar/client/command/barclamp/list_spec.rb +39 -0
  144. data/spec/crowbar/client/command/batch/build_spec.rb +39 -0
  145. data/spec/crowbar/client/command/batch/export_spec.rb +39 -0
  146. data/spec/crowbar/client/command/host_ip/allocate_spec.rb +39 -0
  147. data/spec/crowbar/client/command/host_ip/deallocate_spec.rb +39 -0
  148. data/spec/crowbar/client/command/interface/disable_spec.rb +39 -0
  149. data/spec/crowbar/client/command/interface/enable_spec.rb +39 -0
  150. data/spec/crowbar/client/command/node/allocate_spec.rb +39 -0
  151. data/spec/crowbar/client/command/node/delete_spec.rb +39 -0
  152. data/spec/crowbar/client/command/node/hardware_spec.rb +39 -0
  153. data/spec/crowbar/client/command/node/identify_spec.rb +39 -0
  154. data/spec/crowbar/client/command/node/list_spec.rb +39 -0
  155. data/spec/crowbar/client/command/node/powercycle_spec.rb +39 -0
  156. data/spec/crowbar/client/command/node/poweroff_spec.rb +39 -0
  157. data/spec/crowbar/client/command/node/poweron_spec.rb +39 -0
  158. data/spec/crowbar/client/command/node/reboot_spec.rb +39 -0
  159. data/spec/crowbar/client/command/node/reinstall_spec.rb +39 -0
  160. data/spec/crowbar/client/command/node/rename_spec.rb +39 -0
  161. data/spec/crowbar/client/command/node/reset_spec.rb +39 -0
  162. data/spec/crowbar/client/command/node/role_spec.rb +39 -0
  163. data/spec/crowbar/client/command/node/show_spec.rb +39 -0
  164. data/spec/crowbar/client/command/node/shutdown_spec.rb +39 -0
  165. data/spec/crowbar/client/command/node/status_spec.rb +39 -0
  166. data/spec/crowbar/client/command/node/transition_spec.rb +39 -0
  167. data/spec/crowbar/client/command/proposal/commit_spec.rb +39 -0
  168. data/spec/crowbar/client/command/proposal/create_spec.rb +61 -0
  169. data/spec/crowbar/client/command/proposal/delete_spec.rb +39 -0
  170. data/spec/crowbar/client/command/proposal/dequeue_spec.rb +39 -0
  171. data/spec/crowbar/client/command/proposal/edit_spec.rb +62 -0
  172. data/spec/crowbar/client/command/proposal/list_spec.rb +39 -0
  173. data/spec/crowbar/client/command/proposal/show_spec.rb +39 -0
  174. data/spec/crowbar/client/command/repository/activate_all_spec.rb +39 -0
  175. data/spec/crowbar/client/command/repository/activate_spec.rb +39 -0
  176. data/spec/crowbar/client/command/repository/deactivate_all_spec.rb +39 -0
  177. data/spec/crowbar/client/command/repository/deactivate_spec.rb +39 -0
  178. data/spec/crowbar/client/command/repository/list_spec.rb +39 -0
  179. data/spec/crowbar/client/command/reset/nodes_spec.rb +39 -0
  180. data/spec/crowbar/client/command/reset/proposal_spec.rb +39 -0
  181. data/spec/crowbar/client/command/role/list_spec.rb +39 -0
  182. data/spec/crowbar/client/command/role/show_spec.rb +39 -0
  183. data/spec/crowbar/client/command/virtual_ip/allocate_spec.rb +39 -0
  184. data/spec/crowbar/client/command/virtual_ip/deallocate_spec.rb +39 -0
  185. data/spec/crowbar/client/filter/array_spec.rb +65 -0
  186. data/spec/crowbar/client/filter/hash_spec.rb +65 -0
  187. data/spec/crowbar/client/filter/subset_spec.rb +77 -0
  188. data/spec/crowbar/client/formatter/array_spec.rb +102 -0
  189. data/spec/crowbar/client/formatter/hash_spec.rb +108 -0
  190. data/spec/crowbar/client/formatter/nested_spec.rb +106 -0
  191. data/spec/crowbar/client/request/barclamp/list_spec.rb +50 -0
  192. data/spec/crowbar/client/request/batch/build_spec.rb +64 -0
  193. data/spec/crowbar/client/request/batch/export_spec.rb +64 -0
  194. data/spec/crowbar/client/request/host_ip/allocate_spec.rb +61 -0
  195. data/spec/crowbar/client/request/host_ip/deallocate_spec.rb +57 -0
  196. data/spec/crowbar/client/request/interface/disable_spec.rb +57 -0
  197. data/spec/crowbar/client/request/interface/enable_spec.rb +57 -0
  198. data/spec/crowbar/client/request/node/action_spec.rb +53 -0
  199. data/spec/crowbar/client/request/node/delete_spec.rb +52 -0
  200. data/spec/crowbar/client/request/node/list_spec.rb +50 -0
  201. data/spec/crowbar/client/request/node/rename_spec.rb +55 -0
  202. data/spec/crowbar/client/request/node/role_spec.rb +55 -0
  203. data/spec/crowbar/client/request/node/show_spec.rb +52 -0
  204. data/spec/crowbar/client/request/node/status_spec.rb +50 -0
  205. data/spec/crowbar/client/request/node/transition_spec.rb +56 -0
  206. data/spec/crowbar/client/request/party_spec.rb +24 -0
  207. data/spec/crowbar/client/request/proposal/commit_spec.rb +53 -0
  208. data/spec/crowbar/client/request/proposal/create_spec.rb +56 -0
  209. data/spec/crowbar/client/request/proposal/delete_spec.rb +53 -0
  210. data/spec/crowbar/client/request/proposal/dequeue_spec.rb +53 -0
  211. data/spec/crowbar/client/request/proposal/edit_spec.rb +56 -0
  212. data/spec/crowbar/client/request/proposal/list_spec.rb +52 -0
  213. data/spec/crowbar/client/request/proposal/show_spec.rb +53 -0
  214. data/spec/crowbar/client/request/proposal/template_spec.rb +52 -0
  215. data/spec/crowbar/client/request/repository/activate_all_spec.rb +50 -0
  216. data/spec/crowbar/client/request/repository/activate_spec.rb +56 -0
  217. data/spec/crowbar/client/request/repository/deactivate_all_spec.rb +50 -0
  218. data/spec/crowbar/client/request/repository/deactivate_spec.rb +56 -0
  219. data/spec/crowbar/client/request/repository/list_spec.rb +50 -0
  220. data/spec/crowbar/client/request/reset/nodes_spec.rb +55 -0
  221. data/spec/crowbar/client/request/reset/proposal_spec.rb +55 -0
  222. data/spec/crowbar/client/request/role/list_spec.rb +52 -0
  223. data/spec/crowbar/client/request/role/show_spec.rb +53 -0
  224. data/spec/crowbar/client/request/virtual_ip/allocate_spec.rb +61 -0
  225. data/spec/crowbar/client/request/virtual_ip/deallocate_spec.rb +57 -0
  226. data/spec/crowbar/client/util/editor_spec.rb +108 -0
  227. data/spec/crowbar/client/util/runner_spec.rb +24 -0
  228. data/spec/crowbar/client_spec.rb +21 -0
  229. data/spec/spec_helper.rb +55 -0
  230. data/spec/support/command_context.rb +37 -0
  231. data/spec/support/request_examples.rb +55 -0
  232. metadata +549 -0
@@ -0,0 +1,39 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Request
20
+ module Role
21
+ class Show < Base
22
+ def method
23
+ :get
24
+ end
25
+
26
+ def url
27
+ [
28
+ "crowbar",
29
+ attrs.barclamp,
30
+ "1.0",
31
+ "elements",
32
+ attrs.role
33
+ ].join("/")
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Request
20
+ module VirtualIP
21
+ autoload :Allocate,
22
+ File.expand_path("../virtual_ip/allocate", __FILE__)
23
+
24
+ autoload :Deallocate,
25
+ File.expand_path("../virtual_ip/deallocate", __FILE__)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require "easy_diff"
18
+
19
+ module Crowbar
20
+ module Client
21
+ module Request
22
+ module VirtualIP
23
+ class Allocate < Base
24
+ def content
25
+ super.easy_merge!(
26
+ name: attrs.service,
27
+ network: attrs.network,
28
+ range: attrs.range,
29
+ suggestion: attrs.suggest
30
+ )
31
+ end
32
+
33
+ def method
34
+ :post
35
+ end
36
+
37
+ def url
38
+ [
39
+ "crowbar",
40
+ "network",
41
+ "1.0",
42
+ "allocate_virtual_ip",
43
+ attrs.prop
44
+ ].join("/")
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,48 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require "easy_diff"
18
+
19
+ module Crowbar
20
+ module Client
21
+ module Request
22
+ module VirtualIP
23
+ class Deallocate < Base
24
+ def content
25
+ super.easy_merge!(
26
+ name: attrs.service,
27
+ network: attrs.network
28
+ )
29
+ end
30
+
31
+ def method
32
+ :post
33
+ end
34
+
35
+ def url
36
+ [
37
+ "crowbar",
38
+ "network",
39
+ "1.0",
40
+ "deallocate_virtual_ip",
41
+ attrs.prop
42
+ ].join("/")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,27 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Util
20
+ autoload :Editor,
21
+ File.expand_path("../util/editor", __FILE__)
22
+
23
+ autoload :Runner,
24
+ File.expand_path("../util/runner", __FILE__)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,107 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require "tempfile"
18
+ require "json"
19
+
20
+ module Crowbar
21
+ module Client
22
+ module Util
23
+ class Editor
24
+ attr_accessor :content
25
+ attr_accessor :options
26
+
27
+ def initialize(options = {})
28
+ self.options = options
29
+ end
30
+
31
+ def result
32
+ case options.fetch(:format, :json)
33
+ when :json
34
+ begin
35
+ JSON.load content
36
+ rescue JSON::ParserError
37
+ raise InvalidJsonError,
38
+ "Failed to parse the JSON"
39
+ end
40
+ else
41
+ raise InvalidFormatError,
42
+ "This format is not supported by the editor"
43
+ end
44
+ end
45
+
46
+ def edit!
47
+ file.write formatted
48
+ file.rewind
49
+
50
+ original_mtime = File.mtime file.path
51
+
52
+ unless start
53
+ raise EditorStartupError,
54
+ "Failed to start a default editor"
55
+ end
56
+
57
+ updated_mtime = File.mtime file.path
58
+
59
+ unless original_mtime < updated_mtime
60
+ raise EditorAbortError,
61
+ "Closed editor without saving"
62
+ end
63
+
64
+ self.content = file.read
65
+ true
66
+ ensure
67
+ file.close
68
+ file.unlink
69
+ end
70
+
71
+ protected
72
+
73
+ def file
74
+ @file ||= Tempfile.new(
75
+ options.fetch(
76
+ :prefix,
77
+ "editor"
78
+ )
79
+ )
80
+ end
81
+
82
+ def formatted
83
+ case options.fetch(:format, :json)
84
+ when :json
85
+ JSON.pretty_generate(
86
+ options.fetch(
87
+ :content,
88
+ {}
89
+ )
90
+ )
91
+ else
92
+ raise InvalidFormatError,
93
+ "This format is not supported by the editor"
94
+ end
95
+ end
96
+
97
+ def program
98
+ ENV["EDITOR"] || "vi"
99
+ end
100
+
101
+ def start
102
+ system(program, file.path) && file.open
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,77 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ module Util
20
+ class Runner
21
+ attr_accessor :argv
22
+ attr_accessor :stdin
23
+ attr_accessor :stdout
24
+ attr_accessor :stderr
25
+ attr_accessor :kernel
26
+
27
+ def initialize(
28
+ argv,
29
+ stdin = STDIN,
30
+ stdout = STDOUT,
31
+ stderr = STDERR,
32
+ kernel = Kernel
33
+ )
34
+ self.argv = argv
35
+ self.stdin = stdin
36
+ self.stdout = stdout
37
+ self.stderr = stderr
38
+ self.kernel = kernel
39
+ end
40
+
41
+ def execute!
42
+ exit_code = begin
43
+ $stderr = stderr
44
+ $stdin = stdin
45
+ $stdout = stdout
46
+
47
+ App::Entry.start(argv)
48
+
49
+ 0
50
+ rescue StandardError => e
51
+ b = e.backtrace
52
+
53
+ stderr.puts(
54
+ "#{b.shift}: #{e.message} (#{e.class})"
55
+ )
56
+
57
+ stderr.puts(
58
+ b.map do |s|
59
+ "\tfrom #{s}"
60
+ end.join("\n")
61
+ )
62
+
63
+ 1
64
+ rescue SystemExit => e
65
+ e.status
66
+ ensure
67
+ $stderr = STDERR
68
+ $stdin = STDIN
69
+ $stdout = STDOUT
70
+ end
71
+
72
+ kernel.exit(exit_code)
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Crowbar
18
+ module Client
19
+ class Version
20
+ MAJOR = 1
21
+ MINOR = 0
22
+ PATCH = 0
23
+
24
+ PRE = nil
25
+
26
+ class << self
27
+ def to_s
28
+ [MAJOR, MINOR, PATCH, PRE].compact.join(".")
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require_relative "../../spec_helper"
18
+
19
+ describe "Crowbar::Client::App" do
20
+ subject { ::Crowbar::Client::App }
21
+ end
@@ -0,0 +1,39 @@
1
+ #
2
+ # Copyright 2015, SUSE Linux GmbH
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require_relative "../../../../spec_helper"
18
+
19
+ describe "Crowbar::Client::Command::Barclamp::List" do
20
+ include_context "command_context"
21
+
22
+ subject do
23
+ ::Crowbar::Client::Command::Barclamp::List.new(
24
+ stdin,
25
+ stdout,
26
+ stderr
27
+ )
28
+ end
29
+
30
+ it "should always return a request class" do
31
+ expect(subject.request).to(
32
+ be_a(
33
+ ::Crowbar::Client::Request::Barclamp::List
34
+ )
35
+ )
36
+ end
37
+
38
+ pending
39
+ end