dtk-client 0.7.4.1 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dtk +10 -3
- data/bin/dtk-shell +1 -1
- data/lib/command_helpers/git_repo.rb +26 -20
- data/lib/command_helpers/jenkins_client.rb +4 -3
- data/lib/command_helpers/service_importer.rb +37 -25
- data/lib/commands.rb +2 -2
- data/lib/commands/common/thor/assembly_workspace.rb +185 -173
- data/lib/commands/common/thor/base_command_helper.rb +42 -0
- data/lib/commands/common/thor/clone.rb +1 -1
- data/lib/commands/common/thor/module.rb +37 -58
- data/lib/commands/common/thor/module/import.rb +1 -1
- data/lib/commands/common/thor/pull_from_remote.rb +7 -12
- data/lib/commands/common/thor/purge_clone.rb +1 -1
- data/lib/commands/common/thor/push_clone_changes.rb +3 -1
- data/lib/commands/common/thor/task_status.rb +52 -75
- data/lib/commands/common/thor/task_status/refresh_mode.rb +56 -0
- data/lib/commands/common/thor/task_status/snapshot_mode.rb +11 -0
- data/lib/commands/common/thor/task_status/stream_mode.rb +31 -0
- data/lib/commands/common/thor/task_status/stream_mode/element.rb +90 -0
- data/lib/commands/common/thor/task_status/stream_mode/element/no_results.rb +10 -0
- data/lib/commands/common/thor/task_status/stream_mode/element/render.rb +88 -0
- data/lib/commands/common/thor/task_status/stream_mode/element/stage.rb +13 -0
- data/lib/commands/common/thor/task_status/stream_mode/element/task_end.rb +10 -0
- data/lib/commands/common/thor/task_status/stream_mode/element/task_start.rb +10 -0
- data/lib/commands/thor/account.rb +10 -8
- data/lib/commands/thor/assembly.rb +9 -2
- data/lib/commands/thor/component_module.rb +0 -52
- data/lib/commands/thor/library.rb +1 -0
- data/lib/commands/thor/node.rb +1 -36
- data/lib/commands/thor/node_template.rb +4 -47
- data/lib/commands/thor/service.rb +57 -46
- data/lib/commands/thor/service_module.rb +2 -49
- data/lib/commands/thor/target.rb +7 -7
- data/lib/commands/thor/workspace.rb +44 -27
- data/lib/context_router.rb +4 -0
- data/lib/core.rb +71 -99
- data/lib/domain/response.rb +9 -0
- data/lib/domain/response/error_handler.rb +61 -0
- data/lib/dtk-client/version.rb +1 -1
- data/lib/dtk_client.rb +14 -0
- data/lib/dtk_error.rb +91 -0
- data/lib/error.rb +3 -9
- data/lib/execute/cli_pure/cli_rerouter.rb +82 -0
- data/lib/parser/adapters/thor.rb +3 -0
- data/lib/shell.rb +2 -1
- data/lib/shell/domain/context_params.rb +2 -0
- data/lib/util/console.rb +1 -1
- data/lib/util/os_util.rb +1 -0
- data/lib/util/remote_dependency_util.rb +20 -3
- data/lib/view_processor/table_print.rb +7 -25
- metadata +17 -5
- data/lib/commands/common/thor/test_action_agent.rb +0 -39
- data/lib/commands/thor/repo.rb +0 -35
@@ -0,0 +1,42 @@
|
|
1
|
+
module DTK::Client
|
2
|
+
class BaseCommandHelper
|
3
|
+
def initialize(command,context_params=nil)
|
4
|
+
@command = command
|
5
|
+
@context_params = context_params
|
6
|
+
@options = command.options
|
7
|
+
end
|
8
|
+
|
9
|
+
def print_external_dependencies(external_dependencies, location)
|
10
|
+
ambiguous = external_dependencies["ambiguous"]||[]
|
11
|
+
amb_sorted = ambiguous.map { |k,v| "#{k.split('/').last} (#{v.join(', ')})" }
|
12
|
+
inconsistent = external_dependencies["inconsistent"]||[]
|
13
|
+
possibly_missing = external_dependencies["possibly_missing"]||[]
|
14
|
+
|
15
|
+
OsUtil.print("There are inconsistent module dependencies mentioned #{location}: #{inconsistent.join(', ')}", :red) unless inconsistent.empty?
|
16
|
+
OsUtil.print("There are missing module dependencies mentioned #{location}: #{possibly_missing.join(', ')}", :yellow) unless possibly_missing.empty?
|
17
|
+
OsUtil.print("There are ambiguous module dependencies mentioned #{location}: '#{amb_sorted.join(', ')}'. One of the namespaces should be selected by editing the module_refs file", :yellow) if ambiguous && !ambiguous.empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def context_params()
|
22
|
+
@context_params || raise(DtkError, "[ERROR] @context_params is nil")
|
23
|
+
end
|
24
|
+
|
25
|
+
def retrieve_arguments(mapping, method_info = nil)
|
26
|
+
context_params.retrieve_arguments(mapping, method_info || @command.method_argument_names)
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_namespace_and_name(*args)
|
30
|
+
@command.get_namespace_and_name(*args)
|
31
|
+
end
|
32
|
+
|
33
|
+
def rest_url(*args)
|
34
|
+
@command.rest_url(*args)
|
35
|
+
end
|
36
|
+
|
37
|
+
def post(*args)
|
38
|
+
@command.post(*args)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -21,36 +21,9 @@ DEFAULT_COMMIT_MSG = "Initial commit."
|
|
21
21
|
PULL_CATALOGS = ["dtkn"]
|
22
22
|
|
23
23
|
module DTK::Client
|
24
|
+
dtk_require_common_commands('thor/base_command_helper')
|
24
25
|
class CommonModule
|
25
26
|
dtk_require_common_commands('thor/module/import')
|
26
|
-
|
27
|
-
def initialize(command,context_params)
|
28
|
-
@command = command
|
29
|
-
@context_params = context_params
|
30
|
-
@options = command.options
|
31
|
-
end
|
32
|
-
|
33
|
-
def print_external_dependencies(external_dependencies, location)
|
34
|
-
ambiguous = external_dependencies["ambiguous"]||[]
|
35
|
-
amb_sorted = ambiguous.map { |k,v| "#{k.split('/').last} (#{v.join(', ')})" }
|
36
|
-
inconsistent = external_dependencies["inconsistent"]||[]
|
37
|
-
possibly_missing = external_dependencies["possibly_missing"]||[]
|
38
|
-
|
39
|
-
OsUtil.print("There are inconsistent module dependencies mentioned #{location}: #{inconsistent.join(', ')}", :red) unless inconsistent.empty?
|
40
|
-
OsUtil.print("There are missing module dependencies mentioned #{location}: #{possibly_missing.join(', ')}", :yellow) unless possibly_missing.empty?
|
41
|
-
OsUtil.print("There are ambiguous module dependencies mentioned #{location}: '#{amb_sorted.join(', ')}'. One of the namespaces should be selected by editing the module_refs file", :yellow) if ambiguous && !ambiguous.empty?
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
# TODO: when we do this for other areas we can move these things up and use as common classes
|
46
|
-
# helpers
|
47
|
-
def retrieve_arguments(mapping, method_info = nil)
|
48
|
-
@context_params.retrieve_arguments(mapping, method_info || @command.method_argument_names)
|
49
|
-
end
|
50
|
-
|
51
|
-
def get_namespace_and_name(*args)
|
52
|
-
@command.get_namespace_and_name(*args)
|
53
|
-
end
|
54
27
|
end
|
55
28
|
|
56
29
|
module ModuleMixin
|
@@ -157,7 +130,7 @@ module DTK::Client
|
|
157
130
|
unless method_opts[:no_error_msg]
|
158
131
|
msg = "Module '#{module_name}' "
|
159
132
|
if version then msg << "version #{version} has been deleted"
|
160
|
-
else
|
133
|
+
else msg << "has been deleted"; end
|
161
134
|
OsUtil.print(msg, :yellow)
|
162
135
|
end
|
163
136
|
|
@@ -166,9 +139,9 @@ module DTK::Client
|
|
166
139
|
|
167
140
|
def set_attribute_module_aux(context_params)
|
168
141
|
if context_params.is_there_identifier?(:attribute)
|
169
|
-
mapping = [REQ_MODULE_ID
|
142
|
+
mapping = [REQ_MODULE_ID, :attribute_id!, :option_1]
|
170
143
|
else
|
171
|
-
mapping = [REQ_MODULE_ID
|
144
|
+
mapping = [REQ_MODULE_ID, :option_1!, :option_2]
|
172
145
|
end
|
173
146
|
|
174
147
|
module_id, attribute_id, value = context_params.retrieve_arguments(mapping, method_argument_names)
|
@@ -181,13 +154,13 @@ module DTK::Client
|
|
181
154
|
"#{module_type}_id".to_sym => module_id
|
182
155
|
}
|
183
156
|
|
184
|
-
post rest_url(
|
157
|
+
post rest_url('attribute/set'), post_body
|
185
158
|
end
|
186
159
|
|
187
|
-
def push_module_aux(context_params, internal_trigger=false, opts={})
|
160
|
+
def push_module_aux(context_params, internal_trigger = false, opts = {})
|
188
161
|
module_type = get_module_type(context_params)
|
189
|
-
module_id, module_name = context_params.retrieve_arguments([REQ_MODULE_ID, "#{module_type}_name".to_sym],method_argument_names)
|
190
|
-
version = options[
|
162
|
+
module_id, module_name = context_params.retrieve_arguments([REQ_MODULE_ID, "#{module_type}_name".to_sym], method_argument_names)
|
163
|
+
version = options['version']
|
191
164
|
|
192
165
|
module_location = OsUtil.module_location(module_type, module_name, version)
|
193
166
|
|
@@ -196,8 +169,8 @@ module DTK::Client
|
|
196
169
|
opts.merge!(:force => options.force?)
|
197
170
|
|
198
171
|
reparse_aux(module_location)
|
199
|
-
push_clone_changes_aux(module_type.to_sym, module_id, version, options[
|
200
|
-
|
172
|
+
push_clone_changes_aux(module_type.to_sym, module_id, version, options['message'] || DEFAULT_COMMIT_MSG, internal_trigger, opts)
|
173
|
+
end
|
201
174
|
|
202
175
|
def create_test_module_aux(context_params)
|
203
176
|
test_module_name = context_params.retrieve_arguments([:option_1!], method_argument_names)
|
@@ -209,10 +182,10 @@ module DTK::Client
|
|
209
182
|
create_response = import(context_params)
|
210
183
|
|
211
184
|
unless create_response.ok?
|
212
|
-
error_msg = create_response['errors'].select { |er| er['message'].include?
|
185
|
+
error_msg = create_response['errors'].select { |er| er['message'].include? 'cannot be created since it exists already' }
|
213
186
|
if error_msg.empty?
|
214
187
|
# If server response is not ok and module does not exist on server, delete cloned module, invoke delete method
|
215
|
-
delete(context_params
|
188
|
+
delete(context_params, :force_delete => true, :no_error_msg => true)
|
216
189
|
end
|
217
190
|
|
218
191
|
# remove temp directory
|
@@ -227,13 +200,13 @@ module DTK::Client
|
|
227
200
|
end
|
228
201
|
|
229
202
|
def import_module_aux(context_params)
|
230
|
-
CommonModule::Import.new(self,context_params).from_file()
|
203
|
+
CommonModule::Import.new(self, context_params).from_file()
|
231
204
|
end
|
232
205
|
|
233
206
|
def install_module_aux(context_params)
|
234
207
|
create_missing_clone_dirs()
|
235
208
|
resolve_direct_access(::DTK::Client::Configurator.check_direct_access)
|
236
|
-
remote_module_name, version = context_params.retrieve_arguments([:option_1!, :option_2],method_argument_names)
|
209
|
+
remote_module_name, version = context_params.retrieve_arguments([:option_1!, :option_2], method_argument_names)
|
237
210
|
# in case of auto-import via service import, we skip cloning to speed up a process
|
238
211
|
skip_cloning = context_params.get_forwarded_options()['skip_cloning'] if context_params.get_forwarded_options()
|
239
212
|
do_not_raise = context_params.get_forwarded_options()[:do_not_raise] if context_params.get_forwarded_options()
|
@@ -241,40 +214,44 @@ module DTK::Client
|
|
241
214
|
module_type = get_module_type(context_params)
|
242
215
|
|
243
216
|
# ignore_component_error = context_params.get_forwarded_options()[:ignore_component_error]||options.ignore? if context_params.get_forwarded_options()
|
244
|
-
ignore_component_error = context_params.get_forwarded_options() ? context_params.get_forwarded_options()[:ignore_component_error]
|
217
|
+
ignore_component_error = context_params.get_forwarded_options().empty? ? options.ignore? : context_params.get_forwarded_options()[:ignore_component_error]
|
245
218
|
additional_message = context_params.get_forwarded_options()[:additional_message] if context_params.get_forwarded_options()
|
246
219
|
|
247
|
-
remote_namespace, local_module_name = get_namespace_and_name(remote_module_name,':')
|
220
|
+
remote_namespace, local_module_name = get_namespace_and_name(remote_module_name, ':')
|
248
221
|
|
249
222
|
if clone_dir = Helper(:git_repo).local_clone_dir_exists?(module_type.to_sym, local_module_name, :namespace => remote_namespace, :version => version)
|
250
|
-
message = "Module's directory (#{clone_dir}) exists on client. To install this needs to be renamed or removed"
|
251
|
-
message +=
|
223
|
+
message = "Module's directory (#{clone_dir}) exists on client. To install this needs to be renamed or removed."
|
224
|
+
# message += '. To ignore this conflict and use existing component module please use -i switch (install REMOTE-SERVICE-NAME -i).' if additional_message
|
252
225
|
|
253
226
|
raise DtkError, message unless ignore_component_error
|
254
227
|
end
|
255
228
|
|
256
229
|
post_body = {
|
257
|
-
:remote_module_name => remote_module_name.sub(':','/'),
|
230
|
+
:remote_module_name => remote_module_name.sub(':', '/'),
|
258
231
|
:local_module_name => local_module_name,
|
259
232
|
:rsa_pub_key => SSHUtil.rsa_pub_key_content()
|
260
233
|
}
|
261
234
|
post_body.merge!(:do_not_raise => do_not_raise) if do_not_raise
|
262
235
|
post_body.merge!(:ignore_component_error => ignore_component_error) if ignore_component_error
|
263
236
|
post_body.merge!(:additional_message => additional_message) if additional_message
|
237
|
+
post_body.merge!(:skip_auto_install => skip_ainstall) if skip_ainstall
|
264
238
|
|
265
239
|
response = post rest_url("#{module_type}/import"), post_body
|
266
|
-
|
240
|
+
|
241
|
+
# print permission warnings and then check for other warnings
|
242
|
+
are_there_warnings = RemoteDependencyUtil.check_permission_warnings(response)
|
243
|
+
are_there_warnings ||= RemoteDependencyUtil.print_dependency_warnings(response, nil, :ignore_permission_warnings => true)
|
267
244
|
|
268
245
|
# prompt to see if user is ready to continue with warnings/errors
|
269
246
|
if are_there_warnings
|
270
|
-
return false unless Console.confirmation_prompt(
|
247
|
+
return false unless Console.confirmation_prompt('Do you still want to proceed with import' + '?')
|
271
248
|
end
|
272
249
|
|
273
250
|
# case when we need to import additional components
|
274
|
-
if
|
251
|
+
if response.ok? && !skip_ainstall && (missing_components = response.data(:missing_module_components))
|
275
252
|
required_components = response.data(:required_modules)
|
276
|
-
opts = {:do_not_raise=>true}
|
277
|
-
module_opts = ignore_component_error ? opts.merge(:ignore_component_error => true) : opts.merge(:additional_message=>true)
|
253
|
+
opts = { :do_not_raise => true }
|
254
|
+
module_opts = ignore_component_error ? opts.merge(:ignore_component_error => true) : opts.merge(:additional_message => true)
|
278
255
|
module_opts.merge!(:update_none => true) if options.update_none?
|
279
256
|
|
280
257
|
continue = trigger_module_auto_import(missing_components, required_components, module_opts)
|
@@ -286,11 +263,10 @@ module DTK::Client
|
|
286
263
|
response = post rest_url("#{module_type}/import"), post_body
|
287
264
|
|
288
265
|
# we set skip cloning since it is already done by import
|
289
|
-
puts
|
266
|
+
puts ' Done'
|
290
267
|
end
|
291
268
|
|
292
|
-
return response if
|
293
|
-
# module_name,repo_url,branch,version = response.data(:module_name, :repo_url, :workspace_branch, :version)
|
269
|
+
return response if !response.ok? || response.data(:does_not_exist)
|
294
270
|
module_id, module_name, namespace, repo_url, branch, version = response.data(:module_id, :module_name, :namespace, :repo_url, :workspace_branch, :version)
|
295
271
|
|
296
272
|
if error = response.data(:dsl_parse_error)
|
@@ -309,13 +285,13 @@ module DTK::Client
|
|
309
285
|
|
310
286
|
def delete_from_catalog_aux(context_params)
|
311
287
|
module_type = get_module_type(context_params)
|
312
|
-
remote_module_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
|
288
|
+
remote_module_name = context_params.retrieve_arguments([:option_1!], method_argument_names)
|
313
289
|
|
314
290
|
# remote_module_name can be namespace:name or namespace/name
|
315
291
|
remote_namespace, remote_module_name = get_namespace_and_name(remote_module_name, ':')
|
316
292
|
|
317
293
|
unless options.force? || options.confirmed?
|
318
|
-
return unless Console.confirmation_prompt("Are you sure you want to delete remote #{module_type} '#{remote_namespace.nil? ? '' : remote_namespace+'/'}#{remote_module_name}' and all items contained in it"+'?')
|
294
|
+
return unless Console.confirmation_prompt("Are you sure you want to delete remote #{module_type} '#{remote_namespace.nil? ? '' : remote_namespace + '/'}#{remote_module_name}' and all items contained in it" + '?')
|
319
295
|
end
|
320
296
|
|
321
297
|
post_body = {
|
@@ -330,7 +306,7 @@ module DTK::Client
|
|
330
306
|
|
331
307
|
def publish_module_aux(context_params)
|
332
308
|
module_type = get_module_type(context_params)
|
333
|
-
module_id, input_remote_name = context_params.retrieve_arguments([REQ_MODULE_ID, :option_1],method_argument_names)
|
309
|
+
module_id, input_remote_name = context_params.retrieve_arguments([REQ_MODULE_ID, :option_1], method_argument_names)
|
334
310
|
|
335
311
|
post_body = {
|
336
312
|
"#{module_type}_id".to_sym => module_id,
|
@@ -354,6 +330,7 @@ module DTK::Client
|
|
354
330
|
version = options.version
|
355
331
|
module_type = get_module_type(context_params)
|
356
332
|
skip_recursive_pull = context_params.get_forwarded_options()[:skip_recursive_pull]
|
333
|
+
ignore_dependency_merge_conflict = context_params.get_forwarded_options()[:skip_recursive_pull]
|
357
334
|
|
358
335
|
raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PULL_CATALOGS}" unless catalog
|
359
336
|
|
@@ -365,9 +342,11 @@ module DTK::Client
|
|
365
342
|
:force => options.force?,
|
366
343
|
:version => version,
|
367
344
|
:remote_namespace => options.namespace,
|
368
|
-
:skip_recursive_pull => skip_recursive_pull
|
345
|
+
:skip_recursive_pull => skip_recursive_pull,
|
346
|
+
:ignore_dependency_merge_conflict => ignore_dependency_merge_conflict
|
369
347
|
}
|
370
348
|
|
349
|
+
opts.merge!(:do_not_raise => true) if (context_params.get_forwarded_options()||{})[:do_not_raise]
|
371
350
|
response = pull_from_remote_aux(module_type.to_sym, module_id, opts)
|
372
351
|
return response unless response.ok?
|
373
352
|
|
@@ -34,7 +34,7 @@ module DTK::Client
|
|
34
34
|
unless rsa_pub_key
|
35
35
|
raise DtkError,"No File found at (#{path_to_key}). Path is wrong or it is necessary to generate the public rsa key (e.g., run ssh-keygen -t rsa)"
|
36
36
|
end
|
37
|
-
opts_perform_locally = remote_params.merge(:full_module_name => full_module_name, :force => opts[:force])
|
37
|
+
opts_perform_locally = remote_params.merge(:full_module_name => full_module_name, :force => opts[:force], :do_not_raise => opts[:do_not_raise], :ignore_dependency_merge_conflict => opts[:ignore_dependency_merge_conflict])
|
38
38
|
PullFromRemote.perform_locally(self,module_type,module_id,module_name,opts_perform_locally)
|
39
39
|
else
|
40
40
|
# TODO: see if this works correctly
|
@@ -47,10 +47,11 @@ module DTK::Client
|
|
47
47
|
##
|
48
48
|
#
|
49
49
|
# module_type: will be :component_module or :service_module
|
50
|
-
def import_module_component_dependencies(module_type, module_id, remote_namespace=nil)
|
50
|
+
def import_module_component_dependencies(module_type, module_id, remote_namespace = nil)
|
51
51
|
response = resolve_pull_from_remote_on_server(module_type, module_id, remote_namespace)
|
52
52
|
|
53
53
|
print "Resolving dependencies please wait ... "
|
54
|
+
RemoteDependencyUtil.check_permission_warnings(response)
|
54
55
|
|
55
56
|
# install them all!
|
56
57
|
if (response.ok? && !(missing_components = response.data(:missing_modules)).empty?)
|
@@ -91,21 +92,15 @@ module DTK::Client
|
|
91
92
|
response = cmd_obj.Helper(:git_repo).pull_changes(module_type,module_name,opts)
|
92
93
|
|
93
94
|
# return response unless response.ok?
|
94
|
-
if
|
95
|
-
puts
|
95
|
+
if custom_message = response.data[:custom_message]
|
96
|
+
puts custom_message
|
97
|
+
elsif (response.data[:diffs].nil? || response.data[:diffs].empty?)
|
98
|
+
puts "No changes to pull from remote." unless response['errors']
|
96
99
|
else
|
97
100
|
puts "Changes pulled from remote"
|
98
101
|
end
|
99
102
|
|
100
103
|
return response
|
101
|
-
|
102
|
-
# removing this for now, because we will use push-clone-changes as part of pull-from-remote command
|
103
|
-
# post_body = {
|
104
|
-
# id_field(module_type) => module_id,
|
105
|
-
# :commit_sha => response.data[:commit_sha],
|
106
|
-
# :json_diffs => JSON.generate(response.data[:diffs])
|
107
|
-
# }
|
108
|
-
# post rest_url("#{module_type}/update_model_from_clone"), post_body
|
109
104
|
end
|
110
105
|
|
111
106
|
def self.perform_on_server(cmd_obj,module_type,module_id,module_name,remote_params)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module DTK::Client
|
2
2
|
module PurgeCloneMixin
|
3
|
-
def purge_clone_aux(module_type,opts={})
|
3
|
+
def purge_clone_aux(module_type, opts = {})
|
4
4
|
module_name = opts[:module_name]
|
5
5
|
version = opts[:version]
|
6
6
|
opts_module_loc = (opts[:assembly_module] ? {:assembly_module => opts[:assembly_module]} : Hash.new)
|
@@ -16,7 +16,7 @@ module DTK::Client
|
|
16
16
|
|
17
17
|
unless File.directory?(module_location)
|
18
18
|
return if opts[:skip_cloning]
|
19
|
-
if Console.confirmation_prompt("Push not possible, module '#{module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
|
19
|
+
if opts[:force_clone] || Console.confirmation_prompt("Push not possible, module '#{module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
|
20
20
|
clone_aux(module_type, module_id, version, true, true, opts)
|
21
21
|
else
|
22
22
|
return
|
@@ -32,12 +32,14 @@ module DTK::Client
|
|
32
32
|
repo_obj = response.data(:repo_obj)
|
33
33
|
json_diffs = JSON.generate(response.data(:diffs))
|
34
34
|
post_body = get_workspace_branch_info_post_body(module_type, module_id, version, opts).merge(:json_diffs => json_diffs, :commit_sha => commit_sha)
|
35
|
+
|
35
36
|
post_body.merge!(:modification_type => opts[:modification_type]) if opts[:modification_type]
|
36
37
|
post_body.merge!(:force_parse => true) if options['force-parse'] || opts[:force_parse]
|
37
38
|
post_body.merge!(:update_from_includes => true) if opts[:update_from_includes]
|
38
39
|
post_body.merge!(:service_instance_module => true) if opts[:service_instance_module]
|
39
40
|
post_body.merge!(:current_branch_sha => opts[:current_branch_sha]) if opts[:current_branch_sha]
|
40
41
|
post_body.merge!(:force => opts[:force]) if opts[:force]
|
42
|
+
post_body.merge!(:task_action => opts[:task_action]) if opts[:task_action]
|
41
43
|
|
42
44
|
if opts[:set_parsed_false]
|
43
45
|
post_body.merge!(:set_parsed_false => true)
|
@@ -1,86 +1,63 @@
|
|
1
1
|
module DTK::Client
|
2
2
|
module TaskStatusMixin
|
3
|
-
def task_status_aux(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# stop pulling when top level task succeds, fails or timeout
|
13
|
-
if response and response.data and response.data.first
|
14
|
-
#TODO: may fix in server, but now top can have non executing state but a concurrent branch can execute; so
|
15
|
-
#chanding bloew for time being
|
16
|
-
#break unless response.data.first["status"].eql? "executing"
|
17
|
-
# TODO: There is bug where we do not see executing status on start so we have to wait until at
|
18
|
-
# least one 'successed' has been found
|
19
|
-
|
20
|
-
top_task_failed = response.data.first['status'].eql?('failed')
|
21
|
-
is_pending = (response.data.select {|r|r["status"].nil? }).size > 0
|
22
|
-
is_executing = (response.data.select {|r|r["status"].eql? "executing"}).size > 0
|
23
|
-
is_failed = (response.data.select {|r|r["status"].eql? "failed"}).size > 0
|
24
|
-
is_cancelled = response.data.first["status"].eql?("cancelled")
|
25
|
-
|
26
|
-
# commented out because of DTK-1804
|
27
|
-
# when some of the converge tasks fail, stop task-status --wait and set task status to '' for remaining tasks which are not executed
|
28
|
-
# if is_failed
|
29
|
-
# response.data.each {|r| (r["status"] = "") if r["status"].eql?("executing")}
|
30
|
-
# is_cancelled = true
|
31
|
-
# end
|
32
|
-
is_cancelled = true if top_task_failed
|
33
|
-
|
34
|
-
unless (is_executing || is_pending) && !is_cancelled
|
35
|
-
system('clear')
|
36
|
-
response.print_error_table = true
|
37
|
-
response.render_table(:task_status)
|
38
|
-
return response
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
response.render_table(:task_status)
|
43
|
-
system('clear')
|
44
|
-
response.render_data(true)
|
45
|
-
|
46
|
-
Console.wait_animation("Watching '#{type}' task status [ #{DEBUG_SLEEP_TIME} seconds refresh ] ",DEBUG_SLEEP_TIME)
|
47
|
-
end
|
48
|
-
rescue Interrupt => e
|
49
|
-
puts ""
|
50
|
-
# this tells rest of the flow to skip rendering of this response
|
51
|
-
response.skip_render = true unless response.nil?
|
52
|
-
end
|
3
|
+
def task_status_aux(mode, object_id, object_type, opts={})
|
4
|
+
case mode
|
5
|
+
when :refresh
|
6
|
+
TaskStatus::RefreshMode.new(self,mode,object_id,object_type).task_status(opts)
|
7
|
+
when :snapshot
|
8
|
+
TaskStatus::SnapshotMode.new(self,mode,object_id,object_type).task_status(opts)
|
9
|
+
when :stream
|
10
|
+
assembly_or_workspace_id = object_id
|
11
|
+
task_status_stream(assembly_or_workspace_id)
|
53
12
|
else
|
54
|
-
|
55
|
-
|
56
|
-
response.render_table(:task_status)
|
57
|
-
end
|
13
|
+
legal_modes = [:refresh,:snapshot,:stream]
|
14
|
+
raise DtkError::Usage.new("Illegal mode '#{mode}'; legal modes are: #{legal_modes.join(', ')}")
|
58
15
|
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def task_status_stream(assembly_or_workspace_id)
|
19
|
+
TaskStatus::StreamMode.new(self,:stream,assembly_or_workspace_id,:assembly).get_and_render()
|
20
|
+
end
|
59
21
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
:format => :list
|
65
|
-
}
|
66
|
-
response = post rest_url("#{type}/task_status"), post_body
|
67
|
-
|
68
|
-
raise DTK::Client::DtkError, "[SERVER ERROR] #{response['errors'].first['message']}." if response["status"].eql?('notok')
|
69
|
-
|
70
|
-
response.override_command_class("list_task")
|
71
|
-
puts response.render_data
|
22
|
+
def list_task_info_aux(object_type, object_id)
|
23
|
+
response = TaskStatus.new(self,object_id,object_type).post_call(:form => :list)
|
24
|
+
unless response.ok?
|
25
|
+
DtkError.raise_error(response)
|
72
26
|
end
|
27
|
+
response.override_command_class("list_task")
|
28
|
+
puts response.render_data
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
dtk_require_common_commands('thor/base_command_helper')
|
33
|
+
class TaskStatus < BaseCommandHelper
|
34
|
+
require File.expand_path('task_status/snapshot_mode',File.dirname(__FILE__))
|
35
|
+
require File.expand_path('task_status/refresh_mode',File.dirname(__FILE__))
|
36
|
+
require File.expand_path('task_status/stream_mode',File.dirname(__FILE__))
|
73
37
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
38
|
+
def initialize(command,mode,object_id,object_type)
|
39
|
+
super(command)
|
40
|
+
@mode = mode
|
41
|
+
@object_id = object_id
|
42
|
+
@object_type = object_type
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def post_body(opts={})
|
47
|
+
id_field = "#{@object_type}_id".to_sym
|
48
|
+
PostBody.new(
|
49
|
+
id_field => @object_id,
|
50
|
+
:form? => opts[:form],
|
51
|
+
:summarize_node_groups? => opts[:summarize]
|
52
|
+
)
|
53
|
+
end
|
54
|
+
def post_call(opts={})
|
55
|
+
response = post rest_url("#{@object_type}/task_status"), post_body(opts)
|
56
|
+
unless response.ok?
|
57
|
+
DtkError.raise_error(response)
|
83
58
|
end
|
59
|
+
response
|
84
60
|
end
|
85
61
|
|
62
|
+
end
|
86
63
|
end
|