epc 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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