dtk-client 0.5.13 → 0.5.14

Sign up to get free protection for your applications and to get access to all the features.
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