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