dtk-shell 0.10.0
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 +7 -0
- data/Gemfile +5 -0
- data/Gemfile_dev +13 -0
- data/README.md +121 -0
- data/bin/dtk-execute +32 -0
- data/bin/dtk-run +92 -0
- data/bin/dtk-shell +31 -0
- data/dtk-shell.gemspec +50 -0
- data/lib/auxiliary.rb +61 -0
- data/lib/bundler_monkey_patch.rb +26 -0
- data/lib/client.rb +58 -0
- data/lib/command_helper.rb +33 -0
- data/lib/command_helpers/git_repo.rb +589 -0
- data/lib/command_helpers/git_repo/merge.rb +153 -0
- data/lib/command_helpers/jenkins_client.rb +106 -0
- data/lib/command_helpers/jenkins_client/config_xml.rb +288 -0
- data/lib/command_helpers/service_importer.rb +251 -0
- data/lib/command_helpers/service_link.rb +33 -0
- data/lib/command_helpers/test_module_creator.rb +69 -0
- data/lib/command_helpers/test_module_templates/dtk.model.yaml.eruby +10 -0
- data/lib/command_helpers/test_module_templates/spec_helper.rb.eruby +10 -0
- data/lib/command_helpers/test_module_templates/temp_component_spec.rb.eruby +5 -0
- data/lib/commands.rb +57 -0
- data/lib/commands/common/thor/access_control.rb +133 -0
- data/lib/commands/common/thor/action_result_handler.rb +74 -0
- data/lib/commands/common/thor/assembly_template.rb +92 -0
- data/lib/commands/common/thor/assembly_workspace.rb +1801 -0
- data/lib/commands/common/thor/base_command_helper.rb +59 -0
- data/lib/commands/common/thor/clone.rb +82 -0
- data/lib/commands/common/thor/common.rb +88 -0
- data/lib/commands/common/thor/common_base.rb +49 -0
- data/lib/commands/common/thor/create_target.rb +70 -0
- data/lib/commands/common/thor/edit.rb +255 -0
- data/lib/commands/common/thor/inventory_parser.rb +98 -0
- data/lib/commands/common/thor/list_diffs.rb +128 -0
- data/lib/commands/common/thor/module.rb +1011 -0
- data/lib/commands/common/thor/module/import.rb +210 -0
- data/lib/commands/common/thor/node.rb +53 -0
- data/lib/commands/common/thor/poller.rb +65 -0
- data/lib/commands/common/thor/pull_clone_changes.rb +28 -0
- data/lib/commands/common/thor/pull_from_remote.rb +152 -0
- data/lib/commands/common/thor/puppet_forge.rb +72 -0
- data/lib/commands/common/thor/purge_clone.rb +101 -0
- data/lib/commands/common/thor/push_clone_changes.rb +162 -0
- data/lib/commands/common/thor/push_to_remote.rb +94 -0
- data/lib/commands/common/thor/remotes.rb +71 -0
- data/lib/commands/common/thor/reparse.rb +40 -0
- data/lib/commands/common/thor/set_required_attributes.rb +46 -0
- data/lib/commands/thor/account.rb +239 -0
- data/lib/commands/thor/assembly.rb +356 -0
- data/lib/commands/thor/attribute.rb +79 -0
- data/lib/commands/thor/component.rb +70 -0
- data/lib/commands/thor/component_module.rb +501 -0
- data/lib/commands/thor/component_template.rb +174 -0
- data/lib/commands/thor/dependency.rb +34 -0
- data/lib/commands/thor/developer.rb +144 -0
- data/lib/commands/thor/dtk.rb +152 -0
- data/lib/commands/thor/library.rb +125 -0
- data/lib/commands/thor/node.rb +504 -0
- data/lib/commands/thor/node_template.rb +94 -0
- data/lib/commands/thor/project.rb +34 -0
- data/lib/commands/thor/provider.rb +233 -0
- data/lib/commands/thor/remotes.rb +49 -0
- data/lib/commands/thor/service.rb +941 -0
- data/lib/commands/thor/service_module.rb +914 -0
- data/lib/commands/thor/state_change.rb +25 -0
- data/lib/commands/thor/target.rb +250 -0
- data/lib/commands/thor/task.rb +116 -0
- data/lib/commands/thor/test_module.rb +310 -0
- data/lib/commands/thor/utils.rb +21 -0
- data/lib/commands/thor/workspace.rb +685 -0
- data/lib/config/cacert.pem +3785 -0
- data/lib/config/client.conf.header +20 -0
- data/lib/config/configuration.rb +99 -0
- data/lib/config/default.conf +16 -0
- data/lib/config/disk_cacher.rb +80 -0
- data/lib/configurator.rb +176 -0
- data/lib/context_router.rb +44 -0
- data/lib/core.rb +497 -0
- data/lib/domain/git_adapter.rb +412 -0
- data/lib/domain/git_error_handler.rb +64 -0
- data/lib/domain/response.rb +285 -0
- data/lib/domain/response/error_handler.rb +86 -0
- data/lib/dtk-shell/version.rb +20 -0
- data/lib/dtk_constants.rb +40 -0
- data/lib/dtk_error.rb +114 -0
- data/lib/dtk_logger.rb +126 -0
- data/lib/dtk_shell.rb +31 -0
- data/lib/error.rb +85 -0
- data/lib/execute.rb +29 -0
- data/lib/execute/cli_pure/cli_rerouter.rb +102 -0
- data/lib/execute/command.rb +40 -0
- data/lib/execute/command/api_call.rb +60 -0
- data/lib/execute/command/api_call/map.rb +60 -0
- data/lib/execute/command/api_call/service.rb +91 -0
- data/lib/execute/command/api_call/translation_term.rb +119 -0
- data/lib/execute/command/rest_call.rb +37 -0
- data/lib/execute/command_processor.rb +30 -0
- data/lib/execute/command_processor/rest_call.rb +59 -0
- data/lib/execute/error_usage.rb +21 -0
- data/lib/execute/execute_context.rb +86 -0
- data/lib/execute/execute_context/result_store.rb +37 -0
- data/lib/execute/script.rb +64 -0
- data/lib/execute/script/add_tenant.rb +121 -0
- data/lib/git-logs/git.log +0 -0
- data/lib/parser/adapters/option_parser.rb +70 -0
- data/lib/parser/adapters/thor.rb +555 -0
- data/lib/parser/adapters/thor/common_option_defs.rb +40 -0
- data/lib/require_first.rb +104 -0
- data/lib/search_hash.rb +44 -0
- data/lib/shell.rb +261 -0
- data/lib/shell/context.rb +1065 -0
- data/lib/shell/context_aux.rb +46 -0
- data/lib/shell/domain/active_context.rb +186 -0
- data/lib/shell/domain/context_entity.rb +89 -0
- data/lib/shell/domain/context_params.rb +223 -0
- data/lib/shell/domain/override_tasks.rb +88 -0
- data/lib/shell/domain/shadow_entity.rb +76 -0
- data/lib/shell/header_shell.rb +44 -0
- data/lib/shell/help_monkey_patch.rb +283 -0
- data/lib/shell/interactive_wizard.rb +225 -0
- data/lib/shell/message_queue.rb +63 -0
- data/lib/shell/parse_monkey_patch.rb +39 -0
- data/lib/shell/status_monitor.rb +124 -0
- data/lib/task_status.rb +83 -0
- data/lib/task_status/refresh_mode.rb +77 -0
- data/lib/task_status/snapshot_mode.rb +28 -0
- data/lib/task_status/stream_mode.rb +48 -0
- data/lib/task_status/stream_mode/element.rb +101 -0
- data/lib/task_status/stream_mode/element/format.rb +101 -0
- data/lib/task_status/stream_mode/element/hierarchical_task.rb +100 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/result.rb +72 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/result/action.rb +93 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/result/components.rb +26 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/result/node_level.rb +26 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/steps.rb +34 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/steps/action.rb +53 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/steps/components.rb +53 -0
- data/lib/task_status/stream_mode/element/hierarchical_task/steps/node_level.rb +42 -0
- data/lib/task_status/stream_mode/element/no_results.rb +26 -0
- data/lib/task_status/stream_mode/element/render.rb +59 -0
- data/lib/task_status/stream_mode/element/stage.rb +84 -0
- data/lib/task_status/stream_mode/element/stage/render.rb +76 -0
- data/lib/task_status/stream_mode/element/task_end.rb +35 -0
- data/lib/task_status/stream_mode/element/task_start.rb +37 -0
- data/lib/util/common_util.rb +37 -0
- data/lib/util/console.rb +235 -0
- data/lib/util/dtk_puppet.rb +65 -0
- data/lib/util/module_util.rb +66 -0
- data/lib/util/os_util.rb +385 -0
- data/lib/util/permission_util.rb +31 -0
- data/lib/util/remote_dependency_util.rb +84 -0
- data/lib/util/ssh_util.rb +94 -0
- data/lib/view_processor.rb +129 -0
- data/lib/view_processor/augmented_simple_list.rb +44 -0
- data/lib/view_processor/hash_pretty_print.rb +123 -0
- data/lib/view_processor/simple_list.rb +156 -0
- data/lib/view_processor/table_print.rb +309 -0
- data/lib/violation.rb +86 -0
- data/lib/violation/attribute.rb +76 -0
- data/lib/violation/fix.rb +26 -0
- data/lib/violation/fix/result.rb +73 -0
- data/lib/violation/fix/result/error.rb +34 -0
- data/lib/violation/fix/set_attribute.rb +41 -0
- data/lib/violation/sub_classes.rb +60 -0
- data/puppet/manifests/init.pp +72 -0
- data/puppet/manifests/params.pp +16 -0
- data/puppet/r8meta.puppet.yml +35 -0
- data/puppet/templates/bash_profile.erb +2 -0
- data/puppet/templates/client.conf.erb +1 -0
- data/puppet/templates/dtkclient.erb +2 -0
- data/spec/component_module_spec.rb +34 -0
- data/spec/dependency_spec.rb +6 -0
- data/spec/dtk_shell_spec.rb +13 -0
- data/spec/dtk_spec.rb +33 -0
- data/spec/lib/spec_helper.rb +10 -0
- data/spec/lib/spec_thor.rb +108 -0
- data/spec/node_template_spec.rb +24 -0
- data/spec/project_spec.rb +6 -0
- data/spec/repo_spec.rb +7 -0
- data/spec/response_spec.rb +52 -0
- data/spec/service_module_spec.rb +38 -0
- data/spec/service_spec.rb +50 -0
- data/spec/state_change_spec.rb +7 -0
- data/spec/table_print_spec.rb +48 -0
- data/spec/target_spec.rb +57 -0
- data/spec/task_spec.rb +28 -0
- data/views/assembly/augmented_simple_list.rb +12 -0
- data/views/assembly_template/augmented_simple_list.rb +12 -0
- data/views/list_task/augmented_simple_list.rb +12 -0
- metadata +421 -0
|
@@ -0,0 +1,914 @@
|
|
|
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
|
+
#TODO: putting in version as hidden coption that can be enabled when code ready
|
|
19
|
+
#TODO: may be consistent on whether service module id or service module name used as params
|
|
20
|
+
dtk_require_common_commands('thor/reparse')
|
|
21
|
+
dtk_require_from_base("dtk_logger")
|
|
22
|
+
dtk_require_from_base("util/os_util")
|
|
23
|
+
dtk_require_from_base("commands/thor/assembly")
|
|
24
|
+
dtk_require_from_base('command_helpers/service_importer')
|
|
25
|
+
dtk_require_from_base('task_status')
|
|
26
|
+
dtk_require_common_commands('thor/common')
|
|
27
|
+
dtk_require_common_commands('thor/module')
|
|
28
|
+
dtk_require_common_commands('thor/poller')
|
|
29
|
+
dtk_require_common_commands('thor/assembly_template')
|
|
30
|
+
dtk_require_common_commands('thor/pull_clone_changes')
|
|
31
|
+
|
|
32
|
+
module DTK::Client
|
|
33
|
+
class ServiceModule < CommandBaseThor
|
|
34
|
+
|
|
35
|
+
PULL_CATALOGS = ["dtkn"]
|
|
36
|
+
|
|
37
|
+
no_tasks do
|
|
38
|
+
include ReparseMixin
|
|
39
|
+
include ServiceImporter
|
|
40
|
+
include ModuleMixin
|
|
41
|
+
include Poller
|
|
42
|
+
include AssemblyTemplateMixin
|
|
43
|
+
include TaskStatusMixin
|
|
44
|
+
|
|
45
|
+
def get_service_module_name(service_module_id)
|
|
46
|
+
get_name_from_id_helper(service_module_id)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def get_name_and_version_from_assembly_template(assembly_template_name)
|
|
50
|
+
name = assembly_template_name
|
|
51
|
+
version = nil
|
|
52
|
+
|
|
53
|
+
if assembly_template_name.match(/(.*)(\-v\d{1,2}\.\d{1,2}\.\d{1,2}\Z)/)
|
|
54
|
+
name, version = [$1,$2]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
if version
|
|
58
|
+
version.gsub!('-v','')
|
|
59
|
+
else
|
|
60
|
+
version = 'base'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
return name, version
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def stage_aux(context_params)
|
|
67
|
+
if context_params.is_there_identifier?(:assembly)
|
|
68
|
+
service_module_id, service_module_name, assembly_template_name, name = context_params.retrieve_arguments([:service_module_id!, :service_module_name!, :assembly_name!, :option_2], method_argument_names)
|
|
69
|
+
else
|
|
70
|
+
service_module_id, service_module_name, assembly_template_name, name = context_params.retrieve_arguments([:service_module_id!, :service_module_name!, :option_1!, :option_2], method_argument_names)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
post_body = { :assembly_id => assembly_template_name }
|
|
74
|
+
|
|
75
|
+
# special case when we need service module id
|
|
76
|
+
context_params.pure_cli_mode = true
|
|
77
|
+
post_body[:service_module_id] = service_module_id if context_params.pure_cli_mode
|
|
78
|
+
|
|
79
|
+
# using this to make sure cache will be invalidated after new assembly is created from other commands e.g.
|
|
80
|
+
# 'assembly-create', 'install' etc.
|
|
81
|
+
@@invalidate_map << :assembly
|
|
82
|
+
|
|
83
|
+
fwd_options = context_params.get_forwarded_options()
|
|
84
|
+
instance_bindings = options["instance-bindings"]
|
|
85
|
+
settings = parse_service_settings(options["settings"])
|
|
86
|
+
node_size = fwd_options[:node_size]||options.node_size
|
|
87
|
+
os_type = fwd_options[:os_type]||options.os_type
|
|
88
|
+
version = fwd_options[:version]||options.version
|
|
89
|
+
no_auto_complete = fwd_options[:no_auto_complete]||options.no_auto_complete
|
|
90
|
+
parent_service = fwd_options[:parent_service]||options.parent_service
|
|
91
|
+
is_target = fwd_options[:is_target]||options.is_target?
|
|
92
|
+
do_not_encode = fwd_options[:do_not_encode]
|
|
93
|
+
assembly_list = Assembly.assembly_list()
|
|
94
|
+
|
|
95
|
+
if assembly_template_name.to_s =~ /^[0-9]+$/
|
|
96
|
+
assembly_template_name = DTK::Client::Assembly.get_assembly_template_name_for_service(assembly_template_name, service_module_name)
|
|
97
|
+
assembly_template_name, version = get_name_and_version_from_assembly_template(assembly_template_name)
|
|
98
|
+
else
|
|
99
|
+
namespace, module_name = get_namespace_and_name(service_module_name, ':')
|
|
100
|
+
assembly_template_name = "#{module_name}/#{assembly_template_name}"
|
|
101
|
+
end
|
|
102
|
+
assembly_template_name.gsub!(/(::)|(\/)/,'-') if assembly_template_name
|
|
103
|
+
|
|
104
|
+
if name
|
|
105
|
+
raise DTK::Client::DtkValidationError, "Unable to stage service with name '#{name}'. Service with specified name exists already!" if assembly_list.include?(name)
|
|
106
|
+
else
|
|
107
|
+
name = get_assembly_stage_name(assembly_list, assembly_template_name)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
post_body.merge!(:name => name) if name
|
|
111
|
+
post_body.merge!(:instance_bindings => instance_bindings) if instance_bindings
|
|
112
|
+
post_body.merge!(:settings_json_form => JSON.generate(settings)) if settings
|
|
113
|
+
post_body.merge!(:node_size => node_size) if node_size
|
|
114
|
+
post_body.merge!(:os_type => os_type) if os_type
|
|
115
|
+
post_body.merge!(:version => version) if version
|
|
116
|
+
post_body.merge!(:service_module_name => service_module_name) if service_module_name
|
|
117
|
+
post_body.merge!(:no_auto_complete => no_auto_complete) if no_auto_complete
|
|
118
|
+
post_body.merge!(:parent_service => parent_service) if parent_service
|
|
119
|
+
post_body.merge!(:is_target => is_target) if is_target
|
|
120
|
+
post_body.merge!(:do_not_encode => do_not_encode) if do_not_encode
|
|
121
|
+
|
|
122
|
+
response = post rest_url("assembly/stage"), post_body
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def deploy_aux(context_params)
|
|
126
|
+
forwarded_options = context_params.get_forwarded_options()
|
|
127
|
+
context_params.forward_options(forwarded_options.merge!(:do_not_encode => true))
|
|
128
|
+
stage_response = stage_aux(context_params)
|
|
129
|
+
return stage_response unless stage_response.ok?
|
|
130
|
+
|
|
131
|
+
if service_instance = stage_response.data['new_service_instance']
|
|
132
|
+
instance_name = service_instance['name']
|
|
133
|
+
|
|
134
|
+
DTK::Client::OsUtil.print("Service instance '/service/#{instance_name}' has been created!",:yellow)
|
|
135
|
+
|
|
136
|
+
new_context_params = DTK::Shell::ContextParams.new
|
|
137
|
+
new_context_params.add_context_to_params("service", "service")
|
|
138
|
+
new_context_params.add_context_name_to_params("service", "service", instance_name)
|
|
139
|
+
new_context_params.forward_options(:instance_name => instance_name)
|
|
140
|
+
|
|
141
|
+
response = ContextRouter.routeTask("service", "set_required_attributes_and_converge", new_context_params, @conn)
|
|
142
|
+
|
|
143
|
+
# change context to newly created service instance
|
|
144
|
+
MainContext.get_context.change_context(["/service/#{instance_name}"])
|
|
145
|
+
|
|
146
|
+
return response unless response.ok?
|
|
147
|
+
|
|
148
|
+
if forwarded_options['stream-results'] || options['stream-results']
|
|
149
|
+
forwarded_options = new_context_params.get_forwarded_options()
|
|
150
|
+
task_status_stream(instance_name) unless forwarded_options[:violations]
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
response
|
|
154
|
+
else
|
|
155
|
+
fail DtkError.new('Service instance is not staged properly, please try again!')
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def self.extended_context()
|
|
161
|
+
{
|
|
162
|
+
:command => {
|
|
163
|
+
:stage => {
|
|
164
|
+
:endpoint => "service_module",
|
|
165
|
+
:url => "service_module/list_assemblies",
|
|
166
|
+
:opts => {}
|
|
167
|
+
},
|
|
168
|
+
:stage_target => {
|
|
169
|
+
:endpoint => "service_module",
|
|
170
|
+
:url => "service_module/list_assemblies",
|
|
171
|
+
:opts => {}
|
|
172
|
+
},
|
|
173
|
+
:deploy_target => {
|
|
174
|
+
:endpoint => "service_module",
|
|
175
|
+
:url => "service_module/list_assemblies",
|
|
176
|
+
:opts => {}
|
|
177
|
+
},
|
|
178
|
+
:deploy => {
|
|
179
|
+
:endpoint => "service_module",
|
|
180
|
+
:url => "service_module/list_assemblies",
|
|
181
|
+
:opts => {}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def self.valid_children()
|
|
188
|
+
[:assembly, :remotes]
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def self.all_children()
|
|
192
|
+
[:assembly]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def self.multi_context_children()
|
|
196
|
+
[[:assembly], [:remotes], [:assembly, :remotes]]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def self.valid_child?(name_of_sub_context)
|
|
200
|
+
return ServiceModule.valid_children().include?(name_of_sub_context.to_sym)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def self.pretty_print_cols()
|
|
204
|
+
PPColumns.get(:service_module)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def self.validation_list(context_params)
|
|
208
|
+
get_cached_response(:service_module, "service_module/list", {})
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def self.whoami()
|
|
212
|
+
return :service_module, "service_module/list", nil
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def self.override_allowed_methods()
|
|
216
|
+
return DTK::Shell::OverrideTasks.new({
|
|
217
|
+
:command_only => {
|
|
218
|
+
:self => [
|
|
219
|
+
["list"," list [--remote] [--diff] [-n NAMESPACE]","# List service modules (local/remote). Use --diff to compare loaded and remote modules."]
|
|
220
|
+
],
|
|
221
|
+
:assembly => [
|
|
222
|
+
["list","list","# List assemblies for given service module."]
|
|
223
|
+
],
|
|
224
|
+
:remotes => [
|
|
225
|
+
["push-remote", "push-remote [REMOTE-NAME] [--force]", "# Push local changes to remote git repository"],
|
|
226
|
+
["list-remotes", "list-remotes", "# List git remotes for given module"],
|
|
227
|
+
["add-remote", "add-remote REMOTE-NAME REMOTE-URL", "# Add git remote for given module"],
|
|
228
|
+
["remove-remote", "remove-remote REPO-NAME [-y]", "# Remove git remote for given module"]
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
:identifier_only => {
|
|
232
|
+
:self => [
|
|
233
|
+
["list-assemblies","list-assemblies","# List assemblies associated with service module."],
|
|
234
|
+
["list-modules","list-modules","# List modules associated with service module."]
|
|
235
|
+
],
|
|
236
|
+
:assembly => [
|
|
237
|
+
["info","info","# Info for given assembly in current service module."],
|
|
238
|
+
# ["stage", "stage [INSTANCE-NAME] [-t TARGET-NAME/ID] [--node-size NODE-SIZE-SPEC] [--os-type OS-TYPE] [-v VERSION]", "# Stage assembly in target."],
|
|
239
|
+
# ["deploy","deploy [-v VERSION] [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
|
|
240
|
+
# ["deploy","deploy [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
|
|
241
|
+
# ["deploy","deploy [INSTANCE-NAME] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
|
|
242
|
+
["stage-target","stage-target [INSTANCE-NAME] [-t PARENT-SERVICE-INSTANCE-NAME/ID] [-v VERSION] [--no-auto-complete]", "# Stage assembly as target instance."],
|
|
243
|
+
["stage","stage [INSTANCE-NAME] [-t PARENT-SERVICE-INSTANCE-NAME/ID] [-v VERSION] [--no-auto-complete]", "# Stage assembly in target."],
|
|
244
|
+
["deploy-target","deploy-target [INSTANCE-NAME] [-v VERSION] [--no-auto-complete]", "# Deploy assembly as target instance."],
|
|
245
|
+
["deploy","deploy [INSTANCE-NAME] [-t PARENT-SERVICE-INSTANCE-NAME/ID] [-v VERSION] [--no-auto-complete]", "# Deploy assembly in target."],
|
|
246
|
+
["list-nodes","list-nodes", "# List all nodes for given assembly."],
|
|
247
|
+
["list-components","list-components", "# List all components for given assembly."],
|
|
248
|
+
["list-settings","list-settings", "# List all settings for given assembly."]
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
})
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
##MERGE-QUESTION: need to add options of what info is about
|
|
256
|
+
desc "SERVICE-MODULE-NAME/ID info", "Provides information about specified service module"
|
|
257
|
+
def info(context_params)
|
|
258
|
+
module_info_aux(context_params)
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
desc "SERVICE-MODULE-NAME/ID list-assemblies [-v VERSION] [--remote]","List assemblies associated with service module."
|
|
262
|
+
version_method_option
|
|
263
|
+
method_option :remote, :type => :boolean, :default => false
|
|
264
|
+
def list_assemblies(context_params)
|
|
265
|
+
context_params.method_arguments = ["assembly"]
|
|
266
|
+
|
|
267
|
+
if version = options.version
|
|
268
|
+
check_version_format(options.version) if !version.eql?('master') && !version.eql?('base')
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
list(context_params)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
desc "SERVICE-MODULE-NAME/ID list-component-modules","List component modules associated with service module."
|
|
275
|
+
method_option :remote, :type => :boolean, :default => false
|
|
276
|
+
def list_component_modules(context_params)
|
|
277
|
+
context_params.method_arguments = ["modules"]
|
|
278
|
+
list(context_params)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
desc "list [--remote] [--diffs] [-n NAMESPACE]","List service modules (local/remote). Use --diff to compare loaded and remote modules."
|
|
282
|
+
method_option :remote, :type => :boolean, :default => false
|
|
283
|
+
method_option :diffs, :type => :boolean, :default => false, :aliases => "--diff"
|
|
284
|
+
method_option :namespace, :aliases => "-n" ,
|
|
285
|
+
:type => :string,
|
|
286
|
+
:banner => "NAMESPACE",
|
|
287
|
+
:desc => "List modules only in specific namespace."
|
|
288
|
+
# method_option :with_versions, :type => :boolean, :default => false, :aliases => "with-versions"
|
|
289
|
+
def list(context_params)
|
|
290
|
+
service_module_id, about, service_module_name = context_params.retrieve_arguments([:service_module_id, :option_1, :option_2],method_argument_names)
|
|
291
|
+
datatype = nil
|
|
292
|
+
|
|
293
|
+
if context_params.is_there_command?(:"assembly")
|
|
294
|
+
about = "assembly"
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
if service_module_id.nil? && !service_module_name.nil?
|
|
298
|
+
service_module_id = service_module_name
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
remote = options.remote?
|
|
302
|
+
namespace = options.namespace
|
|
303
|
+
|
|
304
|
+
# If user is on service level, list task can't have about value set
|
|
305
|
+
if (context_params.last_entity_name == :"service-module") and about.nil?
|
|
306
|
+
action = remote ? "list_remote" : "list"
|
|
307
|
+
post_body = (remote ? { :rsa_pub_key => SSHUtil.rsa_pub_key_content() } : {:detail_to_include => ["remotes"]})
|
|
308
|
+
post_body[:diff] = options.diffs? ? options.diffs : {}
|
|
309
|
+
post_body.merge!(:module_namespace => namespace) if namespace
|
|
310
|
+
|
|
311
|
+
if post_body[:detail_to_include]
|
|
312
|
+
post_body[:detail_to_include] << 'versions' # if options.with_versions?
|
|
313
|
+
else
|
|
314
|
+
post_body[:detail_to_include]
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
response = post rest_url("service_module/#{action}"), post_body
|
|
318
|
+
# If user is on service identifier level, list task can't have '--remote' option.
|
|
319
|
+
else
|
|
320
|
+
# TODO: this is temp; will shortly support this
|
|
321
|
+
# raise DTK::Client::DtkValidationError.new("Not supported '--remote' option when listing service module assemblies, component templates or modules", true) if options.remote?
|
|
322
|
+
raise DTK::Client::DtkValidationError.new("Not supported type '#{about}' for list for current context level. Possible type options: 'assembly'", true) unless(about == "assembly" || about == "modules")
|
|
323
|
+
post_body = { :service_module_id => service_module_id }
|
|
324
|
+
if about
|
|
325
|
+
case about
|
|
326
|
+
when "assembly"
|
|
327
|
+
version = options.version
|
|
328
|
+
data_type = :assembly_template_description
|
|
329
|
+
action = "list_assemblies"
|
|
330
|
+
post_body.merge!(:version => version) if version
|
|
331
|
+
|
|
332
|
+
if remote
|
|
333
|
+
data_type = :remote_assembly_template_description
|
|
334
|
+
action = "list_remote_assemblies"
|
|
335
|
+
path_to_key = SSHUtil.default_rsa_pub_key_path()
|
|
336
|
+
rsa_pub_key = File.file?(path_to_key) && File.open(path_to_key){|f|f.read}.chomp
|
|
337
|
+
|
|
338
|
+
post_body.merge!(:remote_namespace => namespace) if namespace
|
|
339
|
+
post_body.merge!(:rsa_pub_key => rsa_pub_key)
|
|
340
|
+
end
|
|
341
|
+
when "modules"
|
|
342
|
+
data_type = remote ? :component_remote : :component_module
|
|
343
|
+
action = "list_component_modules"
|
|
344
|
+
else
|
|
345
|
+
raise_validation_error_method_usage('list')
|
|
346
|
+
end
|
|
347
|
+
end
|
|
348
|
+
response = post rest_url("service_module/#{action}"), post_body
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
unless response.nil?
|
|
352
|
+
if options.with_versions?
|
|
353
|
+
response.render_table(:module_with_versions, true)
|
|
354
|
+
else
|
|
355
|
+
response.render_table(data_type)
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
response
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
desc "SERVICE-MODULE-NAME/ID list-instances","List all instances associated with this service module."
|
|
363
|
+
def list_instances(context_params)
|
|
364
|
+
list_instances_aux(context_params)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
desc "SERVICE-MODULE-NAME/ID list-versions","List all versions associated with this service module."
|
|
368
|
+
def list_versions(context_params)
|
|
369
|
+
response = list_versions_aux(context_params)
|
|
370
|
+
return response unless response.ok?
|
|
371
|
+
response.render_table(:list_versions, true)
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
desc "SERVICE-MODULE-NAME/ID list-remote-versions","List all remote versions associated with this service module."
|
|
375
|
+
def list_remote_versions(context_params)
|
|
376
|
+
response = list_remote_versions_aux(context_params)
|
|
377
|
+
return response unless response.ok?
|
|
378
|
+
response.render_table(:list_versions, true)
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# version_method_option
|
|
382
|
+
desc "install NAMESPACE/REMOTE-SERVICE-MODULE-NAME [-y] [-v VERSION]", "Install remote service module into local environment. -y will automatically clone component modules."
|
|
383
|
+
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
|
384
|
+
# method_option :ignore, :aliases => '-i', :type => :boolean, :default => false
|
|
385
|
+
method_option :update_none, :type => :boolean, :default => false
|
|
386
|
+
version_method_option
|
|
387
|
+
def install(context_params)
|
|
388
|
+
response = install_module_aux(context_params)
|
|
389
|
+
@@invalidate_map << :service_module if response && response.ok?
|
|
390
|
+
|
|
391
|
+
response
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
=begin
|
|
395
|
+
# desc "SERVICE-MODULE-NAME/ID validate-model [-v VERSION]", "Check the DSL Model for Errors"
|
|
396
|
+
# version_method_option
|
|
397
|
+
desc "SERVICE-MODULE-NAME/ID validate-model", "Check the DSL Model for Errors"
|
|
398
|
+
def validate_model(context_params)
|
|
399
|
+
service_module_id, service_module_name = context_params.retrieve_arguments([:service_module_id!, :service_module_name],method_argument_names)
|
|
400
|
+
version = options["version"]
|
|
401
|
+
|
|
402
|
+
if service_module_name.to_s =~ /^[0-9]+$/
|
|
403
|
+
service_module_id = service_module_name
|
|
404
|
+
service_module_name = get_service_module_name(service_module_id)
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
modules_path = OsUtil.service_clone_location()
|
|
408
|
+
module_location = "#{modules_path}/#{service_module_name}#{version && "-#{version}"}"
|
|
409
|
+
|
|
410
|
+
raise DTK::Client::DtkValidationError, "Unable to parse service '#{service_module_name}#{version && "-#{version}"}' that doesn't exist on your local machine!" unless File.directory?(module_location)
|
|
411
|
+
|
|
412
|
+
reparse_aux(module_location)
|
|
413
|
+
end
|
|
414
|
+
=end
|
|
415
|
+
|
|
416
|
+
# desc "SERVICE-MODULE-NAME/ID import-version VERSION", "Import a specific version from a linked service module"
|
|
417
|
+
# def import_version(context_params)
|
|
418
|
+
# service_module_id,version = context_params.retrieve_arguments([:service_module_id!,:option_1!],method_argument_names)
|
|
419
|
+
# post_body = {
|
|
420
|
+
# :service_module_id => service_module_id,
|
|
421
|
+
# :version => version
|
|
422
|
+
# }
|
|
423
|
+
# response = post rest_url("service_module/import_version"), post_body
|
|
424
|
+
# @@invalidate_map << :module_service
|
|
425
|
+
|
|
426
|
+
# return response unless response.ok?
|
|
427
|
+
# module_name,repo_url,branch,version = response.data(:module_name,:repo_url,:workspace_branch,:version)
|
|
428
|
+
|
|
429
|
+
# if error = response.data(:dsl_parse_error)
|
|
430
|
+
# dsl_parsed_message = ServiceImporter.error_message("#{module_name}-#{version}", error)
|
|
431
|
+
# DTK::Client::OsUtil.print(dsl_parsed_message, :red)
|
|
432
|
+
# end
|
|
433
|
+
|
|
434
|
+
# #TODO: need to check if local clone directory exists
|
|
435
|
+
# Helper(:git_repo).create_clone_with_branch(:service_module,module_name,repo_url,branch,version)
|
|
436
|
+
# end
|
|
437
|
+
|
|
438
|
+
# desc "SERVICE-MODULE-NAME/ID create-on-dtkn [[NAMESPACE/]REMOTE-MODULE-NAME]","Export service module to remote repository"
|
|
439
|
+
# def create_on_dtkn(context_params)
|
|
440
|
+
# service_module_id, input_remote_name = context_params.retrieve_arguments([:service_module_id!, :option_1],method_argument_names)
|
|
441
|
+
|
|
442
|
+
# post_body = {
|
|
443
|
+
# :service_module_id => service_module_id,
|
|
444
|
+
# :remote_component_name => input_remote_name,
|
|
445
|
+
# :rsa_pub_key => SSHUtil.rsa_pub_key_content()
|
|
446
|
+
# }
|
|
447
|
+
|
|
448
|
+
# post rest_url("service_module/export"), post_body
|
|
449
|
+
# end
|
|
450
|
+
|
|
451
|
+
desc "SERVICE-MODULE-NAME/ID publish [[NAMESPACE/]REMOTE-SERVICE-MODULE-NAME] -v VERSION [--force]","Publish service module to remote repository"
|
|
452
|
+
version_method_option
|
|
453
|
+
method_option :force, :type => :boolean, :default => false, :aliases => '-f'
|
|
454
|
+
def publish(context_params)
|
|
455
|
+
publish_module_aux(context_params)
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
# desc "SERVICE-MODULE-NAME/ID push-to-dtkn [-n NAMESPACE] [-v VERSION]", "Push local copy of service module to remote repository."
|
|
459
|
+
# version_method_option
|
|
460
|
+
# desc "SERVICE-MODULE-NAME/ID push-to-dtkn [-n NAMESPACE]", "Push local copy of service module to remote repository."
|
|
461
|
+
# method_option "namespace",:aliases => "-n",
|
|
462
|
+
# :type => :string,
|
|
463
|
+
# :banner => "NAMESPACE",
|
|
464
|
+
# :desc => "Remote namespace"
|
|
465
|
+
# def push_to_dtkn(context_params)
|
|
466
|
+
# service_module_id, service_module_name = context_params.retrieve_arguments([:service_module_id!, :service_module_name],method_argument_names)
|
|
467
|
+
# version = options["version"]
|
|
468
|
+
|
|
469
|
+
# if service_module_name.to_s =~ /^[0-9]+$/
|
|
470
|
+
# service_id = service_module_name
|
|
471
|
+
# service_module_name = get_service_module_name(service_id)
|
|
472
|
+
# end
|
|
473
|
+
|
|
474
|
+
# modules_path = OsUtil.service_clone_location()
|
|
475
|
+
# module_location = "#{modules_path}/#{service_module_name}#{version && "-#{version}"}"
|
|
476
|
+
|
|
477
|
+
# unless File.directory?(module_location)
|
|
478
|
+
# if Console.confirmation_prompt("Unable to push to remote because module '#{service_module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
|
|
479
|
+
# response = clone_aux(:service_module,service_module_id,version,false)
|
|
480
|
+
|
|
481
|
+
# if(response.nil? || response.ok?)
|
|
482
|
+
# reparse_aux(module_location)
|
|
483
|
+
# push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], version) if Console.confirmation_prompt("Would you like to push changes to remote"+'?')
|
|
484
|
+
# end
|
|
485
|
+
|
|
486
|
+
# return response
|
|
487
|
+
# else
|
|
488
|
+
# # user choose not to clone needed module
|
|
489
|
+
# return
|
|
490
|
+
# end
|
|
491
|
+
# end
|
|
492
|
+
|
|
493
|
+
# reparse_aux(module_location)
|
|
494
|
+
# push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], options["version"])
|
|
495
|
+
# end
|
|
496
|
+
|
|
497
|
+
desc "SERVICE-MODULE-NAME/ID pull-dtkn [-n NAMESPACE] [--force]", "Update local service module from remote repository."
|
|
498
|
+
method_option :namespace,:aliases => '-n',
|
|
499
|
+
:type => :string,
|
|
500
|
+
:banner => "NAMESPACE",
|
|
501
|
+
:desc => "Remote namespace"
|
|
502
|
+
method_option :force,:aliases => '-f',
|
|
503
|
+
:type => :boolean,
|
|
504
|
+
:desc => "Force pull",
|
|
505
|
+
:default => false
|
|
506
|
+
def pull_dtkn(context_params)
|
|
507
|
+
pull_dtkn_aux(context_params)
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
desc "SERVICE-MODULE-NAME/ID chmod PERMISSION-SELECTOR", "Update remote permissions e.g. ug+rw , user and group get RW permissions"
|
|
511
|
+
method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
|
|
512
|
+
def chmod(context_params)
|
|
513
|
+
chmod_module_aux(context_params)
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
desc "SERVICE-MODULE-NAME/ID make-public", "Make this module public"
|
|
517
|
+
method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
|
|
518
|
+
def make_public(context_params)
|
|
519
|
+
make_public_module_aux(context_params)
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
desc "SERVICE-MODULE-NAME/ID make-private", "Make this module private"
|
|
523
|
+
method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
|
|
524
|
+
def make_private(context_params)
|
|
525
|
+
make_private_module_aux(context_params)
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
desc "SERVICE-MODULE-NAME/ID add-collaborators", "Add collabrators users or groups comma seperated (--users or --groups)"
|
|
529
|
+
method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
|
|
530
|
+
method_option "users",:aliases => "-u", :type => :string, :banner => "USERS", :desc => "User collabrators"
|
|
531
|
+
method_option "groups",:aliases => "-g", :type => :string, :banner => "GROUPS", :desc => "Group collabrators"
|
|
532
|
+
def add_collaborators(context_params)
|
|
533
|
+
add_collaborators_module_aux(context_params)
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
desc "SERVICE-MODULE-NAME/ID remove-collaborators", "Remove collabrators users or groups comma seperated (--users or --groups)"
|
|
537
|
+
method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
|
|
538
|
+
method_option "users",:aliases => "-u", :type => :string, :banner => "USERS", :desc => "User collabrators"
|
|
539
|
+
method_option "groups",:aliases => "-g", :type => :string, :banner => "GROUPS", :desc => "Group collabrators"
|
|
540
|
+
def remove_collaborators(context_params)
|
|
541
|
+
remove_collaborators_module_aux(context_params)
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
desc "SERVICE-MODULE-NAME/ID list-collaborators", "List collaborators for given module"
|
|
545
|
+
method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
|
|
546
|
+
def list_collaborators(context_params)
|
|
547
|
+
list_collaborators_module_aux(context_params)
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
##
|
|
551
|
+
#
|
|
552
|
+
# internal_trigger: this flag means that other method (internal) has trigger this.
|
|
553
|
+
# This will change behaviour of method
|
|
554
|
+
#
|
|
555
|
+
# desc "SERVICE-MODULE-NAME/ID clone [-v VERSION] [-n]", "Locally clone the service module files. Use -n to skip edit prompt"
|
|
556
|
+
# version_method_option
|
|
557
|
+
desc "SERVICE-MODULE-NAME/ID clone [-n] [-v VERSION]", "Locally clone the service module files. Use -n to skip edit prompt"
|
|
558
|
+
method_option :skip_edit, :aliases => '-n', :type => :boolean, :default => false
|
|
559
|
+
version_method_option
|
|
560
|
+
def clone(context_params, internal_trigger=false)
|
|
561
|
+
clone_module_aux(context_params, internal_trigger)
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# desc "SERVICE-MODULE-NAME/ID edit [-v VERSION]","Switch to unix editing for given service module."
|
|
565
|
+
# version_method_option
|
|
566
|
+
desc "SERVICE-MODULE-NAME/ID edit","Switch to unix editing for given service module."
|
|
567
|
+
def edit(context_params)
|
|
568
|
+
edit_module_aux(context_params)
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
# TODO: put in two versions, one that creates empty and anotehr taht creates from local dir; use --empty flag
|
|
572
|
+
desc "import [NAMESPACE:]SERVICE-MODULE-NAME", "Create new service module from local clone"
|
|
573
|
+
def import(context_params)
|
|
574
|
+
module_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
|
|
575
|
+
namespace, local_module_name = get_namespace_and_name(module_name, ':')
|
|
576
|
+
|
|
577
|
+
# first check that there is a directory there and it is not already a git repo, and it ha appropriate content
|
|
578
|
+
response = Helper(:git_repo).check_local_dir_exists_with_content(:service_module, local_module_name, nil, namespace)
|
|
579
|
+
return response unless response.ok?
|
|
580
|
+
service_directory = response.data(:module_directory)
|
|
581
|
+
|
|
582
|
+
#check for yaml/json parsing errors before import
|
|
583
|
+
reparse_aux(service_directory)
|
|
584
|
+
|
|
585
|
+
# first call to create empty module
|
|
586
|
+
response = post rest_url("service_module/create"), { :module_name => local_module_name, :module_namespace => namespace }
|
|
587
|
+
return response unless response.ok?
|
|
588
|
+
@@invalidate_map << :service_module
|
|
589
|
+
|
|
590
|
+
# initial commit for given service module
|
|
591
|
+
service_module_id, repo_info = response.data(:service_module_id, :repo_info)
|
|
592
|
+
repo_url,repo_id,module_id,branch,new_module_name = [:repo_url,:repo_id,:module_id,:workspace_branch,:full_module_name].map { |k| repo_info[k.to_s] }
|
|
593
|
+
|
|
594
|
+
response = Helper(:git_repo).rename_and_initialize_clone_and_push(:service_module, local_module_name, new_module_name,branch,repo_url,service_directory)
|
|
595
|
+
return response unless (response && response.ok?)
|
|
596
|
+
|
|
597
|
+
repo_obj,commit_sha = response.data(:repo_obj,:commit_sha)
|
|
598
|
+
module_final_dir = repo_obj.repo_dir
|
|
599
|
+
old_dir = response.data[:old_dir]
|
|
600
|
+
|
|
601
|
+
context_params.add_context_to_params(local_module_name, :"service-module", module_id)
|
|
602
|
+
response = push(context_params,true)
|
|
603
|
+
|
|
604
|
+
unless response.ok?
|
|
605
|
+
# remove new directory and leave the old one if import without namespace failed
|
|
606
|
+
if old_dir and (old_dir != module_final_dir)
|
|
607
|
+
FileUtils.rm_rf(module_final_dir) unless namespace
|
|
608
|
+
end
|
|
609
|
+
return response
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
# remove the old one if no errors while importing
|
|
613
|
+
# DTK-1768: removed below; and replaced by removing old dir if unequal to final dir
|
|
614
|
+
# was not sure why clause namespace was in so kept this condition
|
|
615
|
+
#FileUtils.rm_rf(old_dir) unless namespace
|
|
616
|
+
if old_dir and (old_dir != module_final_dir)
|
|
617
|
+
FileUtils.rm_rf(old_dir) unless namespace
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
DTK::Client::OsUtil.print("Module '#{new_module_name}' has been created and module directory moved to #{repo_obj.repo_dir}",:yellow) unless namespace
|
|
621
|
+
|
|
622
|
+
response
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
desc "SERVICE-MODULE-NAME/ID stage-target ASSEMBLY-NAME [INSTANCE-NAME] [-v VERSION] [--no-auto-complete]", "Stage assembly as target instance."
|
|
626
|
+
method_option :settings, :type => :string, :aliases => '-s'
|
|
627
|
+
method_option :no_auto_complete, :type => :boolean, :default => false, :aliases => '--no-ac'
|
|
628
|
+
version_method_option
|
|
629
|
+
#hidden options
|
|
630
|
+
method_option "instance-bindings", :type => :string
|
|
631
|
+
method_option :is_target, :type => :boolean, :default => true
|
|
632
|
+
def stage_target(context_params)
|
|
633
|
+
response = stage_aux(context_params)
|
|
634
|
+
return response unless response.ok?
|
|
635
|
+
|
|
636
|
+
# when changing context send request for getting latest assemblies instead of getting from cache
|
|
637
|
+
@@invalidate_map << :service
|
|
638
|
+
@@invalidate_map << :assembly
|
|
639
|
+
|
|
640
|
+
return response
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
desc "SERVICE-MODULE-NAME/ID stage ASSEMBLY-NAME [INSTANCE-NAME] [-t PARENT-SERVICE-INSTANCE-NAME/ID] [-v VERSION] [--no-auto-complete]", "Stage assembly in target."
|
|
644
|
+
method_option :settings, :type => :string, :aliases => '-s'
|
|
645
|
+
method_option :no_auto_complete, :type => :boolean, :default => false, :aliases => '--no-ac'
|
|
646
|
+
method_option :parent_service, :type => :string, :aliases => '-t'
|
|
647
|
+
version_method_option
|
|
648
|
+
#hidden option
|
|
649
|
+
method_option "instance-bindings", :type => :string
|
|
650
|
+
def stage(context_params)
|
|
651
|
+
response = stage_aux(context_params)
|
|
652
|
+
return response unless response.ok?
|
|
653
|
+
|
|
654
|
+
# when changing context send request for getting latest assemblies instead of getting from cache
|
|
655
|
+
@@invalidate_map << :service
|
|
656
|
+
@@invalidate_map << :assembly
|
|
657
|
+
|
|
658
|
+
return response
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
# desc "SERVICE-MODULE-NAME/ID push [-v VERSION] [-m COMMIT-MSG]", "Push changes from local copy of service module to server"
|
|
663
|
+
# version_method_option
|
|
664
|
+
=begin
|
|
665
|
+
desc "SERVICE-MODULE-NAME/ID push origin|dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of service module to server (origin) or to remote repository (dtkn)."
|
|
666
|
+
method_option "message",:aliases => "-m" ,
|
|
667
|
+
:type => :string,
|
|
668
|
+
:banner => "COMMIT-MSG",
|
|
669
|
+
:desc => "Commit message"
|
|
670
|
+
method_option "namespace",:aliases => "-n",
|
|
671
|
+
:type => :string,
|
|
672
|
+
:banner => "NAMESPACE",
|
|
673
|
+
:desc => "Remote namespace"
|
|
674
|
+
#hidden option for dev
|
|
675
|
+
method_option 'force-parse', :aliases => '-f', :type => :boolean, :default => false
|
|
676
|
+
def push(context_params, internal_trigger=false)
|
|
677
|
+
service_module_id, service_module_name, catalog = context_params.retrieve_arguments([:service_module_id!, :service_module_name, :option_1],method_argument_names)
|
|
678
|
+
version = options["version"]
|
|
679
|
+
|
|
680
|
+
raise DtkValidationError, "You have to provide valid catalog to push changes to! Valid catalogs: #{PushCatalogs}" unless catalog
|
|
681
|
+
|
|
682
|
+
if service_module_name.to_s =~ /^[0-9]+$/
|
|
683
|
+
service_module_id = service_module_name
|
|
684
|
+
service_module_name = get_service_module_name(service_module_id)
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
modules_path = OsUtil.service_clone_location()
|
|
688
|
+
module_location = "#{modules_path}/#{service_module_name}#{version && "-#{version}"}"
|
|
689
|
+
reparse_aux(module_location) unless internal_trigger
|
|
690
|
+
|
|
691
|
+
if catalog.to_s.eql?("origin")
|
|
692
|
+
push_clone_changes_aux(:service_module,service_module_id,version,nil,internal_trigger)
|
|
693
|
+
elsif catalog.to_s.eql?("dtkn")
|
|
694
|
+
unless File.directory?(module_location)
|
|
695
|
+
if Console.confirmation_prompt("Unable to push to remote because module '#{service_module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
|
|
696
|
+
response = clone_aux(:service_module,service_module_id,version,false)
|
|
697
|
+
|
|
698
|
+
if(response.nil? || response.ok?)
|
|
699
|
+
reparse_aux(module_location)
|
|
700
|
+
push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], version) if Console.confirmation_prompt("Would you like to push changes to remote"+'?')
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
return response
|
|
704
|
+
else
|
|
705
|
+
# user choose not to clone needed module
|
|
706
|
+
return
|
|
707
|
+
end
|
|
708
|
+
end
|
|
709
|
+
|
|
710
|
+
push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], options["version"])
|
|
711
|
+
else
|
|
712
|
+
raise DtkValidationError, "You have to provide valid catalog to push changes to! Valid catalogs: #{PushCatalogs}"
|
|
713
|
+
end
|
|
714
|
+
end
|
|
715
|
+
PushCatalogs = ["origin", "dtkn"]
|
|
716
|
+
=end
|
|
717
|
+
|
|
718
|
+
# desc "SERVICE-MODULE-NAME/ID push [-m COMMIT-MSG]", "Push changes from local copy to server (origin)."
|
|
719
|
+
desc "SERVICE-MODULE-NAME/ID push [--force] [--docs]", "Push changes from local copy to server."
|
|
720
|
+
method_option "message",:aliases => "-m" ,
|
|
721
|
+
:type => :string,
|
|
722
|
+
:banner => "COMMIT-MSG",
|
|
723
|
+
:desc => "Commit message"
|
|
724
|
+
method_option :force, :type => :boolean, :default => false, :aliases => '-f'
|
|
725
|
+
method_option :docs, :type => :boolean, :default => false, :aliases => '-d'
|
|
726
|
+
def push(context_params, internal_trigger=false)
|
|
727
|
+
push_module_aux(context_params, internal_trigger)
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
# desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of service module to remote repository (dtkn)."
|
|
731
|
+
desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [--force]", "Push changes from local copy of service module to remote repository (dtkn)."
|
|
732
|
+
method_option "message",:aliases => "-m" ,
|
|
733
|
+
:type => :string,
|
|
734
|
+
:banner => "COMMIT-MSG",
|
|
735
|
+
:desc => "Commit message"
|
|
736
|
+
method_option "namespace",:aliases => "-n",
|
|
737
|
+
:type => :string,
|
|
738
|
+
:banner => "NAMESPACE",
|
|
739
|
+
:desc => "Remote namespace"
|
|
740
|
+
method_option :force, :type => :boolean, :default => false, :aliases => '-f'
|
|
741
|
+
def push_dtkn(context_params, internal_trigger=false)
|
|
742
|
+
push_dtkn_module_aux(context_params, internal_trigger)
|
|
743
|
+
end
|
|
744
|
+
|
|
745
|
+
desc "SERVICE-MODULE-NAME/ID list-diffs", "List diffs between module on server and remote repo"
|
|
746
|
+
method_option :remote, :type => :boolean, :default => false
|
|
747
|
+
def list_diffs(context_params)
|
|
748
|
+
list_remote_module_diffs(context_params)
|
|
749
|
+
# list_diffs_module_aux(context_params)
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
desc "delete-version SERVICE-MODULE-NAME [-y] [-p] [-v VERSION]", "Delete service module version and all items contained in it. Optional parameter [-p] is to delete local directory."
|
|
753
|
+
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
|
754
|
+
method_option :purge, :aliases => '-p', :type => :boolean, :default => false
|
|
755
|
+
version_method_option
|
|
756
|
+
def delete_version(context_params, method_opts = {})
|
|
757
|
+
response = delete_module_aux(context_params, method_opts)
|
|
758
|
+
@@invalidate_map << :service_module if response && response.ok?
|
|
759
|
+
|
|
760
|
+
response
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
desc "delete SERVICE-MODULE-NAME [-y] [-p]", "Delete service module and all items contained in it. Optional parameter [-p] is to delete local directory."
|
|
764
|
+
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
|
765
|
+
method_option :purge, :aliases => '-p', :type => :boolean, :default => false
|
|
766
|
+
def delete(context_params)
|
|
767
|
+
response = delete_module_aux(context_params, :delete_all => true)
|
|
768
|
+
@@invalidate_map << :service_module if response && response.ok?
|
|
769
|
+
|
|
770
|
+
response
|
|
771
|
+
end
|
|
772
|
+
|
|
773
|
+
desc "delete-from-catalog NAMESPACE/REMOTE-SERVICE-MODULE-NAME [-y] [--force] [-v VERSION]", "Delete the service module from the DTK Network catalog"
|
|
774
|
+
method_option :confirmed, :aliases => '-y', :type => :boolean, :default => false
|
|
775
|
+
method_option :force, :type => :boolean, :default => false
|
|
776
|
+
version_method_option
|
|
777
|
+
def delete_from_catalog(context_params)
|
|
778
|
+
delete_from_catalog_aux(context_params)
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
desc "SERVICE-MODULE-NAME/ID delete-assembly ASSEMBLY-NAME [-y]", "Delete assembly from service module."
|
|
782
|
+
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
|
783
|
+
def delete_assembly(context_params)
|
|
784
|
+
response = delete_assembly_aux(context_params)
|
|
785
|
+
@@invalidate_map << :assembly if response && response.ok?
|
|
786
|
+
|
|
787
|
+
response
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
# REMOTE INTERACTION
|
|
792
|
+
|
|
793
|
+
desc "HIDE_FROM_BASE push-remote [REMOTE-NAME] [--force]", "Push local changes to remote git repository"
|
|
794
|
+
method_option :force, :type => :boolean, :default => false
|
|
795
|
+
def push_remote(context_params)
|
|
796
|
+
push_remote_module_aux(context_params)
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
desc "HIDE_FROM_BASE list-remotes", "List git remotes for given module"
|
|
800
|
+
def list_remotes(context_params)
|
|
801
|
+
remote_list_aux(context_params)
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
desc "HIDE_FROM_BASE add-remote REMOTE-NAME REMOTE-URL", "Add git remote for given module"
|
|
805
|
+
def add_remote(context_params)
|
|
806
|
+
remote_add_aux(context_params)
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
desc "HIDE_FROM_BASE remove-remote REPO-NAME [-y]", "Remove git remote for given module"
|
|
810
|
+
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
|
811
|
+
def remove_remote(context_params)
|
|
812
|
+
remote_remove_aux(context_params)
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
desc "SERVICE-MODULE-NAME/ID fork NAMESPACE", "Fork service module to new namespace"
|
|
816
|
+
def fork(context_params)
|
|
817
|
+
fork_aux(context_params)
|
|
818
|
+
end
|
|
819
|
+
|
|
820
|
+
desc "SERVICE-MODULE-NAME/ID create-new-version VERSION", "Create new service module version"
|
|
821
|
+
def create_new_version(context_params)
|
|
822
|
+
create_new_version_aux(context_params)
|
|
823
|
+
end
|
|
824
|
+
|
|
825
|
+
desc "SERVICE-MODULE-NAME/ID deploy-target ASSEMBLY-NAME [INSTANCE-NAME] [-v VERSION] [--no-auto-complete] [--stream-results]", "Deploy assembly as target instance."
|
|
826
|
+
method_option :no_auto_complete, :type => :boolean, :default => false, :aliases => '--no-ac'
|
|
827
|
+
method_option 'stream-results', :aliases => '-s', :type => :boolean, :default => false, :desc => "Stream results"
|
|
828
|
+
version_method_option
|
|
829
|
+
#hidden options
|
|
830
|
+
method_option "instance-bindings", :type => :string
|
|
831
|
+
method_option :is_target, :type => :boolean, :default => true
|
|
832
|
+
# method_option :settings, :type => :string, :aliases => '-s'
|
|
833
|
+
def deploy_target(context_params)
|
|
834
|
+
response = deploy_aux(context_params)
|
|
835
|
+
return response unless response.ok?
|
|
836
|
+
|
|
837
|
+
@@invalidate_map << :service
|
|
838
|
+
@@invalidate_map << :assembly
|
|
839
|
+
|
|
840
|
+
response
|
|
841
|
+
end
|
|
842
|
+
|
|
843
|
+
desc "SERVICE-MODULE-NAME/ID deploy ASSEMBLY-NAME [INSTANCE-NAME] [-t PARENT-SERVICE-INSTANCE-NAME/ID] [-v VERSION] [--no-auto-complete] [--stream-results]", "Deploy assembly in target."
|
|
844
|
+
method_option :no_auto_complete, :type => :boolean, :default => false, :aliases => '--no-ac'
|
|
845
|
+
method_option :parent_service, :type => :string, :aliases => '-t'
|
|
846
|
+
method_option 'stream-results', :aliases => '-s', :type => :boolean, :default => false, :desc => "Stream results"
|
|
847
|
+
version_method_option
|
|
848
|
+
#hidden options
|
|
849
|
+
method_option "instance-bindings", :type => :string
|
|
850
|
+
# method_option :settings, :type => :string, :aliases => '-s'
|
|
851
|
+
def deploy(context_params)
|
|
852
|
+
response = deploy_aux(context_params)
|
|
853
|
+
return response unless response.ok?
|
|
854
|
+
|
|
855
|
+
@@invalidate_map << :service
|
|
856
|
+
@@invalidate_map << :assembly
|
|
857
|
+
|
|
858
|
+
response
|
|
859
|
+
end
|
|
860
|
+
|
|
861
|
+
#
|
|
862
|
+
# DEVELOPMENT MODE METHODS
|
|
863
|
+
#
|
|
864
|
+
if DTK::Configuration.get(:development_mode)
|
|
865
|
+
|
|
866
|
+
desc "delete-all","Delete all service modules"
|
|
867
|
+
def delete_all(context_params)
|
|
868
|
+
return unless Console.confirmation_prompt("This will DELETE ALL service modules, are you sure"+'?')
|
|
869
|
+
response = list(context_params)
|
|
870
|
+
|
|
871
|
+
response.data().each do |e|
|
|
872
|
+
run_shell_command("delete #{e['display_name']} -y -p")
|
|
873
|
+
end
|
|
874
|
+
end
|
|
875
|
+
|
|
876
|
+
end
|
|
877
|
+
=begin
|
|
878
|
+
desc "SERVICE-NAME/ID assembly-templates list", "List assembly templates optionally filtered by service ID/NAME."
|
|
879
|
+
def assembly_template(context_params)
|
|
880
|
+
|
|
881
|
+
service_id, method_name = context_params.retrieve_arguments([:service_name!, :option_1!],method_argument_names)
|
|
882
|
+
|
|
883
|
+
options_args = ["-s", service_id]
|
|
884
|
+
|
|
885
|
+
entity_name = "assembly_template"
|
|
886
|
+
load_command(entity_name)
|
|
887
|
+
entity_class = DTK::Client.const_get "#{cap_form(entity_name)}"
|
|
888
|
+
|
|
889
|
+
response = entity_class.execute_from_cli(@conn, method_name, DTK::Shell::ContextParams.new, options_args, false)
|
|
890
|
+
|
|
891
|
+
end
|
|
892
|
+
=end
|
|
893
|
+
=begin
|
|
894
|
+
TODO: needs to be rewritten
|
|
895
|
+
desc "create-jenkins-project SERVICE-ID", "Create Jenkins project for service module"
|
|
896
|
+
def create_jenkins_project(context_params)
|
|
897
|
+
service_module_id = context_params.retrieve_arguments([:service_id],method_argument_names)
|
|
898
|
+
#require put here so dont necessarily have to install jenkins client gems
|
|
899
|
+
|
|
900
|
+
dtk_require_from_base('command_helpers/jenkins_client')
|
|
901
|
+
response = get rest_url("service_module/workspace_branch_info/#{service_module_id.to_s}")
|
|
902
|
+
unless response.ok?
|
|
903
|
+
errors_message = ''
|
|
904
|
+
response['errors'].each { |error| errors_message += ", reason='#{error['code']}' message='#{error['message']}'" }
|
|
905
|
+
raise DTK::Client::DtkError, "Invalid jenkins response#{errors_message}"
|
|
906
|
+
end
|
|
907
|
+
module_name,repo_url,branch = response.data_ret_and_remove!(:module_name,:repo_url,:workspace_branch)
|
|
908
|
+
JenkinsClient.create_service_module_project?(service_module_id,module_name,repo_url,branch)
|
|
909
|
+
#TODO: right now JenkinsClient wil throw error if problem; better to create an error resonse
|
|
910
|
+
response
|
|
911
|
+
end
|
|
912
|
+
=end
|
|
913
|
+
end
|
|
914
|
+
end
|