dtk-client 0.7.7 → 0.7.8
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.
- checksums.yaml +8 -8
- data/dtk-client.gemspec +1 -1
- data/lib/command_helpers/git_repo.rb +36 -0
- data/lib/command_helpers/service_importer.rb +46 -17
- data/lib/commands/common/thor/action_result_handler.rb +6 -1
- data/lib/commands/common/thor/assembly_workspace.rb +3 -1
- data/lib/commands/common/thor/clone.rb +29 -12
- data/lib/commands/common/thor/common.rb +15 -6
- data/lib/commands/common/thor/create_target.rb +8 -5
- data/lib/commands/common/thor/edit.rb +3 -1
- data/lib/commands/common/thor/module.rb +366 -52
- data/lib/commands/common/thor/pull_from_remote.rb +5 -3
- data/lib/commands/common/thor/push_clone_changes.rb +1 -0
- data/lib/commands/thor/component_module.rb +48 -13
- data/lib/commands/thor/developer.rb +3 -2
- data/lib/commands/thor/service.rb +5 -1
- data/lib/commands/thor/service_module.rb +118 -27
- data/lib/commands/thor/target.rb +2 -2
- data/lib/commands/thor/test_module.rb +3 -3
- data/lib/domain/git_adapter.rb +8 -0
- data/lib/dtk-client/version.rb +1 -1
- data/lib/util/console.rb +27 -0
- data/lib/util/os_util.rb +4 -3
- data/lib/util/remote_dependency_util.rb +13 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2NjNGJhMTdjNzA2ZTI2ZGIzNGU5NGQwOTE2NzY4YTgzNmJlY2Y3MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2JiNzVhYWE5YzFlY2RjNzVkOWE3ZmI0MjM3YWFhZGU3OTgxOGY1OQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmQxMGI5OWEzNDAyY2U3ZGY2MDBkODFmODZiZTAzNDljZmIwN2VjMGQ5MWMw
|
10
|
+
OTBjZGJmZThhMWMxZjI5MzNlZWM1MDMwNjQzNzNmMzI2YjY3NWZjNzNjMmEx
|
11
|
+
OGI1MWY0NDI5NWNhZjY4MTZjMWQzODY0NmVkNDE5ZjQ2NDM3ZWQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MGIxMTA5YWRmZGY2YjVmNmVmOTRmNWNjODc0NjAzZmNlMGQwOTQ2ZDZiMDQ1
|
14
|
+
ZjRmZjY2NWMwOWYyODZlYWZlZmFlZTBhNzFmMGEwNWEzZmJkNWFjY2NlZTRl
|
15
|
+
MDlkYzk1ZjhjMDg5NThlOWIyNDhiMDVlMDZhZGJmODVkMDE1YTI=
|
data/dtk-client.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |gem|
|
|
30
30
|
gem.add_dependency 'thor','~> 0.15.4'
|
31
31
|
gem.add_dependency 'erubis','~> 2.7.0'
|
32
32
|
gem.add_dependency 'dtk-common-core','0.7.3'
|
33
|
-
gem.add_dependency 'git','1.2.
|
33
|
+
gem.add_dependency 'git','1.2.9'
|
34
34
|
gem.add_dependency 'colorize','~> 0.5.8'
|
35
35
|
gem.add_dependency 'highline', '1.6.16'
|
36
36
|
gem.add_dependency 'awesome_print', '1.1.0'
|
@@ -225,6 +225,42 @@ module DTK; module Client; class CommandHelper
|
|
225
225
|
end
|
226
226
|
end
|
227
227
|
|
228
|
+
def create_new_version(type, src_branch, module_name, src_namespace, version, repo_url, opts = {})
|
229
|
+
full_name_src = ModuleUtil.join_name(module_name, src_namespace)
|
230
|
+
full_name_dest = "#{full_name_src}-#{version}"
|
231
|
+
|
232
|
+
local_src_dir = local_repo_dir(type, full_name_src)
|
233
|
+
local_dest_dir = local_repo_dir(type, full_name_dest)
|
234
|
+
branch = "#{src_branch}-v#{version}"
|
235
|
+
exist_already = false
|
236
|
+
|
237
|
+
if File.directory?(local_src_dir) && !(Dir["#{local_src_dir}/*"].empty?)
|
238
|
+
if File.directory?(local_dest_dir) && !(Dir["#{local_dest_dir}/*"].empty?)
|
239
|
+
# raise ErrorUsage.new("Directory (#{local_dest_dir}) already exist with content.",:log_error=>false)
|
240
|
+
exist_already = true
|
241
|
+
else
|
242
|
+
FileUtils.cp_r(local_src_dir, local_dest_dir)
|
243
|
+
end
|
244
|
+
else
|
245
|
+
raise ErrorUsage.new("The content for module (#{full_name_src}) should be put in directory (#{local_src_dir})",:log_error=>false)
|
246
|
+
end
|
247
|
+
|
248
|
+
unless exist_already
|
249
|
+
Response.wrap_helper_actions() do
|
250
|
+
repo_dir = local_dest_dir
|
251
|
+
remote_branch = local_branch = branch
|
252
|
+
repo = create(repo_dir, branch, :no_initial_commit => true)
|
253
|
+
repo.add_remote(remote(branch), repo_url)
|
254
|
+
repo.checkout(branch, { :new_branch => true })
|
255
|
+
repo.push_with_remote(remote(), remote_branch)
|
256
|
+
repo.delete_branch(src_branch)
|
257
|
+
repo.fetch()
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
{'module_directory' => local_dest_dir, 'version' => version, 'branch' => branch, 'exist_already' => exist_already}
|
262
|
+
end
|
263
|
+
|
228
264
|
def rename_and_initialize_clone_and_push(type, module_name, new_module_name, branch, repo_url, local_repo_dir, version = nil)
|
229
265
|
# check to see if the new dir has proper naming e.g. (~/dtk/component_modules/dtk::java)
|
230
266
|
unless local_repo_dir.match(/\/#{new_module_name.gsub(ModuleUtil::NAMESPACE_SEPERATOR,'/')}$/)
|
@@ -24,13 +24,32 @@ module DTK::Client
|
|
24
24
|
#
|
25
25
|
def trigger_module_auto_pull(required_modules, opts = {})
|
26
26
|
return if required_modules.empty?
|
27
|
+
hide_output = opts[:hide_output]
|
28
|
+
|
29
|
+
# options[:force] means this command is triggered from trigger_module_auto_import method bellow
|
30
|
+
unless opts[:force]
|
31
|
+
update_none = RemoteDependencyUtil.check_for_frozen_modules(required_modules)
|
32
|
+
|
33
|
+
if update_none
|
34
|
+
print "All dependent modules are frozen and will not be updated!\n" unless hide_output
|
35
|
+
print "Resuming pull ... " unless hide_output
|
36
|
+
return Response::Ok.new()
|
37
|
+
end
|
38
|
+
end
|
27
39
|
|
28
40
|
if opts[:force] || Console.confirmation_prompt("Do you want to update in addition to this module its dependent modules from the catalog?")
|
29
41
|
required_modules.each do |r_module|
|
30
42
|
module_name = full_module_name(r_module)
|
31
43
|
module_type = r_module['type']
|
44
|
+
version = r_module['version']
|
45
|
+
full_name = (version && !version.eql?('master')) ? "#{module_name}(#{version})" : module_name
|
32
46
|
|
33
|
-
|
47
|
+
if r_module['frozen']
|
48
|
+
print "Not allowed to update frozen #{module_type.gsub('_', ' ')} '#{module_name}' version '#{version}' \n" unless hide_output
|
49
|
+
next
|
50
|
+
end
|
51
|
+
|
52
|
+
print "Pulling #{module_type.gsub('_',' ')} content for '#{full_name}' ... " unless hide_output
|
34
53
|
|
35
54
|
new_context_params = DTK::Shell::ContextParams.new
|
36
55
|
new_context_params.add_context_to_params(module_type, module_type)
|
@@ -38,6 +57,7 @@ module DTK::Client
|
|
38
57
|
|
39
58
|
forwarded_opts = { :skip_recursive_pull => true, :ignore_dependency_merge_conflict => true }
|
40
59
|
forwarded_opts.merge!(:do_not_raise => true) if opts[:do_not_raise]
|
60
|
+
forwarded_opts.merge!(:version => version) if version && !version.eql?('master')
|
41
61
|
new_context_params.forward_options(forwarded_opts)
|
42
62
|
|
43
63
|
response = ContextRouter.routeTask(module_type, "pull_dtkn", new_context_params, @conn)
|
@@ -59,49 +79,58 @@ module DTK::Client
|
|
59
79
|
# Method will trigger import for each missing module component
|
60
80
|
#
|
61
81
|
def trigger_module_auto_import(modules_to_import, required_modules, opts = {})
|
62
|
-
|
82
|
+
hide_output = opts[:hide_output]
|
83
|
+
|
84
|
+
puts 'Auto-installing missing module(s)' unless hide_output
|
63
85
|
update_all = false
|
64
|
-
update_none =
|
86
|
+
update_none = RemoteDependencyUtil.check_for_frozen_modules(required_modules)
|
65
87
|
|
66
88
|
# Print out or update installed modules from catalog
|
67
89
|
required_modules.each do |r_module|
|
68
|
-
module_name
|
69
|
-
module_type
|
90
|
+
module_name = full_module_name(r_module)
|
91
|
+
module_type = r_module['type']
|
92
|
+
version = r_module['version']
|
93
|
+
full_name = (version && !version.eql?('master')) ? "#{module_name}(#{version})" : module_name
|
70
94
|
|
71
|
-
print "Using #{module_type.gsub('_', ' ')} '#{
|
95
|
+
print "Using #{module_type.gsub('_', ' ')} '#{full_name}'\n" unless hide_output
|
72
96
|
next if update_none || opts[:update_none]
|
73
97
|
|
98
|
+
pull_opts = {:force => true, :do_not_raise => true}
|
99
|
+
pull_opts.merge!(:hide_output => hide_output) if hide_output
|
100
|
+
|
74
101
|
if update_all
|
75
|
-
trigger_module_auto_pull([r_module],
|
102
|
+
trigger_module_auto_pull([r_module], pull_opts)
|
76
103
|
else
|
77
104
|
options = required_modules.size > 1 ? %w(all none) : []
|
78
|
-
update = Console.confirmation_prompt_additional_options("Do you want to update dependent #{module_type.gsub('_', ' ')} '#{
|
105
|
+
update = Console.confirmation_prompt_additional_options("Do you want to update dependent #{module_type.gsub('_', ' ')} '#{full_name}' from the catalog?", options) unless hide_output
|
79
106
|
next unless update
|
80
107
|
|
81
108
|
if update.to_s.eql?('all')
|
82
109
|
update_all = true
|
83
|
-
trigger_module_auto_pull([r_module],
|
110
|
+
trigger_module_auto_pull([r_module], pull_opts)
|
84
111
|
elsif update.to_s.eql?('none')
|
85
112
|
update_none = true
|
86
113
|
else
|
87
|
-
trigger_module_auto_pull([r_module],
|
114
|
+
trigger_module_auto_pull([r_module], pull_opts)
|
88
115
|
end
|
89
116
|
end
|
90
117
|
end
|
91
118
|
|
92
119
|
# Trigger import/install for missing modules
|
93
|
-
modules_to_import.each do |m_module|
|
120
|
+
modules_to_import.uniq.each do |m_module|
|
94
121
|
module_name = full_module_name(m_module)
|
95
122
|
module_type = m_module['type']
|
123
|
+
version = m_module['version']
|
124
|
+
full_name = (version && !version.eql?('master')) ? "#{module_name}(#{version})" : module_name
|
96
125
|
|
97
126
|
# we check if there is module_url if so we install from git
|
98
127
|
module_url = m_module['module_url']
|
99
128
|
|
100
129
|
# descriptive message
|
101
130
|
importing = module_url ? "Importing" : "Installing"
|
102
|
-
import_msg = "#{importing} #{module_type.gsub('_', ' ')} '#{
|
131
|
+
import_msg = "#{importing} #{module_type.gsub('_', ' ')} '#{full_name}'"
|
103
132
|
import_msg += " from git source #{module_url}" if module_url
|
104
|
-
print "#{import_msg} ... "
|
133
|
+
print "#{import_msg} ... " unless hide_output
|
105
134
|
|
106
135
|
if module_url
|
107
136
|
# import from Git source
|
@@ -111,13 +140,13 @@ module DTK::Client
|
|
111
140
|
else
|
112
141
|
# import from Repo Manager
|
113
142
|
new_context_params = ::DTK::Shell::ContextParams.new([module_name])
|
114
|
-
new_context_params.override_method_argument!('option_2',
|
143
|
+
new_context_params.override_method_argument!('option_2', version) if version && !version.eql?('master')
|
115
144
|
new_context_params.forward_options(:skip_cloning => false, :skip_auto_install => true, :module_type => module_type).merge!(opts)
|
116
145
|
response = ContextRouter.routeTask(module_type, 'install', new_context_params, @conn)
|
117
146
|
end
|
118
147
|
|
119
148
|
ignore_component_error = (new_context_params.get_forwarded_options() || {})[:ignore_component_error] && module_type.eql?('component_module')
|
120
|
-
puts(response.data(:does_not_exist) ? response.data(:does_not_exist) : 'Done.')
|
149
|
+
puts(response.data(:does_not_exist) ? response.data(:does_not_exist) : 'Done.') unless hide_output
|
121
150
|
raise DtkError, response.error_message if !response.ok? && !ignore_component_error
|
122
151
|
end
|
123
152
|
|
@@ -155,7 +184,7 @@ module DTK::Client
|
|
155
184
|
formated_name = m['formated_name']
|
156
185
|
# print "Cloning component module '#{formated_name}' from server ... "
|
157
186
|
thor_options = {}
|
158
|
-
thor_options["version"] = m['version']
|
187
|
+
thor_options["version"] = m['version'] unless m['version'].eql?('base')
|
159
188
|
thor_options["skip_edit"] = true
|
160
189
|
thor_options["omit_output"] = true
|
161
190
|
thor_options.merge!(:module_type => 'component-module')
|
@@ -189,7 +218,7 @@ module DTK::Client
|
|
189
218
|
#
|
190
219
|
# Returns: String
|
191
220
|
def add_version?(display_name, version)
|
192
|
-
version = nil if 'CURRENT'.eql?(version)
|
221
|
+
version = nil if 'CURRENT'.eql?(version) || 'base'.eql?(version)
|
193
222
|
(version ? "#{display_name}-#{version.strip}" : "#{display_name}")
|
194
223
|
end
|
195
224
|
|
@@ -20,6 +20,11 @@ module DTK
|
|
20
20
|
nil
|
21
21
|
end
|
22
22
|
|
23
|
+
def print_simple_results(action_results_id, number_of_retries=8)
|
24
|
+
response = action_results(action_results_id, number_of_retries)
|
25
|
+
pp response
|
26
|
+
end
|
27
|
+
|
23
28
|
def action_results(action_results_id, number_of_retries=8)
|
24
29
|
action_body = {
|
25
30
|
:action_results_id => action_results_id,
|
@@ -46,7 +51,7 @@ module DTK
|
|
46
51
|
response
|
47
52
|
|
48
53
|
end
|
49
|
-
|
54
|
+
|
50
55
|
end
|
51
56
|
end
|
52
57
|
end
|
@@ -223,6 +223,7 @@ module DTK::Client
|
|
223
223
|
:automatically_clone => true,
|
224
224
|
:pull_if_needed => false,
|
225
225
|
:service_instance_module => true,
|
226
|
+
:skip_if_exist_check => true,
|
226
227
|
:assembly_module => {
|
227
228
|
:assembly_name => assembly_name,
|
228
229
|
:version => version
|
@@ -375,7 +376,8 @@ module DTK::Client
|
|
375
376
|
:remote_branch => base_module_branch,
|
376
377
|
:commit_sha => branch_head_sha,
|
377
378
|
:current_branch_sha => current_branch_sha,
|
378
|
-
:full_module_name => module_name
|
379
|
+
:full_module_name => module_name,
|
380
|
+
:skip_if_exist_check => true
|
379
381
|
}
|
380
382
|
opts = {:local_branch => local_branch, :namespace => namespace}
|
381
383
|
|
@@ -9,35 +9,52 @@ module DTK::Client
|
|
9
9
|
# This will change behaviour of method
|
10
10
|
# module_type: will be :component_module or :service_module
|
11
11
|
|
12
|
-
def clone_aux(module_type, module_id,version,internal_trigger=false,omit_output=false,opts={})
|
13
|
-
|
14
|
-
|
12
|
+
def clone_aux(module_type, module_id, version, internal_trigger = false, omit_output = false, opts = {})
|
13
|
+
# if version = base do not clone latest, just base
|
14
|
+
if version && version.eql?('base')
|
15
|
+
version = nil
|
16
|
+
opts[:use_latest] = false
|
17
|
+
end
|
15
18
|
|
19
|
+
module_name, module_namespace, repo_url, branch, not_ok_response, version = workspace_branch_info(module_type, module_id, version, opts)
|
16
20
|
return not_ok_response if not_ok_response
|
21
|
+
|
22
|
+
# clone base version first if not cloned already
|
23
|
+
clone_base_aux(module_type, module_id, "#{module_namespace}:#{module_name}") if opts[:use_latest] && version
|
24
|
+
|
25
|
+
module_location = OsUtil.module_location(module_type, "#{module_namespace}:#{module_name}", version)
|
26
|
+
raise DTK::Client::DtkValidationError, "#{module_type.to_s.gsub('_',' ').capitalize} '#{module_name}#{version && "-#{version}"}' already cloned!" if File.directory?(module_location) && !opts[:skip_if_exist_check]
|
27
|
+
|
28
|
+
full_module_name = ModuleUtil.resolve_name(module_name, module_namespace)
|
29
|
+
|
17
30
|
# TODO: should we use instead Helper(:git_repo).create_clone_from_optional_branch
|
18
31
|
response = Helper(:git_repo).create_clone_with_branch(module_type,module_name,repo_url,branch,version,module_namespace,opts)
|
19
32
|
|
20
33
|
if response.ok?
|
21
|
-
|
34
|
+
print_name = "Module '#{full_module_name}'"
|
35
|
+
print_name << " version '#{version}'" if version
|
36
|
+
puts "#{print_name} has been successfully cloned!" unless omit_output
|
22
37
|
# when puppet forge import, print successfully imported instead of cloned
|
23
|
-
DTK::Client::OsUtil.print("
|
38
|
+
DTK::Client::OsUtil.print("#{print_name} has been successfully imported!", :yellow) if omit_output && opts[:print_imported]
|
24
39
|
unless internal_trigger
|
25
40
|
if Console.confirmation_prompt("Would you like to edit module now?")
|
26
41
|
context_params_for_module = create_context_for_module(full_module_name, module_type)
|
27
42
|
return edit(context_params_for_module)
|
28
|
-
# if module_type.to_s.eql?("service_module")
|
29
|
-
# context_params_for_module = create_context_for_module(module_name, :"service-module")
|
30
|
-
# elsif module_type.to_s.eql?("component_module")
|
31
|
-
# context_params_for_module = create_context_for_module(module_name, :"component-module")
|
32
|
-
# elsif module_type.to_s.eql?("test_module")
|
33
|
-
# context_params_for_module = create_context_for_module(module_name, :"test-module")
|
34
|
-
# end
|
35
43
|
end
|
36
44
|
end
|
37
45
|
end
|
46
|
+
|
38
47
|
response
|
39
48
|
end
|
40
49
|
|
50
|
+
# clone base module version
|
51
|
+
def clone_base_aux(module_type, module_id, full_module_name)
|
52
|
+
base_module_location = OsUtil.module_location(module_type, full_module_name, nil)
|
53
|
+
unless File.directory?(base_module_location)
|
54
|
+
clone_aux(module_type, module_id, nil, true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
41
58
|
def create_context_for_module(full_module_name, module_type)
|
42
59
|
context_params_for_module = DTK::Shell::ContextParams.new
|
43
60
|
context_params_for_module.add_context_to_params(full_module_name, module_type.to_s.gsub!(/\_/,'-').to_sym, full_module_name)
|
@@ -1,26 +1,32 @@
|
|
1
1
|
module DTK::Client
|
2
2
|
module CommonMixin
|
3
3
|
private
|
4
|
-
# returns module_name,module_namespace,repo_url,branch,not_ok_response( only if error)
|
4
|
+
# returns module_name, module_namespace, repo_url, branch, not_ok_response( only if error)
|
5
5
|
def workspace_branch_info(module_type, module_id, version, opts={})
|
6
6
|
# shortcut if have info about workspace branch already
|
7
7
|
if info = opts[:workspace_branch_info]
|
8
8
|
name_or_full_module_name = info[:module_name]
|
9
|
-
module_namespace,module_name = ModuleUtil.full_module_name_parts?(name_or_full_module_name)
|
9
|
+
module_namespace, module_name = ModuleUtil.full_module_name_parts?(name_or_full_module_name)
|
10
10
|
module_namespace ||= info[:module_namespace]
|
11
|
-
ret = [module_name,module_namespace,info[:repo_url],info[:branch]]
|
11
|
+
ret = [module_name, module_namespace, info[:repo_url], info[:branch]]
|
12
12
|
unless ret.find{|r|r.nil?}
|
13
13
|
return ret
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
# if 'base' returned as version set to nil; 'base' = 'master' = nil
|
18
|
+
version = nil if version == 'base'
|
19
|
+
|
20
|
+
post_body = get_workspace_branch_info_post_body(module_type, module_id, version, opts)
|
18
21
|
response = post(rest_url("#{module_type}/get_workspace_branch_info"),post_body)
|
19
22
|
unless response.ok?
|
20
|
-
[nil,nil,nil,nil,response]
|
23
|
+
ret = [nil, nil, nil, nil, response, nil]
|
21
24
|
else
|
22
|
-
response.data(:module_name
|
25
|
+
m_name, m_namespace, repo_url, w_branch, version = response.data(:module_name, :module_namespace, :repo_url, :workspace_branch, :version)
|
26
|
+
ret = [m_name, m_namespace, repo_url, w_branch, nil]
|
27
|
+
ret << version if opts[:use_latest]
|
23
28
|
end
|
29
|
+
ret
|
24
30
|
end
|
25
31
|
|
26
32
|
def get_workspace_branch_info_post_body(module_type, module_id, version_explicit, opts={})
|
@@ -35,6 +41,9 @@ module DTK::Client
|
|
35
41
|
if assembly_module
|
36
42
|
post_body.merge!(:assembly_module => true,:assembly_name => assembly_module[:assembly_name])
|
37
43
|
end
|
44
|
+
if use_latest = opts[:use_latest]
|
45
|
+
post_body.merge!(:use_latest => use_latest)
|
46
|
+
end
|
38
47
|
post_body
|
39
48
|
end
|
40
49
|
|
@@ -2,7 +2,7 @@ dtk_require('common_base')
|
|
2
2
|
module DTK; module Client; module Commands::Common
|
3
3
|
class CreateTarget < Base
|
4
4
|
# option_list is of form [:provider!, :region, :keypair, :security_group!] indcating what is optional and what is required
|
5
|
-
def execute(type,option_list)
|
5
|
+
def execute(type, option_list)
|
6
6
|
# we use :target_id but that will return provider_id (another name for target template ID)
|
7
7
|
target_name = retrieve_arguments([:option_1])
|
8
8
|
iaas_properties = iaas_properties(type,option_list)
|
@@ -12,12 +12,15 @@ module DTK; module Client; module Commands::Common
|
|
12
12
|
:provider_id => provider,
|
13
13
|
:iaas_properties => iaas_properties
|
14
14
|
}
|
15
|
-
|
15
|
+
|
16
|
+
# cleanup for target name not being sterilazied correctly
|
17
|
+
post_body.merge!(:target_name => target_name.split(' ').first) if target_name
|
18
|
+
|
16
19
|
post 'target/create', post_body
|
17
20
|
end
|
18
21
|
|
19
22
|
private
|
20
|
-
def iaas_properties(type,option_list)
|
23
|
+
def iaas_properties(type, option_list)
|
21
24
|
iaas_properties = retrieve_option_hash(option_list)
|
22
25
|
special_processing_security_groups!(iaas_properties)
|
23
26
|
special_processing_region!(iaas_properties)
|
@@ -32,12 +35,12 @@ module DTK; module Client; module Commands::Common
|
|
32
35
|
end
|
33
36
|
|
34
37
|
def special_processing_security_groups!(iaas_properties)
|
35
|
-
if security_group = iaas_properties[:security_group]
|
38
|
+
if security_group = iaas_properties[:security_group]
|
36
39
|
if security_group.end_with?(',')
|
37
40
|
raise DtkValidationError.new("Multiple security groups should be separated with ',' and without spaces between them (e.g. --security_groups gr1,gr2,gr3,...) ")
|
38
41
|
end
|
39
42
|
security_groups = security_group.split(',')
|
40
|
-
|
43
|
+
|
41
44
|
unless security_groups.empty? || security_groups.size==1
|
42
45
|
iaas_properties.delete(:security_group)
|
43
46
|
iaas_properties.merge!(:security_group_set => security_groups)
|
@@ -95,7 +95,9 @@ module DTK::Client
|
|
95
95
|
|
96
96
|
internal_trigger=true
|
97
97
|
reparse_aux(module_location)
|
98
|
-
|
98
|
+
|
99
|
+
# use_impl_id - if edit-component-module which has version use impl_id from assembly--<assembly_name> version of component instance
|
100
|
+
opts.merge!(:force_parse => true, :update_from_includes => true, :print_dependencies => true, :use_impl_id => true)
|
99
101
|
response = push_clone_changes_aux(module_type,module_id,version,commit_msg,internal_trigger,opts)
|
100
102
|
|
101
103
|
# if error return
|
@@ -101,25 +101,52 @@ module DTK::Client
|
|
101
101
|
module_type = get_module_type(context_params)
|
102
102
|
|
103
103
|
unless (options.force? || method_opts[:force_delete])
|
104
|
-
|
104
|
+
msg = "Are you sure you want to delete module '#{module_name}'"
|
105
|
+
msg += " version '#{version}'" if version
|
106
|
+
is_go = Console.confirmation_prompt("#{msg}"+"?")
|
105
107
|
return nil unless is_go
|
106
108
|
end
|
107
109
|
|
108
|
-
post_body = {
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
110
|
+
post_body = { "#{module_type}_id".to_sym => module_id }
|
111
|
+
opts = { :module_name => module_name }
|
112
|
+
|
113
|
+
unless version
|
114
|
+
post_body.merge!(:include_base => true)
|
113
115
|
|
114
|
-
|
116
|
+
versions_response = post rest_url("#{module_type}/list_versions"), post_body
|
117
|
+
return versions_response unless versions_response.ok?
|
118
|
+
|
119
|
+
versions = versions_response.data.first['versions']
|
120
|
+
if versions.size > 2
|
121
|
+
versions << "all"
|
122
|
+
ret_version = Console.confirmation_prompt_multiple_choice("\nSelect version to delete:", versions)
|
123
|
+
return unless ret_version
|
124
|
+
raise DtkError, "You are not allowed to delete 'base' version while other versions exist!" if ret_version.eql?('base')
|
125
|
+
version = ret_version
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
if version
|
130
|
+
if version.eql?('all')
|
131
|
+
post_body.merge!(:delete_all_versions => true)
|
132
|
+
opts.merge!(:delete_all_versions => true)
|
133
|
+
else
|
134
|
+
post_body.merge!(:version => version)
|
135
|
+
opts.merge!(:version => version)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
response = post(rest_url("#{module_type}/delete"), post_body)
|
115
140
|
return response unless response.ok?
|
116
141
|
|
142
|
+
# if we do not provide version, server will calculate the latest version which we can use here
|
143
|
+
unless version
|
144
|
+
version = response.data(:version)
|
145
|
+
opts.merge!(:version => version)
|
146
|
+
end
|
147
|
+
|
117
148
|
response =
|
118
149
|
if options.purge? || method_opts[:purge]
|
119
|
-
opts = {:module_name => module_name}
|
120
|
-
if version then opts.merge!(:version => version)
|
121
|
-
else opts.merge!(:delete_all_versions => true)
|
122
|
-
end
|
123
150
|
purge_clone_aux(module_type.to_sym, opts)
|
124
151
|
else
|
125
152
|
Helper(:git_repo).unlink_local_clone?(module_type.to_sym, module_name, version)
|
@@ -128,10 +155,14 @@ module DTK::Client
|
|
128
155
|
return response unless response.ok?
|
129
156
|
|
130
157
|
unless method_opts[:no_error_msg]
|
131
|
-
|
132
|
-
|
133
|
-
else
|
134
|
-
|
158
|
+
if version && version.eql?('all')
|
159
|
+
OsUtil.print("All versions of '#{module_name}' module have been deleted.", :yellow)
|
160
|
+
else
|
161
|
+
msg = "Module '#{module_name}' "
|
162
|
+
if version then msg << "version '#{version}' has been deleted successfully."
|
163
|
+
else msg << "has been deleted successfully."; end
|
164
|
+
OsUtil.print(msg, :yellow)
|
165
|
+
end
|
135
166
|
end
|
136
167
|
|
137
168
|
Response::Ok.new()
|
@@ -204,15 +235,27 @@ module DTK::Client
|
|
204
235
|
CommonModule::Import.new(self, context_params).from_file()
|
205
236
|
end
|
206
237
|
|
207
|
-
def install_module_aux(context_params)
|
238
|
+
def install_module_aux(context_params, internal_trigger = false)
|
208
239
|
create_missing_clone_dirs()
|
209
240
|
resolve_direct_access(::DTK::Client::Configurator.check_direct_access)
|
241
|
+
|
210
242
|
remote_module_name, version = context_params.retrieve_arguments([:option_1!, :option_2], method_argument_names)
|
243
|
+
forwarded_version = context_params.get_forwarded_options()['version']
|
244
|
+
add_version = false
|
245
|
+
|
246
|
+
version ||= forwarded_version || options.version
|
247
|
+
version = nil if version.eql?('master')
|
248
|
+
if version
|
249
|
+
check_version_format(version)
|
250
|
+
add_version = true
|
251
|
+
end
|
252
|
+
|
211
253
|
# in case of auto-import via service import, we skip cloning to speed up a process
|
212
|
-
skip_cloning
|
213
|
-
do_not_raise
|
254
|
+
skip_cloning = context_params.get_forwarded_options()['skip_cloning'] if context_params.get_forwarded_options()
|
255
|
+
do_not_raise = context_params.get_forwarded_options()[:do_not_raise] if context_params.get_forwarded_options()
|
214
256
|
skip_ainstall = context_params.get_forwarded_options() ? context_params.get_forwarded_options()[:skip_auto_install] : false
|
215
|
-
|
257
|
+
skip_base = context_params.get_forwarded_options()['skip_base']
|
258
|
+
module_type = get_module_type(context_params)
|
216
259
|
|
217
260
|
# ignore_component_error = context_params.get_forwarded_options()[:ignore_component_error]||options.ignore? if context_params.get_forwarded_options()
|
218
261
|
ignore_component_error = context_params.get_forwarded_options().empty? ? options.ignore? : context_params.get_forwarded_options()[:ignore_component_error]
|
@@ -220,13 +263,6 @@ module DTK::Client
|
|
220
263
|
|
221
264
|
remote_namespace, local_module_name = get_namespace_and_name(remote_module_name, ':')
|
222
265
|
|
223
|
-
if clone_dir = Helper(:git_repo).local_clone_dir_exists?(module_type.to_sym, local_module_name, :namespace => remote_namespace, :version => version)
|
224
|
-
message = "Module's directory (#{clone_dir}) exists on client. To install this needs to be renamed or removed."
|
225
|
-
# message += '. To ignore this conflict and use existing component module please use -i switch (install REMOTE-SERVICE-NAME -i).' if additional_message
|
226
|
-
|
227
|
-
raise DtkError, message unless ignore_component_error
|
228
|
-
end
|
229
|
-
|
230
266
|
post_body = {
|
231
267
|
:remote_module_name => remote_module_name.sub(':', '/'),
|
232
268
|
:local_module_name => local_module_name,
|
@@ -237,15 +273,42 @@ module DTK::Client
|
|
237
273
|
post_body.merge!(:additional_message => additional_message) if additional_message
|
238
274
|
post_body.merge!(:skip_auto_install => skip_ainstall) if skip_ainstall
|
239
275
|
|
276
|
+
# we need to install base module version if not installed
|
277
|
+
unless skip_base
|
278
|
+
master_response = install_base_version_aux?(context_params, post_body, module_type, version)
|
279
|
+
return master_response unless master_response.ok?
|
280
|
+
|
281
|
+
latest_version = master_response.data(:latest_version)
|
282
|
+
|
283
|
+
unless version
|
284
|
+
version = latest_version.eql?('master') ? nil : latest_version
|
285
|
+
end
|
286
|
+
|
287
|
+
post_body.merge!(:hard_reset_on_pull_version => true) if version
|
288
|
+
end
|
289
|
+
|
290
|
+
if version
|
291
|
+
add_version = true
|
292
|
+
post_body.merge!(:version => version)
|
293
|
+
end
|
294
|
+
|
295
|
+
if clone_dir = Helper(:git_repo).local_clone_dir_exists?(module_type.to_sym, local_module_name, :namespace => remote_namespace, :version => version)
|
296
|
+
message = "Module's directory (#{clone_dir}) exists on client. To install this needs to be renamed or removed."
|
297
|
+
raise DtkError, message unless ignore_component_error
|
298
|
+
end
|
299
|
+
|
240
300
|
response = post rest_url("#{module_type}/import"), post_body
|
241
301
|
|
242
|
-
#
|
243
|
-
|
244
|
-
|
302
|
+
# when silently installing base version we don't want to print anything
|
303
|
+
unless skip_base
|
304
|
+
# print permission warnings and then check for other warnings
|
305
|
+
are_there_warnings = RemoteDependencyUtil.check_permission_warnings(response)
|
306
|
+
are_there_warnings ||= RemoteDependencyUtil.print_dependency_warnings(response, nil, :ignore_permission_warnings => true)
|
245
307
|
|
246
|
-
|
247
|
-
|
248
|
-
|
308
|
+
# prompt to see if user is ready to continue with warnings/errors
|
309
|
+
if are_there_warnings
|
310
|
+
return false unless Console.confirmation_prompt('Do you still want to proceed with import' + '?')
|
311
|
+
end
|
249
312
|
end
|
250
313
|
|
251
314
|
# case when we need to import additional components
|
@@ -254,17 +317,19 @@ module DTK::Client
|
|
254
317
|
opts = { :do_not_raise => true }
|
255
318
|
module_opts = ignore_component_error ? opts.merge(:ignore_component_error => true) : opts.merge(:additional_message => true)
|
256
319
|
module_opts.merge!(:update_none => true) if options.update_none?
|
320
|
+
module_opts.merge!(:hide_output => true) if skip_base
|
257
321
|
|
258
322
|
continue = trigger_module_auto_import(missing_components, required_components, module_opts)
|
259
323
|
return unless continue
|
260
324
|
|
261
|
-
|
325
|
+
print_remote_name = add_version ? "#{remote_module_name}(#{version})" : remote_module_name
|
326
|
+
print "Resuming DTK Network import for #{module_type} '#{print_remote_name}' ..." unless skip_base
|
262
327
|
# repeat import call for service
|
263
328
|
post_body.merge!(opts)
|
264
329
|
response = post rest_url("#{module_type}/import"), post_body
|
265
330
|
|
266
331
|
# we set skip cloning since it is already done by import
|
267
|
-
puts ' Done'
|
332
|
+
puts ' Done' unless skip_base
|
268
333
|
end
|
269
334
|
|
270
335
|
return response if !response.ok? || response.data(:does_not_exist)
|
@@ -284,51 +349,189 @@ module DTK::Client
|
|
284
349
|
response
|
285
350
|
end
|
286
351
|
|
352
|
+
def install_base_version_aux?(context_params, post_body, module_type, version)
|
353
|
+
master_response = post rest_url("#{module_type}/prepare_for_install_module"), post_body
|
354
|
+
return master_response unless master_response.ok?
|
355
|
+
|
356
|
+
head_installed = master_response.data(:head_installed)
|
357
|
+
latest_version = master_response.data(:latest_version)
|
358
|
+
remote_module_name = context_params.retrieve_arguments([:option_1!], method_argument_names)
|
359
|
+
|
360
|
+
if version
|
361
|
+
versions = master_response.data(:versions)
|
362
|
+
raise DtkError, "Module '#{remote_module_name}' version '#{version}' does not exist on repo manager!" unless versions.include?(version)
|
363
|
+
end
|
364
|
+
|
365
|
+
if !head_installed && !latest_version.eql?('master')
|
366
|
+
new_context_params = DTK::Shell::ContextParams.new
|
367
|
+
new_context_params.add_context_to_params(module_type, module_type)
|
368
|
+
new_context_params.method_arguments = [remote_module_name]
|
369
|
+
new_context_params.forward_options('skip_base' => true, 'version' => 'master')
|
370
|
+
install_module_aux(new_context_params)
|
371
|
+
end
|
372
|
+
|
373
|
+
master_response
|
374
|
+
end
|
375
|
+
|
287
376
|
def delete_from_catalog_aux(context_params)
|
288
377
|
module_type = get_module_type(context_params)
|
289
378
|
remote_module_name = context_params.retrieve_arguments([:option_1!], method_argument_names)
|
379
|
+
version = options.version
|
380
|
+
rsa_pub_key = SSHUtil.rsa_pub_key_content()
|
290
381
|
|
291
382
|
# remote_module_name can be namespace:name or namespace/name
|
292
383
|
remote_namespace, remote_module_name = get_namespace_and_name(remote_module_name, ':')
|
293
384
|
|
385
|
+
if version
|
386
|
+
check_version_format(version)
|
387
|
+
else
|
388
|
+
list_post_body = {
|
389
|
+
"#{module_type}_id".to_sym => "#{remote_namespace}:#{remote_module_name}",
|
390
|
+
:rsa_pub_key => rsa_pub_key,
|
391
|
+
:include_base => true
|
392
|
+
}
|
393
|
+
# versions_response = post rest_url("#{module_type}/list_remote_versions"), list_post_body
|
394
|
+
versions_response = post rest_url("#{module_type}/list_remote"), list_post_body
|
395
|
+
return versions_response unless versions_response.ok?
|
396
|
+
|
397
|
+
selected_module = versions_response.data.find{ |vr| vr['display_name'].eql?("#{remote_namespace}/#{remote_module_name}") }
|
398
|
+
raise DtkError, "Module '#{remote_namespace}/#{remote_module_name}'' does not exist on repo manager!" unless selected_module
|
399
|
+
|
400
|
+
versions = selected_module['versions']
|
401
|
+
if versions.size > 2
|
402
|
+
versions << "all"
|
403
|
+
ret_version = Console.confirmation_prompt_multiple_choice("\nSelect version to delete:", versions)
|
404
|
+
return unless ret_version
|
405
|
+
raise DtkError, "You are not allowed to delete 'base' version while other versions exist!" if ret_version.eql?('base')
|
406
|
+
version = ret_version
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
294
410
|
unless options.force? || options.confirmed?
|
295
|
-
|
411
|
+
msg = "Are you sure you want to delete remote #{module_type} '#{remote_namespace.nil? ? '' : remote_namespace + '/'}#{remote_module_name}'"
|
412
|
+
msg += " version '#{version}'" if version
|
413
|
+
msg += " and all items contained in it"
|
414
|
+
return unless Console.confirmation_prompt(msg + '?')
|
296
415
|
end
|
297
416
|
|
298
417
|
post_body = {
|
299
|
-
:rsa_pub_key =>
|
418
|
+
:rsa_pub_key => rsa_pub_key,
|
300
419
|
:remote_module_name => remote_module_name,
|
301
420
|
:remote_module_namespace => remote_namespace,
|
302
421
|
:force_delete => options.force?
|
303
422
|
}
|
423
|
+
post_body.merge!(:version => version) if version
|
424
|
+
|
425
|
+
response = post rest_url("#{module_type}/delete_remote"), post_body
|
426
|
+
return response unless response.ok?
|
304
427
|
|
305
|
-
|
428
|
+
full_module_name, version = response.data(:module_full_name, :version)
|
429
|
+
msg = "Module '#{full_module_name}' "
|
430
|
+
msg << "version '#{version}'" if version && !version.eql?('master')
|
431
|
+
msg << " has been deleted successfully."
|
432
|
+
OsUtil.print(msg, :yellow)
|
433
|
+
|
434
|
+
Response::Ok.new()
|
306
435
|
end
|
307
436
|
|
308
437
|
def publish_module_aux(context_params)
|
309
|
-
module_type
|
310
|
-
module_id, input_remote_name = context_params.retrieve_arguments([REQ_MODULE_ID, :option_1], method_argument_names)
|
438
|
+
module_type = get_module_type(context_params)
|
439
|
+
module_id, module_name, input_remote_name = context_params.retrieve_arguments([REQ_MODULE_ID, REQ_MODULE_NAME, :option_1!], method_argument_names)
|
440
|
+
|
441
|
+
raise DtkValidationError, "You have to provide version you want to publish!" unless options.version
|
442
|
+
|
443
|
+
skip_base = context_params.get_forwarded_options()['skip_base']
|
444
|
+
forwarded_version = context_params.get_forwarded_options()['version']
|
445
|
+
|
446
|
+
version = forwarded_version||options.version
|
447
|
+
version = nil if version.eql?('master')
|
448
|
+
|
449
|
+
forward_namespace?(module_name, input_remote_name, context_params)
|
311
450
|
|
312
451
|
post_body = {
|
313
452
|
"#{module_type}_id".to_sym => module_id,
|
314
453
|
:remote_component_name => input_remote_name,
|
315
|
-
:rsa_pub_key => SSHUtil.rsa_pub_key_content()
|
454
|
+
:rsa_pub_key => SSHUtil.rsa_pub_key_content(),
|
316
455
|
}
|
317
456
|
|
457
|
+
unless skip_base
|
458
|
+
check_response = post rest_url("#{module_type}/check_remote_exist"), post_body
|
459
|
+
return check_response unless check_response.ok?
|
460
|
+
|
461
|
+
remote_exist = check_response.data(:remote_exist)
|
462
|
+
unless remote_exist
|
463
|
+
context_params.forward_options('skip_base' => true, 'version' => 'master')
|
464
|
+
resp = publish_module_aux(context_params)
|
465
|
+
return resp unless resp.ok?
|
466
|
+
end
|
467
|
+
|
468
|
+
context_params.forward_options('do_not_raise_if_exist' => true, 'version' => version)
|
469
|
+
create_response = create_new_version_aux(context_params, true)
|
470
|
+
return create_response unless create_response.ok?
|
471
|
+
end
|
472
|
+
|
473
|
+
post_body.merge!(:version => version) if version
|
318
474
|
response = post rest_url("#{module_type}/export"), post_body
|
319
475
|
return response unless response.ok?
|
320
476
|
|
321
|
-
|
477
|
+
unless skip_base
|
478
|
+
full_module_name = "#{response.data['remote_repo_namespace']}/#{response.data['remote_repo_name']}"
|
479
|
+
DTK::Client::RemoteDependencyUtil.print_dependency_warnings(response, "Module has been successfully published to '#{full_module_name}' version '#{version}'!")
|
480
|
+
end
|
322
481
|
|
323
|
-
DTK::Client::RemoteDependencyUtil.print_dependency_warnings(response, "Module has been successfully published to '#{full_module_name}'!")
|
324
482
|
Response::Ok.new()
|
325
483
|
end
|
326
484
|
|
485
|
+
# def publish_module_aux(context_params)
|
486
|
+
# module_type = get_module_type(context_params)
|
487
|
+
# module_id, module_name, input_remote_name = context_params.retrieve_arguments([REQ_MODULE_ID, REQ_MODULE_NAME, :option_1], method_argument_names)
|
488
|
+
|
489
|
+
# post_body = {
|
490
|
+
# "#{module_type}_id".to_sym => module_id,
|
491
|
+
# :remote_component_name => input_remote_name,
|
492
|
+
# :rsa_pub_key => SSHUtil.rsa_pub_key_content()
|
493
|
+
# }
|
494
|
+
# if options.version?
|
495
|
+
# post_body.merge!(:version => options.version)
|
496
|
+
# else
|
497
|
+
# post_body.merge!(:use_latest => true)
|
498
|
+
# end
|
499
|
+
|
500
|
+
# # check if module exist on repo manager and use it to decide if need to push or publish
|
501
|
+
# check_response = post rest_url("#{module_type}/check_remote_exist"), post_body
|
502
|
+
# return check_response unless check_response.ok?
|
503
|
+
|
504
|
+
# unless options.version?
|
505
|
+
# version = check_response.data(:version)
|
506
|
+
# context_params.forward_options('version' => version)
|
507
|
+
# post_body.merge!(:version => version)
|
508
|
+
# end
|
509
|
+
|
510
|
+
# # if remote module exist and user call 'publish' we do push-dtkn else we publish it as new module
|
511
|
+
# response_data = check_response['data']
|
512
|
+
# if response_data["remote_exist"]
|
513
|
+
# raise DtkValidationError, "You are not allowed to update #{module_type} versions!" if response_data['frozen']
|
514
|
+
|
515
|
+
# # if do publish namespace2/module from namespace1/module, forward namespace as option to be used in push_dtkn_module_aux
|
516
|
+
# forward_namespace?(module_name, input_remote_name, context_params)
|
517
|
+
|
518
|
+
# push_dtkn_module_aux(context_params, true)
|
519
|
+
# else
|
520
|
+
# response = post rest_url("#{module_type}/export"), post_body
|
521
|
+
# return response unless response.ok?
|
522
|
+
|
523
|
+
# full_module_name = "#{response.data['remote_repo_namespace']}/#{response.data['remote_repo_name']}"
|
524
|
+
|
525
|
+
# DTK::Client::RemoteDependencyUtil.print_dependency_warnings(response, "Module has been successfully published to '#{full_module_name}'!")
|
526
|
+
# Response::Ok.new()
|
527
|
+
# end
|
528
|
+
# end
|
529
|
+
|
327
530
|
def pull_dtkn_aux(context_params)
|
328
531
|
module_id, module_name = context_params.retrieve_arguments([REQ_MODULE_ID,REQ_MODULE_NAME,:option_1],method_argument_names)
|
329
532
|
|
330
533
|
catalog = 'dtkn'
|
331
|
-
version = options.version
|
534
|
+
version = options.version||context_params.get_forwarded_options()[:version]
|
332
535
|
module_type = get_module_type(context_params)
|
333
536
|
skip_recursive_pull = context_params.get_forwarded_options()[:skip_recursive_pull]
|
334
537
|
ignore_dependency_merge_conflict = context_params.get_forwarded_options()[:skip_recursive_pull]
|
@@ -391,18 +594,14 @@ module DTK::Client
|
|
391
594
|
response
|
392
595
|
end
|
393
596
|
|
394
|
-
def clone_module_aux(context_params, internal_trigger=false)
|
597
|
+
def clone_module_aux(context_params, internal_trigger = false)
|
395
598
|
module_type = get_module_type(context_params)
|
396
599
|
thor_options = context_params.get_forwarded_options() || options
|
397
600
|
module_id = context_params.retrieve_arguments([REQ_MODULE_ID], method_argument_names)
|
398
601
|
module_name = context_params.retrieve_arguments(["#{module_type}_name".to_sym],method_argument_names)
|
399
|
-
version = thor_options["version"]
|
602
|
+
version = thor_options["version"]||options.version
|
400
603
|
internal_trigger = true if thor_options['skip_edit']
|
401
|
-
|
402
|
-
module_location = OsUtil.module_location(module_type, module_name, version)
|
403
|
-
|
404
|
-
raise DTK::Client::DtkValidationError, "#{module_type.gsub('_',' ').capitalize} '#{module_name}#{version && "-#{version}"}' already cloned!" if File.directory?(module_location)
|
405
|
-
clone_aux(module_type.to_sym, module_id, version, internal_trigger, thor_options['omit_output'])
|
604
|
+
clone_aux(module_type.to_sym, module_id, version, internal_trigger, thor_options['omit_output'], :use_latest => true)
|
406
605
|
end
|
407
606
|
|
408
607
|
def edit_module_aux(context_params)
|
@@ -478,7 +677,7 @@ module DTK::Client
|
|
478
677
|
def push_dtkn_module_aux(context_params, internal_trigger=false)
|
479
678
|
module_id, module_name = context_params.retrieve_arguments([REQ_MODULE_ID, REQ_MODULE_NAME],method_argument_names)
|
480
679
|
catalog = 'dtkn'
|
481
|
-
version = options["version"]
|
680
|
+
version = options["version"]||context_params.get_forwarded_thor_option('version')
|
482
681
|
module_type = get_module_type(context_params)
|
483
682
|
|
484
683
|
raise DtkValidationError, "You have to provide valid catalog to push changes to! Valid catalogs: #{PushCatalogs}" unless catalog
|
@@ -489,7 +688,8 @@ module DTK::Client
|
|
489
688
|
|
490
689
|
if catalog.to_s.eql?("dtkn")
|
491
690
|
module_refs_content = RemoteDependencyUtil.module_ref_content(module_location)
|
492
|
-
|
691
|
+
options_namespace = options["namespace"]||context_params.get_forwarded_thor_option('namespace')
|
692
|
+
remote_module_info = get_remote_module_info_aux(module_type.to_sym, module_id, options_namespace, version, module_refs_content, local_namespace)
|
493
693
|
return remote_module_info unless remote_module_info.ok?
|
494
694
|
|
495
695
|
unless File.directory?(module_location)
|
@@ -542,6 +742,29 @@ module DTK::Client
|
|
542
742
|
list_remote_diffs_aux(module_type.to_sym, module_id)
|
543
743
|
end
|
544
744
|
|
745
|
+
def list_versions_aux(context_params)
|
746
|
+
module_type = get_module_type(context_params)
|
747
|
+
module_id = context_params.retrieve_arguments([REQ_MODULE_ID], method_argument_names)
|
748
|
+
include_base = context_params.get_forwarded_options()['include_base']
|
749
|
+
|
750
|
+
post_body = { "#{module_type}_id".to_sym => module_id }
|
751
|
+
post_body.merge!(:include_base => include_base) if include_base
|
752
|
+
|
753
|
+
response = post rest_url("#{module_type}/list_versions"), post_body
|
754
|
+
end
|
755
|
+
|
756
|
+
def list_remote_versions_aux(context_params)
|
757
|
+
module_type = get_module_type(context_params)
|
758
|
+
module_id = context_params.retrieve_arguments([REQ_MODULE_ID], method_argument_names)
|
759
|
+
|
760
|
+
post_body = {
|
761
|
+
"#{module_type}_id".to_sym => module_id,
|
762
|
+
:rsa_pub_key => SSHUtil.rsa_pub_key_content()
|
763
|
+
}
|
764
|
+
|
765
|
+
response = post rest_url("#{module_type}/list_remote_versions"), post_body
|
766
|
+
end
|
767
|
+
|
545
768
|
def delete_assembly_aux(context_params)
|
546
769
|
module_type = get_module_type(context_params)
|
547
770
|
|
@@ -638,8 +861,99 @@ module DTK::Client
|
|
638
861
|
Response::Ok.new()
|
639
862
|
end
|
640
863
|
|
864
|
+
def create_new_version_aux(context_params, internal_trigger = false)
|
865
|
+
module_type = get_module_type(context_params)
|
866
|
+
module_id, version = context_params.retrieve_arguments([REQ_MODULE_ID, :option_1!], method_argument_names)
|
867
|
+
|
868
|
+
version = (context_params.get_forwarded_options()['version'] || options.version) if internal_trigger
|
869
|
+
|
870
|
+
module_name = context_params.retrieve_arguments(["#{module_type}_name".to_sym],method_argument_names)
|
871
|
+
namespace, name = get_namespace_and_name(module_name,':')
|
872
|
+
do_not_raise_if_exist = context_params.get_forwarded_options()['do_not_raise_if_exist']
|
873
|
+
|
874
|
+
module_location = OsUtil.module_location(module_type, module_name, nil)
|
875
|
+
unless File.directory?(module_location)
|
876
|
+
if Console.confirmation_prompt("Module '#{module_name}' has not been cloned. Would you like to clone module now"+'?')
|
877
|
+
response = clone_aux(module_type.to_sym, module_id, nil, true)
|
878
|
+
return response unless response.ok?
|
879
|
+
end
|
880
|
+
end
|
881
|
+
|
882
|
+
opts = {:do_not_raise_if_exist => do_not_raise_if_exist} if do_not_raise_if_exist
|
883
|
+
m_name, m_namespace, repo_url, branch, not_ok_response = workspace_branch_info(module_type, module_id, nil)
|
884
|
+
resp = Helper(:git_repo).create_new_version(module_type, branch, name, namespace, version, repo_url, opts||{})
|
885
|
+
|
886
|
+
post_body = get_workspace_branch_info_post_body(module_type, module_id, version)
|
887
|
+
post_body.merge!(:do_not_raise_if_exist => do_not_raise_if_exist) if do_not_raise_if_exist
|
888
|
+
create_response = post(rest_url("#{module_type}/create_new_version"), post_body)
|
889
|
+
|
890
|
+
unless create_response.ok?
|
891
|
+
FileUtils.rm_rf("#{resp['module_directory']}") unless resp['exist_already']
|
892
|
+
return create_response
|
893
|
+
end
|
894
|
+
|
895
|
+
if version_exist = create_response.data(:version_exist)
|
896
|
+
return create_response if do_not_raise_if_exist
|
897
|
+
end
|
898
|
+
|
899
|
+
if error = create_response.data(:dsl_parse_error)
|
900
|
+
dsl_parsed_message = ServiceImporter.error_message(module_name, error)
|
901
|
+
DTK::Client::OsUtil.print(dsl_parsed_message, :red)
|
902
|
+
end
|
903
|
+
|
904
|
+
if external_dependencies = create_response.data(:external_dependencies)
|
905
|
+
print_dependencies(external_dependencies)
|
906
|
+
end
|
907
|
+
|
908
|
+
if component_module_refs = create_response.data(:component_module_refs)
|
909
|
+
print_using_dependencies(component_module_refs)
|
910
|
+
end
|
911
|
+
|
912
|
+
Response::Ok.new()
|
913
|
+
end
|
914
|
+
|
641
915
|
def print_ambiguous(ambiguous)
|
642
916
|
end
|
643
917
|
|
918
|
+
def forward_namespace?(module_name, input_remote_name, context_params)
|
919
|
+
return unless input_remote_name
|
920
|
+
local_namespace, local_name = get_namespace_and_name(module_name,':')
|
921
|
+
remote_namespace, remote_name = get_namespace_and_name(input_remote_name,'/')
|
922
|
+
context_params.forward_options('namespace' => remote_namespace) unless local_namespace.eql?(remote_namespace)
|
923
|
+
end
|
924
|
+
|
925
|
+
def print_dependencies(dependencies)
|
926
|
+
ambiguous = dependencies["ambiguous"]||[]
|
927
|
+
amb_sorted = ambiguous.map { |k,v| "#{k.split('/').last} (#{v.join(', ')})" }
|
928
|
+
inconsistent = dependencies["inconsistent"]||[]
|
929
|
+
possibly_missing = dependencies["possibly_missing"]||[]
|
930
|
+
|
931
|
+
OsUtil.print("There are inconsistent module dependencies mentioned in dtk.model.yaml: #{inconsistent.join(', ')}", :red) unless inconsistent.empty?
|
932
|
+
OsUtil.print("There are missing module dependencies mentioned in dtk.model.yaml: #{possibly_missing.join(', ')}", :yellow) unless possibly_missing.empty?
|
933
|
+
OsUtil.print("There are ambiguous module dependencies mentioned in dtk.model.yaml: '#{amb_sorted.join(', ')}'. One of the namespaces should be selected by editing the module_refs file", :yellow) if ambiguous && !ambiguous.empty?
|
934
|
+
end
|
935
|
+
|
936
|
+
def print_using_dependencies(component_refs)
|
937
|
+
unless component_refs.empty?
|
938
|
+
puts 'Using component modules:'
|
939
|
+
names = []
|
940
|
+
component_refs.values.each do |cmp_ref|
|
941
|
+
version = cmp_ref['version_info']
|
942
|
+
name = "#{cmp_ref['namespace_info']}:#{cmp_ref['module_name']}"
|
943
|
+
name << "(#{version})" if version
|
944
|
+
names << name
|
945
|
+
end
|
946
|
+
names.sort.each do |name|
|
947
|
+
puts " #{name}"
|
948
|
+
end
|
949
|
+
end
|
950
|
+
end
|
951
|
+
|
952
|
+
def check_version_format(version)
|
953
|
+
unless version.match(/\A\d{1,2}\.\d{1,2}\.\d{1,2}\Z/)
|
954
|
+
raise DtkValidationError, "Version has an illegal value '#{version}', format needed: '##.##.##'"
|
955
|
+
end
|
956
|
+
end
|
957
|
+
|
644
958
|
end
|
645
959
|
end
|