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
@@ -19,11 +19,12 @@ module DTK::Client
|
|
19
19
|
module CLI::Command
|
20
20
|
module Module
|
21
21
|
subcommand_def 'publish' do |c|
|
22
|
-
command_body c, 'publish', 'Publish module installed on server to the
|
22
|
+
command_body c, 'publish', 'Publish module installed on server to the dtk network' do |sc|
|
23
23
|
sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to publish; not need if in the module directory'
|
24
|
+
sc.switch Token.update_lock
|
24
25
|
sc.action do |_global_options, options, _args|
|
25
26
|
module_ref = module_ref_object_from_options_or_context(options)
|
26
|
-
Operation::Module.publish(:module_ref => module_ref, :directory_path => options[:directory_path])
|
27
|
+
Operation::Module.publish(:module_ref => module_ref, update_lock_file: options['update-lock'], :directory_path => options[:directory_path], :base_dsl_file_obj => @base_dsl_file_obj)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -19,7 +19,7 @@ module DTK::Client
|
|
19
19
|
module CLI::Command
|
20
20
|
module Module
|
21
21
|
subcommand_def 'pull-dtkn' do |c|
|
22
|
-
command_body c, 'pull-dtkn', 'Pull content from
|
22
|
+
command_body c, 'pull-dtkn', 'Pull content from dtk network to client module directory and push to server' do |sc|
|
23
23
|
sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing content to update; not need if in the module directory'
|
24
24
|
sc.switch Token.force
|
25
25
|
sc.switch Token.update_deps
|
@@ -35,7 +35,7 @@ module DTK::Client
|
|
35
35
|
:update_deps => options[:update_deps]
|
36
36
|
}
|
37
37
|
Operation::Module.pull_dtkn(operation_args)
|
38
|
-
Operation::Module.push(operation_args.merge(:method => "pulled"))
|
38
|
+
# Operation::Module.push(operation_args.merge(:method => "pulled"))
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -21,9 +21,10 @@ module DTK::Client
|
|
21
21
|
subcommand_def 'push' do |c|
|
22
22
|
command_body c, :push, 'Push content from client module directory to server' do |sc|
|
23
23
|
sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to push; not need if in the module directory'
|
24
|
+
sc.switch Token.update_lock
|
24
25
|
sc.action do |_global_options, options, _args|
|
25
26
|
module_ref = module_ref_object_from_options_or_context(options)
|
26
|
-
Operation::Module.push(:module_ref
|
27
|
+
Operation::Module.push(module_ref: module_ref, update_lock_file: options['update-lock'], base_dsl_file_obj: @base_dsl_file_obj, context: self)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -19,11 +19,12 @@ module DTK::Client
|
|
19
19
|
module CLI::Command
|
20
20
|
module Module
|
21
21
|
subcommand_def 'push-dtkn' do |c|
|
22
|
-
command_body c, 'push-dtkn', 'Push content from client module directory to
|
22
|
+
command_body c, 'push-dtkn', 'Push content from client module directory to dtk network' do |sc|
|
23
23
|
sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to push; not need if in the module directory'
|
24
|
+
sc.switch Token.update_lock
|
24
25
|
sc.action do |_global_options, options, _args|
|
25
26
|
module_ref = module_ref_object_from_options_or_context(options)
|
26
|
-
Operation::Module.push_dtkn(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj, :directory_path => options[:directory_path])
|
27
|
+
Operation::Module.push_dtkn(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj, :directory_path => options[:directory_path], update_lock_file: options['update-lock'])
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -0,0 +1,42 @@
|
|
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 Module
|
21
|
+
subcommand_def 'unpublish' do |c|
|
22
|
+
c.arg Token::Arg.module_name
|
23
|
+
command_body c, 'unpublish', 'Unpublish module version from the DTK remote catalog (DTKN)' do |sc|
|
24
|
+
sc.flag Token.version
|
25
|
+
sc.switch Token.skip_prompt
|
26
|
+
sc.switch Token.force, :desc => 'Force delete'
|
27
|
+
|
28
|
+
sc.action do |_global_options, options, args|
|
29
|
+
module_ref = module_ref_object_from_options_or_context?(:module_ref => args[0], :version => options[:version])
|
30
|
+
operation_args = {
|
31
|
+
:module_ref => module_ref,
|
32
|
+
:skip_prompt => options[:skip_prompt],
|
33
|
+
:force => options[:f]
|
34
|
+
}
|
35
|
+
Operation::Module.unpublish(operation_args)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -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 Module
|
21
|
+
subcommand_def 'update' do |c|
|
22
|
+
command_body c, 'update', 'Update module dependencies to the latest available on dtk network' do |sc|
|
23
|
+
sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to publish; not need if in the module directory'
|
24
|
+
sc.action do |_global_options, options, _args|
|
25
|
+
module_ref = module_ref_object_from_options_or_context(options)
|
26
|
+
Operation::Module.update(:module_ref => module_ref, :directory_path => options[:directory_path], :base_dsl_file_obj => @base_dsl_file_obj)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/cli/command/module.rb
CHANGED
data/lib/cli/command/token.rb
CHANGED
@@ -57,7 +57,7 @@ module DTK::Client
|
|
57
57
|
# Switch constructor args order: key, desc, opts={}
|
58
58
|
:all => Switch.new(:all, 'All'),
|
59
59
|
:base => Switch.new(:base, 'Create base service instance'),
|
60
|
-
:breakpoint
|
60
|
+
:breakpoint => Switch.new([:b, :breakpoint], 'Add breakpoint'),
|
61
61
|
:delete => Switch.new(:delete, 'Delete'),
|
62
62
|
:force => Switch.new([:f, :force], 'Force'),
|
63
63
|
:purge => Switch.new(:purge, 'Purge'),
|
@@ -69,7 +69,9 @@ module DTK::Client
|
|
69
69
|
:dependencies => Switch.new(:deps, 'Dependencies'),
|
70
70
|
:u => Switch.new([:u, :unset], 'Unset attribute'),
|
71
71
|
:recursive => Switch.new(:r, 'Recursive'),
|
72
|
-
:update_deps => Switch.new('update-deps', "Skip prompt and update all dependencies or skip prompt and don't update all dependencies (on master)", :negatable => true, :default_value => 'prompt')
|
72
|
+
:update_deps => Switch.new('update-deps', "Skip prompt and update all dependencies or skip prompt and don't update all dependencies (on master)", :negatable => true, :default_value => 'prompt'),
|
73
|
+
:skip_server => Switch.new('skip-server', 'Do not install module on server'),
|
74
|
+
:update_lock => Switch.new([:u, 'update-lock'], 'Update lock file with new dependencies')
|
73
75
|
}
|
74
76
|
|
75
77
|
ARG_TOKENS = {
|
@@ -90,7 +92,11 @@ module DTK::Client
|
|
90
92
|
:base_cmp => 'BASE-COMPONENT',
|
91
93
|
:deps_on_cmp => 'DEPENDS-ON-COMPONENT',
|
92
94
|
:service => 'SERVICE',
|
93
|
-
:service_name => 'SERVICE-NAME'
|
95
|
+
:service_name => 'SERVICE-NAME',
|
96
|
+
:namespace => 'NAMESPACE',
|
97
|
+
:user => 'USER',
|
98
|
+
:permissions => 'PERMISSIONS',
|
99
|
+
:group => 'GROUP',
|
94
100
|
}
|
95
101
|
|
96
102
|
end
|
data/lib/cli/context.rb
CHANGED
@@ -58,9 +58,15 @@ module DTK::Client
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
def module_ref_object_from_options_or_context(options, module_refs_opts = {})
|
62
|
+
module_ref_object_from_options_or_context?(options, module_refs_opts) || raise_error_when_missing_context(:module_ref, options)
|
63
|
+
end
|
64
|
+
|
65
|
+
attr_reader :base_dsl_file_obj
|
66
|
+
|
61
67
|
private
|
62
68
|
|
63
|
-
attr_reader :context_attributes
|
69
|
+
attr_reader :context_attributes
|
64
70
|
|
65
71
|
def module_ref_from_base_dsl_file?
|
66
72
|
parsed_module_hash = parse_module_content_and_create_hash
|
@@ -161,10 +167,6 @@ module DTK::Client
|
|
161
167
|
::DTK::DSL::FileType::ServiceInstance::DSLFile::Top
|
162
168
|
]
|
163
169
|
|
164
|
-
def module_ref_object_from_options_or_context(options, module_refs_opts = {})
|
165
|
-
module_ref_object_from_options_or_context?(options, module_refs_opts) || raise_error_when_missing_context(:module_ref, options)
|
166
|
-
end
|
167
|
-
|
168
170
|
def module_ref_object_from_options_or_context?(options, module_refs_opts = {})
|
169
171
|
# using :ignore_parsing_errors to ret namespace, name and version from .yaml file even if there are parsing errors
|
170
172
|
@options.merge!(:ignore_parsing_errors => module_refs_opts[:ignore_parsing_errors])
|
@@ -26,10 +26,7 @@ module DTK::Client; module CLI
|
|
26
26
|
# :dir_path - string
|
27
27
|
# Returns FileObj object or nil that match a file_type
|
28
28
|
def matching_file_obj?(file_types, opts = {})
|
29
|
-
|
30
|
-
file_types = [file_types] unless file_types.kind_of?(Array)
|
31
|
-
|
32
|
-
file_type, file_path = matching_type_and_path?(file_types, opts)
|
29
|
+
file_type, file_path = matching_type_and_path?(Array(file_types), opts)
|
33
30
|
file_obj_opts = {
|
34
31
|
dir_path: opts[:dir_path],
|
35
32
|
current_dir: OsUtil.current_dir,
|
@@ -48,53 +45,52 @@ module DTK::Client; module CLI
|
|
48
45
|
# opts can have keys:
|
49
46
|
# :dir_path
|
50
47
|
# :file_path
|
48
|
+
# :flag
|
51
49
|
# returns nil or [file_type, path]
|
52
50
|
def matching_type_and_path?(file_types, opts = {})
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
51
|
+
matches =
|
52
|
+
if path = opts[:file_path]
|
53
|
+
file_types.map { | file_type | file_type.matches?(path) && [file_type, path] }.compact
|
54
|
+
else
|
55
|
+
base_dir = OsUtil.home_dir
|
56
|
+
current_dir = opts[:dir_path] || OsUtil.current_dir
|
57
|
+
most_nested_matching_types_and_paths(file_types, current_dir, base_dir, flag: opts[:flag])
|
60
58
|
end
|
59
|
+
|
60
|
+
case matches.size
|
61
|
+
when 0
|
62
|
+
nil
|
63
|
+
when 1
|
64
|
+
matches.first
|
61
65
|
else
|
62
|
-
|
63
|
-
if path = most_nested_matching_file_path?(file_type, flag, :current_dir => opts[:dir_path])
|
64
|
-
return [file_type, path]
|
65
|
-
end
|
66
|
-
end
|
66
|
+
MultipleMatches.resolve(matches)
|
67
67
|
end
|
68
|
-
ret
|
69
68
|
end
|
70
69
|
|
71
|
-
# return either a string file path or of match to file_type working from current directory and 'outwards'
|
72
|
-
# until base_path in file_type (if it exists)
|
73
70
|
# opts can have keys
|
74
|
-
#
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
71
|
+
# :flag
|
72
|
+
def most_nested_matching_types_and_paths(file_types, current_dir, base_dir, opts = {})
|
73
|
+
# matches will be an array of [file_type, path]
|
74
|
+
matches = []
|
75
|
+
file_types.each do |file_type|
|
76
|
+
matching_file_paths(current_dir, file_type).each { |path| matches << [file_type, path] }
|
77
|
+
end
|
78
|
+
|
79
|
+
return matches unless matches.empty?
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
if parent_path = OsUtil.parent_dir?(current_dir)
|
86
|
-
check_match_recurse_on_failure?(file_type, parent_path, base_dir, flag) unless flag
|
87
|
-
end
|
81
|
+
next_level_matches = []
|
82
|
+
unless current_dir == base_dir or opts[:flag]
|
83
|
+
if parent_path = OsUtil.parent_dir?(current_dir)
|
84
|
+
next_level_matches = most_nested_matching_types_and_paths(file_types, parent_path, base_dir, opts)
|
88
85
|
end
|
89
|
-
elsif match.size == 1
|
90
|
-
match.first
|
91
|
-
else
|
92
|
-
raise Error, "Unexpected that more than one match: #{match.join(', ')}"
|
93
86
|
end
|
87
|
+
next_level_matches
|
94
88
|
end
|
95
89
|
|
90
|
+
|
96
91
|
# returns an array of strings that are file paths; except bakup files (e.g. bak.dtk.service.yaml)
|
97
92
|
def matching_file_paths(dir_path, path_info)
|
93
|
+
return [] if File.exist?("#{dir_path}/.nested_module")
|
98
94
|
Dir.glob("#{dir_path}/*").select { |file_path| File.file?(file_path) and !is_backup_file?(file_path) and path_info.matches?(file_path) }
|
99
95
|
end
|
100
96
|
|
@@ -102,6 +98,50 @@ module DTK::Client; module CLI
|
|
102
98
|
regex = Regexp.new("\.bak\.dtk\.(service|module)\.(yml|yaml)$")
|
103
99
|
file_path =~ regex
|
104
100
|
end
|
101
|
+
|
102
|
+
module MultipleMatches
|
103
|
+
def self.resolve(matches)
|
104
|
+
# first try to make decission based on user's input e.g. 'dtk module ...' or 'dtk service ...'
|
105
|
+
if input_rank = rank_based_on_input
|
106
|
+
top_match = matches.select { |match| match.first == input_rank }
|
107
|
+
return top_match.first if top_match && !top_match.empty?
|
108
|
+
end
|
109
|
+
|
110
|
+
augmented_matches = matches.map { |match| { match: match, ranking: type_ranking(match[0]) } }
|
111
|
+
not_treated_types = augmented_matches.select { |aug_match| aug_match[:ranking].nil? }
|
112
|
+
fail Error, "No ranking for types: #{not_treated_types.map { |aug_match| aug_match[:match][0] }.join(', ')}" unless not_treated_types.empty?
|
113
|
+
|
114
|
+
ndx_matches = {}
|
115
|
+
augmented_matches.each { |aug_match| (ndx_matches[aug_match[:ranking]] ||= []) << aug_match[:match] }
|
116
|
+
top_matches = ndx_matches[ndx_matches.keys.sort.first]
|
117
|
+
fail Error, "Cannot choice between types: #{top_matches.map{ |match| match[0] }.join(', ')}" if top_matches.size > 1
|
118
|
+
top_matches.first
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.type_ranking(type)
|
122
|
+
ranking_for_types[type]
|
123
|
+
end
|
124
|
+
|
125
|
+
# lower is preferred
|
126
|
+
def self.ranking_for_types
|
127
|
+
@ranking_for_types ||= {
|
128
|
+
DTK::DSL::FileType::CommonModule::DSLFile::Top => 2,
|
129
|
+
DTK::DSL::FileType::ServiceInstance::DSLFile::Top => 1
|
130
|
+
}
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.rank_based_on_input
|
134
|
+
input_types[ARGV.first]
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.input_types
|
138
|
+
{
|
139
|
+
'module' => DTK::DSL::FileType::CommonModule::DSLFile::Top,
|
140
|
+
'service' => DTK::DSL::FileType::ServiceInstance::DSLFile::Top
|
141
|
+
}
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
105
145
|
end
|
106
146
|
end
|
107
147
|
end; end
|
@@ -46,6 +46,8 @@ module DTK::Client; module CLI
|
|
46
46
|
nil
|
47
47
|
elsif err.kind_of?(Error)
|
48
48
|
raise err
|
49
|
+
elsif err.kind_of?(DTK::Network::Client::Error)
|
50
|
+
raise Error::DtkNetwork.new(err.message, :backtrace => err.backtrace)
|
49
51
|
else
|
50
52
|
raise Error::Client.new(err.message, :backtrace => err.backtrace)
|
51
53
|
end
|
data/lib/cli/version.rb
CHANGED
@@ -108,5 +108,17 @@ module DTK::Client
|
|
108
108
|
super(msg_to_pass_to_super, :backtrace => NO_BACKTRACE)
|
109
109
|
end
|
110
110
|
end
|
111
|
+
|
112
|
+
class DtkNetwork < self
|
113
|
+
# opts can have keys
|
114
|
+
# :backtrace
|
115
|
+
def initialize(error_msg, opts = {})
|
116
|
+
msg_to_pass_to_super = "[DTK NETWORK ERROR] #{error_msg}"
|
117
|
+
super(msg_to_pass_to_super, opts.merge(:where => :dtk_network))
|
118
|
+
end
|
119
|
+
def self.label(*_args)
|
120
|
+
super(:dtk_network)
|
121
|
+
end
|
122
|
+
end
|
111
123
|
end
|
112
124
|
end
|
@@ -149,7 +149,9 @@ module DTK::Client
|
|
149
149
|
end
|
150
150
|
|
151
151
|
def untracked
|
152
|
-
|
152
|
+
@git_repo.lib.command_lines('ls-files', ['--others', '--exclude-standard'])
|
153
|
+
# Replaced below with above because did not take into account what was in .gitignore
|
154
|
+
# status.is_a?(Hash) ? status.untracked().keys : status.untracked().collect { |file| file.first }
|
153
155
|
end
|
154
156
|
|
155
157
|
def deleted
|
@@ -0,0 +1,29 @@
|
|
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
|
+
class Operation::Account
|
20
|
+
class AddToGroup < self
|
21
|
+
def self.execute(args = Args.new)
|
22
|
+
wrap_operation(args) do |args|
|
23
|
+
DtkNetworkClient::AddToGroup.run(args.required(:group), args.required(:user))
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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
|
+
class Operation::Account
|
20
|
+
class Chmod < self
|
21
|
+
def self.execute(args = Args.new)
|
22
|
+
wrap_operation(args) do |args|
|
23
|
+
DtkNetworkClient::Chmod.run(args.required(:namespace), args.required(:permissions))
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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
|
+
class Operation::Account
|
20
|
+
class CreateNamespace < self
|
21
|
+
def self.execute(args = Args.new)
|
22
|
+
wrap_operation(args) do |args|
|
23
|
+
DtkNetworkClient::CreateNamespace.run(args.required(:namespace))
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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
|
+
class Operation::Account
|
20
|
+
class DeleteNamespace < self
|
21
|
+
def self.execute(args = Args.new)
|
22
|
+
wrap_operation(args) do |args|
|
23
|
+
DtkNetworkClient::DeleteNamespace.run(args.required(:namespace))
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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
|
+
class Operation::Account
|
20
|
+
class ListNamespaces < self
|
21
|
+
def self.execute(args = Args.new)
|
22
|
+
wrap_operation(args) do |args|
|
23
|
+
response = DtkNetworkClient::ListNamespaces.run
|
24
|
+
Response.new(response)
|
25
|
+
end.set_render_as_table!
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
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
|
+
class Operation::Account
|
20
|
+
class RemoveFromGroup < self
|
21
|
+
def self.execute(args = Args.new)
|
22
|
+
wrap_operation(args) do |args|
|
23
|
+
DtkNetworkClient::RemoveFromGroup.run(args.required(:group), args.required(:user))
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -19,7 +19,20 @@ module DTK::Client
|
|
19
19
|
class Operation
|
20
20
|
class Account < self
|
21
21
|
RoutePrefix = 'account'
|
22
|
-
OPERATIONS = [
|
22
|
+
OPERATIONS = [
|
23
|
+
:list_ssh_keys,
|
24
|
+
:delete_ssh_key,
|
25
|
+
:add_ssh_key,
|
26
|
+
:set_password,
|
27
|
+
:set_catalog_credentials,
|
28
|
+
:register_catalog_user,
|
29
|
+
:add_to_group,
|
30
|
+
:remove_from_group,
|
31
|
+
:create_namespace,
|
32
|
+
:chmod,
|
33
|
+
:delete_namespace,
|
34
|
+
:list_namespaces
|
35
|
+
]
|
23
36
|
OPERATIONS.each { |operation| require_relative("#{RoutePrefix}/#{operation}") }
|
24
37
|
|
25
38
|
|