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.
@@ -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