dtk-client 0.7.1.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/Gemfile +1 -1
- data/Gemfile_dev +1 -0
- data/bin/dtk-execute +1 -18
- data/dtk-client.gemspec +1 -1
- data/lib/client.rb +0 -5
- data/lib/command_helpers/git_repo.rb +43 -12
- data/lib/commands/common/thor/assembly_workspace.rb +3 -3
- data/lib/commands/common/thor/module.rb +81 -7
- data/lib/commands/common/thor/module/import.rb +14 -4
- data/lib/commands/common/thor/pull_from_remote.rb +2 -0
- data/lib/commands/common/thor/push_clone_changes.rb +1 -1
- data/lib/commands/common/thor/push_to_remote.rb +18 -4
- data/lib/commands/common/thor/remotes.rb +54 -0
- data/lib/commands/common/thor/{set_required_params.rb → set_required_attributes.rb} +1 -1
- data/lib/commands/thor/component.rb +2 -2
- data/lib/commands/thor/component_module.rb +56 -7
- data/lib/commands/thor/dtk.rb +7 -7
- data/lib/commands/thor/node.rb +4 -4
- data/lib/commands/thor/node_group.rb +4 -4
- data/lib/commands/thor/remotes.rb +32 -0
- data/lib/commands/thor/service.rb +9 -5
- data/lib/commands/thor/service_module.rb +41 -5
- data/lib/commands/thor/test_module.rb +43 -3
- data/lib/commands/thor/workspace.rb +8 -4
- data/lib/core.rb +3 -0
- data/lib/domain/git_adapter.rb +15 -8
- data/lib/domain/response.rb +39 -26
- data/lib/dtk-client/version.rb +1 -1
- data/lib/execute.rb +1 -1
- data/lib/execute/command/api_call/service.rb +1 -0
- data/lib/execute/script.rb +50 -0
- data/lib/execute/script/add_tenant.rb +91 -0
- data/lib/execute/script/add_tenant_without_router.rb +87 -0
- data/lib/shell/context.rb +15 -9
- data/lib/shell/domain/context_params.rb +2 -0
- data/lib/shell/help_monkey_patch.rb +4 -0
- data/lib/util/os_util.rb +2 -1
- metadata +27 -24
- data/lib/execute/examples.rb +0 -3
- data/lib/execute/examples/add_tenant.rb +0 -42
@@ -10,7 +10,7 @@ module DTK::Client
|
|
10
10
|
|
11
11
|
def self.valid_children()
|
12
12
|
# [:"component-template"]
|
13
|
-
[:component]
|
13
|
+
[:component, :remotes]
|
14
14
|
end
|
15
15
|
|
16
16
|
# this includes children of children - has to be sorted by n-level access
|
@@ -20,6 +20,10 @@ module DTK::Client
|
|
20
20
|
[:component]
|
21
21
|
end
|
22
22
|
|
23
|
+
def self.multi_context_children()
|
24
|
+
[[:component], [:remotes], [:component, :remotes]]
|
25
|
+
end
|
26
|
+
|
23
27
|
def self.valid_child?(name_of_sub_context)
|
24
28
|
return TestModule.valid_children().include?(name_of_sub_context.to_sym)
|
25
29
|
end
|
@@ -32,6 +36,19 @@ module DTK::Client
|
|
32
36
|
return :test_module, "test_module/list", nil
|
33
37
|
end
|
34
38
|
|
39
|
+
def self.override_allowed_methods()
|
40
|
+
return DTK::Shell::OverrideTasks.new(
|
41
|
+
{
|
42
|
+
:command_only => {
|
43
|
+
:remotes => [
|
44
|
+
["push-remote", "push-remote [REMOTE-NAME] [--force]", "# Push local changes to remote git repository"],
|
45
|
+
["list-remotes", "list-remotes", "# List git remotes for given module"],
|
46
|
+
["add-remote", "add-remote REMOTE-NAME REMOTE-URL", "# Add git remote for given module"],
|
47
|
+
["remove-remote", "remove-remote REPO-NAME [-y]", "# Remove git remote for given module"] ]
|
48
|
+
}
|
49
|
+
})
|
50
|
+
end
|
51
|
+
|
35
52
|
desc "delete TEST-MODULE-NAME [-y] [-p]", "Delete test module and all items contained in it. Optional parameter [-p] is to delete local directory."
|
36
53
|
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
37
54
|
method_option :purge, :aliases => '-p', :type => :boolean, :default => false
|
@@ -202,7 +219,7 @@ module DTK::Client
|
|
202
219
|
push_module_aux(context_params, internal_trigger)
|
203
220
|
end
|
204
221
|
|
205
|
-
desc "TEST-MODULE-NAME/ID push-dtkn [-n NAMESPACE]", "Push changes from local copy of test module to remote repository (dtkn)."
|
222
|
+
desc "TEST-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [--force]", "Push changes from local copy of test module to remote repository (dtkn)."
|
206
223
|
method_option "message",:aliases => "-m" ,
|
207
224
|
:type => :string,
|
208
225
|
:banner => "COMMIT-MSG",
|
@@ -212,7 +229,7 @@ module DTK::Client
|
|
212
229
|
:banner => "NAMESPACE",
|
213
230
|
:desc => "Remote namespace"
|
214
231
|
#hidden option for dev
|
215
|
-
method_option
|
232
|
+
method_option :force, :type => :boolean, :default => false, :aliases => '-f'
|
216
233
|
def push_dtkn(context_params, internal_trigger=false)
|
217
234
|
push_dtkn_module_aux(context_params, internal_trigger)
|
218
235
|
end
|
@@ -225,6 +242,29 @@ module DTK::Client
|
|
225
242
|
# list_diffs_module_aux(context_params)
|
226
243
|
end
|
227
244
|
|
245
|
+
# REMOTE INTERACTION
|
246
|
+
|
247
|
+
desc "HIDE_FROM_BASE push-remote [REMOTE-NAME] [--force]", "Push local changes to remote git repository"
|
248
|
+
method_option :force, :type => :boolean, :default => false
|
249
|
+
def push_remote(context_params)
|
250
|
+
push_remote_module_aux(context_params)
|
251
|
+
end
|
252
|
+
|
253
|
+
desc "HIDE_FROM_BASE list-remotes", "List git remotes for given module"
|
254
|
+
def list_remotes(context_params)
|
255
|
+
remote_list_aux(context_params)
|
256
|
+
end
|
257
|
+
|
258
|
+
desc "HIDE_FROM_BASE add-remote REMOTE-NAME REMOTE-URL", "Add git remote for given module"
|
259
|
+
def add_remote(context_params)
|
260
|
+
remote_add_aux(context_params)
|
261
|
+
end
|
262
|
+
|
263
|
+
desc "HIDE_FROM_BASE remove-remote REPO-NAME [-y]", "Remove git remote for given module"
|
264
|
+
method_option :force, :aliases => '-y', :type => :boolean, :default => false
|
265
|
+
def remove_remote(context_params)
|
266
|
+
remote_remove_aux(context_params)
|
267
|
+
end
|
228
268
|
|
229
269
|
#
|
230
270
|
# DEVELOPMENT MODE METHODS
|
@@ -128,7 +128,8 @@ module DTK::Client
|
|
128
128
|
['list-components',"list-components","# List components."]
|
129
129
|
],
|
130
130
|
:utils => [
|
131
|
-
|
131
|
+
# TODO: DTK-2027 might subsume by the dtk actions; currently server changes does not support this command
|
132
|
+
# ['execute-tests',"execute-tests [--component COMPONENT-NAME] [--timeout TIMEOUT]","# Execute tests. --component filters execution per component, --timeout changes default execution timeout."],
|
132
133
|
['get-netstats',"get-netstats","# Get netstats."],
|
133
134
|
['get-ps',"get-ps [--filter PATTERN]","# Get ps."],
|
134
135
|
['grep',"grep LOG-PATH NODE-ID-PATTERN GREP-PATTERN [--first]","# Grep log from multiple nodes. --first option returns first match (latest log entry)."],
|
@@ -382,6 +383,8 @@ module DTK::Client
|
|
382
383
|
get_netstats_aux(context_params)
|
383
384
|
end
|
384
385
|
|
386
|
+
=begin
|
387
|
+
# TODO: DTK-2027 might subsume by the dtk actions; currently server changes does not support this command
|
385
388
|
# using HIDE_FROM_BASE to hide this command from base context (dtk:/workspace>)
|
386
389
|
desc "HIDE_FROM_BASE execute-tests [--component COMPONENT-NAME] [--timeout TIMEOUT]", "Execute tests. --component filters execution per component, --timeout changes default execution timeout"
|
387
390
|
method_option :component, :type => :string, :desc => "Component name"
|
@@ -389,6 +392,7 @@ module DTK::Client
|
|
389
392
|
def execute_tests(context_params)
|
390
393
|
execute_tests_aux(context_params)
|
391
394
|
end
|
395
|
+
=end
|
392
396
|
|
393
397
|
# using HIDE_FROM_BASE to hide this command from base context (dtk:/workspace>)
|
394
398
|
desc "HIDE_FROM_BASE get-ps [--filter PATTERN]", "Get ps"
|
@@ -515,10 +519,10 @@ module DTK::Client
|
|
515
519
|
set_attribute_aux(context_params)
|
516
520
|
end
|
517
521
|
|
518
|
-
desc "WORKSPACE-NAME/ID set-required-
|
519
|
-
def
|
522
|
+
desc "WORKSPACE-NAME/ID set-required-attributes", "Interactive dialog to set required attributes that are not currently set"
|
523
|
+
def set_required_attributes(context_params)
|
520
524
|
workspace_id = context_params.retrieve_arguments([:workspace_id!],method_argument_names)
|
521
|
-
|
525
|
+
set_required_attributes_aux(workspace_id,:assembly,:instance)
|
522
526
|
end
|
523
527
|
|
524
528
|
# desc "WORKSPACE-NAME/ID start [NODE-ID-PATTERN]", "Starts all workspace's nodes, specific nodes can be selected via node id regex."
|
data/lib/core.rb
CHANGED
@@ -7,9 +7,12 @@ require 'colorize'
|
|
7
7
|
require 'json'
|
8
8
|
require 'pp'
|
9
9
|
|
10
|
+
# Development Gems
|
10
11
|
if ::DTK::Configuration.get(:development_mode)
|
11
12
|
require 'ap'
|
13
|
+
require 'looksee'
|
12
14
|
end
|
15
|
+
|
13
16
|
#TODO: for testing; fix by pass in commadn line argument
|
14
17
|
#RestClient.log = STDOUT
|
15
18
|
|
data/lib/domain/git_adapter.rb
CHANGED
@@ -6,7 +6,14 @@ module DTK
|
|
6
6
|
attr_accessor :git_repo
|
7
7
|
|
8
8
|
def initialize(repo_dir, local_branch_name = nil)
|
9
|
-
|
9
|
+
|
10
|
+
if DTK::Configuration.get(:debug_grit)
|
11
|
+
logger = Logger.new(STDOUT)
|
12
|
+
logger.level = Logger::INFO
|
13
|
+
@git_repo = Git.init(repo_dir, :log => logger)
|
14
|
+
else
|
15
|
+
@git_repo = Git.init(repo_dir)
|
16
|
+
end
|
10
17
|
# If we want to log GIT interaction
|
11
18
|
# @git_repo = Git.init(repo_dir, :log => Logger.new(STDOUT))
|
12
19
|
@local_branch_name = local_branch_name
|
@@ -98,9 +105,9 @@ module DTK
|
|
98
105
|
end
|
99
106
|
|
100
107
|
def add_remote(name, url)
|
101
|
-
|
102
|
-
|
103
|
-
|
108
|
+
@git_repo.remove_remote(name) if is_there_remote?(name)
|
109
|
+
|
110
|
+
@git_repo.add_remote(name, url)
|
104
111
|
end
|
105
112
|
|
106
113
|
def fetch(remote = 'origin')
|
@@ -172,14 +179,14 @@ module DTK
|
|
172
179
|
end
|
173
180
|
end
|
174
181
|
|
175
|
-
def push(remote_branch_ref)
|
182
|
+
def push(remote_branch_ref, opts={})
|
176
183
|
remote, remote_branch = remote_branch_ref.split('/')
|
177
|
-
push_with_remote(remote, remote_branch)
|
184
|
+
push_with_remote(remote, remote_branch, opts)
|
178
185
|
end
|
179
186
|
|
180
|
-
def push_with_remote(remote, remote_branch)
|
187
|
+
def push_with_remote(remote, remote_branch, opts={})
|
181
188
|
branch_for_push = "#{local_branch_name}:refs/heads/#{remote_branch||local_branch_name}"
|
182
|
-
@git_repo.push(remote, branch_for_push)
|
189
|
+
@git_repo.push(remote, branch_for_push, opts)
|
183
190
|
end
|
184
191
|
|
185
192
|
def add_file(file_rel_path, content)
|
data/lib/domain/response.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
# This is wrapper for holding rest response information as well as
|
2
|
-
# passing selection of ViewProcessor from Thor selection to render view
|
1
|
+
# This is wrapper for holding rest response information as well as
|
2
|
+
# passing selection of ViewProcessor from Thor selection to render view
|
3
3
|
# selection
|
4
|
+
require 'git'
|
4
5
|
|
5
6
|
module DTK
|
6
7
|
module Client
|
@@ -17,16 +18,16 @@ module DTK
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def initialize(command_class=nil,hash={})
|
20
|
-
super(hash)
|
21
|
+
super(hash)
|
21
22
|
@command_class = command_class
|
22
23
|
@skip_render = false
|
23
24
|
@print_error_table = false
|
24
25
|
# default values
|
25
|
-
@render_view = RenderView::AUG_SIMPLE_LIST
|
26
|
+
@render_view = RenderView::AUG_SIMPLE_LIST
|
26
27
|
@render_data_type = nil
|
27
28
|
end
|
28
29
|
|
29
|
-
def clone_me()
|
30
|
+
def clone_me()
|
30
31
|
return Marshal.load(Marshal.dump(self))
|
31
32
|
end
|
32
33
|
|
@@ -34,21 +35,33 @@ module DTK
|
|
34
35
|
begin
|
35
36
|
results = (block ? yield : data)
|
36
37
|
Ok.new(results)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
"
|
42
|
-
|
43
|
-
"on_client" => true
|
44
|
-
}
|
45
|
-
|
46
|
-
if DTK::Configuration.get(:development_mode)
|
47
|
-
DtkLogger.instance.error_pp("Error inside wrapper DEV ONLY: #{e.message}", e.backtrace)
|
38
|
+
|
39
|
+
rescue Git::GitExecuteError => e
|
40
|
+
if e.message.include?('Please make sure you have the correct access rights')
|
41
|
+
error_msg = "You do not have git access from this client, please add following SSH key in your git account: \n\n"
|
42
|
+
error_msg += SSHUtil.rsa_pub_key_content() + "\n"
|
43
|
+
raise DTK::Client::DtkError, error_msg
|
48
44
|
end
|
45
|
+
handle_error_in_wrapper(e)
|
46
|
+
rescue ErrorUsage => e
|
47
|
+
Error::Usage.new("message"=> e.to_s)
|
48
|
+
rescue => e
|
49
|
+
handle_error_in_wrapper(e)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.handle_error_in_wrapper(exception)
|
54
|
+
error_hash = {
|
55
|
+
"message"=> exception.message,
|
56
|
+
"backtrace" => exception.backtrace,
|
57
|
+
"on_client" => true
|
58
|
+
}
|
49
59
|
|
50
|
-
|
60
|
+
if DTK::Configuration.get(:development_mode)
|
61
|
+
DtkLogger.instance.error_pp("Error inside wrapper DEV ONLY: #{exception.message}", exception.backtrace)
|
51
62
|
end
|
63
|
+
|
64
|
+
Error::Internal.new(error_hash)
|
52
65
|
end
|
53
66
|
|
54
67
|
def get_label_for_column_name(column, type)
|
@@ -69,7 +82,7 @@ module DTK
|
|
69
82
|
"target:" => "TARGET:"
|
70
83
|
}
|
71
84
|
end
|
72
|
-
|
85
|
+
|
73
86
|
mappings[column]
|
74
87
|
end
|
75
88
|
|
@@ -106,19 +119,19 @@ module DTK
|
|
106
119
|
|
107
120
|
columns.each do |column|
|
108
121
|
STDOUT << column
|
109
|
-
end
|
122
|
+
end
|
110
123
|
puts "\n"
|
111
124
|
end
|
112
125
|
|
113
126
|
def render_custom_info(type)
|
114
|
-
puts "--- \n"
|
127
|
+
puts "--- \n"
|
115
128
|
|
116
129
|
unless data.empty?
|
117
130
|
data.each do |k,v|
|
118
131
|
label = get_custom_labels(k, type)
|
119
132
|
v = array_to_string(v) if v.is_a?(Array)
|
120
133
|
STDOUT << " #{label} #{v}\n" if label
|
121
|
-
end
|
134
|
+
end
|
122
135
|
end
|
123
136
|
|
124
137
|
puts "\n"
|
@@ -151,10 +164,10 @@ module DTK
|
|
151
164
|
array_data.each do |a|
|
152
165
|
info << "#{a.values.first},"
|
153
166
|
end
|
154
|
-
|
167
|
+
|
155
168
|
"#{info.gsub!(/,$/,'')}"
|
156
169
|
end
|
157
|
-
|
170
|
+
|
158
171
|
|
159
172
|
def render_data(print_error_table=false)
|
160
173
|
unless @skip_render
|
@@ -174,7 +187,7 @@ module DTK
|
|
174
187
|
|
175
188
|
# sending raw data from response
|
176
189
|
rendered_data = ViewProcessor.render(@command_class, data, @render_view, @render_data_type, nil, @print_error_table)
|
177
|
-
|
190
|
+
|
178
191
|
puts "\n" unless rendered_data
|
179
192
|
return rendered_data
|
180
193
|
else
|
@@ -230,14 +243,14 @@ module DTK
|
|
230
243
|
def initialize(hash={})
|
231
244
|
super(nil,{"errors" => [hash]})
|
232
245
|
end
|
233
|
-
|
246
|
+
|
234
247
|
class Usage < self
|
235
248
|
def initialize(hash_or_string={})
|
236
249
|
hash = (hash_or_string.kind_of?(String) ? {'message' => hash_or_string} : hash_or_string)
|
237
250
|
super({"code" => "error"}.merge(hash))
|
238
251
|
end
|
239
252
|
end
|
240
|
-
|
253
|
+
|
241
254
|
class Internal < self
|
242
255
|
def initialize(hash={})
|
243
256
|
super({"code" => "error"}.merge(hash).merge("internal" => true))
|
data/lib/dtk-client/version.rb
CHANGED
data/lib/execute.rb
CHANGED
@@ -14,6 +14,7 @@ class DTK::Client::Execute
|
|
14
14
|
:subtype => 'instance',
|
15
15
|
:node_id => Required(:node),
|
16
16
|
:component_template_id => Required(:component),
|
17
|
+
:namespace => Required(:namespace),
|
17
18
|
:idempotent => Equal::OrDefault(true),
|
18
19
|
:donot_update_workflow => Equal::OrDefault(false)
|
19
20
|
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class DTK::Client::Execute
|
2
|
+
class Script < self
|
3
|
+
dtk_require('script/add_tenant')
|
4
|
+
dtk_require('script/add_tenant_without_router')
|
5
|
+
def self.execute()
|
6
|
+
script_class().execute_script()
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
Scripts = {
|
11
|
+
'add-tenant' => AddTenant,
|
12
|
+
'add-tenant-without-router' => AddTenantWithoutRouter
|
13
|
+
}
|
14
|
+
|
15
|
+
def self.script_class()
|
16
|
+
script_name = ARGV.size > 0 && ARGV[0]
|
17
|
+
unless script_class = script_name && Scripts[script_name]
|
18
|
+
legal_scripts = Scripts.keys
|
19
|
+
err_msg = (script_name ? "Unsupported script '#{script_name}'" : "Missing script name")
|
20
|
+
err_msg << "; supported scripts are (#{legal_scripts.join(',')})"
|
21
|
+
raise ErrorUsage.new(err_msg)
|
22
|
+
end
|
23
|
+
script_class
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.execute_script()
|
27
|
+
params = ret_params_from_argv()
|
28
|
+
execute_with_params(params)
|
29
|
+
end
|
30
|
+
|
31
|
+
module OptionParserHelper
|
32
|
+
require 'optparse'
|
33
|
+
def process_params_from_options(banner,&block)
|
34
|
+
OptionParser.new do |opts|
|
35
|
+
opts.banner = banner
|
36
|
+
block.call(opts)
|
37
|
+
end.parse!
|
38
|
+
end
|
39
|
+
|
40
|
+
def show_help_and_exit(banner)
|
41
|
+
ARGV[0] = '--help'
|
42
|
+
OptionParser.new do |opts|
|
43
|
+
opts.banner = banner
|
44
|
+
end.parse!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
extend OptionParserHelper
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class DTK::Client::Execute::Script
|
2
|
+
class AddTenant < self
|
3
|
+
def self.ret_params_from_argv()
|
4
|
+
banner = "Usage: dtk-execute add-tenant TENANT-NAME CATALOG-USERNAME -p PASSWORD [-s SERVICE-INSTANCE]"
|
5
|
+
tenant_name = catalog_username = tenant_number = nil
|
6
|
+
if ARGV.size > 2
|
7
|
+
tenant_name = ARGV[1]
|
8
|
+
if tenant_name =~ /^dtk([0-9]+)$/
|
9
|
+
tenant_number = $1
|
10
|
+
else
|
11
|
+
raise ErrorUsage.new("TENANT-NAME must be of form 'dtkNUMs', like dtk601")
|
12
|
+
end
|
13
|
+
catalog_username = ARGV[2]
|
14
|
+
else
|
15
|
+
show_help_and_exit(banner)
|
16
|
+
end
|
17
|
+
|
18
|
+
params = Hash.new
|
19
|
+
process_params_from_options(banner) do |opts|
|
20
|
+
opts.on( '-p', '--password PASSWORD', "Password for tenant and catalog" ) do |pw|
|
21
|
+
params[:password] = pw
|
22
|
+
end
|
23
|
+
opts.on( '-s', '--service SERVICE-INSTANCE', "Name of Service instance" ) do |s|
|
24
|
+
params[:service_instance] = s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# TODO: use opt parser to enforce that :password option is manditory
|
29
|
+
unless password = params[:password]
|
30
|
+
raise ErrorUsage.new("Password is mandatory; use -p commnd line option")
|
31
|
+
end
|
32
|
+
service_instance = params[:service_instance] || "dtkhost#{tenant_number[0]}"
|
33
|
+
to_add = {
|
34
|
+
:tenant_name => tenant_name,
|
35
|
+
:catalog_username => catalog_username,
|
36
|
+
:service_instance => service_instance
|
37
|
+
}
|
38
|
+
params.merge(to_add)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.execute_with_params(params)
|
42
|
+
tenant_name = params[:tenant_name]
|
43
|
+
catalog_username = params[:catalog_username]
|
44
|
+
service = params[:service_instance]
|
45
|
+
password = params[:password]
|
46
|
+
server_node = params[:server_node_name] || 'server'
|
47
|
+
router_node = params[:router_node_name] || 'router'
|
48
|
+
|
49
|
+
component_with_namespace = "dtk-meta-user:dtk_tenant[#{tenant_name}]"
|
50
|
+
component_namespace, component = (component_with_namespace =~ /(^[^:]+):(.+$)/; [$1,$2])
|
51
|
+
|
52
|
+
av_pairs = {
|
53
|
+
:catalog_username => catalog_username,
|
54
|
+
:tenant_password => password,
|
55
|
+
:catalog_password => password
|
56
|
+
}
|
57
|
+
|
58
|
+
ExecuteContext(:print_results => true) do
|
59
|
+
result = call 'service/add_component',
|
60
|
+
:service => service,
|
61
|
+
:node => server_node,
|
62
|
+
:component => component,
|
63
|
+
:namespace => component_namespace,
|
64
|
+
:donot_update_workflow => true
|
65
|
+
|
66
|
+
av_pairs.each_pair do |a,v|
|
67
|
+
result = call 'service/set_attribute',
|
68
|
+
:service => service,
|
69
|
+
:attribute_path => "#{server_node}/#{component}/#{a}",
|
70
|
+
:value => v
|
71
|
+
end
|
72
|
+
|
73
|
+
result = call 'service/link_components',
|
74
|
+
:service => service,
|
75
|
+
:input_component => "#{server_node}/#{component}",
|
76
|
+
:output_component => "#{server_node}/dtk_postgresql::databases"
|
77
|
+
|
78
|
+
result = call 'service/link_components',
|
79
|
+
:service => service,
|
80
|
+
:input_component => "#{server_node}/#{component}",
|
81
|
+
:output_component => "#{router_node}/dtk_nginx::vhosts_for_router"
|
82
|
+
|
83
|
+
result = call 'service/execute_workflow',
|
84
|
+
:service => service,
|
85
|
+
:workflow_name => 'add_tenant',
|
86
|
+
:workflow_params => {'name' => tenant_name}
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|