dtk-client 0.9.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/Gemfile +1 -3
- data/README.md +2 -121
- data/Rakefile +44 -0
- data/bin/dtk +10 -88
- data/dtk-client.gemspec +21 -44
- data/examples/simple/dtk.module.yaml +32 -0
- data/{lib/git-logs/git.log → examples/simple/test/README.md} +0 -0
- data/examples/spark/dtk.module.yaml +120 -0
- data/examples/with_repo_content/deploy/puppet/manifests/hostname.pp +54 -0
- data/examples/with_repo_content/dtk.module.yaml +49 -0
- data/examples/with_repo_content/test/README.txt +0 -0
- data/features/dtk.feature +8 -0
- data/features/step_definitions/dtk_steps.rb +6 -0
- data/features/support/env.rb +15 -0
- data/lib/cli/command/mixin.rb +101 -0
- data/lib/cli/command/module/clone.rb +42 -0
- data/lib/cli/command/module/install.rb +52 -0
- data/lib/cli/command/module/list.rb +31 -0
- data/lib/cli/command/module/list_assemblies.rb +39 -0
- data/lib/cli/command/module/push.rb +34 -0
- data/lib/cli/command/module/uninstall.rb +46 -0
- data/lib/cli/command/module.rb +33 -0
- data/lib/cli/command/options.rb +33 -0
- data/lib/cli/command/service/cancel_task.rb +33 -0
- data/lib/cli/command/service/converge.rb +37 -0
- data/lib/{parser/adapters/thor/common_option_defs.rb → cli/command/service/create_workspace.rb} +13 -17
- data/lib/cli/command/service/destroy.rb +47 -0
- data/lib/cli/command/service/edit.rb +47 -0
- data/lib/cli/command/service/exec.rb +42 -0
- data/lib/cli/command/service/exec_sync.rb +53 -0
- data/lib/cli/command/service/list.rb +30 -0
- data/lib/cli/command/service/list_actions.rb +39 -0
- data/lib/cli/command/service/list_attributes.rb +44 -0
- data/lib/cli/command/service/list_component_links.rb +33 -0
- data/lib/cli/command/service/list_components.rb +39 -0
- data/lib/cli/command/service/list_dependent_modules.rb +33 -0
- data/lib/cli/command/service/list_nodes.rb +33 -0
- data/lib/cli/command/service/list_violations.rb +33 -0
- data/lib/cli/command/service/pull.rb +32 -0
- data/lib/cli/command/service/push.rb +37 -0
- data/lib/{shell/parse_monkey_patch.rb → cli/command/service/set_default_target.rb} +9 -17
- data/lib/cli/command/service/set_required_attributes.rb +32 -0
- data/lib/cli/command/service/ssh.rb +42 -0
- data/lib/cli/command/service/stage.rb +55 -0
- data/lib/cli/command/service/start.rb +33 -0
- data/lib/{shell/context_aux.rb → cli/command/service/stop.rb} +10 -23
- data/lib/cli/command/service/task_status.rb +39 -0
- data/lib/cli/command/service.rb +55 -0
- data/lib/{commands.rb → cli/command/subcommand.rb} +22 -25
- data/lib/{bundler_monkey_patch.rb → cli/command/token/arg.rb} +6 -6
- data/lib/cli/command/token/class_mixin.rb +96 -0
- data/lib/cli/command/token/flag.rb +42 -0
- data/lib/{execute/command/rest_call.rb → cli/command/token/mixin.rb} +23 -14
- data/lib/cli/command/token/switch.rb +35 -0
- data/lib/cli/command/token.rb +76 -0
- data/lib/cli/command.rb +46 -0
- data/lib/cli/context/attributes.rb +50 -0
- data/lib/cli/context/type/module.rb +34 -0
- data/lib/{commands/thor/state_change.rb → cli/context/type/service.rb} +11 -5
- data/lib/cli/context/type/top.rb +32 -0
- data/lib/cli/context/type.rb +42 -0
- data/lib/cli/context.rb +174 -0
- data/lib/cli/directory_parser/file_system.rb +105 -0
- data/lib/{execute/command.rb → cli/directory_parser.rb} +14 -17
- data/lib/{execute.rb → cli/file_obj.rb} +13 -9
- data/lib/cli/processor/plugin/gli.rb +70 -0
- data/lib/cli/processor.rb +60 -0
- data/lib/cli/runner/dtkn_access.rb +75 -0
- data/lib/cli/runner.rb +58 -0
- data/lib/cli/version.rb +8 -0
- data/lib/{config → client/config}/cacert.pem +0 -0
- data/lib/client/config/default.conf +20 -0
- data/lib/client/config.rb +106 -0
- data/lib/client/configurator.rb +182 -0
- data/lib/client/conn.rb +197 -0
- data/lib/client/content_generator.rb +127 -0
- data/lib/client/error/subclasses.rb +105 -0
- data/lib/client/error.rb +98 -0
- data/lib/client/git_repo/adapter/git_gem/error_handler.rb +70 -0
- data/lib/client/git_repo/adapter/git_gem.rb +179 -0
- data/lib/client/git_repo.rb +122 -0
- data/lib/client/logger.rb +136 -0
- data/lib/client/operation/account.rb +66 -0
- data/lib/client/operation/client_module_dir/git_repo.rb +286 -0
- data/lib/client/operation/client_module_dir.rb +138 -0
- data/lib/client/operation/module/clone_module.rb +52 -0
- data/lib/client/operation/module/install/common_module.rb +58 -0
- data/lib/client/operation/module/install/external_module.rb +122 -0
- data/lib/client/operation/module/install.rb +91 -0
- data/lib/client/operation/module/install_from_catalog.rb +76 -0
- data/lib/client/operation/module/list.rb +34 -0
- data/lib/client/operation/module/list_assemblies.rb +35 -0
- data/lib/client/operation/module/push.rb +62 -0
- data/lib/client/operation/module/uninstall.rb +44 -0
- data/lib/client/operation/module.rb +58 -0
- data/lib/{commands/common/thor/reparse.rb → client/operation/module_service_common.rb} +27 -16
- data/lib/client/operation/service/cancel_task.rb +29 -0
- data/lib/client/operation/service/commit_and_push.rb +128 -0
- data/lib/client/operation/service/converge.rb +50 -0
- data/lib/{util/common_util.rb → client/operation/service/create_workspace.rb} +13 -13
- data/lib/client/operation/service/destroy.rb +42 -0
- data/lib/client/operation/service/edit.rb +54 -0
- data/lib/client/operation/service/exec.rb +73 -0
- data/lib/client/operation/service/list.rb +32 -0
- data/lib/client/operation/service/list_actions.rb +34 -0
- data/lib/{commands/thor/dependency.rb → client/operation/service/list_attributes.rb} +16 -12
- data/lib/client/operation/service/list_component_links.rb +29 -0
- data/lib/{commands/common/thor/pull_clone_changes.rb → client/operation/service/list_components.rb} +13 -7
- data/lib/client/operation/service/list_dependent_modules.rb +29 -0
- data/lib/client/operation/service/list_nodes.rb +29 -0
- data/lib/{commands/thor/project.rb → client/operation/service/list_violations.rb} +8 -13
- data/lib/client/operation/service/pull.rb +37 -0
- data/lib/client/operation/service/set_default_target.rb +31 -0
- data/lib/client/operation/service/set_required_attributes.rb +41 -0
- data/lib/client/operation/service/ssh.rb +118 -0
- data/lib/client/operation/service/stage.rb +54 -0
- data/lib/client/operation/service/start.rb +29 -0
- data/lib/client/operation/service/stop.rb +30 -0
- data/lib/{task_status → client/operation/service/task_status}/refresh_mode.rb +15 -25
- data/lib/{task_status → client/operation/service/task_status}/snapshot_mode.rb +4 -5
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/format.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result/action.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result/components.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result/node_level.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result.rb +4 -4
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps/action.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps/components.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps/node_level.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps.rb +4 -4
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task.rb +3 -3
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/no_results.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/render.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/stage/render.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/stage.rb +3 -3
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/task_end.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/task_start.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element.rb +13 -13
- data/lib/{task_status → client/operation/service/task_status}/stream_mode.rb +5 -9
- data/lib/client/operation/service/task_status.rb +77 -0
- data/lib/client/operation/service.rb +54 -0
- data/lib/client/operation.rb +67 -0
- data/lib/client/operation_args.rb +40 -0
- data/lib/{execute/execute_context/result_store.rb → client/render/view/simple.rb} +15 -14
- data/lib/client/render/view/table/processor.rb +248 -0
- data/lib/client/render/view/table.rb +75 -0
- data/lib/client/render.rb +113 -0
- data/lib/client/response/error_handler.rb +97 -0
- data/lib/client/response/render_helper.rb +78 -0
- data/lib/client/response/subclasses.rb +62 -0
- data/lib/client/response.rb +83 -0
- data/lib/client/session.rb +62 -0
- data/lib/client/util/auxiliary.rb +34 -0
- data/lib/client/util/console.rb +81 -0
- data/lib/client/util/disk_cacher.rb +66 -0
- data/lib/client/util/dtk_path.rb +28 -0
- data/lib/{search_hash.rb → client/util/hash_with_optional_keys.rb} +29 -21
- data/lib/client/util/interactive_wizard.rb +84 -0
- data/lib/client/util/module_ref.rb +92 -0
- data/lib/client/util/os_util/print.rb +121 -0
- data/lib/client/util/os_util.rb +122 -0
- data/lib/{commands/thor/utils.rb → client/util/post_body.rb} +1 -1
- data/lib/{execute/error_usage.rb → client/util/query_string_hash.rb} +2 -2
- data/lib/client/util/remote_dependency.rb +67 -0
- data/lib/client/util/ssh_util.rb +89 -0
- data/lib/client/util/validation.rb +28 -0
- data/lib/client/util.rb +18 -0
- data/lib/{util/permission_util.rb → dtk_cli.rb} +10 -9
- data/lib/dtk_client.rb +18 -14
- data/test/default_test.rb +14 -0
- data/test/test_helper.rb +9 -0
- metadata +196 -307
- data/Gemfile_dev +0 -13
- data/bin/dtk-execute +0 -32
- data/bin/dtk-shell +0 -31
- data/lib/auxiliary.rb +0 -61
- data/lib/client.rb +0 -58
- data/lib/command_helper.rb +0 -33
- data/lib/command_helpers/git_repo/merge.rb +0 -153
- data/lib/command_helpers/git_repo.rb +0 -589
- data/lib/command_helpers/jenkins_client/config_xml.rb +0 -288
- data/lib/command_helpers/jenkins_client.rb +0 -106
- data/lib/command_helpers/service_importer.rb +0 -251
- data/lib/command_helpers/service_link.rb +0 -33
- data/lib/command_helpers/test_module_creator.rb +0 -69
- data/lib/command_helpers/test_module_templates/dtk.model.yaml.eruby +0 -10
- data/lib/command_helpers/test_module_templates/spec_helper.rb.eruby +0 -10
- data/lib/command_helpers/test_module_templates/temp_component_spec.rb.eruby +0 -5
- data/lib/commands/common/thor/access_control.rb +0 -133
- data/lib/commands/common/thor/action_result_handler.rb +0 -74
- data/lib/commands/common/thor/assembly_template.rb +0 -92
- data/lib/commands/common/thor/assembly_workspace.rb +0 -1638
- data/lib/commands/common/thor/base_command_helper.rb +0 -59
- data/lib/commands/common/thor/clone.rb +0 -82
- data/lib/commands/common/thor/common.rb +0 -88
- data/lib/commands/common/thor/common_base.rb +0 -49
- data/lib/commands/common/thor/create_target.rb +0 -70
- data/lib/commands/common/thor/edit.rb +0 -255
- data/lib/commands/common/thor/inventory_parser.rb +0 -98
- data/lib/commands/common/thor/list_diffs.rb +0 -128
- data/lib/commands/common/thor/module/import.rb +0 -215
- data/lib/commands/common/thor/module.rb +0 -1011
- data/lib/commands/common/thor/node.rb +0 -53
- data/lib/commands/common/thor/poller.rb +0 -65
- data/lib/commands/common/thor/pull_from_remote.rb +0 -152
- data/lib/commands/common/thor/puppet_forge.rb +0 -72
- data/lib/commands/common/thor/purge_clone.rb +0 -101
- data/lib/commands/common/thor/push_clone_changes.rb +0 -162
- data/lib/commands/common/thor/push_to_remote.rb +0 -94
- data/lib/commands/common/thor/remotes.rb +0 -71
- data/lib/commands/common/thor/set_required_attributes.rb +0 -46
- data/lib/commands/thor/account.rb +0 -239
- data/lib/commands/thor/assembly.rb +0 -361
- data/lib/commands/thor/attribute.rb +0 -79
- data/lib/commands/thor/component.rb +0 -70
- data/lib/commands/thor/component_module.rb +0 -501
- data/lib/commands/thor/component_template.rb +0 -174
- data/lib/commands/thor/developer.rb +0 -144
- data/lib/commands/thor/dtk.rb +0 -152
- data/lib/commands/thor/library.rb +0 -125
- data/lib/commands/thor/node.rb +0 -504
- data/lib/commands/thor/node_group.rb +0 -203
- data/lib/commands/thor/node_template.rb +0 -94
- data/lib/commands/thor/provider.rb +0 -233
- data/lib/commands/thor/remotes.rb +0 -49
- data/lib/commands/thor/service.rb +0 -932
- data/lib/commands/thor/service_module.rb +0 -900
- data/lib/commands/thor/target.rb +0 -250
- data/lib/commands/thor/task.rb +0 -116
- data/lib/commands/thor/test_module.rb +0 -310
- data/lib/commands/thor/workspace.rb +0 -698
- data/lib/config/client.conf.header +0 -20
- data/lib/config/configuration.rb +0 -99
- data/lib/config/default.conf +0 -16
- data/lib/config/disk_cacher.rb +0 -80
- data/lib/configurator.rb +0 -176
- data/lib/context_router.rb +0 -44
- data/lib/core.rb +0 -489
- data/lib/domain/git_adapter.rb +0 -412
- data/lib/domain/git_error_handler.rb +0 -64
- data/lib/domain/response/error_handler.rb +0 -86
- data/lib/domain/response.rb +0 -285
- data/lib/dtk-client/version.rb +0 -20
- data/lib/dtk_constants.rb +0 -40
- data/lib/dtk_error.rb +0 -114
- data/lib/dtk_logger.rb +0 -113
- data/lib/error.rb +0 -85
- data/lib/execute/cli_pure/cli_rerouter.rb +0 -102
- data/lib/execute/command/api_call/map.rb +0 -60
- data/lib/execute/command/api_call/service.rb +0 -91
- data/lib/execute/command/api_call/translation_term.rb +0 -119
- data/lib/execute/command/api_call.rb +0 -60
- data/lib/execute/command_processor/rest_call.rb +0 -59
- data/lib/execute/command_processor.rb +0 -30
- data/lib/execute/execute_context.rb +0 -86
- data/lib/execute/script/add_tenant.rb +0 -121
- data/lib/execute/script.rb +0 -64
- data/lib/parser/adapters/option_parser.rb +0 -70
- data/lib/parser/adapters/thor.rb +0 -555
- data/lib/require_first.rb +0 -104
- data/lib/shell/context.rb +0 -1064
- data/lib/shell/domain/active_context.rb +0 -186
- data/lib/shell/domain/context_entity.rb +0 -89
- data/lib/shell/domain/context_params.rb +0 -223
- data/lib/shell/domain/override_tasks.rb +0 -88
- data/lib/shell/domain/shadow_entity.rb +0 -76
- data/lib/shell/header_shell.rb +0 -44
- data/lib/shell/help_monkey_patch.rb +0 -283
- data/lib/shell/interactive_wizard.rb +0 -256
- data/lib/shell/message_queue.rb +0 -63
- data/lib/shell/status_monitor.rb +0 -124
- data/lib/shell.rb +0 -261
- data/lib/task_status.rb +0 -83
- data/lib/util/console.rb +0 -235
- data/lib/util/dtk_puppet.rb +0 -65
- data/lib/util/module_util.rb +0 -66
- data/lib/util/os_util.rb +0 -385
- data/lib/util/remote_dependency_util.rb +0 -84
- data/lib/util/ssh_util.rb +0 -94
- data/lib/view_processor/augmented_simple_list.rb +0 -44
- data/lib/view_processor/hash_pretty_print.rb +0 -123
- data/lib/view_processor/simple_list.rb +0 -156
- data/lib/view_processor/table_print.rb +0 -309
- data/lib/view_processor.rb +0 -129
- data/puppet/manifests/init.pp +0 -72
- data/puppet/manifests/params.pp +0 -16
- data/puppet/r8meta.puppet.yml +0 -35
- data/puppet/templates/bash_profile.erb +0 -2
- data/puppet/templates/client.conf.erb +0 -1
- data/puppet/templates/dtkclient.erb +0 -2
- data/spec/component_module_spec.rb +0 -34
- data/spec/dependency_spec.rb +0 -6
- data/spec/dtk_shell_spec.rb +0 -13
- data/spec/dtk_spec.rb +0 -33
- data/spec/lib/spec_helper.rb +0 -10
- data/spec/lib/spec_thor.rb +0 -108
- data/spec/node_template_spec.rb +0 -24
- data/spec/project_spec.rb +0 -6
- data/spec/repo_spec.rb +0 -7
- data/spec/response_spec.rb +0 -52
- data/spec/service_module_spec.rb +0 -38
- data/spec/service_spec.rb +0 -50
- data/spec/state_change_spec.rb +0 -7
- data/spec/table_print_spec.rb +0 -48
- data/spec/target_spec.rb +0 -57
- data/spec/task_spec.rb +0 -28
- data/views/assembly/augmented_simple_list.rb +0 -12
- data/views/assembly_template/augmented_simple_list.rb +0 -12
- data/views/list_task/augmented_simple_list.rb +0 -12
@@ -1,102 +0,0 @@
|
|
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
|
19
|
-
class CLIRerouter
|
20
|
-
|
21
|
-
ROUTER_DATA = {
|
22
|
-
:service_module => [
|
23
|
-
{ :regex => /service-module (?<service_module_id>[\w:\-]+) (?<method_name>stage) (?<assembly_id>[\w:\-]+) (?<instance_name>[\w:\-\.\:]+)/, :entity => 'assembly' },
|
24
|
-
{ :regex => /service-module (?<service_module_id>[\w:\-]+) (?<method_name>deploy) (?<assembly_id>[\w:\-]+) (?<instance_name>[\w:\-\.\:]+)/ }
|
25
|
-
],
|
26
|
-
:component_module => [
|
27
|
-
{ :regex => /component-module (?<component_module_id>[\w:\-]+) (?<method_name>clone)/ }
|
28
|
-
],
|
29
|
-
:service => [
|
30
|
-
{ :regex => /service (?<service_id>[\w:\-]+) (?<method_name>set-attribute) (?<name>[\w:\-\.\:]+) (?<value>[\w:\-\.\:]+)/ },
|
31
|
-
{ :regex => /service (?<service_id>[\w:\-]+) (?<method_name>converge)/ },
|
32
|
-
{ :regex => /service (?<method_name>delete-and-destroy) (?<instance_name>[\w:\-]+)/ }
|
33
|
-
]
|
34
|
-
}
|
35
|
-
|
36
|
-
def initialize(entity_name, args)
|
37
|
-
@cli_string = CLIRerouter.formulate_command_string(entity_name, args)
|
38
|
-
@entity_name = CLIRerouter.norm(entity_name)
|
39
|
-
|
40
|
-
ROUTER_DATA[@entity_name].each do |defintion|
|
41
|
-
if match = @cli_string.match(defintion[:regex])
|
42
|
-
@method_name = CLIRerouter.norm(match[:method_name])
|
43
|
-
|
44
|
-
# sometimes we need to override entity
|
45
|
-
@entity_name = defintion[:entity] if defintion[:entity]
|
46
|
-
|
47
|
-
# we need to filter out IDs
|
48
|
-
@entity_ids = match.names.collect { |k| k.to_s.end_with?('_id') ? { k => match[k] } : nil }.compact
|
49
|
-
|
50
|
-
if @entity_ids.empty?
|
51
|
-
# match 1 is method name, there is no id
|
52
|
-
@args = match[2, match.size]
|
53
|
-
else
|
54
|
-
# match 1, 2 are id and method name rest are args
|
55
|
-
@args = match[@entity_ids.size + 2, match.size]
|
56
|
-
end
|
57
|
-
|
58
|
-
break
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
@conn = ::DTK::Client::Session.get_connection()
|
63
|
-
exit if validate_connection(@conn)
|
64
|
-
end
|
65
|
-
|
66
|
-
def run
|
67
|
-
new_context_params = DTK::Shell::ContextParams.new
|
68
|
-
|
69
|
-
@entity_ids.each do |value_hash|
|
70
|
-
key = value_hash.keys.first
|
71
|
-
value = value_hash.values.first
|
72
|
-
entity_name_of_param = key.gsub('_id', '')
|
73
|
-
new_context_params.add_context_name_to_params(entity_name_of_param, entity_name_of_param, value)
|
74
|
-
end
|
75
|
-
|
76
|
-
new_context_params.method_arguments = @args
|
77
|
-
new_context_params.pure_cli_mode = true
|
78
|
-
DTK::Client::ContextRouter.routeTask(@entity_name, @method_name, new_context_params, @conn)
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.is_candidate?(entity_name, args)
|
82
|
-
cli = formulate_command_string(entity_name, args)
|
83
|
-
if definitions = ROUTER_DATA[norm(entity_name)]
|
84
|
-
is_match = definitions.find { |d| cli.match(d[:regex]) }
|
85
|
-
|
86
|
-
return true if is_match
|
87
|
-
end
|
88
|
-
|
89
|
-
return false
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
def self.norm(string_value)
|
95
|
-
return string_value ? string_value.gsub('-','_').to_sym : nil
|
96
|
-
end
|
97
|
-
|
98
|
-
def self.formulate_command_string(entity_name, args)
|
99
|
-
"#{entity_name} #{args.join(' ')}".strip()
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,60 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute
|
19
|
-
class Command::APICall
|
20
|
-
class Map < Hash
|
21
|
-
def initialize(hash={})
|
22
|
-
super()
|
23
|
-
replace(hash)
|
24
|
-
end
|
25
|
-
|
26
|
-
def translate(api_params={},opts={})
|
27
|
-
if Rest::Post.matches?(type())
|
28
|
-
Command::RestCall::Post.new(:path => path(),:body => translate_to_rest_body(api_params,opts))
|
29
|
-
else
|
30
|
-
raise "Type in following map is not defined not defined: #{self.inspect}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def translate_to_rest_body(api_params,opts)
|
36
|
-
body().inject(Hash.new) do |h,(k,v)|
|
37
|
-
# if TranslationTerm.matches is false then v is a constant
|
38
|
-
processed_v =
|
39
|
-
if TranslationTerm.matches?(v)
|
40
|
-
v.instance_form().translate(k,api_params,opts)
|
41
|
-
else
|
42
|
-
v
|
43
|
-
end
|
44
|
-
h.merge(k => processed_v)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def type()
|
49
|
-
self[:type]
|
50
|
-
end
|
51
|
-
def path()
|
52
|
-
self[:path]
|
53
|
-
end
|
54
|
-
def body()
|
55
|
-
self[:body]
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,91 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute
|
19
|
-
class Command::APICall
|
20
|
-
class Service < self
|
21
|
-
def self.object_type()
|
22
|
-
:service
|
23
|
-
end
|
24
|
-
|
25
|
-
CommandMap = {
|
26
|
-
:add_component => Map.new(
|
27
|
-
:type => Rest::Post,
|
28
|
-
:path => 'assembly/add_component',
|
29
|
-
:body => {
|
30
|
-
:assembly_id => Required(:service),
|
31
|
-
:subtype => 'instance',
|
32
|
-
:node_id => Required(:node),
|
33
|
-
:component_template_id => Required(:component),
|
34
|
-
:namespace => Required(:namespace),
|
35
|
-
:idempotent => Equal::OrDefault(true),
|
36
|
-
:donot_update_workflow => Equal::OrDefault(false)
|
37
|
-
}
|
38
|
-
),
|
39
|
-
|
40
|
-
:set_attribute => Map.new(
|
41
|
-
:type => Rest::Post,
|
42
|
-
:path => 'assembly/set_attributes',
|
43
|
-
:body => {
|
44
|
-
:assembly_id => Required(:service),
|
45
|
-
:pattern => Required(:attribute_path),
|
46
|
-
# TODO: support FN
|
47
|
-
# :pattern => FN{"#{Required(:node)}/#{Required(:component)}/#{Required(:attribute)}"
|
48
|
-
:value => Required::Equal
|
49
|
-
}
|
50
|
-
),
|
51
|
-
|
52
|
-
:link_components => Map.new(
|
53
|
-
:type => Rest::Post,
|
54
|
-
:path => 'assembly/add_service_link',
|
55
|
-
:body => {
|
56
|
-
:assembly_id => Required(:service),
|
57
|
-
:input_component_id => Required(:input_component),
|
58
|
-
:output_component_id => Required(:output_component),
|
59
|
-
}
|
60
|
-
),
|
61
|
-
|
62
|
-
:execute_workflow =>
|
63
|
-
[
|
64
|
-
Map.new(
|
65
|
-
:type => Rest::Post,
|
66
|
-
:path => 'assembly/create_task',
|
67
|
-
:body => {
|
68
|
-
:assembly_id => Required(:service),
|
69
|
-
:task_action => Required(:workflow_name),
|
70
|
-
:task_params => Required(:workflow_params)
|
71
|
-
}
|
72
|
-
),
|
73
|
-
Map.new(
|
74
|
-
:type => Rest::Post,
|
75
|
-
:path => 'task/execute',
|
76
|
-
:body => {
|
77
|
-
:task_id => PreviousResponse(:task_id)
|
78
|
-
}
|
79
|
-
)]
|
80
|
-
}
|
81
|
-
|
82
|
-
module CustomMapping
|
83
|
-
# example would be
|
84
|
-
# def self.command(params)
|
85
|
-
# ...
|
86
|
-
# end
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,119 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute
|
19
|
-
class Command::APICall
|
20
|
-
|
21
|
-
# abstract classes
|
22
|
-
class TranslationTerm
|
23
|
-
def self.matches?(obj)
|
24
|
-
obj.kind_of?(self) or
|
25
|
-
(obj.kind_of?(Class) and obj <= self)
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.instance_form()
|
29
|
-
new()
|
30
|
-
end
|
31
|
-
def instance_form()
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
class Operation < self
|
36
|
-
end
|
37
|
-
|
38
|
-
class Param < self
|
39
|
-
private
|
40
|
-
def index(api_params,key)
|
41
|
-
api_params[key]
|
42
|
-
end
|
43
|
-
|
44
|
-
def index_required(api_params,key)
|
45
|
-
unless has_key?(api_params,key)
|
46
|
-
raise ErrorUsage.new("Missing key '#{key}' in params: #{api_params.inspect}")
|
47
|
-
end
|
48
|
-
index(api_params,key)
|
49
|
-
end
|
50
|
-
|
51
|
-
def has_key?(api_params,key)
|
52
|
-
api_params.has_key?(key)
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# concrete classes
|
59
|
-
|
60
|
-
class Rest < TranslationTerm::Operation
|
61
|
-
class Post < self
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
class Required < TranslationTerm::Param
|
66
|
-
def initialize(input_key=nil)
|
67
|
-
@input = input_key
|
68
|
-
end
|
69
|
-
|
70
|
-
def translate(key,api_params,opts={})
|
71
|
-
index_required(api_params,@input||key)
|
72
|
-
end
|
73
|
-
|
74
|
-
class Equal < self
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
class Equal < TranslationTerm::Param
|
79
|
-
def translate(key,api_params,opts={})
|
80
|
-
index(api_params,key)
|
81
|
-
end
|
82
|
-
|
83
|
-
class Required < self
|
84
|
-
def translate(key,api_params,opts={})
|
85
|
-
index_required(api_params,key)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def self.OrDefault(default_value)
|
90
|
-
OrDefault.new(default_value)
|
91
|
-
end
|
92
|
-
|
93
|
-
class OrDefault < self
|
94
|
-
def initialize(default_value)
|
95
|
-
@default_value = default_value
|
96
|
-
end
|
97
|
-
def translate(key,api_params,opts={})
|
98
|
-
has_key?(api_params,key) ? index(api_params,key) : @default_value
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
class PreviousResponse < TranslationTerm::Param
|
104
|
-
def initialize(response_key)
|
105
|
-
@response_key = response_key
|
106
|
-
end
|
107
|
-
def translate(key,api_params,opts={})
|
108
|
-
unless last_result = opts[:last_result]
|
109
|
-
raise ErrorUsage.new("PreviousResponse used before results computed")
|
110
|
-
end
|
111
|
-
match = nil
|
112
|
-
unless matching_key = [@response_key.to_s,@response_key.to_sym].find{|k|last_result.has_key?(k)}
|
113
|
-
raise ErrorUsage.new("Key #{@response_key} in PreviousResponse not found in last results (#{last_result.inspect})")
|
114
|
-
end
|
115
|
-
last_result[matching_key]
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
@@ -1,60 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute
|
19
|
-
class Command
|
20
|
-
class APICall < self
|
21
|
-
|
22
|
-
# order matters; having these defs before requires; plus order of these requires
|
23
|
-
def self.Required(key)
|
24
|
-
Required.new(key)
|
25
|
-
end
|
26
|
-
def self.PreviousResponse(response_key)
|
27
|
-
PreviousResponse.new(response_key)
|
28
|
-
end
|
29
|
-
dtk_require('api_call/translation_term')
|
30
|
-
dtk_require('api_call/map')
|
31
|
-
dtk_require('api_call/service')
|
32
|
-
|
33
|
-
|
34
|
-
# calss block where on one or more commands that achieve the api
|
35
|
-
def raw_executable_commands(&block)
|
36
|
-
method = required(:method).to_sym
|
37
|
-
case required(:object_type).to_sym
|
38
|
-
when :service
|
39
|
-
Service.raw_executable_commands(method,&block)
|
40
|
-
else
|
41
|
-
raise ErrorUsage.new("The object_type '#{object_type}' is not supported")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
def self.raw_executable_commands(method,&block)
|
47
|
-
if command_map = self::CommandMap[method]
|
48
|
-
array_form(command_map).each{|raw_command|block.call(raw_command)}
|
49
|
-
else
|
50
|
-
raise ErrorUsage.new("The method on '#{method}' on object type '#{object_type()}' is not supported")
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.array_form(obj)
|
55
|
-
obj.kind_of?(Array) ? obj : [obj]
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,59 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute; class CommandProcessor
|
19
|
-
class RestCall< self
|
20
|
-
extend ::DTK::Client::CommandBase # TODO: have a Base that is not just for commands (CommandBase)
|
21
|
-
|
22
|
-
def self.execute(rest_command)
|
23
|
-
response = raw_execute(rest_command)
|
24
|
-
if response.ok?
|
25
|
-
response.data
|
26
|
-
else
|
27
|
-
raise Error.new(response,rest_command)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
def self.raw_execute(rest_command)
|
33
|
-
if rest_command.kind_of?(Command::RestCall::Post)
|
34
|
-
post(rest_url(rest_command.path),rest_command.body)
|
35
|
-
else
|
36
|
-
raise ErrorUsage.new("Unexpected Rest Command type: #{rest_command.class}")
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
class Error < ErrorUsage
|
41
|
-
def initialize(response_not_ok,rest_command)
|
42
|
-
error_print_form = error_print_form(response_not_ok)
|
43
|
-
error_msg = "Bad Rest response from call (#{rest_command.input_hash.inspect}:\n #{error_print_form}"
|
44
|
-
super(error_msg)
|
45
|
-
end
|
46
|
-
private
|
47
|
-
def error_print_form(response_not_ok)
|
48
|
-
ret_obj =
|
49
|
-
if errors = response_not_ok['errors']
|
50
|
-
errors.size == 1 ? errors.first : errors
|
51
|
-
else
|
52
|
-
response_not_ok
|
53
|
-
end
|
54
|
-
ret_obj.kind_of?(String) ? ret_obj : ret_obj.inspect
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end; end
|
@@ -1,30 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute
|
19
|
-
class CommandProcessor
|
20
|
-
dtk_require('command_processor/rest_call')
|
21
|
-
|
22
|
-
def self.execute(command)
|
23
|
-
if command.kind_of?(Command::RestCall)
|
24
|
-
RestCall.execute(command)
|
25
|
-
else
|
26
|
-
raise ErrorUsage.new("Unexpected Command type: #{command.class}")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,86 +0,0 @@
|
|
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
|
-
class DTK::Client::Execute
|
19
|
-
class ExecuteContext
|
20
|
-
dtk_require('execute_context/result_store')
|
21
|
-
|
22
|
-
module ClassMixin
|
23
|
-
def ExecuteContext(opts={},&block)
|
24
|
-
ExecuteContext.new(opts).execute(&block)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def initialize(opts={})
|
29
|
-
@print_results = opts[:print_results]
|
30
|
-
@proxy = Proxy.new()
|
31
|
-
end
|
32
|
-
|
33
|
-
def execute(&block)
|
34
|
-
result, command = instance_eval(&block)
|
35
|
-
result
|
36
|
-
end
|
37
|
-
|
38
|
-
def method_missing(m, *args, &block)
|
39
|
-
result, command = @proxy.send(m, *args, &block)
|
40
|
-
if @print_results
|
41
|
-
pp(:command => command.input_hash(),:result => result)
|
42
|
-
end
|
43
|
-
[result, command]
|
44
|
-
end
|
45
|
-
|
46
|
-
# commands in the execute context
|
47
|
-
class Proxy
|
48
|
-
def initialize()
|
49
|
-
@result_store = ResultStore.new()
|
50
|
-
end
|
51
|
-
|
52
|
-
def call(object_type__method,params={})
|
53
|
-
object_type, method = split_object_type__method(object_type__method)
|
54
|
-
api_command = Command::APICall.new(:object_type => object_type, :method => method, :params => params)
|
55
|
-
result = nil
|
56
|
-
api_command.raw_executable_commands() do |raw_command|
|
57
|
-
last_result = @result_store.get_last_result?()
|
58
|
-
command = raw_command.translate(params,:last_result => last_result)
|
59
|
-
result = CommandProcessor.execute(command)
|
60
|
-
@result_store.store(result)
|
61
|
-
end
|
62
|
-
[result, api_command]
|
63
|
-
end
|
64
|
-
|
65
|
-
def post_rest_call(path,body={})
|
66
|
-
command = Command::RestCall::Post.new(:path => path, :body => body, :last_result => @last_result)
|
67
|
-
result = CommandProcessor.execute(command)
|
68
|
-
[result, command]
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
# returns [object_type, method]
|
73
|
-
def split_object_type__method(str)
|
74
|
-
DelimitersObjectTypeMethod.each do |d|
|
75
|
-
if str =~ Regexp.new("(^[^#{d}]+)#{d}([^#{d}]+$)")
|
76
|
-
return [$1,$2]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
raise ErrorUsage.new("Illegal term '#{str}'")
|
80
|
-
end
|
81
|
-
|
82
|
-
DelimitersObjectTypeMethod = ['\/']
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
end
|