epc 1.0.2

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 (215) hide show
  1. data/CHANGELOG +1 -0
  2. data/Gemfile +22 -0
  3. data/Rakefile +67 -0
  4. data/Rakefile.gem +1 -0
  5. data/bin/epc +10 -0
  6. data/lib/epc.rb +126 -0
  7. data/lib/epc/client/base_client.rb +80 -0
  8. data/lib/epc/client/http_client.rb +19 -0
  9. data/lib/epc/client/json_client.rb +48 -0
  10. data/lib/epc/command/archive_project_command.rb +24 -0
  11. data/lib/epc/command/archive_solution_command.rb +21 -0
  12. data/lib/epc/command/attach_library_command.rb +82 -0
  13. data/lib/epc/command/attach_libraryset_command.rb +32 -0
  14. data/lib/epc/command/attach_runtime_command.rb +27 -0
  15. data/lib/epc/command/base_command.rb +451 -0
  16. data/lib/epc/command/bind_service_command.rb +35 -0
  17. data/lib/epc/command/build_command.rb +83 -0
  18. data/lib/epc/command/config/create_config_command.rb +55 -0
  19. data/lib/epc/command/copy_deployment_command.rb +21 -0
  20. data/lib/epc/command/create_command.rb +13 -0
  21. data/lib/epc/command/create_dependency_command.rb +43 -0
  22. data/lib/epc/command/define_service_command.rb +37 -0
  23. data/lib/epc/command/delete_config_command.rb +63 -0
  24. data/lib/epc/command/delete_dependency_command.rb +40 -0
  25. data/lib/epc/command/delete_group_command.rb +40 -0
  26. data/lib/epc/command/delete_library_command.rb +30 -0
  27. data/lib/epc/command/delete_librarylanguage_command.rb +40 -0
  28. data/lib/epc/command/delete_libraryset_command.rb +40 -0
  29. data/lib/epc/command/delete_project_command.rb +54 -0
  30. data/lib/epc/command/delete_role_command.rb +25 -0
  31. data/lib/epc/command/delete_serviceversion_command.rb +52 -0
  32. data/lib/epc/command/delete_solution_command.rb +39 -0
  33. data/lib/epc/command/delete_user_command.rb +31 -0
  34. data/lib/epc/command/deploy_command.rb +142 -0
  35. data/lib/epc/command/deployment/create_deployment_command.rb +82 -0
  36. data/lib/epc/command/detach_library_command.rb +35 -0
  37. data/lib/epc/command/detach_libraryset_command.rb +8 -0
  38. data/lib/epc/command/group/create_group_command.rb +21 -0
  39. data/lib/epc/command/info_command.rb +11 -0
  40. data/lib/epc/command/library/create_library_command.rb +45 -0
  41. data/lib/epc/command/librarylanguage/create_librarylanguage_command.rb +24 -0
  42. data/lib/epc/command/libraryset/create_libraryset_command.rb +54 -0
  43. data/lib/epc/command/list_approvals_command.rb +27 -0
  44. data/lib/epc/command/list_attachedlibraries_command.rb +42 -0
  45. data/lib/epc/command/list_boundservices_command.rb +40 -0
  46. data/lib/epc/command/list_config_command.rb +60 -0
  47. data/lib/epc/command/list_dependencies_command.rb +43 -0
  48. data/lib/epc/command/list_deployments_command.rb +68 -0
  49. data/lib/epc/command/list_groups_command.rb +19 -0
  50. data/lib/epc/command/list_libraries_command.rb +19 -0
  51. data/lib/epc/command/list_librarylanguages_command.rb +19 -0
  52. data/lib/epc/command/list_librarysets_command.rb +26 -0
  53. data/lib/epc/command/list_objectroles_command.rb +25 -0
  54. data/lib/epc/command/list_objecttypes_command.rb +20 -0
  55. data/lib/epc/command/list_permissiongroups_command.rb +20 -0
  56. data/lib/epc/command/list_projects_command.rb +36 -0
  57. data/lib/epc/command/list_projecttypes_command.rb +20 -0
  58. data/lib/epc/command/list_rolepermissions_command.rb +21 -0
  59. data/lib/epc/command/list_roles_command.rb +26 -0
  60. data/lib/epc/command/list_runtimes_command.rb +16 -0
  61. data/lib/epc/command/list_service_types_command.rb +19 -0
  62. data/lib/epc/command/list_servicedefinitions_command.rb +19 -0
  63. data/lib/epc/command/list_serviceversions_command.rb +21 -0
  64. data/lib/epc/command/list_solutions_command.rb +25 -0
  65. data/lib/epc/command/list_stages_command.rb +21 -0
  66. data/lib/epc/command/list_users_command.rb +26 -0
  67. data/lib/epc/command/list_versions_command.rb +39 -0
  68. data/lib/epc/command/login_command.rb +32 -0
  69. data/lib/epc/command/logout_command.rb +20 -0
  70. data/lib/epc/command/objectrole/create_objectrole_command.rb +19 -0
  71. data/lib/epc/command/project/create_project_command.rb +78 -0
  72. data/lib/epc/command/pull_command.rb +209 -0
  73. data/lib/epc/command/push_command.rb +194 -0
  74. data/lib/epc/command/refresh_solution_command.rb +71 -0
  75. data/lib/epc/command/renew_command.rb +19 -0
  76. data/lib/epc/command/request_passwordchange_command.rb +23 -0
  77. data/lib/epc/command/role/create_role_command.rb +17 -0
  78. data/lib/epc/command/serviceversion/create_serviceversion_command.rb +33 -0
  79. data/lib/epc/command/show_deployment_command.rb +57 -0
  80. data/lib/epc/command/show_group_command.rb +35 -0
  81. data/lib/epc/command/show_libraryset_command.rb +54 -0
  82. data/lib/epc/command/show_project_command.rb +74 -0
  83. data/lib/epc/command/show_projecttype_command.rb +18 -0
  84. data/lib/epc/command/show_role_command.rb +46 -0
  85. data/lib/epc/command/show_solution_command.rb +54 -0
  86. data/lib/epc/command/show_user_command.rb +42 -0
  87. data/lib/epc/command/solution/create_solution_command.rb +34 -0
  88. data/lib/epc/command/solution/list_solutions_command.rb +25 -0
  89. data/lib/epc/command/solution/update_solution_command.rb +43 -0
  90. data/lib/epc/command/submit_deployment_command.rb +19 -0
  91. data/lib/epc/command/target_command.rb +26 -0
  92. data/lib/epc/command/unarchive_project_command.rb +23 -0
  93. data/lib/epc/command/unarchive_solution_command.rb +21 -0
  94. data/lib/epc/command/unbind_service_command.rb +42 -0
  95. data/lib/epc/command/undefine_service_command.rb +33 -0
  96. data/lib/epc/command/undeploy_command.rb +106 -0
  97. data/lib/epc/command/update_config_command.rb +62 -0
  98. data/lib/epc/command/update_deploymentproject_command.rb +54 -0
  99. data/lib/epc/command/update_group_command.rb +43 -0
  100. data/lib/epc/command/update_librarylanguage_command.rb +28 -0
  101. data/lib/epc/command/update_libraryset_command.rb +80 -0
  102. data/lib/epc/command/update_project_command.rb +49 -0
  103. data/lib/epc/command/update_role_command.rb +47 -0
  104. data/lib/epc/command/update_rolepermissions_command.rb +83 -0
  105. data/lib/epc/command/update_solution_command.rb +45 -0
  106. data/lib/epc/command/update_user_command.rb +57 -0
  107. data/lib/epc/command/user/create_user_command.rb +27 -0
  108. data/lib/epc/command/vote_deployment_command.rb +29 -0
  109. data/lib/epc/config.rb +245 -0
  110. data/lib/epc/error/basic_error.rb +6 -0
  111. data/lib/epc/error/fatal_error.rb +6 -0
  112. data/lib/epc/error/input_error.rb +6 -0
  113. data/lib/epc/error/internal_error.rb +6 -0
  114. data/lib/epc/help.rb +292 -0
  115. data/lib/epc/persistent_attributes.rb +18 -0
  116. data/lib/epc/runner.rb +177 -0
  117. data/lib/epc/tabular_outputter.rb +161 -0
  118. data/lib/epc/version.rb +3 -0
  119. data/lib/fixnum.rb +9 -0
  120. data/lib/object.rb +13 -0
  121. data/test/command/archive_project_command_test.rb +41 -0
  122. data/test/command/archive_solution_command_test.rb +40 -0
  123. data/test/command/attach_library_command_test.rb +124 -0
  124. data/test/command/attach_libraryset_command_test.rb +49 -0
  125. data/test/command/attach_runtime_command_test.rb +44 -0
  126. data/test/command/base_command_test.rb +276 -0
  127. data/test/command/bind_service_command_test.rb +46 -0
  128. data/test/command/build_command_test.rb +103 -0
  129. data/test/command/copy_deployment_command_test.rb +38 -0
  130. data/test/command/create_config_command_test.rb +124 -0
  131. data/test/command/create_dependency_command_test.rb +55 -0
  132. data/test/command/create_deployment_command_test.rb +136 -0
  133. data/test/command/create_group_command_test.rb +34 -0
  134. data/test/command/create_library_command_test.rb +61 -0
  135. data/test/command/create_librarylanguage_command_test.rb +51 -0
  136. data/test/command/create_libraryset_command_test.rb +81 -0
  137. data/test/command/create_objectrole_command_test.rb +37 -0
  138. data/test/command/create_project_command_test.rb +102 -0
  139. data/test/command/create_role_command_test.rb +31 -0
  140. data/test/command/create_serviceversion_command_test.rb +60 -0
  141. data/test/command/create_solution_command_test.rb +70 -0
  142. data/test/command/create_user_command_test.rb +54 -0
  143. data/test/command/define_service_command_test.rb +55 -0
  144. data/test/command/delete_config_command_test.rb +82 -0
  145. data/test/command/delete_dependency_command_test.rb +50 -0
  146. data/test/command/delete_group_command_test.rb +56 -0
  147. data/test/command/delete_library_command_test.rb +43 -0
  148. data/test/command/delete_librarylanguage_command_test.rb +55 -0
  149. data/test/command/delete_libraryset_command_test.rb +55 -0
  150. data/test/command/delete_project_command_test.rb +76 -0
  151. data/test/command/delete_role_command_test.rb +41 -0
  152. data/test/command/delete_serviceversion_command_test.rb +53 -0
  153. data/test/command/delete_solution_command_test.rb +79 -0
  154. data/test/command/delete_user_command_test.rb +56 -0
  155. data/test/command/deploy_command_test.rb +185 -0
  156. data/test/command/detach_library_command_test.rb +53 -0
  157. data/test/command/info_command_test.rb +17 -0
  158. data/test/command/list_approvals_command_test.rb +41 -0
  159. data/test/command/list_boundservices_command_test.rb +46 -0
  160. data/test/command/list_config_command_test.rb +72 -0
  161. data/test/command/list_dependencies_command_test.rb +46 -0
  162. data/test/command/list_deployments_command_test.rb +112 -0
  163. data/test/command/list_deploymentstages_command_test.rb +44 -0
  164. data/test/command/list_libraries_command_test.rb +42 -0
  165. data/test/command/list_librarylanguages_command_test.rb +34 -0
  166. data/test/command/list_librarysets_command_test.rb +33 -0
  167. data/test/command/list_objectroles_command_test.rb +41 -0
  168. data/test/command/list_objecttypes_command_test.rb +25 -0
  169. data/test/command/list_permissiongroups_command_test.rb +25 -0
  170. data/test/command/list_projects_command_test.rb +63 -0
  171. data/test/command/list_projecttypes_command_test.rb +39 -0
  172. data/test/command/list_rolepermissions_command_test.rb +39 -0
  173. data/test/command/list_roles_command_test.rb +46 -0
  174. data/test/command/list_runtimes_command_test.rb +30 -0
  175. data/test/command/list_service_types_command_test.rb +44 -0
  176. data/test/command/list_servicedefinitions_command_test.rb +44 -0
  177. data/test/command/list_serviceversions_command_test.rb +47 -0
  178. data/test/command/list_solutions_command_test.rb +48 -0
  179. data/test/command/list_users_command_test.rb +33 -0
  180. data/test/command/login_command_test.rb +83 -0
  181. data/test/command/logout_command_test.rb +30 -0
  182. data/test/command/pull_command_test.rb +229 -0
  183. data/test/command/push_command_test.rb +246 -0
  184. data/test/command/refresh_solution_command_test.rb +35 -0
  185. data/test/command/renew_command_test.rb +43 -0
  186. data/test/command/request_passwordchange_command_test.rb +31 -0
  187. data/test/command/show_group_command_test.rb +50 -0
  188. data/test/command/show_libraryset_command_test.rb +51 -0
  189. data/test/command/show_project_command_test.rb +57 -0
  190. data/test/command/show_projecttype_command_test.rb +46 -0
  191. data/test/command/show_role_command_test.rb +37 -0
  192. data/test/command/show_solution_command_test.rb +59 -0
  193. data/test/command/show_user_command_test.rb +50 -0
  194. data/test/command/submit_deployment_command_test.rb +37 -0
  195. data/test/command/target_command_test.rb +58 -0
  196. data/test/command/unarchive_project_command_test.rb +45 -0
  197. data/test/command/unarchive_solution_command_test.rb +43 -0
  198. data/test/command/unbind_service_command_test.rb +48 -0
  199. data/test/command/undefine_service_command_test.rb +49 -0
  200. data/test/command/update_config_command_test.rb +74 -0
  201. data/test/command/update_deploymentproject_command_test.rb +77 -0
  202. data/test/command/update_group_command_test.rb +69 -0
  203. data/test/command/update_librarylanguage_command_test.rb +43 -0
  204. data/test/command/update_libraryset_command_test.rb +113 -0
  205. data/test/command/update_project_command_test.rb +56 -0
  206. data/test/command/update_role_command_test.rb +42 -0
  207. data/test/command/update_rolepermissions_command_test.rb +54 -0
  208. data/test/command/update_solution_command_test.rb +58 -0
  209. data/test/command/update_user_command_test.rb +76 -0
  210. data/test/command/vote_deployment_command_test.rb +33 -0
  211. data/test/config_test.rb +70 -0
  212. data/test/successful_test.rb +21 -0
  213. data/test/test_files/pom.xml +273 -0
  214. data/test/test_helper.rb +25 -0
  215. metadata +470 -0
@@ -0,0 +1,54 @@
1
+ require 'time'
2
+ module EPC::Command
3
+ class ShowSolutionCommand < BaseCommand
4
+
5
+ def execute(solution_name = nil)
6
+ path = File.expand_path(".")
7
+
8
+ solution_id, solution_name = infer_solution_context(solution_name, path, {:get_solution_name => true})
9
+
10
+ raise InputError, "Solution not found" if solution_id.nil?
11
+
12
+ status, response, message = client.get(EPC::Config::SOLUTIONS_PATH + "/#{solution_id}?include=config_values,projects,deployments,deployment_configs")
13
+ if status.failure?
14
+ say("Request failed: [#{response[:message]}]")
15
+ return status
16
+ end
17
+
18
+
19
+ response[:build_date] = Time.parse(response[:build_date]).strftime("%m/%d/%Y %I:%M%p") rescue nil
20
+ response[:updated_at] = Time.parse(response[:updated_at]).strftime("%m/%d/%Y %I:%M%p") rescue nil
21
+ solution_table = EPC::TabularOutputter.new([response], [:id, :name, :updated_at, :build_date, :build_status])
22
+ response[:projects].each do |project|
23
+ unless project[:last_build_status].nil?
24
+ project[:last_build_status] = nil if project[:last_build_status] == "N/A" # temp hack
25
+ project[:last_build_status] = (project[:last_build_status] ? "BUILT" : "FAILED" rescue nil) unless project[:last_build_status].nil?
26
+ end
27
+ end if response[:projects].present?
28
+ projects_table = EPC::TabularOutputter.new(response[:projects], {:id => "ID", :name => "NAME", :current_version_number => "VERSION", :last_build_status => "BUILD_STATUS", :last_build_errors => "ERRORS"})
29
+
30
+ response[:deployments].each do |dep|
31
+ dep[:updated_at] = Time.parse(dep[:updated_at]).strftime("%m/%d/%Y %I:%M%p")
32
+ dep[:deployment_stage_name] = dep[:deployment_stage][:name] unless dep[:deployment_stage].nil?
33
+ end if response[:deployments].present?
34
+ deployments_table = EPC::TabularOutputter.new(response[:deployments], {:id => "ID", :deployment_stage_name => "STAGE", :status => "STATUS", :updated_at => "LAST UPDATE"})
35
+ config_values_table = EPC::TabularOutputter.new(response[:config_values], [:name, :value, :require, :value_type])
36
+
37
+ say("\nSolution details:")
38
+ say(solution_table.print)
39
+
40
+ unless response[:projects].nil? || response[:projects].empty?
41
+ say("\nProjects:")
42
+ say(projects_table.print)
43
+ end
44
+
45
+ unless response[:deployments].nil? || response[:deployments].empty?
46
+ say("\nDeployments:")
47
+ say(deployments_table.print)
48
+ end
49
+
50
+ return status
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,42 @@
1
+ module EPC::Command
2
+ class ShowUserCommand < BaseCommand
3
+
4
+ def execute(user = nil)
5
+ if user.nil?
6
+ say("You need to specify a user id/email")
7
+ say(EPC::Help::COMMAND_USAGES[:show_user])
8
+ return 1
9
+ end
10
+
11
+ if numeric?(user)
12
+ user_id = user.to_i
13
+ else
14
+ user_id = get_resource_id(EPC::Config::USERS_PATH, :email, user)
15
+ end
16
+
17
+ if user_id.nil? || user_id == 0
18
+ say("User could not be found")
19
+ return 1
20
+ end
21
+
22
+ status, response, headers = client.get(EPC::Config::USERS_PATH + "/#{user_id}?include=user_groups")
23
+
24
+ if status != 200
25
+ say("Request failed: [#{response[:message]}]")
26
+ return status
27
+ end
28
+
29
+ user_table = EPC::TabularOutputter.new([response], [:id, :name, :email])
30
+ groups_table = EPC::TabularOutputter.new(response[:user_groups], [:id, :name])
31
+
32
+ say(user_table.print)
33
+
34
+ if response[:user_groups].present?
35
+ say("\nUser Groups: ")
36
+ say(groups_table.print)
37
+ end
38
+
39
+ return status
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,34 @@
1
+ module EPC::Command
2
+ class CreateSolutionCommand < BaseCommand
3
+ required_arguments_count 2, :message => "You must enter a solution name to run this command"
4
+
5
+ def execute(*params)
6
+ name = params[1]
7
+
8
+ begin
9
+ status, response, headers = client.post("#{EPC::Config::SOLUTIONS_PATH}", { :name => name })
10
+ if status.successful?
11
+
12
+ if @options[:nodir]
13
+ say("Successfully created the solution with [#{target_url}].")
14
+ else
15
+ result = mkdir(name)
16
+ if result == :ok
17
+ EPC::Config.add_solution(name, response[:id])
18
+ say("Successfully created the solution with [#{target_url}] and created your local directory.")
19
+ else
20
+ say("Successfully created the solution with [#{target_url}], but FAILED to create your local directory.")
21
+ return 1
22
+ end
23
+ end
24
+ else
25
+ say("Solution creation failed [#{response[:message]}].")
26
+ end
27
+ return status
28
+ rescue Exception => ex
29
+ say("Solution creation failed [#{ex}].")
30
+ return 1
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,25 @@
1
+ require 'time'
2
+ module EPC::Command
3
+ class ListSolutionsCommand < BaseCommand
4
+
5
+ def execute(*args)
6
+ status, response, headers = client.get(EPC::Config::SOLUTIONS_PATH)
7
+
8
+ if status.failure?
9
+ say("Request failed: [#{response[:message]}]")
10
+ elsif response.empty?
11
+ say("You have no solutions created. You can create them with epc create solution.")
12
+ else
13
+ response.each do |resp|
14
+ resp[:created_at] = Time.parse(resp[:created_at]).strftime("%m/%d/%Y %I:%M%p")
15
+ resp[:creator_id] = resp[:created_by][:id] rescue nil
16
+ resp[:creator_name] = resp[:created_by][:name] rescue nil
17
+ end
18
+ solutions_table = EPC::TabularOutputter.new(response, [:id, :name, :build_status, :created_at, :creator_id, :creator_name])
19
+ say(solutions_table.print)
20
+ end
21
+ return status
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,43 @@
1
+ module EPC::Command
2
+ class UpdateSolutionCommand < BaseCommand
3
+ UPDATABLE_ATTRIBUTES = ["name"]
4
+
5
+ def execute(*args)
6
+ path = File.expand_path(".")
7
+ path = project_solution_path(path)
8
+
9
+ solution_id, solution_name = infer_solution_context(@options[:solution_name], path)
10
+
11
+ raise FatalError, "Solution could not be determined" if solution_id.nil?
12
+
13
+ args_hash = {}
14
+ args.each do |arg|
15
+ key, val = arg.split("=")
16
+ args_hash[key] = val
17
+ end
18
+
19
+ if @options[:file].present?
20
+ args_hash = EPC::Config.read_content_as_json(@options[:file]).merge(args_hash)
21
+ end
22
+
23
+ args_hash.each do |attr, val|
24
+ unless UPDATABLE_ATTRIBUTES.include?(attr)
25
+ args_hash.delete(attr)
26
+ say("Cannot update #{attr}. Updatable attributes are: #{UPDATABLE_ATTRIBUTES.join(',')}")
27
+ next
28
+ end
29
+ end
30
+
31
+
32
+ if args_hash.present?
33
+ status, response, message = client.put(EPC::Config::SOLUTIONS_PATH + "/#{solution_id}", args_hash)
34
+ if status.failure?
35
+ say("Update failed with: [#{response['message']}]")
36
+ else
37
+ say("Update succesful")
38
+ end
39
+ return status
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,19 @@
1
+ module EPC::Command
2
+ class SubmitDeploymentCommand < BaseCommand
3
+ def execute(deployment_id = nil)
4
+ if deployment_id.nil?
5
+ say("You must specify a deployment id")
6
+ say(EPC::Help::COMMAND_USAGES[:submit_deployment])
7
+ return 1
8
+ end
9
+
10
+ status, response, headers = client.put(EPC::Config::DEPLOYMENTS_PATH + "/#{deployment_id}/submit")
11
+ if status.successful?
12
+ say("Deployment submitted for approval")
13
+ else
14
+ say("Request failed: [#{response[:message]}]")
15
+ end
16
+ return status
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ module EPC::Command
2
+ class TargetCommand < BaseCommand
3
+ dont_require_login
4
+
5
+ def execute(target_url = nil)
6
+ if blank?(target_url)
7
+ say("TARGET: " + EPC::Config.target_url)
8
+ return 1
9
+ end
10
+
11
+ target_url = "http://#{target_url}" unless target_url =~ /^https?/
12
+ target_url = target_url.gsub(/\/+$/, '')
13
+
14
+ begin
15
+ URI.parse(target_url)
16
+ status, response, headers = client.get(target_url + "/api/v1/tokens/status", true)
17
+ raise Exception if status.failure?
18
+ EPC::Config.store_target_url(target_url)
19
+ say("Successfully targeted to [#{target_url}]")
20
+ rescue => ex
21
+ say("The URL you entered [#{target_url}] is not valid. Please try again.")
22
+ end
23
+ return status
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module EPC::Command
2
+ class UnarchiveProjectCommand < BaseCommand
3
+ def execute(project_name = nil)
4
+ path = File.expand_path(".")
5
+
6
+ solution_name = @options[:solution_name]
7
+
8
+ solution_id, solution_name = infer_solution_context(solution_name, path, {:get_solution_name => true})
9
+ project_id, project_name = infer_project_context(project_name, path, solution_id, {:get_solution_name => true})
10
+
11
+ raise FatalError, "Project could not be inferred." if project_id.nil?
12
+
13
+ status, response, message = client.put(EPC::Config::PROJECTS_PATH + "/#{project_id}", {:archived => false})
14
+ if status.successful?
15
+ say("Project has been unarchived.")
16
+ else
17
+ say("Project could not be unarchived. Request failed with: [#{response[:message]}]")
18
+ end
19
+ return status
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,21 @@
1
+ module EPC::Command
2
+ class UnarchiveSolutionCommand < BaseCommand
3
+ def execute(solution_name = nil)
4
+ path = "."
5
+ path = File.expand_path(path)
6
+
7
+ solution_id, solution_name = infer_solution_context(solution_name, path, {:get_solution_name => true})
8
+
9
+ raise FatalError, "Solution could not be inferred" if solution_id.nil?
10
+
11
+ status, response, message = client.put(EPC::Config::SOLUTIONS_PATH + "/#{solution_id}", {:archived => false, :name => solution_name})
12
+ if status.successful?
13
+ say("Solution has been unarchived.")
14
+ else
15
+ say("Solution could not be unarchived. Request failed with: [#{response[:message]}]")
16
+ end
17
+ return status
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,42 @@
1
+ module EPC::Command
2
+ class UnbindServiceCommand < BaseCommand
3
+
4
+ def execute(version = nil)
5
+ if version.nil?
6
+ say("You must specify the service version to be unbound.")
7
+ say(EPC::Help::COMMAND_USAGES[:unbind_service])
8
+ return 1
9
+ end
10
+
11
+ path = File.expand_path(".")
12
+
13
+ solution_name = @options[:solution_name]
14
+ project_name = @options[:project_name]
15
+
16
+ solution_id, solution_name = infer_solution_context(solution_name, path)
17
+ project_id, project_name = infer_project_context(project_name, path, solution_id)
18
+
19
+ if numeric?(version)
20
+ service_version_id = version.to_i
21
+ else
22
+ service_version_id = get_resource_id(EPC::Config::SERVICE_VERSIONS_PATH, :label, version)
23
+ end
24
+
25
+ if service_version_id.nil? || project_id.nil?
26
+ say("Project or service incorrectly specified.")
27
+ say(EPC::Help::COMMAND_USAGES[:unbind_service])
28
+ return 1
29
+ end
30
+
31
+ status, response, headers = client.delete(EPC::Config::PROJECTS_PATH + "/#{project_id}/remove_service_version/#{service_version_id}")
32
+
33
+ if status.successful?
34
+ say("Service version unbound.")
35
+ else
36
+ say("Request failed: [#{response[:message]}]")
37
+ end
38
+ return status
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ module EPC::Command
2
+ class UndefineServiceCommand < BaseCommand
3
+
4
+ def execute(service_name = nil)
5
+ if service_name.nil?
6
+ say("You must specify a name for the service")
7
+ say(EPC::Help::COMMAND_USAGES[:undefine_service])
8
+ return 1
9
+ end
10
+
11
+ if numeric?(service_name)
12
+ service_id = service_name.to_i
13
+ else
14
+ service_id = get_resource_id(EPC::Config::SERVICE_DEFINITIONS_PATH, :name, service_name)
15
+ end
16
+
17
+ if service_id.nil? || service_id == 0
18
+ say("#{service_name} service could not be found.")
19
+ return 1
20
+ end
21
+
22
+ status, response, headers = client.delete(EPC::Config::SERVICE_DEFINITIONS_PATH + "/#{service_id}")
23
+
24
+ if status.failure?
25
+ say("Service removal failed with: [#{response['message']}]")
26
+ else
27
+ say("#{service_name} has been undefined.")
28
+ end
29
+ return status
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,106 @@
1
+ module EPC::Command
2
+ class UndeployCommand < BaseCommand
3
+ SLEEP_TIME = 1
4
+
5
+ # Numerators are in secs
6
+ TICKER_TICKS = 25/SLEEP_TIME
7
+ GIVEUP_TICKS = 120/SLEEP_TIME
8
+ def execute(deployment_id = nil)
9
+ path = File.expand_path(".")
10
+
11
+ solution_name = @options[:solution_name]
12
+
13
+ if deployment_id.nil?
14
+ solution_id, solution_name = infer_solution_context(solution_name, path)
15
+ if solution_id.nil? || solution_name.empty?
16
+ say("Solution could not be inferred")
17
+ say(EPC::Help::COMMAND_USAGES[:undeploy])
18
+ return 1
19
+ end
20
+
21
+ cmd = ListDeploymentsCommand.new(client, {:solution_name => solution_id, :status => "STARTED"}).execute
22
+ return 1 if cmd == 1
23
+ deployment_id = ask("Enter deployment id: ", Integer)
24
+ end
25
+
26
+ if deployment_id.nil?
27
+ say("You must specify a deployment id")
28
+ say(EPC::Help::COMMAND_USAGES[:undeploy])
29
+ return 1
30
+ end
31
+
32
+ begin
33
+ say("Undeploying #{deployment_id}")
34
+ undeploy(deployment_id)
35
+ say("Undeploying - ")
36
+ shown, deployment_status = poll_for_deployment_statuses(deployment_id)
37
+ if shown
38
+ display_statuses(deployment_status)
39
+ end
40
+ rescue Exception => ex
41
+ say("Undeploy failed [#{ex.to_s}].")
42
+ end
43
+ return @status
44
+
45
+ end
46
+
47
+ private
48
+
49
+ def undeploy(id)
50
+ status, response, headers = client.put("#{EPC::Config::DEPLOYMENTS_PATH}/#{id}/undeploy")
51
+ @status = status
52
+ raise Exception, response[:message] if status.failure?
53
+ end
54
+
55
+ def show_deployment(id)
56
+ status, response, headers = client.get("#{EPC::Config::DEPLOYMENTS_PATH}/#{id}/status")
57
+ @status=status
58
+ if status.successful?
59
+ return status, nil, response[:status]
60
+ else
61
+ return status, response[:error_code], nil
62
+ end
63
+ end
64
+
65
+ def poll_for_deployment_statuses(id)
66
+ count = 0
67
+ failed = false
68
+
69
+ while count <= GIVEUP_TICKS
70
+ unless count > TICKER_TICKS
71
+ STDOUT.print('.')
72
+ STDOUT.flush
73
+ end
74
+ sleep(SLEEP_TIME)
75
+
76
+ status, code, deployment_status = show_deployment(id)
77
+ if status.successful? || (deployment_status == 404 && code == 901)
78
+ count += 1
79
+ next unless deployment_status == "STOPPED" || deployment_status == "UNDEPLOYED"
80
+ break
81
+ else
82
+ say("Poller failure [HTTP Error(#{status}): API error code (#{code})]")
83
+ say("Poller failed to get the deployment statuses. Aborting.")
84
+ failed = true
85
+ break
86
+ end
87
+ end
88
+
89
+ if deployment_status && !deployment_status.empty?
90
+ [true, deployment_status]
91
+ elsif failed
92
+ [false, nil]
93
+ else
94
+ if count > GIVEUP_TICKS
95
+ say("\nServer is taking too long to update the deployment statuses. Please contact the AgileMethods support team.")
96
+ end
97
+ [false, nil]
98
+ end
99
+ end
100
+
101
+ def display_statuses(deployment_status)
102
+ say("\nStatus = #{deployment_status}\n")
103
+ end
104
+
105
+ end
106
+ end