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