dtk-client 0.5.14 → 0.5.15

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.
@@ -19,6 +19,8 @@ dtk_require_common_commands('thor/common')
19
19
  module DTK::Client
20
20
  class ServiceModule < CommandBaseThor
21
21
 
22
+ PULL_CATALOGS = ["dtkn"]
23
+
22
24
  no_tasks do
23
25
  include CloneMixin
24
26
  include PushToRemoteMixin
@@ -82,15 +84,15 @@ module DTK::Client
82
84
 
83
85
  })
84
86
  end
85
-
87
+
86
88
  ##MERGE-QUESTION: need to add options of what info is about
87
89
  desc "SERVICE-MODULE-NAME/ID info", "Provides information about specified service module"
88
90
  def info(context_params)
89
91
  if context_params.is_there_identifier?(:assembly)
90
92
  response = DTK::Client::ContextRouter.routeTask("assembly", "info", context_params, @conn)
91
- else
93
+ else
92
94
  service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
93
-
95
+
94
96
  post_body = {
95
97
  :service_module_id => service_module_id
96
98
  }
@@ -128,20 +130,20 @@ module DTK::Client
128
130
  if service_module_id.nil? && !service_module_name.nil?
129
131
  service_module_id = service_module_name
130
132
  end
131
-
133
+
132
134
  # If user is on service level, list task can't have about value set
133
135
  if (context_params.last_entity_name == :"service-module") and about.nil?
134
136
  action = options.remote? ? "list_remote" : "list"
135
137
  post_body = (options.remote? ? { :rsa_pub_key => SSHUtil.rsa_pub_key_content() } : {:detail_to_include => ["remotes"]})
136
138
  post_body[:diff] = options.diff? ? options.diff : {}
137
-
139
+
138
140
  response = post rest_url("service_module/#{action}"), post_body
139
141
  # If user is on service identifier level, list task can't have '--remote' option.
140
142
  else
141
143
  # TODO: this is temp; will shortly support this
142
144
  raise DTK::Client::DtkValidationError.new("Not supported '--remote' option when listing service module assemblies, component templates or modules", true) if options.remote?
143
145
  raise DTK::Client::DtkValidationError.new("Not supported type '#{about}' for list for current context level. Possible type options: 'assembly'", true) unless(about == "assembly" || about == "modules")
144
-
146
+
145
147
  if about
146
148
  case about
147
149
  when "assembly"
@@ -153,7 +155,7 @@ module DTK::Client
153
155
  action = "list_component_modules"
154
156
  else
155
157
  raise_validation_error_method_usage('list')
156
- end
158
+ end
157
159
  end
158
160
  response = post rest_url("service_module/#{action}"), { :service_module_id => service_module_id }
159
161
  end
@@ -170,7 +172,7 @@ module DTK::Client
170
172
  :service_module_id => service_module_id,
171
173
  }
172
174
  response = post rest_url("service_module/list_instances"), post_body
173
-
175
+
174
176
  response.render_table(:assembly_template)
175
177
  end
176
178
 
@@ -196,7 +198,7 @@ module DTK::Client
196
198
  resolve_direct_access(::DTK::Client::Configurator.check_direct_access)
197
199
  remote_module_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
198
200
  ignore_component_error = options.ignore?
199
-
201
+
200
202
  remote_namespace, local_module_name = get_namespace_and_name(remote_module_name)
201
203
 
202
204
  version = options["version"]
@@ -209,8 +211,9 @@ module DTK::Client
209
211
  :local_module_name => local_module_name,
210
212
  :rsa_pub_key => SSHUtil.rsa_pub_key_content()
211
213
  }
212
-
214
+
213
215
  response = post rest_url("service_module/import"), post_body
216
+ RemoteDependencyUtil.print_dependency_warnings(response)
214
217
 
215
218
  # case when we need to import additional components
216
219
  if (response.ok? && (missing_components = response.data(:missing_module_components)))
@@ -224,13 +227,13 @@ module DTK::Client
224
227
  post_body.merge!(opts)
225
228
  response = post rest_url("service_module/import"), post_body
226
229
  end
227
-
230
+
228
231
  return response unless response.ok?
229
232
  @@invalidate_map << :service_module
230
233
 
231
234
  if error = response.data(:dsl_parsed_info)
232
235
  dsl_parsed_message = ServiceImporter.error_message(remote_module_name, error)
233
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
236
+ DTK::Client::OsUtil.print(dsl_parsed_message, :red)
234
237
  end
235
238
 
236
239
  service_module_id, module_name, namespace, repo_url, branch = response.data(:module_id, :module_name, :namespace, :repo_url, :workspace_branch)
@@ -277,7 +280,7 @@ module DTK::Client
277
280
 
278
281
  # if error = response.data(:dsl_parsed_info)
279
282
  # dsl_parsed_message = ServiceImporter.error_message("#{module_name}-#{version}", error)
280
- # DTK::Client::OsUtil.print(dsl_parsed_message, :red)
283
+ # DTK::Client::OsUtil.print(dsl_parsed_message, :red)
281
284
  # end
282
285
 
283
286
  # #TODO: need to check if local clone directory exists
@@ -307,14 +310,17 @@ module DTK::Client
307
310
  :rsa_pub_key => SSHUtil.rsa_pub_key_content()
308
311
  }
309
312
 
310
- post rest_url("service_module/export"), post_body
311
- end
313
+ response = post rest_url("service_module/export"), post_body
314
+ return response unless response.ok?
315
+ RemoteDependencyUtil.print_dependency_warnings(response, "Module has been successfully published!")
316
+ nil
317
+ end
312
318
 
313
319
  # desc "SERVICE-MODULE-NAME/ID push-to-dtkn [-n NAMESPACE] [-v VERSION]", "Push local copy of service module to remote repository."
314
320
  # version_method_option
315
321
  # desc "SERVICE-MODULE-NAME/ID push-to-dtkn [-n NAMESPACE]", "Push local copy of service module to remote repository."
316
322
  # method_option "namespace",:aliases => "-n",
317
- # :type => :string,
323
+ # :type => :string,
318
324
  # :banner => "NAMESPACE",
319
325
  # :desc => "Remote namespace"
320
326
  # def push_to_dtkn(context_params)
@@ -332,7 +338,7 @@ module DTK::Client
332
338
  # unless File.directory?(module_location)
333
339
  # if Console.confirmation_prompt("Unable to push to remote because module '#{service_module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
334
340
  # response = clone_aux(:service_module,service_module_id,version,false)
335
-
341
+
336
342
  # if(response.nil? || response.ok?)
337
343
  # reparse_aux(module_location)
338
344
  # push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], version) if Console.confirmation_prompt("Would you like to push changes to remote"+'?')
@@ -344,7 +350,7 @@ module DTK::Client
344
350
  # return
345
351
  # end
346
352
  # end
347
-
353
+
348
354
  # reparse_aux(module_location)
349
355
  # push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], options["version"])
350
356
  # end
@@ -352,15 +358,15 @@ module DTK::Client
352
358
  # desc "SERVICE-MODULE-NAME/ID pull-from-dtkn [-n NAMESPACE] [-v VERSION]", "Update local service module from remote repository."
353
359
  desc "SERVICE-MODULE-NAME/ID pull-dtkn [-n NAMESPACE]", "Update local service module from remote repository."
354
360
  method_option "namespace",:aliases => "-n",
355
- :type => :string,
361
+ :type => :string,
356
362
  :banner => "NAMESPACE",
357
363
  :desc => "Remote namespace"
358
364
  def pull_dtkn(context_params)
359
365
  service_module_id, service_module_name = context_params.retrieve_arguments([:service_module_id!,:service_module_name],method_argument_names)
360
366
  catalog = 'dtkn'
361
367
  version = options["version"]
362
-
363
- raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PullCatalogs}" unless catalog
368
+
369
+ raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PULL_CATALOGS}" unless catalog
364
370
 
365
371
  if service_module_name.to_s =~ /^[0-9]+$/
366
372
  service_module_id = service_module_name
@@ -384,17 +390,9 @@ module DTK::Client
384
390
  #elsif catalog.to_s.eql?("origin")
385
391
  #needs to be implemented
386
392
  else
387
- raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PullCatalogs}"
393
+ raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PULL_CATALOGS}"
388
394
  end
389
395
  end
390
- PullCatalogs = ["dtkn"]
391
-
392
- desc "SERVICE-MODULE-NAME/ID chown REMOTE-USER", "Set remote module owner"
393
- method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
394
- def chown(context_params)
395
- service_module_id, remote_user = context_params.retrieve_arguments([:service_module_id!,:option_1!],method_argument_names)
396
- chown_aux(service_module_id, remote_user, options.namespace)
397
- end
398
396
 
399
397
  desc "SERVICE-MODULE-NAME/ID chmod PERMISSION-SELECTOR", "Update remote permissions e.g. ug+rw , user and group get RW permissions"
400
398
  method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
@@ -439,7 +437,7 @@ module DTK::Client
439
437
  method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
440
438
  def list_collaborators(context_params)
441
439
  service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
442
- response = collaboration_list_aux(component_module_id, options.namespace)
440
+ response = collaboration_list_aux(service_module_id, options.namespace)
443
441
  response.render_table(:module_collaborators)
444
442
  response
445
443
  end
@@ -525,7 +523,7 @@ module DTK::Client
525
523
  # post_body = {
526
524
  # :service_module_id => service_module_id,
527
525
  # :component_module_id => component_module_id,
528
- # :version => version
526
+ # :version => version
529
527
  # }
530
528
  # response = post rest_url("service_module/set_component_module_version"), post_body
531
529
  # @@invalidate_map << :service_module
@@ -543,18 +541,18 @@ module DTK::Client
543
541
  response = Helper(:git_repo).check_local_dir_exists_with_content(:service_module,module_name)
544
542
  return response unless response.ok?
545
543
  service_directory = response.data(:module_directory)
546
-
544
+
547
545
  #check for yaml/json parsing errors before import
548
546
  reparse_aux(service_directory)
549
547
 
550
548
  # first call to create empty module
551
- response = post rest_url("service_module/create"), { :module_name => module_name }
549
+ response = post rest_url("service_module/create"), { :module_name => module_name }
552
550
  return response unless response.ok?
553
551
  @@invalidate_map << :service_module
554
-
552
+
555
553
  if error = response.data(:dsl_parsed_info)
556
554
  dsl_parsed_message = ServiceImporter.error_message(module_name, error)
557
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
555
+ DTK::Client::OsUtil.print(dsl_parsed_message, :red)
558
556
  end
559
557
 
560
558
  # initial commit for given service module
@@ -574,11 +572,11 @@ module DTK::Client
574
572
  =begin
575
573
  desc "SERVICE-MODULE-NAME/ID push origin|dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of service module to server (origin) or to remote repository (dtkn)."
576
574
  method_option "message",:aliases => "-m" ,
577
- :type => :string,
575
+ :type => :string,
578
576
  :banner => "COMMIT-MSG",
579
577
  :desc => "Commit message"
580
578
  method_option "namespace",:aliases => "-n",
581
- :type => :string,
579
+ :type => :string,
582
580
  :banner => "NAMESPACE",
583
581
  :desc => "Remote namespace"
584
582
  #hidden option for dev
@@ -586,7 +584,7 @@ module DTK::Client
586
584
  def push(context_params, internal_trigger=false)
587
585
  service_module_id, service_module_name, catalog = context_params.retrieve_arguments([:service_module_id!, :service_module_name, :option_1],method_argument_names)
588
586
  version = options["version"]
589
-
587
+
590
588
  raise DtkValidationError, "You have to provide valid catalog to push changes to! Valid catalogs: #{PushCatalogs}" unless catalog
591
589
 
592
590
  if service_module_name.to_s =~ /^[0-9]+$/
@@ -604,7 +602,7 @@ module DTK::Client
604
602
  unless File.directory?(module_location)
605
603
  if Console.confirmation_prompt("Unable to push to remote because module '#{service_module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
606
604
  response = clone_aux(:service_module,service_module_id,version,false)
607
-
605
+
608
606
  if(response.nil? || response.ok?)
609
607
  reparse_aux(module_location)
610
608
  push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], version) if Console.confirmation_prompt("Would you like to push changes to remote"+'?')
@@ -616,7 +614,7 @@ module DTK::Client
616
614
  return
617
615
  end
618
616
  end
619
-
617
+
620
618
  push_to_remote_aux(:service_module, service_module_id, service_module_name, options["namespace"], options["version"])
621
619
  else
622
620
  raise DtkValidationError, "You have to provide valid catalog to push changes to! Valid catalogs: #{PushCatalogs}"
@@ -628,7 +626,7 @@ module DTK::Client
628
626
  # desc "SERVICE-MODULE-NAME/ID push [-m COMMIT-MSG]", "Push changes from local copy to server (origin)."
629
627
  desc "SERVICE-MODULE-NAME/ID push", "Push changes from local copy to server."
630
628
  method_option "message",:aliases => "-m" ,
631
- :type => :string,
629
+ :type => :string,
632
630
  :banner => "COMMIT-MSG",
633
631
  :desc => "Commit message"
634
632
  #hidden option for dev
@@ -651,18 +649,18 @@ module DTK::Client
651
649
  # desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of service module to remote repository (dtkn)."
652
650
  desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE]", "Push changes from local copy of service module to remote repository (dtkn)."
653
651
  method_option "message",:aliases => "-m" ,
654
- :type => :string,
652
+ :type => :string,
655
653
  :banner => "COMMIT-MSG",
656
654
  :desc => "Commit message"
657
655
  method_option "namespace",:aliases => "-n",
658
- :type => :string,
656
+ :type => :string,
659
657
  :banner => "NAMESPACE",
660
658
  :desc => "Remote namespace"
661
659
  def push_dtkn(context_params, internal_trigger=false)
662
660
  service_module_id, service_module_name = context_params.retrieve_arguments([:service_module_id!, :service_module_name],method_argument_names)
663
661
  catalog = 'dtkn'
664
662
  version = options["version"]
665
-
663
+
666
664
  if service_module_name.to_s =~ /^[0-9]+$/
667
665
  service_module_id = service_module_name
668
666
  service_module_name = get_service_module_name(service_module_id)
@@ -673,7 +671,8 @@ module DTK::Client
673
671
  reparse_aux(module_location) unless internal_trigger
674
672
 
675
673
  if catalog.to_s.eql?("dtkn")
676
- remote_module_info = get_remote_module_info_aux(:service_module, service_module_id, options["namespace"], version)
674
+ module_refs_content = RemoteDependencyUtil.module_ref_content(module_location)
675
+ remote_module_info = get_remote_module_info_aux(:service_module, service_module_id, options["namespace"], version, module_refs_content)
677
676
  return remote_module_info unless remote_module_info.ok?
678
677
 
679
678
  unless File.directory?(module_location)
@@ -686,7 +685,7 @@ module DTK::Client
686
685
 
687
686
  return response
688
687
  end
689
-
688
+
690
689
  push_to_remote_aux(remote_module_info, :service_module)
691
690
  else
692
691
  raise DtkValidationError, "You have to provide valid catalog to push changes to!"
@@ -710,13 +709,13 @@ module DTK::Client
710
709
  return unless Console.confirmation_prompt("Are you sure you want to delete service-module #{version.nil? ? '' : 'version '}'#{service_module_name}#{version.nil? ? '' : ('-' + version.to_s)}' and all items contained in it"+'?')
711
710
  end
712
711
 
713
- response =
712
+ response =
714
713
  if options.purge?
715
714
  opts = {:module_name => service_module_name}
716
715
  if version then opts.merge!(:version => version)
717
716
  else opts.merge!(:delete_all_versions => true)
718
717
  end
719
-
718
+
720
719
  purge_clone_aux(:service_module,opts)
721
720
  else
722
721
  Helper(:git_repo).unlink_local_clone?(:service_module,service_module_name,version)
@@ -733,7 +732,7 @@ module DTK::Client
733
732
  response = post rest_url("service_module/#{action}"), post_body
734
733
  return response unless response.ok?
735
734
  module_name = response.data(:module_name)
736
-
735
+
737
736
  # when changing context send request for getting latest services instead of getting from cache
738
737
  @@invalidate_map << :service_module
739
738
 
@@ -749,7 +748,7 @@ module DTK::Client
749
748
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
750
749
  def delete_from_catalog(context_params)
751
750
  remote_service_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
752
-
751
+
753
752
  unless options.force?
754
753
  # Ask user if really want to delete service module and all items contained in it, if not then return to dtk-shell without deleting
755
754
  return unless Console.confirmation_prompt("Are you sure you want to delete remote service-module '#{remote_service_name}' and all items contained in it"+'?')
@@ -779,20 +778,20 @@ module DTK::Client
779
778
  end
780
779
 
781
780
  return unless Console.confirmation_prompt("Are you sure you want to delete assembly '#{assembly_template_name||assembly_template_id}'"+'?') unless options.force?
782
-
781
+
783
782
  post_body = {
784
783
  :service_module_id => service_module_id,
785
784
  :assembly_id => assembly_template_id,
786
- :subtype => :template
785
+ :subtype => :template
787
786
  }
788
787
 
789
788
  response = post rest_url("service_module/delete_assembly_template"), post_body
790
789
  return response unless response.ok?
791
-
790
+
792
791
  modules_path = OsUtil.service_clone_location()
793
792
  module_location = "#{modules_path}/#{service_module_name}" if service_module_name
794
- assembly_template_location = "#{module_location}/assemblies/#{assembly_template_name}" if (module_location && assembly_template_name)
795
-
793
+ assembly_template_location = "#{module_location}/assemblies/#{assembly_template_name}" if (module_location && assembly_template_name)
794
+
796
795
  if File.directory?(assembly_template_location)
797
796
  unless (assembly_template_location.nil? || ("#{module_location}/assemblies/" == assembly_template_location))
798
797
  FileUtils.rm_rf("#{assembly_template_location}")
@@ -806,17 +805,17 @@ module DTK::Client
806
805
  Response::Ok.new()
807
806
  end
808
807
  =begin
809
- desc "SERVICE-NAME/ID assembly-templates list", "List assembly templates optionally filtered by service ID/NAME."
808
+ desc "SERVICE-NAME/ID assembly-templates list", "List assembly templates optionally filtered by service ID/NAME."
810
809
  def assembly_template(context_params)
811
810
 
812
811
  service_id, method_name = context_params.retrieve_arguments([:service_name!, :option_1!],method_argument_names)
813
812
 
814
813
  options_args = ["-s", service_id]
815
-
814
+
816
815
  entity_name = "assembly_template"
817
816
  load_command(entity_name)
818
817
  entity_class = DTK::Client.const_get "#{cap_form(entity_name)}"
819
-
818
+
820
819
  response = entity_class.execute_from_cli(@conn, method_name, DTK::Shell::ContextParams.new, options_args, false)
821
820
 
822
821
  end
@@ -840,7 +839,7 @@ TODO: needs to be rewritten
840
839
  #TODO: right now JenkinsClient wil throw error if problem; better to create an error resonse
841
840
  response
842
841
  end
843
- =end
842
+ =end
844
843
  end
845
844
  end
846
845
 
@@ -1,5 +1,7 @@
1
+ dtk_require_common_commands('thor/inventory_parser')
1
2
  module DTK::Client
2
3
  class Target < CommandBaseThor
4
+ include InventoryParserMixin
3
5
 
4
6
  def self.pretty_print_cols()
5
7
  PPColumns.get(:target)
@@ -9,20 +11,51 @@ module DTK::Client
9
11
  return ['PROVIDER']
10
12
  end
11
13
 
14
+ def self.extended_context()
15
+ {
16
+ :context => {
17
+ # want auto complete for --provider option
18
+ "--provider" => "provider"
19
+ }
20
+ }
21
+ end
22
+
12
23
  desc "TARGET-NAME/ID list-nodes","Lists node instances in given targets."
13
24
  def list_nodes(context_params)
14
25
  context_params.method_arguments = ["nodes"]
15
- list_targets(context_params)
26
+ list(context_params)
27
+ end
28
+
29
+ desc "TARGET-NAME/ID info","Provides information about specified target"
30
+ def info(context_params)
31
+ target_id = context_params.retrieve_arguments([:target_id!],method_argument_names)
32
+
33
+ post_body = {:target_id => target_id}
34
+ response = post rest_url('target/info'), post_body
35
+ response.render_custom_info("target")
16
36
  end
17
37
 
18
- desc "TARGET-NAME/ID import-nodes","Reads from inventory dsl and populates the node instance objects in the dtk server."
38
+ desc "TARGET-NAME/ID import-nodes --source SOURCE","Reads from inventory dsl and populates the node instance objects (SOURCE: file:/path/to/file.yaml)."
39
+ method_option :source, :type => :string
19
40
  def import_nodes(context_params)
20
41
  target_id = context_params.retrieve_arguments([:target_id!],method_argument_names)
42
+ source = context_params.retrieve_thor_options([:source!], options)
21
43
 
22
- post_body = {
23
- :target_id => target_id
24
- }
44
+ parsed_source = source.match(/^(\w+):(.+)/)
45
+ raise DTK::Client::DtkValidationError, "Invalid source! Valid source should contain source_type:source_path (e.g. --source file:path/to/file.yaml)." unless parsed_source
46
+
47
+ import_type = parsed_source[1]
48
+ path = parsed_source[2]
49
+
50
+ raise DTK::Client::DtkValidationError, "We do not support '#{import_type}' as import source at the moment. Valid sources: #{ValidImportTypes}" unless ValidImportTypes.include?(import_type)
25
51
 
52
+ post_body = {:target_id => target_id}
53
+
54
+ if import_type.eql?('file')
55
+ inventory_data = parse_inventory_file(path)
56
+ post_body.merge!(:inventory_data => inventory_data)
57
+ end
58
+
26
59
  response = post rest_url("target/import_nodes"), post_body
27
60
  return response unless response.ok?
28
61
 
@@ -35,14 +68,50 @@ module DTK::Client
35
68
  end
36
69
  end
37
70
  end
71
+ ValidImportTypes = ["file"]
72
+
73
+ desc "set-default-target TARGET-IDENTIFIER","Sets the default target."
74
+ def set_default_target(context_params)
75
+ target_id = context_params.retrieve_arguments([:option_1!],method_argument_names)
76
+ post rest_url("target/set_default"), { :target_id => target_id }
77
+ end
78
+
79
+ desc "TARGET-NAME/ID install-agents","Install node agents on imported physical nodes."
80
+ def install_agents(context_params)
81
+ target_id = context_params.retrieve_arguments([:target_id!],method_argument_names)
82
+
83
+ post_body = {:target_id => target_id}
84
+ post rest_url("target/install_agents"), post_body
85
+ end
86
+
87
+ desc "create-target [TARGET-NAME] --provider PROVIDER --region REGION", "Create target based on given provider"
88
+ method_option :provider, :type => :string
89
+ method_option :region, :type => :string
90
+ def create_target(context_params)
91
+ # we use :target_id but that will retunr provider_id (another name for target template ID)
92
+ target_name = context_params.retrieve_arguments([:option_1],method_argument_names)
93
+ provider = context_params.retrieve_thor_options([:provider!], options)
94
+ region = context_params.retrieve_thor_options([:region], options)
95
+
96
+ DTK::Shell::InteractiveWizard.validate_region(region) if region
97
+
98
+ post_body = {
99
+ :provider_id => provider
100
+ }
101
+ post_body.merge!(:target_name => target_name) if target_name
102
+ post_body.merge!(:region => region) if region
103
+ response = post rest_url("target/create"), post_body
104
+
105
+ @@invalidate_map << :target
106
+ return response
107
+ end
38
108
 
39
109
  desc "TARGET-NAME/ID list-services","Lists service instances in given targets."
40
110
  def list_services(context_params)
41
111
  context_params.method_arguments = ["assemblies"]
42
- list_targets(context_params)
112
+ list(context_params)
43
113
  end
44
114
 
45
-
46
115
  def self.validation_list(context_params)
47
116
  provider_id = context_params.retrieve_arguments([:provider_id])
48
117
 
@@ -62,8 +131,8 @@ module DTK::Client
62
131
  response
63
132
  end
64
133
 
65
- desc "list-targets","Lists available targets."
66
- def list_targets(context_params)
134
+ desc "list","Lists available targets."
135
+ def list(context_params)
67
136
  provider_id, target_id, about = context_params.retrieve_arguments([:provider_id, :target_id, :option_1],method_argument_names||="")
68
137
 
69
138
  if target_id.nil?
@@ -82,13 +151,14 @@ module DTK::Client
82
151
 
83
152
  case about
84
153
  when "nodes"
85
- response = post rest_url("target/info_about"), post_body
86
- data_type = :node
154
+ response = post rest_url("target/info_about"), post_body
155
+ data_type = :node
87
156
  when "assemblies"
88
- response = post rest_url("target/info_about"), post_body
89
- data_type = :assembly
90
- else
91
- raise_validation_error_method_usage('list')
157
+ post_body.merge!(:detail_level => 'nodes', :include_workspace => true)
158
+ response = post rest_url("target/info_about"), post_body
159
+ data_type = :assembly
160
+ else
161
+ raise_validation_error_method_usage('list')
92
162
  end
93
163
 
94
164
  response.render_table(data_type)
@@ -382,7 +382,7 @@ module DTK::Client
382
382
  end
383
383
 
384
384
  desc "WORKSPACE-NAME/ID list-component-modules","List component modules associated with workspace."
385
- def list_modules(context_params)
385
+ def list_component_modules(context_params)
386
386
  list_modules_aux(context_params)
387
387
  end
388
388
 
@@ -16,11 +16,14 @@ class DiskCacher
16
16
 
17
17
  def initialize(cache_dir=DTK::Client::OsUtil.get_temp_location())
18
18
  @cache_dir = cache_dir
19
+ @current_user = ::DTK::Client::Configurator.client_username
19
20
  end
20
21
 
21
22
  def fetch(file_name, max_age=0, use_mock_up=true)
22
23
  file = Digest::MD5.hexdigest(file_name)
23
- file_path = File.join(@cache_dir, file)
24
+ # current user is important so that there are no clashes in writting to temp file
25
+ # between multiple users on same machine
26
+ file_path = File.join(@cache_dir, "#{@current_user}::#{file}")
24
27
 
25
28
  # we check if the file -- a MD5 hexdigest of the URL -- exists
26
29
  # in the dir. If it does and the data is fresh, we just read
data/lib/configurator.rb CHANGED
@@ -9,18 +9,11 @@ module DTK
9
9
  CONFIG_FILE = File.join(OsUtil.dtk_local_folder, "client.conf")
10
10
  CRED_FILE = File.join(OsUtil.dtk_local_folder, ".connection")
11
11
  DIRECT_ACCESS = File.join(OsUtil.dtk_local_folder, ".add_direct_access")
12
+ NODE_SSH_CREDENTIALS = File.join(OsUtil.dtk_local_folder, "ssh_credentials.yaml")
12
13
 
13
14
  require 'fileutils'
14
15
  FileUtils.mkdir(OsUtil.dtk_local_folder) unless File.directory?(OsUtil.dtk_local_folder)
15
16
 
16
- def self.CONFIG_FILE
17
- CONFIG_FILE
18
- end
19
-
20
- def self.CRED_FILE
21
- CRED_FILE
22
- end
23
-
24
17
  def self.check_config_exists
25
18
  exists = true
26
19
  if !File.exists?(CONFIG_FILE)
data/lib/core.rb CHANGED
@@ -14,6 +14,8 @@ dtk_require_from_base('util/os_util')
14
14
  dtk_require_from_base('util/ssh_util')
15
15
  dtk_require_from_base('util/common_util')
16
16
  dtk_require_from_base('util/permission_util')
17
+ dtk_require_from_base('util/remote_dependency_util')
18
+
17
19
  dtk_require("config/configuration")
18
20
 
19
21
  def top_level_execute(entity_name, method_name, context_params=nil, options_args=nil, shell_execute=false)
@@ -231,8 +233,8 @@ module DTK
231
233
  include ParseFile
232
234
  dtk_require_from_base('configurator')
233
235
 
234
- CONFIG_FILE = ::DTK::Client::Configurator.CONFIG_FILE
235
- CRED_FILE = ::DTK::Client::Configurator.CRED_FILE
236
+ CONFIG_FILE = ::DTK::Client::Configurator::CONFIG_FILE
237
+ CRED_FILE = ::DTK::Client::Configurator::CRED_FILE
236
238
 
237
239
  REQUIRED_KEYS = [:server_host]
238
240
 
@@ -116,14 +116,25 @@ module DTK
116
116
  end
117
117
 
118
118
  def get_custom_labels(label, type)
119
- mappings = {
119
+ mappings = {}
120
+
121
+ mappings["module"] = {
120
122
  "id" => "ID:",
121
123
  "display_name" => "NAME:",
122
124
  "versions" => "VERSION(S):",
123
125
  "remote_repos" => "LINKED REMOTE(S):",
124
126
  "dsl_parsed" => "DSL PARSED:"
125
127
  }
126
- mappings[label]
128
+
129
+ mappings["target"] = {
130
+ "id" => "ID:",
131
+ "display_name" => "NAME:",
132
+ "type" => "TYPE:",
133
+ "iaas_type" => "PROVIDER_TYPE:",
134
+ "provider_name" => "PROVIDER_NAME:"
135
+ }
136
+
137
+ mappings[type][label] if mappings[type]
127
138
  end
128
139
 
129
140
  def array_to_string(array_data)
@@ -1,3 +1,3 @@
1
1
  module DtkClient
2
- VERSION="0.5.14"
2
+ VERSION="0.5.15"
3
3
  end