dtk-client 0.5.13 → 0.5.14

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NmJlZDdmMWJjOGQ1ZGQ3YWFiMjE0N2RiZmUyOGQzMTQ1NGM2ZmI0Ng==
4
+ ODg5ZmJhZjg4YWIxZGY3YmQ5OWY5OTE4NDFiYmFmOWMzNWQ2ODk3NQ==
5
5
  data.tar.gz: !binary |-
6
- NzAzNTJiNDNhYmE4NTNlZGJlYWFiYjBhNGQ1MjQxMWUxMTJiZWM0ZQ==
6
+ OTQ3MGVkMDQ1NzY2YWJmNmNiZjJmZjFkMmVlYTA1Yjg4MzU5MzEzNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZmM1MzkxMzEwNDVlYzZiNzQwZDAyYTM5N2VhZjEzZmQzNDJiNDhkOWVmNTI0
10
- NWQyNTYzNDkzNWViM2Q0MDRjZWQ3NjU1YTQxZjQ0ZmU5YjNjMzgwOTA4OWJh
11
- MThkNzBhN2RlZDQxZDg1YTRhOWNiMGRiMTdiYjZiMDMyMTFlYjA=
9
+ ODdkYWU3NGJlZWFjNDgyOWJhODZkY2I2ZmFlNWMzYzYyODAwNzY4NDAxMjk4
10
+ MWFkMzc3ODdlYjJkZTI3ZWUxZGE5ZWVmZTk4NmZiODU0NGYzNWFjNzBmMTUx
11
+ MzRhZjJjNmIzODRhNmE1NjhkZTE5YjM4NjM1NzFmMWMzNGJkNjI=
12
12
  data.tar.gz: !binary |-
13
- MWJmYjViNmE2MmQwNWY4NTFkYWU3NzVlNWY5M2MwNzg2ODU1MTNlYWFjMjVl
14
- MjA5NDdmOWY2ZWE4OWFmOTllMjdmYTQzOTQ0OTc4ZjlhOGQ3MGVlNWEwZTI1
15
- OGEzNzA3OWRhYmQ2ZjVlYTEzMzk0NmU3MWRiY2EyMjE2NjY5N2Y=
13
+ MDVmOTQ4MDZiNjVjOWQxODg5M2Y4YzFiODMzY2VmN2Q1YzZlYWIxMDk5MjNl
14
+ YjhmNTRkNzRmMjQ2NGQ3NjcyOWIwZDNhNjVjZDVmNjQ4NmI4YmNlNzIzNzU4
15
+ MGE0YTk2MzI0MDYwMDFiODUxOTQzODlhYzkzMDIyOWZhMzQzMzE=
data/dtk-client.gemspec CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/dtk-client/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Rich PELAVIN"]
6
6
  gem.email = ["rich@reactor8.com"]
7
- gem.description = %q{Dtk client is CLI tool used for communication with Reactor8.}
7
+ gem.description = %q{The DTK Client is a command line tool to interact with your DTK Server and DTK Service Catalog instance(s).}
8
8
  gem.summary = %q{DTK CLI client for DTK server interaction.}
9
9
  gem.homepage = "https://github.com/rich-reactor8/dtk-client"
10
10
  gem.licenses = ["GPL-3.0"]
@@ -24,7 +24,7 @@ module DTK::Client
24
24
 
25
25
  unless does_not_exist.empty?
26
26
  module_names = does_not_exist.collect{|x| "#{x['namespace']}/#{x['name']}"}
27
- OsUtil.print("Component modules '#{module_names}' required by service module does not exist on repo manager and will not be imported!", :yellow)
27
+ OsUtil.print("You do no have access to component modules '#{module_names}' required by service module, or they do not exist on repo manager and will not be imported!", :yellow)
28
28
  return false unless Console.confirmation_prompt("Do you want to continue with import of available component modules and service module"+'?')
29
29
  end
30
30
 
@@ -0,0 +1,54 @@
1
+ module DTK::Client
2
+ module AccessControlMixin
3
+
4
+ def chmod_aux(module_id, permission_string, namespace = nil)
5
+ permission_selector = PermissionUtil.validate_permissions!(permission_string.downcase)
6
+ post_body = {
7
+ :module_id => module_id,
8
+ :permission_selector => permission_selector,
9
+ :rsa_pub_key => SSHUtil.rsa_pub_key_content(),
10
+ :remote_module_namespace => namespace
11
+ }
12
+ post rest_url("#{resolve_module_type}/remote_chmod"), post_body
13
+ end
14
+
15
+ def chown_aux(module_id, remote_user, namespace = nil)
16
+ post_body = {
17
+ :module_id => module_id,
18
+ :remote_user => remote_user,
19
+ :rsa_pub_key => SSHUtil.rsa_pub_key_content(),
20
+ :remote_module_namespace => namespace
21
+ }
22
+ post rest_url("#{resolve_module_type}/remote_chown"), post_body
23
+ end
24
+
25
+ def collaboration_aux(action, module_id, users, groups, namespace = nil)
26
+ raise DtkValidationError, "You must provide --users or --groups to this command" if users.nil? && groups.nil?
27
+ post_body = {
28
+ :module_id => module_id,
29
+ :users => users,
30
+ :groups => groups,
31
+ :action => action,
32
+ :remote_module_namespace => namespace,
33
+ :rsa_pub_key => SSHUtil.rsa_pub_key_content()
34
+ }
35
+ post rest_url("#{resolve_module_type}/remote_collaboration"), post_body
36
+ end
37
+
38
+ def collaboration_list_aux(module_id, namespace = nil)
39
+ post_body = {
40
+ :module_id => module_id,
41
+ :remote_module_namespace => namespace,
42
+ :rsa_pub_key => SSHUtil.rsa_pub_key_content()
43
+ }
44
+ post rest_url("#{resolve_module_type}/list_remote_collaboration"), post_body
45
+ end
46
+
47
+ private
48
+
49
+ def resolve_module_type
50
+ self.class == DTK::Client::ComponentModule ? 'component_module' : 'service_module'
51
+ end
52
+
53
+ end
54
+ end
@@ -569,7 +569,7 @@ module DTK::Client
569
569
  post_body.merge!(:value => value) if value
570
570
  post_body.merge!(:required => true) if options.required?
571
571
  post_body.merge!(:dynamic => true) if options.dynamic?
572
- if datatype = options.type
572
+ if datatype = options['type']
573
573
  post_body.merge!(:datatype => datatype)
574
574
  end
575
575
  post rest_url("assembly/set_attributes"), post_body
@@ -3,6 +3,7 @@ dtk_require_common_commands('thor/list_diffs')
3
3
  dtk_require_common_commands('thor/push_to_remote')
4
4
  dtk_require_common_commands('thor/pull_from_remote')
5
5
  dtk_require_common_commands('thor/push_clone_changes')
6
+ dtk_require_common_commands('thor/access_control')
6
7
  dtk_require_common_commands('thor/edit')
7
8
  dtk_require_common_commands('thor/reparse')
8
9
  dtk_require_common_commands('thor/purge_clone')
@@ -71,6 +72,7 @@ module DTK::Client
71
72
  include PurgeCloneMixin
72
73
  include ListDiffsMixin
73
74
  include ServiceImporter
75
+ include AccessControlMixin
74
76
 
75
77
  def get_module_name(module_id)
76
78
  get_name_from_id_helper(module_id)
@@ -539,47 +541,6 @@ TODO: might deprecate
539
541
  return response
540
542
  end
541
543
 
542
- # commented out for now -> changed to push but leaving commented out if run into some issues with push
543
- # # desc "COMPONENT-MODULE-NAME/ID push-to-dtkn [-n NAMESPACE] [-v VERSION]", "Push local copy of component module to remote repository."
544
- # # version_method_option
545
- # desc "COMPONENT-MODULE-NAME/ID push-to-dtkn [-n NAMESPACE]", "Push local copy of component module to remote repository."
546
- # method_option "namespace",:aliases => "-n",
547
- # :type => :string,
548
- # :banner => "NAMESPACE",
549
- # :desc => "Remote namespace"
550
- # def push_to_dtkn(context_params)
551
- # component_module_id, component_module_name = context_params.retrieve_arguments([:component_module_id!, :component_module_name!],method_argument_names)
552
- # version = options["version"]
553
-
554
- # if component_module_name.to_s =~ /^[0-9]+$/
555
- # component_module_id = component_module_name
556
- # component_module_name = get_module_name(component_module_id)
557
- # end
558
-
559
- # modules_path = OsUtil.module_clone_location()
560
- # module_location = "#{modules_path}/#{component_module_name}#{version && "-#{version}"}"
561
-
562
- # unless File.directory?(module_location)
563
- # if Console.confirmation_prompt("Unable to push to remote because module '#{component_module_name}#{version && "-#{version}"}' has not been cloned. Would you like to clone module now"+'?')
564
- # response = clone_aux(:component_module,component_module_id,version,false)
565
-
566
- # if(response.nil? || response.ok?)
567
- # reparse_aux(module_location)
568
- # push_to_remote_aux(:component_module, component_module_id, component_module_name, options["namespace"], version) if Console.confirmation_prompt("Would you like to push changes to remote"+'?')
569
- # end
570
-
571
- # return response
572
- # else
573
- # # user choose not to clone needed module
574
- # return
575
- # end
576
- # end
577
-
578
- # reparse_aux(module_location)
579
- # push_to_remote_aux(:component_module, component_module_id, component_module_name, options["namespace"], version)
580
- # end
581
-
582
- # desc "COMPONENT-MODULE-NAME/ID pull-from-dtkn [-n NAMESPACE] [-v VERSION]", "Update local component module from remote repository."
583
544
  desc "COMPONENT-MODULE-NAME/ID pull-dtkn [-n NAMESPACE]", "Update local component module from remote repository."
584
545
  method_option "namespace",:aliases => "-n",
585
546
  :type => :string,
@@ -615,8 +576,65 @@ TODO: might deprecate
615
576
  raise DtkValidationError, "You have to provide valid catalog to pull changes from! Valid catalogs: #{PullCatalogs}"
616
577
  end
617
578
  end
579
+
618
580
  PullCatalogs = ["dtkn"]
619
581
 
582
+ desc "COMPONENT-MODULE-NAME/ID chown REMOTE-USER", "Set remote module owner"
583
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
584
+ def chown(context_params)
585
+ component_module_id, remote_user = context_params.retrieve_arguments([:component_module_id!,:option_1!],method_argument_names)
586
+ chown_aux(component_module_id, remote_user, options.namespace)
587
+ end
588
+
589
+ desc "COMPONENT-MODULE-NAME/ID chmod PERMISSION-SELECTOR", "Update remote permissions e.g. ug+rw , user and group get RW permissions"
590
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
591
+ def chmod(context_params)
592
+ component_module_id, permission_selector = context_params.retrieve_arguments([:component_module_id!,:option_1!],method_argument_names)
593
+ chmod_aux(component_module_id, permission_selector, options.namespace)
594
+ end
595
+
596
+ desc "COMPONENT-MODULE-NAME/ID make-public", "Make this module public"
597
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
598
+ def make_public(context_params)
599
+ component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
600
+ chmod_aux(component_module_id, "o+r", options.namespace)
601
+ end
602
+
603
+ desc "COMPONENT-MODULE-NAME/ID make-private", "Make this module private"
604
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
605
+ def make_private(context_params)
606
+ component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
607
+ chmod_aux(component_module_id, "o-rwd", options.namespace)
608
+ end
609
+
610
+ desc "COMPONENT-MODULE-NAME/ID add-collaborators", "Add collabrators users or groups comma seperated (--users or --groups)"
611
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
612
+ method_option "users",:aliases => "-u", :type => :string, :banner => "USERS", :desc => "User collabrators"
613
+ method_option "groups",:aliases => "-g", :type => :string, :banner => "GROUPS", :desc => "Group collabrators"
614
+ def add_collaborators(context_params)
615
+ component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
616
+ collaboration_aux(:add, component_module_id, options.users, options.groups, options.namespace)
617
+ end
618
+
619
+ desc "COMPONENT-MODULE-NAME/ID remove-collaborators", "Remove collabrators users or groups comma seperated (--users or --groups)"
620
+ method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
621
+ method_option "users",:aliases => "-u", :type => :string, :banner => "USERS", :desc => "User collabrators"
622
+ method_option "groups",:aliases => "-g", :type => :string, :banner => "GROUPS", :desc => "Group collabrators"
623
+ def remove_collaborators(context_params)
624
+ component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
625
+ collaboration_aux(:remove, component_module_id, options.users, options.groups, options.namespace)
626
+ end
627
+
628
+ desc "COMPONENT-MODULE-NAME/ID list-collaborators", "List collaborators for given module"
629
+ method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
630
+ def list_collaborators(context_params)
631
+ component_module_id = context_params.retrieve_arguments([:component_module_id!],method_argument_names)
632
+ response = collaboration_list_aux(component_module_id, options.namespace)
633
+ response.render_table(:module_collaborators)
634
+ response
635
+ end
636
+
637
+
620
638
  #### end: commands to interact with remote repo ###
621
639
 
622
640
  #### commands to manage workspace and versioning ###
@@ -6,13 +6,18 @@ module DTK::Client
6
6
 
7
7
  # entities that are not available on root but later in n-context
8
8
  def self.additional_entities()
9
- ['target','component','attribute','utils','node','task','component-template','assembly']
9
+ ['component','attribute','utils','node','task','component-template','assembly']
10
10
  end
11
11
 
12
12
  desc "workspace","Sandbox for development and testing"
13
13
  def workspace
14
14
  # API descriptor, SYM_LINK!
15
15
  end
16
+
17
+ desc "target","Targets"
18
+ def target
19
+ # API descriptor, SYM_LINK!
20
+ end
16
21
 
17
22
 
18
23
  # NOTE
@@ -25,7 +25,7 @@ module DTK::Client
25
25
  :identifier_only => {
26
26
  :target => [
27
27
  ['list-nodes',"list-nodes","# Lists node instances in given targets."],
28
- ['list-assemblies',"list-assemblies","# Lists assembly instances in given targets."]
28
+ ['list-services',"list-services","# Lists assembly instances in given targets."]
29
29
  ]
30
30
  }
31
31
  })
@@ -439,7 +439,8 @@ TODO: will put in dot release and will rename to 'extend'
439
439
  # post rest_url("assembly/list_smoketests"), post_body
440
440
  #end
441
441
 
442
- desc "SERVICE-NAME/ID grant-access SYS-USER NAME [PATH-TO-PUB-KEY]", "Grant access to given service and its nodes"
442
+ desc "SERVICE-NAME/ID grant-access SYS-USER NAME [PATH-TO-PUB-KEY] [--nodes NODE-NAMES]", "Grant access to given service and its nodes"
443
+ method_option :nodes, :type => :string, :default => nil
443
444
  def grant_access(context_params)
444
445
  service_id, system_user, rsa_key_name, path_to_rsa_pub_key = context_params.retrieve_arguments([:service_id!,:option_1!, :option_2!, :option_3],method_argument_names)
445
446
 
@@ -451,7 +452,8 @@ TODO: will put in dot release and will rename to 'extend'
451
452
  :system_user => system_user,
452
453
  :rsa_pub_name => rsa_key_name,
453
454
  :rsa_pub_key => rsa_pub_key_content,
454
- :assembly_id => service_id
455
+ :assembly_id => service_id,
456
+ :target_nodes => options.nodes
455
457
  }
456
458
 
457
459
  return response unless response.ok?
@@ -463,15 +465,17 @@ TODO: will put in dot release and will rename to 'extend'
463
465
  nil
464
466
  end
465
467
 
466
- desc "SERVICE-NAME/ID revoke-access SYS-USER NAME", "Revoke access to given service and its nodes"
468
+ desc "SERVICE-NAME/ID revoke-access SYS-USER NAME [--nodes NODE-NAMES]", "Revoke access to given service and its nodes"
469
+ method_option :nodes, :type => :string, :default => nil
467
470
  def revoke_access(context_params)
468
471
  service_id, system_user, rsa_key_name = context_params.retrieve_arguments([:service_id!,:option_1!, :option_2!],method_argument_names)
469
-
472
+
470
473
  response = post_file rest_url("assembly/initiate_ssh_pub_access"), {
471
474
  :agent_action => :revoke_access,
472
475
  :system_user => system_user,
473
476
  :rsa_pub_name => rsa_key_name,
474
- :assembly_id => service_id
477
+ :assembly_id => service_id,
478
+ :target_nodes => options.nodes
475
479
  }
476
480
 
477
481
  return response unless response.ok?
@@ -5,6 +5,7 @@ dtk_require_common_commands('thor/clone')
5
5
  dtk_require_common_commands('thor/push_to_remote')
6
6
  dtk_require_common_commands('thor/pull_from_remote')
7
7
  dtk_require_common_commands('thor/push_clone_changes')
8
+ dtk_require_common_commands('thor/access_control')
8
9
  dtk_require_common_commands('thor/edit')
9
10
  dtk_require_common_commands('thor/reparse')
10
11
  dtk_require_from_base("dtk_logger")
@@ -27,6 +28,7 @@ module DTK::Client
27
28
  include ReparseMixin
28
29
  include ServiceImporter
29
30
  include PurgeCloneMixin
31
+ include AccessControlMixin
30
32
 
31
33
  def get_service_module_name(service_module_id)
32
34
  get_name_from_id_helper(service_module_id)
@@ -107,7 +109,7 @@ module DTK::Client
107
109
 
108
110
  desc "SERVICE-MODULE-NAME/ID list-component-modules","List component modules associated with service module."
109
111
  method_option :remote, :type => :boolean, :default => false
110
- def list_comoponent_modules(context_params)
112
+ def list_component_modules(context_params)
111
113
  context_params.method_arguments = ["modules"]
112
114
  list(context_params)
113
115
  end
@@ -387,6 +389,61 @@ module DTK::Client
387
389
  end
388
390
  PullCatalogs = ["dtkn"]
389
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
+
399
+ desc "SERVICE-MODULE-NAME/ID chmod PERMISSION-SELECTOR", "Update remote permissions e.g. ug+rw , user and group get RW permissions"
400
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
401
+ def chmod(context_params)
402
+ service_module_id, permission_selector = context_params.retrieve_arguments([:service_module_id!,:option_1!],method_argument_names)
403
+ chmod_aux(service_module_id, permission_selector, options.namespace)
404
+ end
405
+
406
+ desc "SERVICE-MODULE-NAME/ID make-public", "Make this module public"
407
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
408
+ def make_public(context_params)
409
+ service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
410
+ chmod_aux(service_module_id, "o+r", options.namespace)
411
+ end
412
+
413
+ desc "SERVICE-MODULE-NAME/ID make-private", "Make this module private"
414
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
415
+ def make_private(context_params)
416
+ service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
417
+ chmod_aux(service_module_id, "o-rwd", options.namespace)
418
+ end
419
+
420
+ desc "SERVICE-MODULE-NAME/ID add-collaborators", "Add collabrators users or groups comma seperated (--users or --groups)"
421
+ method_option "namespace", :aliases => "-n", :type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
422
+ method_option "users",:aliases => "-u", :type => :string, :banner => "USERS", :desc => "User collabrators"
423
+ method_option "groups",:aliases => "-g", :type => :string, :banner => "GROUPS", :desc => "Group collabrators"
424
+ def add_collaborators(context_params)
425
+ service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
426
+ collaboration_aux(:add, service_module_id, options.users, options.groups, options.namespace)
427
+ end
428
+
429
+ desc "SERVICE-MODULE-NAME/ID remove-collaborators", "Remove collabrators users or groups comma seperated (--users or --groups)"
430
+ method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
431
+ method_option "users",:aliases => "-u", :type => :string, :banner => "USERS", :desc => "User collabrators"
432
+ method_option "groups",:aliases => "-g", :type => :string, :banner => "GROUPS", :desc => "Group collabrators"
433
+ def remove_collaborators(context_params)
434
+ service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
435
+ collaboration_aux(:remove, service_module_id, options.users, options.groups, options.namespace)
436
+ end
437
+
438
+ desc "SERVICE-MODULE-NAME/ID list-collaborators", "List collaborators for given module"
439
+ method_option "namespace",:aliases => "-n",:type => :string, :banner => "NAMESPACE", :desc => "Remote namespace"
440
+ def list_collaborators(context_params)
441
+ service_module_id = context_params.retrieve_arguments([:service_module_id!],method_argument_names)
442
+ response = collaboration_list_aux(component_module_id, options.namespace)
443
+ response.render_table(:module_collaborators)
444
+ response
445
+ end
446
+
390
447
  ##
391
448
  #
392
449
  # internal_trigger: this flag means that other method (internal) has trigger this.
@@ -15,6 +15,27 @@ module DTK::Client
15
15
  list_targets(context_params)
16
16
  end
17
17
 
18
+ desc "TARGET-NAME/ID import-nodes","Reads from inventory dsl and populates the node instance objects in the dtk server."
19
+ def import_nodes(context_params)
20
+ target_id = context_params.retrieve_arguments([:target_id!],method_argument_names)
21
+
22
+ post_body = {
23
+ :target_id => target_id
24
+ }
25
+
26
+ response = post rest_url("target/import_nodes"), post_body
27
+ return response unless response.ok?
28
+
29
+ if response.data.empty?
30
+ OsUtil.print("No new nodes to import!", :yellow)
31
+ else
32
+ OsUtil.print("Successfully imported nodes:", :yellow)
33
+ response.data.each do |node|
34
+ OsUtil.print("#{node}", :yellow)
35
+ end
36
+ end
37
+ end
38
+
18
39
  desc "TARGET-NAME/ID list-services","Lists service instances in given targets."
19
40
  def list_services(context_params)
20
41
  context_params.method_arguments = ["assemblies"]
data/lib/core.rb CHANGED
@@ -12,6 +12,8 @@ require 'pp'
12
12
  dtk_require_from_base('domain/response')
13
13
  dtk_require_from_base('util/os_util')
14
14
  dtk_require_from_base('util/ssh_util')
15
+ dtk_require_from_base('util/common_util')
16
+ dtk_require_from_base('util/permission_util')
15
17
  dtk_require("config/configuration")
16
18
 
17
19
  def top_level_execute(entity_name, method_name, context_params=nil, options_args=nil, shell_execute=false)
@@ -192,7 +192,7 @@ module DTK
192
192
  end
193
193
 
194
194
  def repo_exists?
195
- Dir.exists?(repo_dir)
195
+ File.exists?(repo_dir)
196
196
  end
197
197
 
198
198
  def current_branch_name
@@ -1,3 +1,3 @@
1
1
  module DtkClient
2
- VERSION="0.5.13"
2
+ VERSION="0.5.14"
3
3
  end
data/lib/shell/context.rb CHANGED
@@ -879,8 +879,8 @@ module DTK
879
879
  end
880
880
  end
881
881
 
882
- # remove thor_options
883
- args = args - options_param_args unless options_param_args.nil?
882
+ # remove thor_options but only once
883
+ args = Client::CommonUtil.substract_array_once(args, options_param_args, true) unless options_param_args.nil?
884
884
 
885
885
  return args, options_param_args, invalid_options
886
886
  end
@@ -0,0 +1,20 @@
1
+ module DTK
2
+ module Client
3
+ module CommonUtil
4
+ class << self
5
+ def substract_array_once(array1, array2, substract_from_back = false)
6
+ # we substract from reverse if flag set
7
+ array1 = array1.reverse if substract_from_back
8
+
9
+ array2.each do |element|
10
+ if index = array1.index(element)
11
+ array1.delete_at(index)
12
+ end
13
+ end
14
+
15
+ substract_from_back ? array1.reverse : array1
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
data/lib/util/os_util.rb CHANGED
@@ -243,9 +243,14 @@ module DTK
243
243
  load File.expand_path('../../lib/shell/domain.rb', File.dirname(__FILE__))
244
244
  load File.expand_path('../../lib/domain/git_adapter.rb', File.dirname(__FILE__))
245
245
  load File.expand_path('../../lib/command_helpers/git_repo.rb', File.dirname(__FILE__))
246
- path = File.expand_path('../../lib/commands/thor/*.rb', File.dirname(__FILE__))
247
- Dir[path].each do |thor_class_file|
248
- load thor_class_file
246
+ paths = []
247
+ paths << File.expand_path('../../lib/commands/thor/*.rb', File.dirname(__FILE__))
248
+ paths << File.expand_path('../../lib/commands/common/thor/*.rb', File.dirname(__FILE__))
249
+
250
+ paths.each do |path|
251
+ Dir[path].each do |thor_class_file|
252
+ load thor_class_file
253
+ end
249
254
  end
250
255
  end
251
256
  end
@@ -0,0 +1,14 @@
1
+ module DTK
2
+ module Client
3
+ module PermissionUtil
4
+ class << self
5
+ def validate_permissions!(permission_string)
6
+ # matches example: u-rw, ugo+r, go+w
7
+ match = permission_string.match(/^[ugo]+[+\-][rwd]+$/)
8
+ raise DTK::Client::DtkValidationError, "Provided permission expression ('#{permission_string}') is not valid" unless match
9
+ permission_string
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtk-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.13
4
+ version: 0.5.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rich PELAVIN
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2014-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -178,7 +178,8 @@ dependencies:
178
178
  - - '='
179
179
  - !ruby/object:Gem::Version
180
180
  version: 1.1.0
181
- description: Dtk client is CLI tool used for communication with Reactor8.
181
+ description: The DTK Client is a command line tool to interact with your DTK Server
182
+ and DTK Service Catalog instance(s).
182
183
  email:
183
184
  - rich@reactor8.com
184
185
  executables:
@@ -203,6 +204,7 @@ files:
203
204
  - lib/command_helpers/service_importer.rb
204
205
  - lib/command_helpers/service_link.rb
205
206
  - lib/commands.rb
207
+ - lib/commands/common/thor/access_control.rb
206
208
  - lib/commands/common/thor/action_result_handler.rb
207
209
  - lib/commands/common/thor/assembly_workspace.rb
208
210
  - lib/commands/common/thor/clone.rb
@@ -270,9 +272,11 @@ files:
270
272
  - lib/shell/interactive_wizard.rb
271
273
  - lib/shell/parse_monkey_patch.rb
272
274
  - lib/shell/status_monitor.rb
275
+ - lib/util/common_util.rb
273
276
  - lib/util/console.rb
274
277
  - lib/util/dtk_puppet.rb
275
278
  - lib/util/os_util.rb
279
+ - lib/util/permission_util.rb
276
280
  - lib/util/ssh_util.rb
277
281
  - lib/view_processor.rb
278
282
  - lib/view_processor/augmented_simple_list.rb