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,210 @@
|
|
|
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
|
+
dtk_require_from_base("util/os_util")
|
|
19
|
+
dtk_require_from_base('commands')
|
|
20
|
+
dtk_require_from_base("command_helper")
|
|
21
|
+
|
|
22
|
+
module DTK::Client
|
|
23
|
+
class CommonModule
|
|
24
|
+
class Import < BaseCommandHelper
|
|
25
|
+
include CommandBase
|
|
26
|
+
include CommandHelperMixin
|
|
27
|
+
include PushCloneChangesMixin
|
|
28
|
+
include ReparseMixin
|
|
29
|
+
|
|
30
|
+
def from_git(internal_trigger = false)
|
|
31
|
+
OsUtil.print('Retrieving git module data, please wait ...') unless internal_trigger
|
|
32
|
+
|
|
33
|
+
git_repo_url, module_name = retrieve_arguments([:option_1!, :option_2!])
|
|
34
|
+
namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
|
|
35
|
+
|
|
36
|
+
module_type = @command.get_module_type(@context_params)
|
|
37
|
+
thor_options = { :git_import => true}
|
|
38
|
+
|
|
39
|
+
unless namespace
|
|
40
|
+
namespace_response = post rest_url("namespace/default_namespace_name")
|
|
41
|
+
return namespace_response unless namespace_response.ok?
|
|
42
|
+
|
|
43
|
+
namespace = namespace_response.data
|
|
44
|
+
thor_options[:default_namespace] = namespace
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
opts = {
|
|
48
|
+
:namespace => namespace,
|
|
49
|
+
:branch => @options['branch']
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
response = Helper(:git_repo).create_clone_from_optional_branch(module_type.to_sym, local_module_name, git_repo_url, opts)
|
|
53
|
+
return response unless response.ok?
|
|
54
|
+
|
|
55
|
+
# Remove .git directory to rid of git pointing to user's github
|
|
56
|
+
FileUtils.rm_rf("#{response['data']['module_directory']}/.git")
|
|
57
|
+
|
|
58
|
+
@context_params.forward_options(thor_options)
|
|
59
|
+
create_response = from_git_or_file()
|
|
60
|
+
|
|
61
|
+
unless create_response.ok?
|
|
62
|
+
delete_dir = namespace.nil? ? local_module_name : "#{namespace}/#{local_module_name}"
|
|
63
|
+
full_module_name = create_response.data[:full_module_name]
|
|
64
|
+
local_module_name = full_module_name.nil? ? delete_dir : full_module_name
|
|
65
|
+
|
|
66
|
+
@command.delete_module_sub_aux(@context_params, local_module_name, :force_delete => true, :no_error_msg => true, :purge => true)
|
|
67
|
+
return create_response
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
opts_pull = {
|
|
71
|
+
:local_branch => @branch,
|
|
72
|
+
:namespace => @module_namespace
|
|
73
|
+
}
|
|
74
|
+
pull_response = Helper(:git_repo).pull_changes(module_type, @module_name, opts_pull)
|
|
75
|
+
return pull_response unless pull_response.ok?
|
|
76
|
+
|
|
77
|
+
if external_dependencies = create_response.data(:external_dependencies)
|
|
78
|
+
print_external_dependencies(external_dependencies, 'in the git repo')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
unless internal_trigger
|
|
82
|
+
OsUtil.print("Successfully installed #{ModuleUtil.module_name(module_type)} '#{ModuleUtil.join_name(@module_name, @module_namespace)}' from git.", :green)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def from_file()
|
|
87
|
+
module_type = @command.get_module_type(@context_params)
|
|
88
|
+
module_name = retrieve_arguments([:option_1!])
|
|
89
|
+
opts = {}
|
|
90
|
+
namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
|
|
91
|
+
|
|
92
|
+
response = from_git_or_file()
|
|
93
|
+
return response unless response.ok?
|
|
94
|
+
|
|
95
|
+
opts_pull = {
|
|
96
|
+
:local_branch => @branch,
|
|
97
|
+
:namespace => @module_namespace
|
|
98
|
+
}
|
|
99
|
+
resp = Helper(:git_repo).pull_changes(module_type, @module_name, opts_pull)
|
|
100
|
+
return resp unless resp.ok?
|
|
101
|
+
|
|
102
|
+
if error = response.data(:dsl_parse_error)
|
|
103
|
+
dsl_parsed_message = ServiceImporter.error_message(module_name, error)
|
|
104
|
+
DTK::Client::OsUtil.print(dsl_parsed_message, :red)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# remove source directory if no errors while importing
|
|
108
|
+
module_final_dir = @repo_obj.repo_dir
|
|
109
|
+
if @old_dir and (@old_dir != module_final_dir)
|
|
110
|
+
FileUtils.rm_rf(@old_dir) unless namespace
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
if external_dependencies = response.data(:external_dependencies)
|
|
114
|
+
print_external_dependencies(external_dependencies, 'dtk.model.yaml includes')
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# if user do import from default directory (e.g. import ntp - without namespace) print message
|
|
118
|
+
DTK::Client::OsUtil.print("Module '#{@new_module_name}' has been created and module directory moved to #{module_final_dir}",:yellow) unless namespace
|
|
119
|
+
|
|
120
|
+
Response::Ok.new()
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
private
|
|
125
|
+
|
|
126
|
+
def from_git_or_file()
|
|
127
|
+
|
|
128
|
+
default_ns = @context_params.get_forwarded_options()[:default_namespace]
|
|
129
|
+
git_import = @context_params.get_forwarded_options()[:git_import]
|
|
130
|
+
|
|
131
|
+
name_option = git_import ? :option_2! : :option_1!
|
|
132
|
+
|
|
133
|
+
if git_import
|
|
134
|
+
module_git_url, module_name = @context_params.retrieve_arguments([:option_1!, :option_2!])
|
|
135
|
+
else
|
|
136
|
+
module_name, module_git_url = @context_params.retrieve_arguments([:option_1!, :option_2!])
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
module_type = @command.get_module_type(@context_params)
|
|
140
|
+
version = @options["version"]
|
|
141
|
+
|
|
142
|
+
# extract namespace and module_name from full name (r8:maven will result in namespace = r8 & name = maven)
|
|
143
|
+
namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
|
|
144
|
+
namespace = default_ns if default_ns && namespace.nil?
|
|
145
|
+
|
|
146
|
+
# first check that there is a directory there and it is not already a git repo, and it ha appropriate content
|
|
147
|
+
response = Helper(:git_repo).check_local_dir_exists_with_content(module_type.to_sym, local_module_name, nil, namespace)
|
|
148
|
+
return response unless response.ok?
|
|
149
|
+
|
|
150
|
+
#check for yaml/json parsing errors before import
|
|
151
|
+
module_directory = response.data(:module_directory)
|
|
152
|
+
reparse_aux(module_directory)
|
|
153
|
+
|
|
154
|
+
# first make call to server to create an empty repo
|
|
155
|
+
post_body = {
|
|
156
|
+
:module_name => local_module_name,
|
|
157
|
+
:module_namespace => namespace,
|
|
158
|
+
:module_git_url => module_git_url
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
response = post(rest_url("#{module_type}/create"), post_body)
|
|
162
|
+
return response unless response.ok?
|
|
163
|
+
|
|
164
|
+
repo_url, repo_id, @module_id, branch, @new_module_name = response.data(:repo_url, :repo_id, :module_id, :workspace_branch, :full_module_name)
|
|
165
|
+
response = Helper(:git_repo).rename_and_initialize_clone_and_push(module_type.to_sym, local_module_name, @new_module_name, branch, repo_url, module_directory)
|
|
166
|
+
return response unless (response && response.ok?)
|
|
167
|
+
|
|
168
|
+
@repo_obj, commit_sha = response.data(:repo_obj, :commit_sha)
|
|
169
|
+
module_final_dir = @repo_obj.repo_dir
|
|
170
|
+
@old_dir = response.data[:old_dir]
|
|
171
|
+
|
|
172
|
+
post_body = {
|
|
173
|
+
:repo_id => repo_id,
|
|
174
|
+
:commit_sha => commit_sha,
|
|
175
|
+
:commit_dsl => true,
|
|
176
|
+
:scaffold_if_no_dsl => true,
|
|
177
|
+
"#{module_type}_id".to_sym => @module_id
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if git_import
|
|
181
|
+
post_body.merge!(:git_import => true)
|
|
182
|
+
else
|
|
183
|
+
post_body.merge!(:update_from_includes => true)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
response = post(rest_url("#{module_type}/update_from_initial_create"), post_body)
|
|
187
|
+
|
|
188
|
+
unless response.ok?
|
|
189
|
+
response.set_data_hash({ :full_module_name => @new_module_name })
|
|
190
|
+
# remove new directory and leave the old one if import without namespace failed
|
|
191
|
+
if @old_dir and (@old_dir != module_final_dir)
|
|
192
|
+
FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
|
|
193
|
+
end
|
|
194
|
+
return response
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
dsl_updated_info = response.data(:dsl_updated_info)
|
|
198
|
+
dsl_created_info = response.data(:dsl_created_info)
|
|
199
|
+
DTK::Client::OsUtil.print("A module_refs.yaml file has been created for you, located at #{module_final_dir}", :yellow) if dsl_updated_info && !dsl_updated_info.empty?
|
|
200
|
+
DTK::Client::OsUtil.print("A #{dsl_created_info["path"]} file has been created for you, located at #{module_final_dir}", :yellow) if dsl_created_info && !dsl_created_info.empty?
|
|
201
|
+
|
|
202
|
+
@module_name, @module_namespace, repo_url, @branch, not_ok_response = workspace_branch_info(module_type, @module_id, version)
|
|
203
|
+
return not_ok_response if not_ok_response
|
|
204
|
+
|
|
205
|
+
response
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
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 NodeMixin
|
|
20
|
+
def get_node_info_for_ssh_login(node_id, context_params)
|
|
21
|
+
context_params.forward_options(:json_return => true)
|
|
22
|
+
response = info_aux(context_params)
|
|
23
|
+
return response unless response.ok?
|
|
24
|
+
# Should only have info about the specfic node_id
|
|
25
|
+
|
|
26
|
+
unless node_info = response.data(:nodes).find{ |node| node_id == (node['node_properties'] || {})['node_id'] }
|
|
27
|
+
raise DtkError, "Cannot find info about node with id '#{node_id}'"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
data = {}
|
|
31
|
+
node_properties = node_info['node_properties'] || {}
|
|
32
|
+
if public_dns = node_properties['ec2_public_address']
|
|
33
|
+
data.merge!('public_dns' => public_dns)
|
|
34
|
+
end
|
|
35
|
+
if default_login_user = NodeMixin.default_login_user?(node_properties)
|
|
36
|
+
data.merge!('default_login_user' => default_login_user)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Response::Ok.new(data)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.default_login_user?(node_properties)
|
|
43
|
+
if os_type = node_properties['os_type']
|
|
44
|
+
DefaultLoginByOSType[os_type]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
DefaultLoginByOSType = {
|
|
49
|
+
'ubuntu' => 'ubuntu',
|
|
50
|
+
'amazon-linux' => 'ec2-user'
|
|
51
|
+
}
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
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 Poller
|
|
20
|
+
|
|
21
|
+
PERIOD_WAIT_TIME = 1
|
|
22
|
+
|
|
23
|
+
def poller_response(wait_time = PERIOD_WAIT_TIME)
|
|
24
|
+
begin
|
|
25
|
+
response = nil
|
|
26
|
+
thread = Thread.new(self) do |main_thread|
|
|
27
|
+
begin
|
|
28
|
+
while true
|
|
29
|
+
messages_response = main_thread.get main_thread.rest_url("messages/retrieve")
|
|
30
|
+
print_response(messages_response.data) if messages_response.ok?
|
|
31
|
+
sleep(wait_time)
|
|
32
|
+
end
|
|
33
|
+
rescue => e
|
|
34
|
+
puts e.message
|
|
35
|
+
pp e.backtrace
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
response = yield
|
|
40
|
+
ensure
|
|
41
|
+
thread.kill
|
|
42
|
+
end
|
|
43
|
+
response
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def print_response(message_array)
|
|
47
|
+
message_array.each do |msg|
|
|
48
|
+
DTK::Client::OsUtil.print(msg['message'], resolve_type(msg['type']))
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def resolve_type(message_type)
|
|
53
|
+
case message_type.to_sym
|
|
54
|
+
when :info
|
|
55
|
+
:white
|
|
56
|
+
when :warning
|
|
57
|
+
:yellow
|
|
58
|
+
when :error
|
|
59
|
+
:red
|
|
60
|
+
else
|
|
61
|
+
:white
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
dtk_require_common_commands('thor/common')
|
|
19
|
+
module DTK::Client
|
|
20
|
+
module PullCloneChangesMixin
|
|
21
|
+
def pull_clone_changes?(module_type,module_id,version=nil,opts={})
|
|
22
|
+
module_name, module_namespace,repo_url,branch,not_ok_response = workspace_branch_info(module_type,module_id,version,opts)
|
|
23
|
+
return not_ok_response if not_ok_response
|
|
24
|
+
opts_pull = opts.merge(:local_branch => branch,:namespace => module_namespace)
|
|
25
|
+
Helper(:git_repo).pull_changes(module_type,module_name,opts_pull)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
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 PullFromRemoteMixin
|
|
20
|
+
def pull_from_remote_aux(module_type,module_id,opts={})
|
|
21
|
+
version = opts[:version]
|
|
22
|
+
remote_namespace = opts[:remote_namespace]
|
|
23
|
+
#get remote module info, errors raised if remote is not linked or access errors
|
|
24
|
+
path_to_key = SSHUtil.default_rsa_pub_key_path()
|
|
25
|
+
rsa_pub_key = File.file?(path_to_key) && File.open(path_to_key){|f|f.read}.chomp
|
|
26
|
+
|
|
27
|
+
post_body = PostBody.new(
|
|
28
|
+
PullFromRemote.id_field(module_type) => module_id,
|
|
29
|
+
:access_rights => "r",
|
|
30
|
+
:action => "pull",
|
|
31
|
+
:version? => version,
|
|
32
|
+
:remote_namespace? => remote_namespace,
|
|
33
|
+
:rsa_pub_key? => rsa_pub_key
|
|
34
|
+
)
|
|
35
|
+
response = post(rest_url("#{module_type}/get_remote_module_info"),post_body)
|
|
36
|
+
return response unless response.ok?
|
|
37
|
+
|
|
38
|
+
module_name,full_module_name, frozen = response.data(:module_name, :full_module_name, :frozen)
|
|
39
|
+
raise DtkError, "You are not allowed to update frozen #{module_type} versions!" if frozen
|
|
40
|
+
|
|
41
|
+
remote_params = response.data_hash_form(:remote_repo_url,:remote_repo,:remote_branch)
|
|
42
|
+
remote_params.merge!(:version => version) if version
|
|
43
|
+
|
|
44
|
+
# check and import component module dependencies before importing service itself
|
|
45
|
+
unless opts[:skip_recursive_pull]
|
|
46
|
+
import_module_component_dependencies(module_type, module_id, remote_namespace)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# check whether a local module exists to determine whether pull from local clone or try to pull from server
|
|
50
|
+
# TODO: probably remove OsUtil.print("Pulling changes from remote: #{remote_params[:remote_repo]} @ #{remote_params[:remote_repo_url]}")
|
|
51
|
+
|
|
52
|
+
if Helper(:git_repo).local_clone_dir_exists?(module_type, module_name, :full_module_name => full_module_name, :version => version)
|
|
53
|
+
unless rsa_pub_key
|
|
54
|
+
raise DtkError,"No File found at (#{path_to_key}). Path is wrong or it is necessary to generate the public rsa key (e.g., run ssh-keygen -t rsa)"
|
|
55
|
+
end
|
|
56
|
+
opts_perform_locally = remote_params.merge(
|
|
57
|
+
:full_module_name => full_module_name,
|
|
58
|
+
:force => opts[:force],
|
|
59
|
+
:do_not_raise => opts[:do_not_raise],
|
|
60
|
+
:ignore_dependency_merge_conflict => opts[:ignore_dependency_merge_conflict]
|
|
61
|
+
)
|
|
62
|
+
PullFromRemote.perform_locally(self,module_type,module_id,module_name,opts_perform_locally)
|
|
63
|
+
else
|
|
64
|
+
# TODO: see if this works correctly
|
|
65
|
+
PullFromRemote.perform_on_server(self,module_type,module_id,full_module_name,remote_params)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
#
|
|
73
|
+
# module_type: will be :component_module or :service_module
|
|
74
|
+
def import_module_component_dependencies(module_type, module_id, remote_namespace = nil)
|
|
75
|
+
response = resolve_pull_from_remote_on_server(module_type, module_id, remote_namespace)
|
|
76
|
+
|
|
77
|
+
print "Resolving dependencies please wait ... "
|
|
78
|
+
RemoteDependencyUtil.check_permission_warnings(response)
|
|
79
|
+
|
|
80
|
+
# install them all!
|
|
81
|
+
if (response.ok? && !(missing_components = response.data(:missing_modules)).empty?)
|
|
82
|
+
required_modules = response.data(:required_modules)
|
|
83
|
+
puts " New dependencies found, Installing."
|
|
84
|
+
|
|
85
|
+
trigger_module_auto_import(missing_components, required_modules, { :include_pull_action => true })
|
|
86
|
+
|
|
87
|
+
puts "Resuming pull from remote ..."
|
|
88
|
+
else
|
|
89
|
+
puts 'Done.'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# pull them all!
|
|
93
|
+
if (response.ok? && !(required_modules = response.data(:required_modules)).empty?)
|
|
94
|
+
trigger_module_auto_pull(required_modules)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
RemoteDependencyUtil.print_dependency_warnings(response)
|
|
98
|
+
nil
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
def resolve_pull_from_remote_on_server(module_type, module_id, remote_namespace=nil)
|
|
104
|
+
post_body = PostBody.new(
|
|
105
|
+
:module_id => module_id,
|
|
106
|
+
:remote_namespace? => remote_namespace,
|
|
107
|
+
:rsa_pub_key => SSHUtil.rsa_pub_key_content()
|
|
108
|
+
)
|
|
109
|
+
post(rest_url("#{module_type}/resolve_pull_from_remote"),post_body)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
module PullFromRemote
|
|
113
|
+
extend CommandBase
|
|
114
|
+
def self.perform_locally(cmd_obj,module_type,module_id,module_name,remote_params)
|
|
115
|
+
opts = remote_params
|
|
116
|
+
response = cmd_obj.Helper(:git_repo).pull_changes(module_type,module_name,opts)
|
|
117
|
+
|
|
118
|
+
# return response unless response.ok?
|
|
119
|
+
if custom_message = response.data[:custom_message]
|
|
120
|
+
puts custom_message
|
|
121
|
+
elsif (response.data[:diffs].nil? || response.data[:diffs].empty?)
|
|
122
|
+
puts "No changes to pull from remote.".colorize(:yellow) unless response['errors']
|
|
123
|
+
else
|
|
124
|
+
puts "Changes pulled from remote".colorize(:green)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
response
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def self.perform_on_server(cmd_obj,module_type,module_id,module_name,remote_params)
|
|
131
|
+
#TODO: this does not handle different namespaces; so suggesting workaround for now
|
|
132
|
+
raise DtkError, "Module must be cloned to perform this operation; execute 'clone' command and then retry."
|
|
133
|
+
post_body = {
|
|
134
|
+
id_field(module_type) => module_id,
|
|
135
|
+
:remote_repo => remote_params[:remote_repo],
|
|
136
|
+
:module_name => module_name
|
|
137
|
+
}
|
|
138
|
+
post_body.merge!(:version => remote_params[:version]) if remote_params[:version]
|
|
139
|
+
response = post rest_url("#{module_type}/pull_from_remote"), post_body
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
puts "You have successfully pulled code on server instance." if response.ok?
|
|
143
|
+
response
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def self.id_field(module_type)
|
|
147
|
+
"#{module_type}_id"
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|