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.
- data/CHANGELOG +1 -0
- data/Gemfile +22 -0
- data/Rakefile +67 -0
- data/Rakefile.gem +1 -0
- data/bin/epc +10 -0
- data/lib/epc.rb +126 -0
- data/lib/epc/client/base_client.rb +80 -0
- data/lib/epc/client/http_client.rb +19 -0
- data/lib/epc/client/json_client.rb +48 -0
- data/lib/epc/command/archive_project_command.rb +24 -0
- data/lib/epc/command/archive_solution_command.rb +21 -0
- data/lib/epc/command/attach_library_command.rb +82 -0
- data/lib/epc/command/attach_libraryset_command.rb +32 -0
- data/lib/epc/command/attach_runtime_command.rb +27 -0
- data/lib/epc/command/base_command.rb +451 -0
- data/lib/epc/command/bind_service_command.rb +35 -0
- data/lib/epc/command/build_command.rb +83 -0
- data/lib/epc/command/config/create_config_command.rb +55 -0
- data/lib/epc/command/copy_deployment_command.rb +21 -0
- data/lib/epc/command/create_command.rb +13 -0
- data/lib/epc/command/create_dependency_command.rb +43 -0
- data/lib/epc/command/define_service_command.rb +37 -0
- data/lib/epc/command/delete_config_command.rb +63 -0
- data/lib/epc/command/delete_dependency_command.rb +40 -0
- data/lib/epc/command/delete_group_command.rb +40 -0
- data/lib/epc/command/delete_library_command.rb +30 -0
- data/lib/epc/command/delete_librarylanguage_command.rb +40 -0
- data/lib/epc/command/delete_libraryset_command.rb +40 -0
- data/lib/epc/command/delete_project_command.rb +54 -0
- data/lib/epc/command/delete_role_command.rb +25 -0
- data/lib/epc/command/delete_serviceversion_command.rb +52 -0
- data/lib/epc/command/delete_solution_command.rb +39 -0
- data/lib/epc/command/delete_user_command.rb +31 -0
- data/lib/epc/command/deploy_command.rb +142 -0
- data/lib/epc/command/deployment/create_deployment_command.rb +82 -0
- data/lib/epc/command/detach_library_command.rb +35 -0
- data/lib/epc/command/detach_libraryset_command.rb +8 -0
- data/lib/epc/command/group/create_group_command.rb +21 -0
- data/lib/epc/command/info_command.rb +11 -0
- data/lib/epc/command/library/create_library_command.rb +45 -0
- data/lib/epc/command/librarylanguage/create_librarylanguage_command.rb +24 -0
- data/lib/epc/command/libraryset/create_libraryset_command.rb +54 -0
- data/lib/epc/command/list_approvals_command.rb +27 -0
- data/lib/epc/command/list_attachedlibraries_command.rb +42 -0
- data/lib/epc/command/list_boundservices_command.rb +40 -0
- data/lib/epc/command/list_config_command.rb +60 -0
- data/lib/epc/command/list_dependencies_command.rb +43 -0
- data/lib/epc/command/list_deployments_command.rb +68 -0
- data/lib/epc/command/list_groups_command.rb +19 -0
- data/lib/epc/command/list_libraries_command.rb +19 -0
- data/lib/epc/command/list_librarylanguages_command.rb +19 -0
- data/lib/epc/command/list_librarysets_command.rb +26 -0
- data/lib/epc/command/list_objectroles_command.rb +25 -0
- data/lib/epc/command/list_objecttypes_command.rb +20 -0
- data/lib/epc/command/list_permissiongroups_command.rb +20 -0
- data/lib/epc/command/list_projects_command.rb +36 -0
- data/lib/epc/command/list_projecttypes_command.rb +20 -0
- data/lib/epc/command/list_rolepermissions_command.rb +21 -0
- data/lib/epc/command/list_roles_command.rb +26 -0
- data/lib/epc/command/list_runtimes_command.rb +16 -0
- data/lib/epc/command/list_service_types_command.rb +19 -0
- data/lib/epc/command/list_servicedefinitions_command.rb +19 -0
- data/lib/epc/command/list_serviceversions_command.rb +21 -0
- data/lib/epc/command/list_solutions_command.rb +25 -0
- data/lib/epc/command/list_stages_command.rb +21 -0
- data/lib/epc/command/list_users_command.rb +26 -0
- data/lib/epc/command/list_versions_command.rb +39 -0
- data/lib/epc/command/login_command.rb +32 -0
- data/lib/epc/command/logout_command.rb +20 -0
- data/lib/epc/command/objectrole/create_objectrole_command.rb +19 -0
- data/lib/epc/command/project/create_project_command.rb +78 -0
- data/lib/epc/command/pull_command.rb +209 -0
- data/lib/epc/command/push_command.rb +194 -0
- data/lib/epc/command/refresh_solution_command.rb +71 -0
- data/lib/epc/command/renew_command.rb +19 -0
- data/lib/epc/command/request_passwordchange_command.rb +23 -0
- data/lib/epc/command/role/create_role_command.rb +17 -0
- data/lib/epc/command/serviceversion/create_serviceversion_command.rb +33 -0
- data/lib/epc/command/show_deployment_command.rb +57 -0
- data/lib/epc/command/show_group_command.rb +35 -0
- data/lib/epc/command/show_libraryset_command.rb +54 -0
- data/lib/epc/command/show_project_command.rb +74 -0
- data/lib/epc/command/show_projecttype_command.rb +18 -0
- data/lib/epc/command/show_role_command.rb +46 -0
- data/lib/epc/command/show_solution_command.rb +54 -0
- data/lib/epc/command/show_user_command.rb +42 -0
- data/lib/epc/command/solution/create_solution_command.rb +34 -0
- data/lib/epc/command/solution/list_solutions_command.rb +25 -0
- data/lib/epc/command/solution/update_solution_command.rb +43 -0
- data/lib/epc/command/submit_deployment_command.rb +19 -0
- data/lib/epc/command/target_command.rb +26 -0
- data/lib/epc/command/unarchive_project_command.rb +23 -0
- data/lib/epc/command/unarchive_solution_command.rb +21 -0
- data/lib/epc/command/unbind_service_command.rb +42 -0
- data/lib/epc/command/undefine_service_command.rb +33 -0
- data/lib/epc/command/undeploy_command.rb +106 -0
- data/lib/epc/command/update_config_command.rb +62 -0
- data/lib/epc/command/update_deploymentproject_command.rb +54 -0
- data/lib/epc/command/update_group_command.rb +43 -0
- data/lib/epc/command/update_librarylanguage_command.rb +28 -0
- data/lib/epc/command/update_libraryset_command.rb +80 -0
- data/lib/epc/command/update_project_command.rb +49 -0
- data/lib/epc/command/update_role_command.rb +47 -0
- data/lib/epc/command/update_rolepermissions_command.rb +83 -0
- data/lib/epc/command/update_solution_command.rb +45 -0
- data/lib/epc/command/update_user_command.rb +57 -0
- data/lib/epc/command/user/create_user_command.rb +27 -0
- data/lib/epc/command/vote_deployment_command.rb +29 -0
- data/lib/epc/config.rb +245 -0
- data/lib/epc/error/basic_error.rb +6 -0
- data/lib/epc/error/fatal_error.rb +6 -0
- data/lib/epc/error/input_error.rb +6 -0
- data/lib/epc/error/internal_error.rb +6 -0
- data/lib/epc/help.rb +292 -0
- data/lib/epc/persistent_attributes.rb +18 -0
- data/lib/epc/runner.rb +177 -0
- data/lib/epc/tabular_outputter.rb +161 -0
- data/lib/epc/version.rb +3 -0
- data/lib/fixnum.rb +9 -0
- data/lib/object.rb +13 -0
- data/test/command/archive_project_command_test.rb +41 -0
- data/test/command/archive_solution_command_test.rb +40 -0
- data/test/command/attach_library_command_test.rb +124 -0
- data/test/command/attach_libraryset_command_test.rb +49 -0
- data/test/command/attach_runtime_command_test.rb +44 -0
- data/test/command/base_command_test.rb +276 -0
- data/test/command/bind_service_command_test.rb +46 -0
- data/test/command/build_command_test.rb +103 -0
- data/test/command/copy_deployment_command_test.rb +38 -0
- data/test/command/create_config_command_test.rb +124 -0
- data/test/command/create_dependency_command_test.rb +55 -0
- data/test/command/create_deployment_command_test.rb +136 -0
- data/test/command/create_group_command_test.rb +34 -0
- data/test/command/create_library_command_test.rb +61 -0
- data/test/command/create_librarylanguage_command_test.rb +51 -0
- data/test/command/create_libraryset_command_test.rb +81 -0
- data/test/command/create_objectrole_command_test.rb +37 -0
- data/test/command/create_project_command_test.rb +102 -0
- data/test/command/create_role_command_test.rb +31 -0
- data/test/command/create_serviceversion_command_test.rb +60 -0
- data/test/command/create_solution_command_test.rb +70 -0
- data/test/command/create_user_command_test.rb +54 -0
- data/test/command/define_service_command_test.rb +55 -0
- data/test/command/delete_config_command_test.rb +82 -0
- data/test/command/delete_dependency_command_test.rb +50 -0
- data/test/command/delete_group_command_test.rb +56 -0
- data/test/command/delete_library_command_test.rb +43 -0
- data/test/command/delete_librarylanguage_command_test.rb +55 -0
- data/test/command/delete_libraryset_command_test.rb +55 -0
- data/test/command/delete_project_command_test.rb +76 -0
- data/test/command/delete_role_command_test.rb +41 -0
- data/test/command/delete_serviceversion_command_test.rb +53 -0
- data/test/command/delete_solution_command_test.rb +79 -0
- data/test/command/delete_user_command_test.rb +56 -0
- data/test/command/deploy_command_test.rb +185 -0
- data/test/command/detach_library_command_test.rb +53 -0
- data/test/command/info_command_test.rb +17 -0
- data/test/command/list_approvals_command_test.rb +41 -0
- data/test/command/list_boundservices_command_test.rb +46 -0
- data/test/command/list_config_command_test.rb +72 -0
- data/test/command/list_dependencies_command_test.rb +46 -0
- data/test/command/list_deployments_command_test.rb +112 -0
- data/test/command/list_deploymentstages_command_test.rb +44 -0
- data/test/command/list_libraries_command_test.rb +42 -0
- data/test/command/list_librarylanguages_command_test.rb +34 -0
- data/test/command/list_librarysets_command_test.rb +33 -0
- data/test/command/list_objectroles_command_test.rb +41 -0
- data/test/command/list_objecttypes_command_test.rb +25 -0
- data/test/command/list_permissiongroups_command_test.rb +25 -0
- data/test/command/list_projects_command_test.rb +63 -0
- data/test/command/list_projecttypes_command_test.rb +39 -0
- data/test/command/list_rolepermissions_command_test.rb +39 -0
- data/test/command/list_roles_command_test.rb +46 -0
- data/test/command/list_runtimes_command_test.rb +30 -0
- data/test/command/list_service_types_command_test.rb +44 -0
- data/test/command/list_servicedefinitions_command_test.rb +44 -0
- data/test/command/list_serviceversions_command_test.rb +47 -0
- data/test/command/list_solutions_command_test.rb +48 -0
- data/test/command/list_users_command_test.rb +33 -0
- data/test/command/login_command_test.rb +83 -0
- data/test/command/logout_command_test.rb +30 -0
- data/test/command/pull_command_test.rb +229 -0
- data/test/command/push_command_test.rb +246 -0
- data/test/command/refresh_solution_command_test.rb +35 -0
- data/test/command/renew_command_test.rb +43 -0
- data/test/command/request_passwordchange_command_test.rb +31 -0
- data/test/command/show_group_command_test.rb +50 -0
- data/test/command/show_libraryset_command_test.rb +51 -0
- data/test/command/show_project_command_test.rb +57 -0
- data/test/command/show_projecttype_command_test.rb +46 -0
- data/test/command/show_role_command_test.rb +37 -0
- data/test/command/show_solution_command_test.rb +59 -0
- data/test/command/show_user_command_test.rb +50 -0
- data/test/command/submit_deployment_command_test.rb +37 -0
- data/test/command/target_command_test.rb +58 -0
- data/test/command/unarchive_project_command_test.rb +45 -0
- data/test/command/unarchive_solution_command_test.rb +43 -0
- data/test/command/unbind_service_command_test.rb +48 -0
- data/test/command/undefine_service_command_test.rb +49 -0
- data/test/command/update_config_command_test.rb +74 -0
- data/test/command/update_deploymentproject_command_test.rb +77 -0
- data/test/command/update_group_command_test.rb +69 -0
- data/test/command/update_librarylanguage_command_test.rb +43 -0
- data/test/command/update_libraryset_command_test.rb +113 -0
- data/test/command/update_project_command_test.rb +56 -0
- data/test/command/update_role_command_test.rb +42 -0
- data/test/command/update_rolepermissions_command_test.rb +54 -0
- data/test/command/update_solution_command_test.rb +58 -0
- data/test/command/update_user_command_test.rb +76 -0
- data/test/command/vote_deployment_command_test.rb +33 -0
- data/test/config_test.rb +70 -0
- data/test/successful_test.rb +21 -0
- data/test/test_files/pom.xml +273 -0
- data/test/test_helper.rb +25 -0
- metadata +470 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
module EPC::Command
|
2
|
+
class AttachLibrarysetCommand < BaseCommand
|
3
|
+
required_arguments_count 1, :message => "You must specify a library-set"
|
4
|
+
|
5
|
+
def execute(set = nil)
|
6
|
+
path = File.expand_path(".")
|
7
|
+
solution_id, solution_name = infer_solution_context(@options[:solution_name], path)
|
8
|
+
project_id, project_name = infer_project_context(@options[:project_name], path, solution_id)
|
9
|
+
|
10
|
+
raise InputError, "Project could not be inferred" if project_id.nil?
|
11
|
+
|
12
|
+
set_id = retrieve_library_set_identifier(set)
|
13
|
+
|
14
|
+
if @options[:detach].present? && @options[:detach]
|
15
|
+
status, response, headers = client.delete(EPC::Config::PROJECTS_PATH + "/#{project_id}/detach_set/#{set_id}")
|
16
|
+
else
|
17
|
+
status, response, headers = client.post(EPC::Config::PROJECTS_PATH + "/#{project_id}/attach_set/#{set_id}")
|
18
|
+
end
|
19
|
+
|
20
|
+
if status.successful?
|
21
|
+
say("Library set #{@options[:detach] ? "detached" : "attached"}")
|
22
|
+
else
|
23
|
+
say("Request failed: [#{response[:message]}]")
|
24
|
+
end
|
25
|
+
|
26
|
+
return status
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module EPC::Command
|
2
|
+
class AttachRuntimeCommand < BaseCommand
|
3
|
+
required_arguments_count 1, :message => "You must specify a runtime id"
|
4
|
+
required_options :stage, :mode => :any?, :message => "You must specify the stage"
|
5
|
+
|
6
|
+
def execute(runtime = nil)
|
7
|
+
|
8
|
+
path = File.expand_path(".")
|
9
|
+
|
10
|
+
solution_id, solution_name = infer_solution_context(@options[:solution_name], path)
|
11
|
+
project_id, project_name = infer_project_context(@options[:project_name], path, solution_id)
|
12
|
+
|
13
|
+
raise InputError, "Project could not be inferred" if project_id.nil?
|
14
|
+
|
15
|
+
status, response, headers = client.put(EPC::Config::PROJECTS_PATH + "/#{project_id}/set_runtime_env", {:runtime_env_id => runtime, :stage_name => @options[:stage]})
|
16
|
+
|
17
|
+
if status.successful?
|
18
|
+
say("Runtime attached")
|
19
|
+
else
|
20
|
+
say("Request failed: [#{response[:message]}]")
|
21
|
+
end
|
22
|
+
|
23
|
+
return status
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,451 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module EPC
|
5
|
+
module Command
|
6
|
+
class BaseCommand
|
7
|
+
include PersistentAttributes
|
8
|
+
include Error
|
9
|
+
|
10
|
+
attr_reader :client
|
11
|
+
attr_reader :options
|
12
|
+
|
13
|
+
@@retrieval_rules = {
|
14
|
+
:system_role => {
|
15
|
+
:match_attribute => :name,
|
16
|
+
:required_attribute => :id,
|
17
|
+
:required_type => :numeric,
|
18
|
+
:source => EPC::Config::ROLES_PATH + "/system/true"
|
19
|
+
},
|
20
|
+
:user => {
|
21
|
+
:match_attribute => :name,
|
22
|
+
:required_attribute => :id,
|
23
|
+
:required_type => :numeric,
|
24
|
+
:source => EPC::Config::USERS_PATH
|
25
|
+
},
|
26
|
+
:user_group => {
|
27
|
+
:match_attribute => :name,
|
28
|
+
:required_attribute => :id,
|
29
|
+
:required_type => :numeric,
|
30
|
+
:source => EPC::Config::GROUPS_PATH
|
31
|
+
},
|
32
|
+
:library_set => {
|
33
|
+
:match_attribute => :name,
|
34
|
+
:required_attribute => :id,
|
35
|
+
:required_type => :numeric,
|
36
|
+
:source => EPC::Config::LIBRARY_SETS_PATH
|
37
|
+
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
@@required_arguments = {:count => 0}
|
42
|
+
@@required_options = []
|
43
|
+
|
44
|
+
SLEEP_TIME = 1
|
45
|
+
|
46
|
+
# Numerators are in secs
|
47
|
+
TICKER_TICKS = 25/SLEEP_TIME
|
48
|
+
GIVEUP_TICKS = 120/SLEEP_TIME
|
49
|
+
|
50
|
+
def method_missing(method, *args, &block)
|
51
|
+
if method.to_s =~ /^retrieve_(.+)_identifier$/
|
52
|
+
retrieve_identifier_for($1, *args, &block)
|
53
|
+
else
|
54
|
+
super
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def respond_to?(meth)
|
59
|
+
if meth.to_s =~ /^retrieve_.*_identifier$/
|
60
|
+
true
|
61
|
+
else
|
62
|
+
super
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.inherited(subklass)
|
67
|
+
# Here login is required for all commands that inherit
|
68
|
+
subklass.require_login
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.required_arguments_count(count, options_hash = {})
|
72
|
+
opt = {
|
73
|
+
:message => "Please specify all the mandatory arguments"
|
74
|
+
}.merge(options_hash)
|
75
|
+
@@required_arguments = {:count => count, :message => opt[:message]}
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.required_options(*opts, opt_hash)
|
79
|
+
options_hash = {
|
80
|
+
:mode => :any?,
|
81
|
+
:message => "You need to specify all required options"
|
82
|
+
}.merge(opt_hash)
|
83
|
+
@@required_options << {:name => opts, :mode => options_hash[:mode], :message => options_hash[:message]}
|
84
|
+
end
|
85
|
+
|
86
|
+
def initialize(client, options = {})
|
87
|
+
@client = client
|
88
|
+
@options = options.dup
|
89
|
+
if @options[:skip_prompts].present?
|
90
|
+
create_method(:ask) {|text, arr| return "Y"}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def go(*args)
|
95
|
+
if (login_required?) && (!logged_in?)
|
96
|
+
say("You must be logged in to run this command")
|
97
|
+
return 1
|
98
|
+
else
|
99
|
+
check_requirements(*args)
|
100
|
+
return translate_status_to_exit_code(execute(*args))
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def translate_status_to_exit_code(status)
|
107
|
+
if status.successful?
|
108
|
+
return 0
|
109
|
+
else
|
110
|
+
return status
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.dont_require_login
|
115
|
+
@login_required = false
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.require_login
|
119
|
+
@login_required = true
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.login_required?
|
123
|
+
!!@login_required
|
124
|
+
end
|
125
|
+
|
126
|
+
def login_required?
|
127
|
+
self.class.login_required?
|
128
|
+
end
|
129
|
+
|
130
|
+
def create_method(name, &block)
|
131
|
+
self.class.send(:define_method, :ask, &block)
|
132
|
+
end
|
133
|
+
|
134
|
+
def logged_in?
|
135
|
+
!(auth_token.nil? || auth_token.empty?)
|
136
|
+
end
|
137
|
+
|
138
|
+
def blank?(value)
|
139
|
+
value.respond_to?(:empty?) ? value.empty? : !value
|
140
|
+
end
|
141
|
+
|
142
|
+
def check_requirements(*args)
|
143
|
+
raise FatalError, @@required_arguments[:message] if args.size < @@required_arguments[:count]
|
144
|
+
@@required_options.each do |req_opt|
|
145
|
+
raise FatalError, req_opt[:message] unless req_opt[:name].map{|opt| @options[opt].present?}.send(req_opt[:mode])
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def numeric?(value)
|
150
|
+
return value.is_a?(Integer) || (value =~ /\d/) == 0
|
151
|
+
end
|
152
|
+
|
153
|
+
def ask_yn(question)
|
154
|
+
return ask(question, ["Y", "y", "N", "n", ""])
|
155
|
+
end
|
156
|
+
|
157
|
+
def mkdir(name, options = {})
|
158
|
+
result = :ok
|
159
|
+
|
160
|
+
begin
|
161
|
+
FileUtils.mkdir(name, options)
|
162
|
+
rescue SystemCallError => ex
|
163
|
+
result = :failed
|
164
|
+
say("Failed to create local directory [#{name}] - [#{ex}]")
|
165
|
+
end
|
166
|
+
|
167
|
+
result
|
168
|
+
end
|
169
|
+
|
170
|
+
def read_file(path)
|
171
|
+
begin
|
172
|
+
content = File.read(path)
|
173
|
+
rescue Exception => ex
|
174
|
+
say("Failed to read file at #{path}: [#{ex}]")
|
175
|
+
end
|
176
|
+
content
|
177
|
+
end
|
178
|
+
|
179
|
+
def parse_timeout_value
|
180
|
+
return if @options[:timeout].blank?
|
181
|
+
if numeric?(@options[:timeout][-1])
|
182
|
+
@timeout = @options[:timeout].to_i
|
183
|
+
return
|
184
|
+
end
|
185
|
+
unit = @options[:timeout][-1]
|
186
|
+
time = @options[:timeout][0...-1].to_i
|
187
|
+
if unit.downcase == "m"
|
188
|
+
@timeout = 60 * time
|
189
|
+
return
|
190
|
+
end
|
191
|
+
@timeout = time
|
192
|
+
end
|
193
|
+
|
194
|
+
def project_solution_path(path)
|
195
|
+
return path if EPC::Config.is_solution_dir?(path)
|
196
|
+
return File.join(File.split(path)[0...-1])
|
197
|
+
end
|
198
|
+
|
199
|
+
def normalize_params(params)
|
200
|
+
return params if is_target_param?(params.first)
|
201
|
+
return params.insert(0, "")
|
202
|
+
end
|
203
|
+
|
204
|
+
def is_target_param?(param)
|
205
|
+
target_type = param.split(":").first rescue ""
|
206
|
+
return object_types.include?(target_type.downcase)
|
207
|
+
end
|
208
|
+
|
209
|
+
def object_types
|
210
|
+
return ["solution", "project"]
|
211
|
+
end
|
212
|
+
|
213
|
+
def retrieve_identifier_for(entity, *args, &block)
|
214
|
+
entity = entity.to_sym
|
215
|
+
match_value = args.first
|
216
|
+
raise InternalError if match_value.blank?
|
217
|
+
raise InternalError unless @@retrieval_rules.keys.include?(entity)
|
218
|
+
rule = @@retrieval_rules[entity]
|
219
|
+
if rule[:required_type] == :numeric
|
220
|
+
if numeric?(match_value)
|
221
|
+
return match_value.to_i
|
222
|
+
elsif
|
223
|
+
entity_identifier = get_resource_attribute(rule[:source],
|
224
|
+
rule[:required_attribute],
|
225
|
+
rule[:match_attribute],
|
226
|
+
match_value)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
raise InputError, "Request failed: [Resource Not Found]" if entity_identifier.nil?
|
231
|
+
return entity_identifier
|
232
|
+
end
|
233
|
+
|
234
|
+
def infer_solution_context(s_identifier, path, options = {})
|
235
|
+
if s_identifier.nil?
|
236
|
+
if EPC::Config.is_solution_dir?(path)
|
237
|
+
solution_id = EPC::Config.get_solution_value(path, "id")
|
238
|
+
solution_name = EPC::Config.get_solution_value(path, "name")
|
239
|
+
return solution_id, solution_name
|
240
|
+
elsif EPC::Config.is_project_dir?(path)
|
241
|
+
solution_path = project_solution_path(path)
|
242
|
+
solution_id = EPC::Config.get_solution_value(solution_path, "id")
|
243
|
+
solution_name = EPC::Config.get_solution_value(solution_path, "name")
|
244
|
+
return solution_id, solution_name
|
245
|
+
else
|
246
|
+
return [nil, nil]
|
247
|
+
end
|
248
|
+
else
|
249
|
+
if numeric?(s_identifier)
|
250
|
+
s_identifier = s_identifier.to_i
|
251
|
+
if options[:get_solution_name].present? && options[:get_solution_name]
|
252
|
+
solution_name = get_resource_name(EPC::Config::SOLUTIONS_PATH + "?include=archived", :id, s_identifier)
|
253
|
+
end
|
254
|
+
return s_identifier, solution_name
|
255
|
+
else
|
256
|
+
if EPC::Config.is_solution_dir?(path)
|
257
|
+
path_solution_name = EPC::Config.get_solution_value(path, "name")
|
258
|
+
if path_solution_name == s_identifier
|
259
|
+
solution_id = EPC::Config.get_solution_value(path, "id")
|
260
|
+
solution_name = EPC::Config.get_solution_value(path, "name")
|
261
|
+
return solution_id, solution_name
|
262
|
+
end
|
263
|
+
elsif EPC::Config.is_project_dir?(path)
|
264
|
+
solution_path = project_solution_path(path)
|
265
|
+
path_solution_name = EPC::Config.get_solution_value(solution_path, "name")
|
266
|
+
if path_solution_name == s_identifier
|
267
|
+
solution_id = EPC::Config.get_solution_value(solution_path, "id")
|
268
|
+
solution_name = EPC::Config.get_solution_value(solution_path, "name")
|
269
|
+
return solution_id, solution_name
|
270
|
+
end
|
271
|
+
end
|
272
|
+
solution_id = get_resource_id(EPC::Config::SOLUTIONS_PATH + "?include=archived", :name, s_identifier)
|
273
|
+
return solution_id, s_identifier
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
# OPTIONS:
|
279
|
+
# :get_project_name : for when you have a numeric project_id, but you also want the name
|
280
|
+
def infer_project_context(p_identifier, path, s_identifier = nil, options = {})
|
281
|
+
if p_identifier.nil?
|
282
|
+
|
283
|
+
if EPC::Config.is_project_dir?(path)
|
284
|
+
project_id = EPC::Config.get_project_value(path, "id")
|
285
|
+
project_name = EPC::Config.get_project_value(path, "name")
|
286
|
+
return project_id, project_name
|
287
|
+
else
|
288
|
+
return nil, nil
|
289
|
+
end
|
290
|
+
|
291
|
+
else
|
292
|
+
|
293
|
+
if numeric?(p_identifier)
|
294
|
+
if !options[:get_project_name].nil? && options[:get_project_name] && !s_identifier.nil?
|
295
|
+
project_name = get_resource_name(EPC::Config::SOLUTIONS_PATH + "/#{s_identifier}/projects?include=archived", :id, p_identifier)
|
296
|
+
end
|
297
|
+
return p_identifier, project_name
|
298
|
+
else
|
299
|
+
if s_identifier.present?
|
300
|
+
project_id = get_resource_id(EPC::Config::SOLUTIONS_PATH + "/#{s_identifier}/projects?include=archived", :name, p_identifier)
|
301
|
+
return project_id, p_identifier
|
302
|
+
elsif EPC::Config.is_solution_dir?(path)
|
303
|
+
project_path = File.join(path, p_identifier)
|
304
|
+
if File.exists?(project_path)
|
305
|
+
project_id = EPC::Config.get_project_value(project_path, "id")
|
306
|
+
return project_id, p_identifier
|
307
|
+
end
|
308
|
+
elsif EPC::Config.is_project_dir?(path)
|
309
|
+
path_project_name = EPC::Config.get_project_value(path, "name")
|
310
|
+
if path_project_name == p_identifier
|
311
|
+
return EPC::Config.get_project_value(path, "id"), p_identifier
|
312
|
+
end
|
313
|
+
else
|
314
|
+
return nil, p_identifier
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
def retrieve_libraries(libraries)
|
322
|
+
status, response, headers = @client.get(EPC::Config::LIBRARIES_PATH)
|
323
|
+
raise FatalError, "Library retrieval failed: [#{response['message']}]" if status.failure?
|
324
|
+
|
325
|
+
ids = []
|
326
|
+
libraries.each do |lib|
|
327
|
+
raise FatalError, "An entry is missing the name" if lib[:name].nil?
|
328
|
+
lib_id = response.detect { |rlib|
|
329
|
+
found = (rlib[:name] == lib[:name])
|
330
|
+
found = found && (rlib[:library_version].to_s == lib[:library_version])
|
331
|
+
found = found && (rlib[:group].to_s == lib[:group])
|
332
|
+
found
|
333
|
+
}[:id] rescue nil
|
334
|
+
|
335
|
+
raise FatalError, "Could not find [#{lib[:name]}] library" if lib_id.nil?
|
336
|
+
ids << lib_id
|
337
|
+
end
|
338
|
+
|
339
|
+
ids
|
340
|
+
end
|
341
|
+
|
342
|
+
|
343
|
+
def get_resource_name(url, field, field_value)
|
344
|
+
return get_resource_attribute(url, :name, field, field_value.to_i)
|
345
|
+
end
|
346
|
+
|
347
|
+
def get_resource_id(url, field, field_value, options = {})
|
348
|
+
return get_resource_attribute(url, :id, field, field_value, options)
|
349
|
+
end
|
350
|
+
|
351
|
+
def get_resource_attribute(url, attribute, match_field, match_value, options = {})
|
352
|
+
opt = {
|
353
|
+
:case_sensitivity => true
|
354
|
+
}.merge(options)
|
355
|
+
|
356
|
+
status, response, message = client.get(url)
|
357
|
+
raise InputError, "Retrieval failed with message [#{response[:message]}]" unless status.successful?
|
358
|
+
value = response.detect do |entity|
|
359
|
+
if opt[:case_sensitivity]
|
360
|
+
entity[match_field.to_sym] == match_value
|
361
|
+
else
|
362
|
+
entity[match_field.to_sym].downcase == match_value.downcase
|
363
|
+
end
|
364
|
+
end
|
365
|
+
return value[attribute.to_sym] rescue nil
|
366
|
+
end
|
367
|
+
|
368
|
+
def http_client
|
369
|
+
return @http_client if @http_client
|
370
|
+
@http_client = EPC::Client::HttpClient.new(target_url, caller_id, auth_token)
|
371
|
+
end
|
372
|
+
|
373
|
+
def sha1(zip_path)
|
374
|
+
digest = Digest::SHA1.new
|
375
|
+
|
376
|
+
buffer_size = 1024
|
377
|
+
buffer = String.new
|
378
|
+
|
379
|
+
open(zip_path) { |io|
|
380
|
+
digest.update(buffer) while io.read(buffer_size, buffer)
|
381
|
+
}
|
382
|
+
|
383
|
+
digest.hexdigest
|
384
|
+
end
|
385
|
+
|
386
|
+
def extract_configuration_level(path, target_string)
|
387
|
+
config_type, config_id = target_string.split(":") rescue [nil, nil]
|
388
|
+
|
389
|
+
if config_id.nil?
|
390
|
+
if EPC::Config.is_project_dir?(path)
|
391
|
+
config_id = EPC::Config.get_project_value(path, "id")
|
392
|
+
config_type = "Project"
|
393
|
+
elsif EPC::Config.is_solution_dir?(path)
|
394
|
+
config_id = EPC::Config.get_solution_value(path, "id")
|
395
|
+
config_type = "Solution"
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
return [config_type, config_id]
|
400
|
+
end
|
401
|
+
|
402
|
+
def show_build_status(build_id)
|
403
|
+
status, response, headers = client.get("#{EPC::Config::BUILDS_PATH}/#{build_id}/status")
|
404
|
+
@status = status
|
405
|
+
if status.successful?
|
406
|
+
return true, response[:id], response[:message], response[:status]
|
407
|
+
else
|
408
|
+
return false
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
|
413
|
+
def poll_for_build_status(build_id)
|
414
|
+
count = 0
|
415
|
+
failed = false
|
416
|
+
|
417
|
+
while count <= @timeout
|
418
|
+
STDOUT.print('.')
|
419
|
+
STDOUT.flush
|
420
|
+
sleep(SLEEP_TIME)
|
421
|
+
|
422
|
+
shown, id, message, status = show_build_status(build_id)
|
423
|
+
if shown
|
424
|
+
count += 1
|
425
|
+
next unless status == "BUILT" || status == "FAILED" || status == "ERROR"
|
426
|
+
|
427
|
+
if status == "BUILT"
|
428
|
+
say("\nBuild completed successfully.")
|
429
|
+
return 0
|
430
|
+
else
|
431
|
+
say("\nBuild failed: #{status} - #{message}")
|
432
|
+
return 1
|
433
|
+
end
|
434
|
+
break
|
435
|
+
else
|
436
|
+
say("Poller failed to get the build status. Aborting.")
|
437
|
+
return 1
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
441
|
+
unless failed
|
442
|
+
if count > @timeout
|
443
|
+
say("\nServer is taking too long to update the build status. Please contact the AgileMethods support team.")
|
444
|
+
return 1
|
445
|
+
end
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
end
|
450
|
+
end
|
451
|
+
end
|