dtk-client 0.11.7 → 0.11.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 +4 -4
- data/.gitignore +2 -2
- data/dtk-client.gemspec +2 -2
- data/lib/cli/command/account/add_to_group.rb +33 -0
- data/lib/cli/command/account/chmod.rb +33 -0
- data/lib/cli/command/account/create_namespace.rb +32 -0
- data/lib/cli/command/account/delete_namespace.rb +32 -0
- data/lib/cli/command/account/list_namespaces.rb +30 -0
- data/lib/cli/command/account/remove_from_group.rb +33 -0
- data/lib/cli/command/account.rb +14 -1
- data/lib/cli/command/module/delete_from_remote.rb +5 -3
- data/lib/cli/command/module/install.rb +242 -102
- data/lib/cli/command/module/list_remotes.rb +1 -1
- data/lib/cli/command/module/publish.rb +3 -2
- data/lib/cli/command/module/pull_dtkn.rb +2 -2
- data/lib/cli/command/module/push.rb +2 -1
- data/lib/cli/command/module/push_dtkn.rb +3 -2
- data/lib/cli/command/module/unpublish.rb +42 -0
- data/lib/cli/command/module/update.rb +33 -0
- data/lib/cli/command/module.rb +3 -1
- data/lib/cli/command/token.rb +9 -3
- data/lib/cli/context.rb +7 -5
- data/lib/cli/directory_parser/file_system.rb +76 -36
- data/lib/cli/processor/plugin/gli.rb +2 -0
- data/lib/cli/version.rb +1 -1
- data/lib/client/error/subclasses.rb +12 -0
- data/lib/client/git_repo/adapter/git_gem.rb +3 -1
- data/lib/client/operation/account/add_to_group.rb +29 -0
- data/lib/client/operation/account/chmod.rb +29 -0
- data/lib/client/operation/account/create_namespace.rb +29 -0
- data/lib/client/operation/account/delete_namespace.rb +29 -0
- data/lib/client/operation/account/list_namespaces.rb +29 -0
- data/lib/client/operation/account/remove_from_group.rb +29 -0
- data/lib/client/operation/account.rb +14 -1
- data/lib/client/operation/client_module_dir/git_repo/internal.rb +4 -22
- data/lib/client/operation/client_module_dir/git_repo.rb +5 -6
- data/lib/client/operation/client_module_dir/service_instance/internal/module_info.rb +67 -0
- data/lib/client/operation/client_module_dir/service_instance/internal.rb +106 -0
- data/lib/client/operation/client_module_dir/service_instance.rb +30 -0
- data/lib/client/operation/client_module_dir.rb +5 -0
- data/lib/client/operation/module/clone_module.rb +2 -2
- data/lib/client/operation/module/delete_from_remote.rb +7 -31
- data/lib/client/operation/module/install/dependent_modules/component_module.rb +1 -2
- data/lib/client/operation/module/install/dependent_modules/local_dependencies.rb +1 -1
- data/lib/client/operation/module/install/print_helper.rb +1 -1
- data/lib/client/operation/module/install.rb +25 -19
- data/lib/client/operation/module/install_from_catalog.rb +15 -29
- data/lib/client/operation/module/list_remotes.rb +4 -11
- data/lib/client/operation/module/publish.rb +17 -31
- data/lib/client/operation/module/pull_dtkn.rb +37 -28
- data/lib/client/operation/module/push.rb +69 -5
- data/lib/client/operation/module/push_dtkn.rb +25 -13
- data/lib/client/operation/module/stage.rb +3 -3
- data/lib/client/operation/module/unpublish.rb +60 -0
- data/lib/client/operation/module/update.rb +59 -0
- data/lib/client/operation/module.rb +23 -9
- data/lib/client/operation/service/clone_service.rb +3 -0
- data/lib/client/operation.rb +7 -0
- metadata +38 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce23832ed682975a0727ee818e047fd5cfd5d381
|
4
|
+
data.tar.gz: b9c6efe83f37a372cd2528f2adc3b7eecc2b5617
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82e0ddd1c3f426bb9f6220754eb82ea4923b6c71be157117b3f7b5c8aa4932dfa70130f8a73cfba955d67e61e2c7dd1a979947980edf383593b8cdccb48f88b2
|
7
|
+
data.tar.gz: c222153161e27520a0da7e28926c83c6ba3a37d51774944efcbcd734b3aedada908954b8940db8e5018c43b0abd12e9b23032b6d115ae4f830c98c3b9a359454
|
data/.gitignore
CHANGED
data/dtk-client.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
|
20
|
-
spec.add_dependency 'dtk-common-core','0.11.
|
20
|
+
spec.add_dependency 'dtk-common-core','0.11.1'
|
21
21
|
spec.add_dependency 'gli', '2.13.4'
|
22
22
|
spec.add_dependency 'highline', '1.7.8'
|
23
23
|
spec.add_dependency 'colorize', '0.7.7'
|
@@ -25,5 +25,5 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency 'hirb', '0.7.3'
|
26
26
|
spec.add_dependency 'mime-types', '~> 2.99.3'
|
27
27
|
spec.add_dependency 'dtk-dsl', '~> 1.1.0'
|
28
|
-
|
28
|
+
spec.add_dependency 'dtk-network-client', '~> 1.0.0'
|
29
29
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
module CLI::Command
|
20
|
+
module Account
|
21
|
+
subcommand_def 'add-to-group' do |c|
|
22
|
+
c.arg Token::Arg.group
|
23
|
+
c.arg Token::Arg.user
|
24
|
+
command_body c, 'add-to-group', 'Add user to specific group' do |sc|
|
25
|
+
sc.action do |_global_options, options, args|
|
26
|
+
Operation::Account.add_to_group(:group => args[0], :user => args[1])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
module CLI::Command
|
20
|
+
module Account
|
21
|
+
subcommand_def 'chmod' do |c|
|
22
|
+
c.arg Token::Arg.namespace
|
23
|
+
c.arg Token::Arg.permissions
|
24
|
+
command_body c, 'chmod', 'Change permissions for specific namespace e.g. ug+rw , user and group get RW permissions' do |sc|
|
25
|
+
sc.action do |_global_options, options, args|
|
26
|
+
Operation::Account.chmod(:namespace => args[0], :permissions => args[1])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
module CLI::Command
|
20
|
+
module Account
|
21
|
+
subcommand_def 'create-namespace' do |c|
|
22
|
+
c.arg Token::Arg.namespace
|
23
|
+
command_body c, 'create-namespace', 'Create new namespace on dtk network' do |sc|
|
24
|
+
sc.action do |_global_options, options, args|
|
25
|
+
Operation::Account.create_namespace(:namespace => args[0])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
module CLI::Command
|
20
|
+
module Account
|
21
|
+
subcommand_def 'delete-namespace' do |c|
|
22
|
+
c.arg Token::Arg.namespace
|
23
|
+
command_body c, 'delete-namespace', 'Delete namespace from dtk network' do |sc|
|
24
|
+
sc.action do |_global_options, options, args|
|
25
|
+
Operation::Account.delete_namespace(:namespace => args[0])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
module CLI::Command
|
20
|
+
module Account
|
21
|
+
subcommand_def 'list-namespaces' do |c|
|
22
|
+
command_body c, 'list-namespaces', 'List namespaces' do |sc|
|
23
|
+
sc.action do |_global_options, options, args|
|
24
|
+
Operation::Account.list_namespaces
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
module CLI::Command
|
20
|
+
module Account
|
21
|
+
subcommand_def 'remove-from-group' do |c|
|
22
|
+
c.arg Token::Arg.group
|
23
|
+
c.arg Token::Arg.user
|
24
|
+
command_body c, 'remove-from-group', 'Remove user from specific group' do |sc|
|
25
|
+
sc.action do |_global_options, options, args|
|
26
|
+
Operation::Account.remove_from_group(:group => args[0], :user => args[1])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/cli/command/account.rb
CHANGED
@@ -21,7 +21,20 @@ module DTK::Client
|
|
21
21
|
module Account
|
22
22
|
include Command::Mixin
|
23
23
|
|
24
|
-
ALL_SUBCOMMANDS = [
|
24
|
+
ALL_SUBCOMMANDS = [
|
25
|
+
'list-ssh-keys',
|
26
|
+
'delete-ssh-key',
|
27
|
+
'add-ssh-key',
|
28
|
+
'set-password',
|
29
|
+
'set-catalog-credentials',
|
30
|
+
'register-catalog-user',
|
31
|
+
'add-to-group',
|
32
|
+
'remove-from-group',
|
33
|
+
'create-namespace',
|
34
|
+
'chmod',
|
35
|
+
'delete-namespace',
|
36
|
+
'list-namespaces'
|
37
|
+
]
|
25
38
|
command_def :desc => 'Subcommands for interacting with current Account'
|
26
39
|
ALL_SUBCOMMANDS.each { |subcommand| require_relative("account/#{subcommand.gsub(/-/,'_')}") }
|
27
40
|
end
|
@@ -21,12 +21,14 @@ module DTK::Client
|
|
21
21
|
subcommand_def 'delete-from-remote' do |c|
|
22
22
|
c.arg Token::Arg.module_name
|
23
23
|
command_body c, 'delete-from-dtkn', 'Delete module from the DTK remote catalog (DTKN)' do |sc|
|
24
|
-
sc.flag Token.version
|
24
|
+
# sc.flag Token.version
|
25
|
+
raise Error::Usage, "Version option is not supported for this command" if ARGV.include?('delete-from-dtkn') && ARGV.include?('-v')
|
26
|
+
|
25
27
|
sc.switch Token.skip_prompt
|
26
28
|
sc.switch Token.force, :desc => 'Force delete'
|
27
|
-
|
29
|
+
|
28
30
|
sc.action do |_global_options, options, args|
|
29
|
-
module_ref = module_ref_object_from_options_or_context?(:module_ref => args[0]
|
31
|
+
module_ref = module_ref_object_from_options_or_context?(:module_ref => args[0])
|
30
32
|
operation_args = {
|
31
33
|
:module_ref => module_ref,
|
32
34
|
:skip_prompt => options[:skip_prompt],
|
@@ -26,134 +26,274 @@ module DTK::Client
|
|
26
26
|
# Add '-d' flag if development mode is active
|
27
27
|
if Config[:development_mode]
|
28
28
|
sc.flag Token.directory_path, :desc => 'Absolute or relative path to directory containing content to install'
|
29
|
+
sc.switch Token.skip_server
|
29
30
|
end
|
30
31
|
sc.switch Token.update_deps
|
31
|
-
|
32
|
+
sc.switch Token.update_lock
|
33
|
+
|
32
34
|
sc.action do |_global_options, options, args|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
if remote_module_info = get_remote_module_info(module_ref)
|
50
|
-
version = remote_module_info.required(:version)
|
51
|
-
module_ref.version = version
|
52
|
-
end
|
53
|
-
end
|
35
|
+
module_name = args[0]
|
36
|
+
directory_path = args[1] || options[:directory_path]
|
37
|
+
has_directory_param = !options['d'].nil?
|
38
|
+
|
39
|
+
opts_hash = {
|
40
|
+
module_name: module_name,
|
41
|
+
directory_path: directory_path,
|
42
|
+
version: options[:version],
|
43
|
+
update_deps: options[:update_deps],
|
44
|
+
has_directory_param: has_directory_param,
|
45
|
+
update_lock_file: options['update-lock']
|
46
|
+
}
|
47
|
+
Install.execute(self, opts_hash)
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
end
|
54
51
|
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
# TODO: 3070: in sprint 7 should move a lot of this logic into the install operation directoty and use commands/moduel/install just to get params
|
53
|
+
class Install
|
54
|
+
def initialize(context, opts = {})
|
55
|
+
@context = context
|
56
|
+
@module_name = opts[:module_name]
|
57
|
+
@explicit_version = opts[:version]
|
58
|
+
@update_deps = opts[:update_deps]
|
59
|
+
@directory_path = opts[:directory_path]
|
60
|
+
@has_directory_param = opts[:has_directory_param]
|
61
|
+
@update_lock_file = opts[:update_lock_file]
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.execute(context, opts = {})
|
65
|
+
new(context, opts).execute
|
66
|
+
end
|
67
|
+
|
68
|
+
def execute
|
69
|
+
if @module_name
|
70
|
+
if Operation::Module.module_version_exists?(self.module_ref)
|
71
|
+
clone_module
|
58
72
|
else
|
59
|
-
|
73
|
+
install_from_catalog
|
60
74
|
end
|
75
|
+
else
|
76
|
+
install_from_directory
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
attr_reader :context
|
83
|
+
|
84
|
+
def module_ref
|
85
|
+
@module_ref ||= ret_module_ref
|
86
|
+
end
|
87
|
+
|
88
|
+
def version
|
89
|
+
@version ||= self.module_ref.version
|
90
|
+
end
|
91
|
+
|
92
|
+
def base_dsl_file_obj
|
93
|
+
@base_dsl_file_obj ||= self.context.base_dsl_file_obj
|
94
|
+
end
|
95
|
+
|
96
|
+
OPTIONAL_vars = [:module_name, :explicit_version, :update_deps, :directory_path, :has_directory_param]
|
97
|
+
OPTIONAL_vars.each { |var| class_eval("def #{var}?; @#{var}; end") }
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
def install_from_catalog
|
102
|
+
# installs content from dtkn (later probably from other remote catalogs) onto client machine
|
103
|
+
# in so doing installes dependent modules onto teh dtk server; this step though does not install main module onto
|
104
|
+
# server (the later step Operation::Module.install does this)
|
105
|
+
|
106
|
+
# TODO: 3070: handle sitution where response is not ok
|
107
|
+
install_response = Operation::Module.install_from_catalog(module_ref: self.module_ref, version: self.version, directory_path: self.directory_path?)
|
108
|
+
|
109
|
+
if client_installed_modules = (install_response && install_response.data[:installed_modules])
|
110
|
+
opts_server_install = {
|
111
|
+
has_directory_param: self.has_directory_param?,
|
112
|
+
has_remote_repo: true,
|
113
|
+
update_deps: self.update_deps?,
|
114
|
+
install_from: :remote
|
115
|
+
}
|
116
|
+
install_on_server(client_installed_modules, opts_server_install)
|
61
117
|
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def install_from_directory
|
121
|
+
operation_args = {
|
122
|
+
:module_ref => self.module_ref,
|
123
|
+
:base_dsl_file_obj => self.base_dsl_file_obj,
|
124
|
+
:has_directory_param => self.has_directory_param?,
|
125
|
+
:has_remote_repo => false,
|
126
|
+
:update_deps => self.update_deps?
|
127
|
+
}
|
128
|
+
get_and_install_dependencies
|
129
|
+
Operation::Module.install(operation_args)
|
130
|
+
end
|
62
131
|
|
63
|
-
|
64
|
-
|
132
|
+
def get_and_install_dependencies
|
133
|
+
file_obj = nil
|
134
|
+
if self.has_directory_param?
|
135
|
+
file_obj = self.base_dsl_file_obj.raise_error_if_no_content_flag(:module_ref)
|
136
|
+
else
|
137
|
+
file_obj = self.base_dsl_file_obj.raise_error_if_no_content
|
138
|
+
end
|
65
139
|
|
66
|
-
|
67
|
-
|
140
|
+
module_info = {
|
141
|
+
name: self.module_ref.module_name,
|
142
|
+
namespace: self.module_ref.namespace,
|
143
|
+
version: self.module_ref.version,
|
144
|
+
repo_dir: file_obj.parent_dir
|
145
|
+
}
|
146
|
+
parsed_module = file_obj.parse_content(:common_module_summary)
|
147
|
+
dependency_tree = Operation::DtkNetworkDependencyTree.get_or_create(module_info, { format: :hash, parsed_module: parsed_module, save_to_file: true, update_lock_file: @update_lock_file })
|
148
|
+
|
149
|
+
dependency_tree.each do |dependency|
|
150
|
+
dep_module_ref = module_ref_object_from_options_or_context(module_ref: "#{dependency[:namespace]}/#{dependency[:name]}", version: dependency[:version])
|
151
|
+
if Operation::Module.module_version_exists?(dep_module_ref)
|
152
|
+
p_helper = Operation::Module::Install::PrintHelper.new(:module_ref => dep_module_ref, :source => :local)
|
153
|
+
p_helper.print_using_installed_dependent_module
|
154
|
+
else
|
155
|
+
client_installed_modules = nil
|
156
|
+
|
157
|
+
if dependency[:source]
|
158
|
+
client_installed_modules = [dependency]
|
159
|
+
else
|
160
|
+
install_response = Operation::Module.install_from_catalog(module_ref: dep_module_ref, version: dep_module_ref.version, type: :dependency)
|
161
|
+
client_installed_modules = (install_response && install_response.data[:installed_modules])
|
162
|
+
end
|
163
|
+
|
164
|
+
if client_installed_modules# = (install_response && install_response.data[:installed_modules])
|
165
|
+
install_from = dependency[:source] ? :local : :remote
|
166
|
+
opts_server_install = {
|
167
|
+
has_directory_param: false,
|
168
|
+
has_remote_repo: true,
|
169
|
+
update_deps: self.update_deps?,
|
170
|
+
install_from: install_from
|
171
|
+
}
|
172
|
+
install_on_server(client_installed_modules, opts_server_install)
|
173
|
+
end
|
68
174
|
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
# opts can have keys:
|
179
|
+
# :has_directory_param,
|
180
|
+
# :has_remote_repo
|
181
|
+
# :update_dep
|
182
|
+
def install_on_server(client_installed_modules, opts = {})
|
183
|
+
client_installed_modules.each do |installed_module|
|
184
|
+
directory_path = installed_module[:location] || installed_module[:source]
|
185
|
+
module_ref = module_ref_object_from_options_or_context(directory_path: directory_path, version: installed_module[:version])
|
186
|
+
use_or_install_on_server(module_ref, directory_path, opts)
|
187
|
+
end
|
188
|
+
end
|
69
189
|
|
70
|
-
|
71
|
-
|
190
|
+
def use_or_install_on_server(module_ref, directory_path, opts = {})
|
191
|
+
if Operation::Module.module_version_exists?(module_ref)
|
192
|
+
p_helper = Operation::Module::Install::PrintHelper.new(:module_ref => module_ref, :source => :local)
|
193
|
+
p_helper.print_using_installed_dependent_module
|
194
|
+
else
|
195
|
+
base_dsl_file_obj = CLI::Context.base_dsl_file_obj(dir_path: directory_path)
|
72
196
|
operation_args = {
|
73
197
|
:module_ref => module_ref,
|
74
|
-
:base_dsl_file_obj =>
|
75
|
-
:has_directory_param =>
|
76
|
-
:has_remote_repo => has_remote_repo,
|
77
|
-
:update_deps =>
|
198
|
+
:base_dsl_file_obj => base_dsl_file_obj,
|
199
|
+
:has_directory_param => opts[:has_directory_param],
|
200
|
+
:has_remote_repo => opts[:has_remote_repo],
|
201
|
+
:update_deps => opts[:update_dep],
|
202
|
+
:install_from => opts[:install_from]
|
78
203
|
}
|
79
204
|
Operation::Module.install(operation_args)
|
80
205
|
end
|
81
206
|
end
|
82
|
-
end
|
83
|
-
end
|
84
207
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
208
|
+
def clone_module
|
209
|
+
# clone module into current directory + module name; same as when installing base module from dtk-network
|
210
|
+
target_directory_path = self.directory_path? || "#{OsUtil.current_dir}/#{self.module_ref.module_name}"
|
211
|
+
arg = {
|
212
|
+
:module_ref => self.module_ref,
|
213
|
+
:target_directory => Operation::ClientModuleDir.create_module_dir_from_path(target_directory_path)
|
214
|
+
}
|
215
|
+
repo_dir_info = Operation::Module.clone_module(arg).data
|
216
|
+
OsUtil.print_info("DTK module '#{self.module_ref.pretty_print}' has been successfully cloned from server into '#{repo_dir_info[:target_repo_dir]}'")
|
217
|
+
end
|
218
|
+
|
219
|
+
def should_install_from_catalog?
|
220
|
+
!!@module_name
|
221
|
+
end
|
90
222
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
223
|
+
def ret_module_ref
|
224
|
+
if should_install_from_catalog?
|
225
|
+
module_ref_version_unset = module_ref_object_from_options_or_context(module_ref: self.module_name?, version: @explicit_version)
|
226
|
+
fill_in_version_from_server_or_remote!(module_ref_version_unset) unless @explicit_version
|
227
|
+
module_ref_version_unset
|
228
|
+
else
|
229
|
+
module_ref_object_from_options_or_context(directory_path: self.directory_path?)
|
230
|
+
end
|
95
231
|
end
|
96
|
-
end
|
97
232
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
operation_args = {
|
107
|
-
:module_ref => module_ref,
|
108
|
-
:base_dsl_file_obj => @base_dsl_file_obj,
|
109
|
-
:has_directory_param => true,
|
110
|
-
:directory_path => repo_dir,
|
111
|
-
:update_deps => false,
|
112
|
-
:do_not_print => true,
|
113
|
-
:force => true,
|
114
|
-
:allow_version => true
|
115
|
-
}
|
116
|
-
|
117
|
-
Operation::Module.pull_dtkn(operation_args)
|
118
|
-
Operation::Module.push(operation_args.merge(:method => "pulled"))
|
119
|
-
end
|
233
|
+
# opts can have keys
|
234
|
+
# :module_ref
|
235
|
+
# :version
|
236
|
+
# :directory_path
|
237
|
+
def module_ref_object_from_options_or_context(opts = {})
|
238
|
+
self.context.module_ref_object_from_options_or_context(opts)
|
239
|
+
end
|
120
240
|
|
121
|
-
|
122
|
-
|
241
|
+
def fill_in_version_from_server_or_remote!(module_ref_version_unset)
|
242
|
+
module_ref = module_ref_version_unset
|
123
243
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
:module_name => module_ref.module_name,
|
129
|
-
:namespace => module_ref.namespace,
|
130
|
-
:rsa_pub_key => SSHUtil.rsa_pub_key_content,
|
131
|
-
:version? => nil
|
132
|
-
)
|
133
|
-
begin
|
134
|
-
Operation::Module.rest_get("#{Operation::Module::BaseRoute}/remote_module_info", query_string_hash)
|
135
|
-
rescue Error::ServerNotOkResponse => e
|
136
|
-
# do not raise if version not specified and module does not exist on repoman but exist on server; clone module from server instead
|
137
|
-
return
|
138
|
-
end
|
139
|
-
end
|
244
|
+
module_info = {
|
245
|
+
name: module_ref.module_name,
|
246
|
+
namespace: module_ref.namespace,
|
247
|
+
}
|
140
248
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
249
|
+
begin
|
250
|
+
versions = Operation::Module::DtkNetworkClient::Info.run(module_info, about: :versions)
|
251
|
+
rescue Exception => e
|
252
|
+
# if does not exist on repoman try getting version from server
|
253
|
+
versions = get_versions_from_server(module_ref)
|
254
|
+
end
|
255
|
+
|
256
|
+
if versions.empty?
|
257
|
+
raise Error::Usage, "Module '#{module_term(module_ref)}' does not exist."
|
258
|
+
elsif version = self.explicit_version?
|
259
|
+
if versions.include?(version)
|
260
|
+
module_ref.version = version
|
261
|
+
else
|
262
|
+
legal_versions = versions.join(', ')
|
263
|
+
raise Error::Usage, "Module '#{module_term(module_ref)}' does not have specified version '#{version}'; legal versions are: #{legal_versions}"
|
264
|
+
end
|
265
|
+
else
|
266
|
+
# use latest version
|
267
|
+
module_ref.version = find_latest_version(versions)
|
268
|
+
end
|
269
|
+
module_ref
|
270
|
+
end
|
271
|
+
|
272
|
+
def module_term(module_ref)
|
273
|
+
"#{module_ref.namespace}:#{module_ref.module_name}"
|
274
|
+
end
|
275
|
+
|
276
|
+
def find_latest_version(versions)
|
277
|
+
if versions.size > 1
|
278
|
+
versions.delete('master')
|
279
|
+
versions.sort.last
|
280
|
+
else
|
281
|
+
versions.first
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
def get_versions_from_server(module_ref)
|
286
|
+
query_string_hash = QueryStringHash.new(
|
287
|
+
:module_name => module_ref.module_name,
|
288
|
+
:namespace => module_ref.namespace
|
289
|
+
)
|
290
|
+
response = Operation::Module.rest_get("#{Operation::Module::BaseRoute}/versions", query_string_hash)
|
291
|
+
versions = response.data(:versions) || []
|
292
|
+
|
293
|
+
versions
|
294
|
+
end
|
154
295
|
end
|
155
296
|
end
|
156
297
|
end
|
157
298
|
end
|
158
299
|
end
|
159
|
-
|