dtk-client 0.5.14 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,6 +17,7 @@ module DTK::Client
17
17
  class ComponentModule < CommandBaseThor
18
18
 
19
19
  DEFAULT_COMMIT_MSG = "Initial commit."
20
+ PULL_CATALOGS = ["dtkn"]
20
21
 
21
22
  def self.valid_children()
22
23
  # [:"component-template"]
@@ -48,7 +49,7 @@ module DTK::Client
48
49
  :"component" => [
49
50
  ["list","list","# List all component templates."],
50
51
  ["list-attributes","list-attributes", "# List all attributes for given component."]
51
- ]
52
+ ]
52
53
  #:attribute => [
53
54
  # ['list',"list","List attributes for given component"]
54
55
  #]
@@ -140,7 +141,7 @@ module DTK::Client
140
141
  return unless Console.confirmation_prompt("Are you sure you want to delete component-module #{version.nil? ? '' : 'version '}'#{component_module_name}#{version.nil? ? '' : ('-' + version.to_s)}' and all items contained in it"+'?')
141
142
  end
142
143
 
143
- response =
144
+ response =
144
145
  if options.purge?
145
146
  opts = {:module_name => component_module_name}
146
147
  if version then opts.merge!(:version => version)
@@ -157,10 +158,10 @@ module DTK::Client
157
158
  }
158
159
  action = (version ? "delete_version" : "delete")
159
160
  post_body[:version] = version if version
160
-
161
+
161
162
  response = post(rest_url("component_module/#{action}"), post_body)
162
163
  return response unless response.ok?
163
-
164
+
164
165
  # when changing context send request for getting latest modules instead of getting from cache
165
166
  @@invalidate_map << :component_module
166
167
 
@@ -189,7 +190,7 @@ module DTK::Client
189
190
  :attribute_value => value,
190
191
  :component_module_id => component_module_id
191
192
  }
192
-
193
+
193
194
  post rest_url("attribute/set"), post_body
194
195
  end
195
196
 
@@ -201,7 +202,7 @@ TODO: might deprecate
201
202
  desc "COMPONENT-MODULE-NAME/ID info", "Get information about given component module."
202
203
  def info(context_params)
203
204
  component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
204
-
205
+
205
206
  post_body = {
206
207
  :component_module_id => component_module_id
207
208
  }
@@ -231,7 +232,7 @@ TODO: might deprecate
231
232
  post_body = (remote ? { :rsa_pub_key => SSHUtil.rsa_pub_key_content() } : {:detail_to_include => ["remotes"]})
232
233
  post_body[:diff] = options.diff? ? options.diff : {}
233
234
  response = post rest_url("component_module/#{action}"),post_body
234
-
235
+
235
236
  return response unless response.ok?
236
237
  response.render_table()
237
238
  end
@@ -276,7 +277,7 @@ TODO: might deprecate
276
277
  git_import = context_params.get_forwarded_options()[:git_import] if context_params.get_forwarded_options()
277
278
  name_option = git_import ? :option_2! : :option_1!
278
279
  module_name = context_params.retrieve_arguments([name_option],method_argument_names)
279
-
280
+
280
281
  # first check that there is a directory there and it is not already a git repo, and it ha appropriate content
281
282
  response = Helper(:git_repo).check_local_dir_exists_with_content(:component_module,module_name)
282
283
  return response unless response.ok?
@@ -292,7 +293,7 @@ TODO: might deprecate
292
293
 
293
294
  repo_url,repo_id,module_id,branch = response.data(:repo_url,:repo_id,:module_id,:workspace_branch)
294
295
  response = Helper(:git_repo).initialize_client_clone_and_push(:component_module,module_name,branch,repo_url,module_directory)
295
-
296
+
296
297
  return response unless response.ok?
297
298
  repo_obj,commit_sha = response.data(:repo_obj,:commit_sha)
298
299
 
@@ -311,7 +312,7 @@ TODO: might deprecate
311
312
  # which will always be called from this method
312
313
  # if error = response.data(:dsl_parsed_info)
313
314
  # dsl_parsed_message = ServiceImporter.error_message(module_name, error)
314
- # DTK::Client::OsUtil.print(dsl_parsed_message, :red)
315
+ # DTK::Client::OsUtil.print(dsl_parsed_message, :red)
315
316
  # end
316
317
 
317
318
  dsl_created_info = response.data(:dsl_created_info)
@@ -325,9 +326,9 @@ TODO: might deprecate
325
326
  # we push clone changes anyway, user can change and push again
326
327
  context_params.add_context_to_params(module_name, :"component-module", module_id)
327
328
  response = push(context_params, true)
328
-
329
+
329
330
  if git_import
330
- response[:module_id] = module_id
331
+ response[:module_id] = module_id
331
332
  response.add_data_value!(:external_dependencies,external_dependencies) if external_dependencies
332
333
  end
333
334
 
@@ -355,14 +356,14 @@ TODO: might deprecate
355
356
  reparse_aux(module_location)
356
357
  end
357
358
  =end
358
-
359
+
359
360
  # TODO: put in back support for:desc "import REMOTE-MODULE[,...] [LIBRARY-NAME/ID]", "Import remote component module(s) into library"
360
361
  # TODO: put in doc REMOTE-MODULE havs namespace and optionally version information; e.g. r8/hdp or r8/hdp/v1.1
361
362
  # if multiple items and failire; stops on first failure
362
363
  # desc "install [NAMESPACE/]REMOTE-COMPONENT-MODULE-NAME [-r DTK-REPO-MANAGER]","Install remote component module into local environment"
363
364
  desc "install [NAMESPACE/]REMOTE-COMPONENT-MODULE-NAME","Install remote component module into local environment"
364
365
  method_option "repo-manager",:aliases => "-r" ,
365
- :type => :string,
366
+ :type => :string,
366
367
  :banner => "REPO-MANAGER",
367
368
  :desc => "DTK Repo Manager from which to resolve requested module."
368
369
  def install(context_params)
@@ -374,7 +375,7 @@ TODO: might deprecate
374
375
  do_not_raise = context_params.get_forwarded_options()[:do_not_raise] if context_params.get_forwarded_options()
375
376
  ignore_component_error = context_params.get_forwarded_options()[:ignore_component_error] if context_params.get_forwarded_options()
376
377
  additional_message = context_params.get_forwarded_options()[:additional_message] if context_params.get_forwarded_options()
377
-
378
+
378
379
  remote_namespace, local_module_name = get_namespace_and_name(remote_module_name)
379
380
  if clone_dir = Helper(:git_repo).local_clone_dir_exists?(:component_module,local_module_name,version)
380
381
  message = "Component module's directory (#{clone_dir}) exists on client. To install this needs to be renamed or removed"
@@ -390,16 +391,16 @@ TODO: might deprecate
390
391
  post_body.merge!(:do_not_raise => do_not_raise) if do_not_raise
391
392
  post_body.merge!(:ignore_component_error => ignore_component_error) if ignore_component_error
392
393
  post_body.merge!(:additional_message => additional_message) if additional_message
393
-
394
+
394
395
  response = post rest_url("component_module/import"), post_body
395
396
  return response unless response.ok?
396
397
 
397
- return response if response.data(:does_not_exist)
398
+ return response if response.data(:does_not_exist)
398
399
  module_name,repo_url,branch,version = response.data(:module_name,:repo_url,:workspace_branch,:version)
399
-
400
+
400
401
  if error = response.data(:dsl_parsed_info)
401
402
  dsl_parsed_message = ServiceImporter.error_message(module_name, error)
402
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
403
+ DTK::Client::OsUtil.print(dsl_parsed_message, :red)
403
404
  end
404
405
 
405
406
  response = ""
@@ -417,21 +418,21 @@ TODO: might deprecate
417
418
  desc "import-git GIT-SSH-REPO-URL COMPONENT-MODULE-NAME", "Create new local component module by importing from provided git repo URL"
418
419
  def import_git(context_params)
419
420
  git_repo_url, module_name = context_params.retrieve_arguments([:option_1!, :option_2!],method_argument_names)
420
-
421
+
421
422
  # Create component module from user's input git repo
422
423
  response = Helper(:git_repo).create_clone_with_branch(:component_module, module_name, git_repo_url)
423
-
424
+
424
425
  # Raise error if git repository is invalid
425
426
  # raise DtkError,"Git repository URL '#{git_repo_url}' is invalid." unless response.ok?
426
427
  return response unless response.ok?
427
428
 
428
429
  # Remove .git directory to rid of git pointing to user's github
429
430
  FileUtils.rm_rf("#{response['data']['module_directory']}/.git")
430
-
431
+
431
432
  context_params.forward_options({:git_import => true})
432
433
  # Reuse module create method to create module from local component_module
433
434
  create_response = import(context_params)
434
-
435
+
435
436
  if create_response.ok?
436
437
  if external_dependencies = create_response.data(:external_dependencies)
437
438
  inconsistent = external_dependencies["inconsistent"]
@@ -445,11 +446,11 @@ TODO: might deprecate
445
446
  delete(context_params,:force_delete => true, :no_error_msg => true)
446
447
  return create_response
447
448
  end
448
-
449
+
449
450
  Response::Ok.new()
450
451
  end
451
452
 
452
- =begin
453
+ =begin
453
454
  => DUE TO DEPENDENCY TO PUPPET GEM WE OMMIT THIS <=
454
455
  desc "import-puppet-forge PUPPET-FORGE-MODULE-NAME", "Imports puppet module from puppet forge via puppet gem"
455
456
  def import_puppet_forge(context_params)
@@ -483,14 +484,14 @@ TODO: might deprecate
483
484
 
484
485
  if error = response.data(:dsl_parsed_info)
485
486
  dsl_parsed_message = ServiceImporter.error_message(module_name, error)
486
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
487
+ DTK::Client::OsUtil.print(dsl_parsed_message, :red)
487
488
  end
488
489
 
489
490
  #TODO: need to check if local clone directory exists
490
491
  Helper(:git_repo).create_clone_with_branch(:component_module,module_name,repo_url,branch,version)
491
492
  end
492
493
  =end
493
-
494
+
494
495
  desc "delete-from-catalog [NAMESPACE/]REMOTE-COMPONENT-MODULE-NAME [-y]", "Delete the component module from the DTK Network catalog"
495
496
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
496
497
  def delete_from_catalog(context_params)
@@ -522,8 +523,8 @@ TODO: might deprecate
522
523
  # }
523
524
 
524
525
  # response = post rest_url("component_module/export"), post_body
525
-
526
- # return response
526
+
527
+ # return response
527
528
  # end
528
529
 
529
530
  desc "COMPONENT-MODULE-NAME/ID publish [[NAMESPACE/]REMOTE-COMPONENT-MODULE-NAME]", "Publish component module to remote repository."
@@ -537,21 +538,22 @@ TODO: might deprecate
537
538
  }
538
539
 
539
540
  response = post rest_url("component_module/export"), post_body
540
-
541
- return response
541
+ return response unless response.ok?
542
+ DTK::Client::RemoteDependencyUtil.print_dependency_warnings(response, "Module has been successfully published!")
543
+ nil
542
544
  end
543
545
 
544
546
  desc "COMPONENT-MODULE-NAME/ID pull-dtkn [-n NAMESPACE]", "Update local component module from remote repository."
545
547
  method_option "namespace",:aliases => "-n",
546
- :type => :string,
548
+ :type => :string,
547
549
  :banner => "NAMESPACE",
548
550
  :desc => "Remote namespace"
549
- def pull_dtkn(context_params)
551
+ def pull_dtkn(context_params)
550
552
  component_module_id, component_module_name = context_params.retrieve_arguments([:component_module_id!,:component_module_name,:option_1],method_argument_names)
551
553
  catalog = 'dtkn'
552
554
  version = options["version"]
553
555
 
554
- raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PullCatalogs}" unless catalog
556
+ raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PULL_CATALOGS}" unless catalog
555
557
 
556
558
  if component_module_name.to_s =~ /^[0-9]+$/
557
559
  component_module_id = component_module_name
@@ -573,18 +575,19 @@ TODO: might deprecate
573
575
  #elsif catalog.to_s.eql?("origin")
574
576
  #needs to be implemented
575
577
  else
576
- raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PullCatalogs}"
578
+ raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PULL_CATALOGS}"
577
579
  end
578
580
  end
579
581
 
580
- PullCatalogs = ["dtkn"]
581
582
 
583
+ =begin
582
584
  desc "COMPONENT-MODULE-NAME/ID chown REMOTE-USER", "Set remote module owner"
583
585
  method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
584
586
  def chown(context_params)
585
587
  component_module_id, remote_user = context_params.retrieve_arguments([:component_module_id!,:option_1!],method_argument_names)
586
588
  chown_aux(component_module_id, remote_user, options.namespace)
587
589
  end
590
+ =end
588
591
 
589
592
  desc "COMPONENT-MODULE-NAME/ID chmod PERMISSION-SELECTOR", "Update remote permissions e.g. ug+rw , user and group get RW permissions"
590
593
  method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
@@ -675,7 +678,7 @@ TODO: might deprecate
675
678
  ##
676
679
  #
677
680
  # internal_trigger: this flag means that other method (internal) has trigger this.
678
- # This will change behaviour of method in such way that edit will not be
681
+ # This will change behaviour of method in such way that edit will not be
679
682
  # triggered after it.
680
683
  #
681
684
  #desc "COMPONENT-MODULE-NAME/ID clone [-v VERSION] [-n]", "Locally clone component module and component files. Use -n to skip edit prompt"
@@ -687,7 +690,7 @@ TODO: might deprecate
687
690
  component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
688
691
  module_name = context_params.retrieve_arguments([:component_module_name],method_argument_names)
689
692
  version = thor_options["version"]
690
- internal_trigger = true if thor_options['skip_edit']
693
+ internal_trigger = true if thor_options['skip_edit']
691
694
 
692
695
  # if this is not name it will not work, we need module name
693
696
  if module_name.to_s =~ /^[0-9]+$/
@@ -729,7 +732,7 @@ TODO: might deprecate
729
732
  desc "COMPONENT-MODULE-NAME/ID push", "Push changes from local copy of component module to server"
730
733
  version_method_option
731
734
  method_option "message",:aliases => "-m" ,
732
- :type => :string,
735
+ :type => :string,
733
736
  :banner => "COMMIT-MSG",
734
737
  :desc => "Commit message"
735
738
  # hidden option for dev
@@ -752,11 +755,11 @@ TODO: might deprecate
752
755
  # desc "COMPONENT-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of component module to remote repository (dtkn)."
753
756
  desc "COMPONENT-MODULE-NAME/ID push-dtkn [-n NAMESPACE]", "Push changes from local copy of component module to remote repository (dtkn)."
754
757
  method_option "message",:aliases => "-m" ,
755
- :type => :string,
758
+ :type => :string,
756
759
  :banner => "COMMIT-MSG",
757
760
  :desc => "Commit message"
758
761
  method_option "namespace",:aliases => "-n",
759
- :type => :string,
762
+ :type => :string,
760
763
  :banner => "NAMESPACE",
761
764
  :desc => "Remote namespace"
762
765
  #hidden option for dev
@@ -821,7 +824,7 @@ TODO: might deprecate
821
824
  modules_path = OsUtil.module_clone_location()
822
825
  module_location = "#{modules_path}/#{module_name}#{version && "-#{version}"}"
823
826
 
824
- # check if there is repository cloned
827
+ # check if there is repository cloned
825
828
  if File.directory?(module_location)
826
829
  list_diffs_aux(:component_module, component_module_id, options.remote?, version)
827
830
  else
@@ -68,7 +68,8 @@ module DTK::Client
68
68
  def import_service_module(context_params)
69
69
  library_id, service_modules = context_params.retrieve_arguments([:library_id, :option_1!],method_argument_names)
70
70
  post_body = {
71
- :remote_module_name => service_modules
71
+ :remote_module_name => service_modules,
72
+ :rsa_pub_key => SSHUtil.rsa_pub_key_content()
72
73
  }
73
74
  post_body.merge!(:library_id => library_id) if library_id
74
75
 
@@ -18,7 +18,7 @@ module DTK::Client
18
18
  :command_only => {
19
19
  :target => [
20
20
  ['delete-target',"delete-target TARGET-IDENTIFIER","# Deletes target"],
21
- ['list-targets',"list-targets","# Lists available targets."]
21
+ ['list',"list","# Lists available targets."]
22
22
 
23
23
  ]
24
24
  },
@@ -35,37 +35,36 @@ module DTK::Client
35
35
  return Provider.valid_children().include?(name_of_sub_context.to_sym)
36
36
  end
37
37
 
38
- desc "create-provider PROVIDER-TYPE:PROVIDER-NAME --keypair KEYPAIR --security-group SECURITY-GROUP [--no-bootstrap]", "Create provider"
38
+ desc "create-provider PROVIDER-TYPE:PROVIDER-NAME [--keypair KEYPAIR] [--security-group SECURITY-GROUP] [--bootstrap]", "Create provider"
39
39
  method_option :keypair, :type => :string
40
40
  method_option :security_group, :type => :string
41
- method_option :no_bootstrap, :type => :boolean, :default => false
41
+ method_option :bootstrap, :type => :boolean, :default => false
42
42
  def create_provider(context_params)
43
43
  composed_provider_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
44
44
 
45
45
  provider_type, provider_name = decompose_provider_type_and_name(composed_provider_name)
46
- keypair, security_group = context_params.retrieve_thor_options([:keypair!, :security_group!], options)
47
-
48
- result = DTK::Shell::InteractiveWizard::interactive_user_input(
49
- {'IAAS Credentials' => { :type => :group, :options => [
50
- {:key => {}},
51
- {:secret => {}}
52
- ]}})
53
-
54
- access_key, secret_key = result['IAAS Credentials'].values_at(:key, :secret)
46
+ iaas_properties = Hash.new
47
+ #TODO: daat-driven check if legal provider type and then what options needed depending on provider type
48
+ unless provider_type.eql?('physical')
49
+ keypair, security_group = context_params.retrieve_thor_options([:keypair!, :security_group!], options)
50
+ iaas_properties.merge!(:keypair_name => keypair,:security_group => security_group)
51
+ result = DTK::Shell::InteractiveWizard::interactive_user_input(
52
+ {'IAAS Credentials' => { :type => :group, :options => [
53
+ {:key => {}},
54
+ {:secret => {}}
55
+ ]}})
56
+ access_key, secret_key = result['IAAS Credentials'].values_at(:key, :secret)
57
+ iaas_properties.merge!(:key => access_key,:secret => secret_key)
58
+ end
55
59
 
56
60
  # Remove sensitive readline history
57
61
  OsUtil.pop_readline_history(2)
58
62
 
59
- post_body = {
60
- :iaas_properties => {
61
- :key => access_key,
62
- :secret => secret_key,
63
- :keypair_name => keypair,
64
- :security_group => security_group
65
- },
66
- :provider_name => provider_name,
67
- :iaas_type => provider_type.downcase,
68
- :no_bootstrap => options.no_bootstrap?
63
+ post_body = {
64
+ :iaas_properties => iaas_properties,
65
+ :provider_name => provider_name,
66
+ :iaas_type => provider_type.downcase,
67
+ :no_bootstrap => ! options.bootstrap?
69
68
  }
70
69
 
71
70
  response = post rest_url("target/create_provider"), post_body
@@ -98,31 +97,38 @@ module DTK::Client
98
97
 
99
98
  desc "list","Lists available providers."
100
99
  def list(context_params)
101
- response = post rest_url("target/list"), { :subtype => :template }
102
- response.render_table(:provider)
100
+ if context_params.is_there_command?(:"target")
101
+ list_targets(context_params)
102
+ else
103
+ response = post rest_url("target/list"), { :subtype => :template }
104
+ response.render_table(:provider)
105
+ end
103
106
  end
104
107
 
105
108
  #TODO: Aldin; wanted to name this list_targets, but did not know how to do so w/o conflicting with desc "PROVIDER-ID/NAME list-targets
106
- desc "list-all-targets","Lists all targets for all providers."
107
- def list_all_targets(context_params)
108
- response = post rest_url("target/list"), { :subtype => :instance }
109
- response.render_table(:target)
110
- end
109
+ # Aldin: moved this to target base context (target>list)
110
+ #
111
+ # desc "list-all-targets","Lists all targets for all providers."
112
+ # def list_all_targets(context_params)
113
+ # response = post rest_url("target/list"), { :subtype => :instance }
114
+ # response.render_table(:target)
115
+ # end
111
116
 
112
117
  desc "PROVIDER-ID/NAME list-targets", "List targets"
113
118
  def list_targets(context_params)
114
119
  provider_id = context_params.retrieve_arguments([:provider_id!],method_argument_names)
115
120
 
116
- response = post rest_url("target/list"), { :subtype => :instance, :parent_id => provider_id }
117
-
121
+ response = post rest_url("target/list"), { :subtype => :instance, :parent_id => provider_id }
118
122
  response.render_table(:target)
119
123
  end
120
124
 
121
- desc "set-default-target TARGET-NAME/ID","Sets the default target."
122
- def set_default_target(context_params)
123
- target_id = context_params.retrieve_arguments([:option_1!],method_argument_names)
124
- post rest_url("target/set_default"), { :target_id => target_id }
125
- end
125
+ # Aldin: moved to target base context (target>set-default-target)
126
+ #
127
+ # desc "set-default-target TARGET-NAME/ID","Sets the default target."
128
+ # def set_default_target(context_params)
129
+ # target_id = context_params.retrieve_arguments([:option_1!],method_argument_names)
130
+ # post rest_url("target/set_default"), { :target_id => target_id }
131
+ # end
126
132
 
127
133
  desc "delete-provider PROVIDER-IDENTIFIER [-y]","Deletes targets provider"
128
134
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
@@ -46,7 +46,7 @@ module DTK::Client
46
46
  end
47
47
 
48
48
 
49
-
49
+
50
50
  end
51
51
 
52
52
  def self.whoami()
@@ -66,24 +66,24 @@ module DTK::Client
66
66
  end
67
67
 
68
68
  # using extended_context when we want to use autocomplete from other context
69
- # e.g. we are in assembly/apache context and want to create-component we will use extended context to add
69
+ # e.g. we are in assembly/apache context and want to create-component we will use extended context to add
70
70
  # component-templates to autocomplete
71
71
  def self.extended_context()
72
72
  {
73
73
  :context => {
74
74
  :add_component => "component_template",
75
75
  :create_node => "node_template",
76
- :add_component_dependency => "component_template"
76
+ :add_component_dependency => "component_template"
77
77
  },
78
78
  :command => {
79
79
  :edit_component_module => {
80
- :endpoint => "assembly",
81
- :url => "assembly/info_about",
80
+ :endpoint => "assembly",
81
+ :url => "assembly/info_about",
82
82
  :opts => {:subtype=>"instance", :about=>"modules"}
83
83
  },
84
84
  :push_component_module_updates => {
85
- :endpoint => "assembly",
86
- :url => "assembly/info_about",
85
+ :endpoint => "assembly",
86
+ :url => "assembly/info_about",
87
87
  :opts => {:subtype=>"instance", :about=>"modules"}
88
88
  }
89
89
  }
@@ -143,8 +143,9 @@ TODO: overlaps with different meaning
143
143
  ['delete',"delete COMPONENT-NAME/ID [-y] ","# Delete component from workspace."],
144
144
  ['list-components',"list-components","# List components."]
145
145
  ],
146
- :utils => [
146
+ :utils => [
147
147
  ['execute-tests',"execute-tests [--component COMPONENT-NAME] [--timeout TIMEOUT]","# Execute tests. --component filters execution per component, --timeout changes default execution timeout."],
148
+ ['execute-tests-v2',"execute-tests-v2 [--component COMPONENT-NAME] [--timeout TIMEOUT]","# Execute tests. --component filters execution per component, --timeout changes default execution timeout."],
148
149
  ['get-netstats',"get-netstats","# Get netstats."],
149
150
  ['get-ps',"get-ps [--filter PATTERN]","# Get ps."],
150
151
  ['grep',"grep LOG-PATH NODE-ID-PATTERN GREP-PATTERN [--first]","# Grep log from multiple nodes. --first option returns first match (latest log entry)."],
@@ -213,19 +214,19 @@ TODO: overlaps with different meaning
213
214
 
214
215
  Response::Ok.new()
215
216
  end
216
-
217
+
217
218
  desc "SERVICE-NAME/ID converge [-m COMMIT-MSG]", "Converge service instance."
218
219
  method_option "commit_msg",:aliases => "-m" ,
219
220
  :type => :string,
220
221
  :banner => "COMMIT-MSG",
221
- :desc => "Commit message"
222
+ :desc => "Commit message"
222
223
  def converge(context_params)
223
224
  converge_aux(context_params)
224
225
  end
225
226
 
226
227
  desc "SERVICE-NAME/ID push-assembly-updates [SERVICE-MODULE-NAME/ASSEMBLY-NAME]", "Push changes made to this service instance to the designated assembly; default is parent assembly."
227
228
  def push_assembly_updates(context_params)
228
- assembly_id, qualified_assembly_name = context_params.retrieve_arguments([:service_id!,:option_1],method_argument_names)
229
+ assembly_id, qualified_assembly_name = context_params.retrieve_arguments([:service_id!,:option_1],method_argument_names)
229
230
  service_module_name, assembly_template_name =
230
231
  if qualified_assembly_name
231
232
  if qualified_assembly_name =~ /(^[^\/]*)\/([^\/]*$)/
@@ -275,7 +276,7 @@ TODO: overlaps with different meaning
275
276
  TODO: will put in dot release and will rename to 'extend'
276
277
  desc "ASSEMBLY-NAME/ID add EXTENSION-TYPE [-n COUNT]", "Adds a sub assembly template to the assembly"
277
278
  method_option "count",:aliases => "-n" ,
278
- :type => :string, #integer
279
+ :type => :string, #integer
279
280
  :banner => "COUNT",
280
281
  :desc => "Number of sub-assemblies to add"
281
282
  def add_node(context_params)
@@ -296,7 +297,7 @@ TODO: will put in dot release and will rename to 'extend'
296
297
  return response
297
298
  end
298
299
 
299
- desc "ASSEMBLY-NAME/ID possible-extensions", "Lists the possible extensions to the assembly"
300
+ desc "ASSEMBLY-NAME/ID possible-extensions", "Lists the possible extensions to the assembly"
300
301
  def possible_extensions(context_params)
301
302
  assembly_id = context_params.retrieve_arguments([:assembly_id!],method_argument_names)
302
303
 
@@ -377,7 +378,7 @@ TODO: will put in dot release and will rename to 'extend'
377
378
  data_type = :task
378
379
  else
379
380
  raise_validation_error_method_usage('list')
380
- end
381
+ end
381
382
  end
382
383
 
383
384
  post_body = {
@@ -389,7 +390,7 @@ TODO: will put in dot release and will rename to 'extend'
389
390
  post_body.merge!(:detail_to_include => detail_to_include) if detail_to_include
390
391
  rest_endpoint = "assembly/info_about"
391
392
 
392
- if context_params.is_last_command_eql_to?(:attribute)
393
+ if context_params.is_last_command_eql_to?(:attribute)
393
394
  raise DTK::Client::DtkError, "Not supported command for current context level." if attribute_id
394
395
  about, data_type = get_type_and_raise_error_if_invalid(about, "attributes", ["attributes"])
395
396
  elsif context_params.is_last_command_eql_to?(:component)
@@ -411,7 +412,7 @@ TODO: will put in dot release and will rename to 'extend'
411
412
  data_type = :assembly
412
413
  post_body = { :subtype => 'instance', :detail_level => 'nodes' }
413
414
  rest_endpoint = "assembly/list"
414
- end
415
+ end
415
416
  end
416
417
 
417
418
  post_body[:about] = about
@@ -446,12 +447,12 @@ TODO: will put in dot release and will rename to 'extend'
446
447
 
447
448
  path_to_rsa_pub_key ||= SSHUtil.default_rsa_pub_key_path()
448
449
  rsa_pub_key_content = SSHUtil.read_and_validate_pub_key(path_to_rsa_pub_key)
449
-
450
+
450
451
  response = post_file rest_url("assembly/initiate_ssh_pub_access"), {
451
452
  :agent_action => :grant_access,
452
- :system_user => system_user,
453
- :rsa_pub_name => rsa_key_name,
454
- :rsa_pub_key => rsa_pub_key_content,
453
+ :system_user => system_user,
454
+ :rsa_pub_name => rsa_key_name,
455
+ :rsa_pub_key => rsa_pub_key_content,
455
456
  :assembly_id => service_id,
456
457
  :target_nodes => options.nodes
457
458
  }
@@ -469,10 +470,10 @@ TODO: will put in dot release and will rename to 'extend'
469
470
  method_option :nodes, :type => :string, :default => nil
470
471
  def revoke_access(context_params)
471
472
  service_id, system_user, rsa_key_name = context_params.retrieve_arguments([:service_id!,:option_1!, :option_2!],method_argument_names)
472
-
473
- response = post_file rest_url("assembly/initiate_ssh_pub_access"), {
473
+
474
+ response = post_file rest_url("assembly/initiate_ssh_pub_access"), {
474
475
  :agent_action => :revoke_access,
475
- :system_user => system_user,
476
+ :system_user => system_user,
476
477
  :rsa_pub_name => rsa_key_name,
477
478
  :assembly_id => service_id,
478
479
  :target_nodes => options.nodes
@@ -487,12 +488,12 @@ TODO: will put in dot release and will rename to 'extend'
487
488
  nil
488
489
  end
489
490
 
490
- desc "SERVICE-NAME/ID list-ssh-access", "List SSH access for each of the nodes"
491
+ desc "SERVICE-NAME/ID list-ssh-access", "List SSH access for each of the nodes"
491
492
  def list_ssh_access(context_params)
492
493
  service_id = context_params.retrieve_arguments([:service_id!],method_argument_names)
493
494
 
494
- response = post_file rest_url("assembly/list_ssh_access"), {
495
- :assembly_id => service_id
495
+ response = post_file rest_url("assembly/list_ssh_access"), {
496
+ :assembly_id => service_id
496
497
  }
497
498
 
498
499
  response.render_table(:ssh_access)
@@ -538,7 +539,7 @@ TODO: will put in dot release and will rename to 'extend'
538
539
  }
539
540
 
540
541
  response = post rest_url("assembly/delete"), post_body
541
-
542
+
542
543
  # when changing context send request for getting latest assemblies instead of getting from cache
543
544
  @@invalidate_map << :service
544
545
  @@invalidate_map << :assembly
@@ -624,7 +625,7 @@ TODO: will put in dot release and will rename to 'extend'
624
625
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
625
626
  def delete_component(context_params)
626
627
  response = delete_component_aux(context_params)
627
-
628
+
628
629
  @@invalidate_map << :service
629
630
  @@invalidate_map << :service_node
630
631
  @@invalidate_map << :service_node_component
@@ -640,12 +641,20 @@ TODO: will put in dot release and will rename to 'extend'
640
641
 
641
642
  # using HIDE_FROM_BASE to hide this command from base context (dtk:/assembly>)
642
643
  desc "HIDE_FROM_BASE execute-tests [--component COMPONENT-NAME] [--timeout TIMEOUT]", "Execute tests. --component filters execution per component, --timeout changes default execution timeout"
643
- method_option :component, :type => :string, :desc => "Component name"
644
+ method_option :component, :type => :string, :desc => "Component name"
644
645
  method_option :timeout, :type => :string, :desc => "Timeout"
645
646
  def execute_tests(context_params)
646
647
  execute_tests_aux(context_params)
647
648
  end
648
649
 
650
+ # using HIDE_FROM_BASE to hide this command from base context (dtk:/assembly>)
651
+ desc "HIDE_FROM_BASE execute-tests-v2 [--component COMPONENT-NAME] [--timeout TIMEOUT]", "Execute tests. --component filters execution per component, --timeout changes default execution timeout"
652
+ method_option :component, :type => :string, :desc => "Component name"
653
+ method_option :timeout, :type => :string, :desc => "Timeout"
654
+ def execute_tests_v2(context_params)
655
+ execute_tests_v2_aux(context_params)
656
+ end
657
+
649
658
  # using HIDE_FROM_BASE to hide this command from base context (dtk:/assembly>)
650
659
  desc "HIDE_FROM_BASE get-ps [--filter PATTERN]", "Get ps"
651
660
  method_option :filter, :type => :boolean, :default => false, :aliases => '-f'
@@ -673,7 +682,7 @@ TODO: will put in dot release and will rename to 'extend'
673
682
  grep_aux(context_params)
674
683
  end
675
684
 
676
-
685
+
677
686
  end
678
687
  end
679
688