dtk-client 0.5.6.1 → 0.5.8

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
- NmMzODFiMDI1NjJjZTJlNGEwM2U1Yzc1MTgyNDRkMjZkMWU5NjZkZA==
4
+ NWFhMGY3ZWUzYzgxMjM3MjJlZmI2MDJmMTdlOTkzZjFkYmQ2ODJiMQ==
5
5
  data.tar.gz: !binary |-
6
- MmNmNmQxMDlmNTIxMTYxZjZmM2Y1NjU5ZjI5MTNjZWZiY2I1MjA5ZQ==
6
+ YWVjMmRiMGE4NWFjN2U4M2QyYTJkN2Q5YTgxNWU5NmJkN2Q2MmIxNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Nzg5NWQ5NTkxOWNlYTdhNmJiNmU4MzYxMDBlMjM4MmE2MTYxYTdlZmZhNjQy
10
- M2EwZGJjZmM1M2U0ZjdkYWU2N2Q3NjhlZGFjNTRiZGU4ZmE3NDRjMmMxODQ1
11
- ZDM3NTU1OThkZmM4YmExNWJjN2Y3NWM4YzBiOWVmYTYzMDEyYzI=
9
+ MmNhNTcwYzllZmY5MTRhMTdlZDRhOTg0ZGQxNTNkMzU0YWMzMTdlZDUyZjg3
10
+ NzIwYWIwMzk0MmMzNGE1ZmExMWY1YmJiZTk5YmZlM2QzMjQ0MGE0OTRhZDE2
11
+ Yzg3ZGJiYWVhNTcyYjA2OWIwMTZlMTU3YTFmMjQwY2VmNGE3YTA=
12
12
  data.tar.gz: !binary |-
13
- NjI0M2MzMmRiY2ZiNzI0ZjMxOGVmZGUxZjE3NWUyNzlkYzIwMTE0MWI2NGFi
14
- OTZlMzIyNWE0NmY1ODQyODIyZTFkN2Y4YjQ0MzljNjAyZjU3MjRiNjYzYzgx
15
- YjdhN2Y5Nzg2NGI2NDllMjU0MTc1OGRiMGVhOTkxNDEwNzY4NjE=
13
+ OTczZjRiOWI4NDBkZDNiZGMzMWFhNjAyNWU3NDZmZjVmZDQ1NjM4ZTEyODIy
14
+ MDIyZjUxMTkwZDE3Yzg0NDBkYTUwYjAyNzljZDcxMzIwNWE2ZThiMzk3Y2I1
15
+ YWRlNTg5YWJiOTM0MzBkOTg1OTYxMWE5ZDE2NDUzY2NkNjZjYTc=
@@ -250,7 +250,6 @@ module DTK; module Client; class CommandHelper
250
250
 
251
251
  diffs = DiffSummary.diff(repo,local_branch, remote_branch_ref)
252
252
 
253
- # DEBUG SNIPPET >>> REMOVE <<<
254
253
 
255
254
  if diffs.any_diffs?()
256
255
  repo.push(remote_branch_ref)
@@ -618,6 +618,18 @@ module DTK::Client
618
618
  response = post(rest_url("assembly/purge"),post_body)
619
619
  end
620
620
 
621
+ def destroy_and_reset_nodes_aux(context_params)
622
+ assembly_or_workspace_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID],method_argument_names)
623
+ unless options.force?
624
+ return unless Console.confirmation_prompt("Are you sure you want to destroy and reset all nodes in the workspace"+'?')
625
+ end
626
+
627
+ post_body = {
628
+ :assembly_id => assembly_or_workspace_id
629
+ }
630
+ response = post(rest_url("assembly/destroy_and_reset_nodes"),post_body)
631
+ end
632
+
621
633
  def delete_aux(context_params)
622
634
  if context_params.is_last_command_eql_to?(:node)
623
635
  delete_node_aux(context_params)
@@ -829,26 +841,32 @@ module DTK::Client
829
841
  sleep(1)
830
842
  end
831
843
 
832
- raise DTK::Client::DtkError, "Error while logging there was no successful response after 3 tries." unless response.data(:is_complete)
844
+ if response.data(:is_complete)
845
+ # due to complicated response we change its formating
846
+ response = response.data(:results).first[1]
833
847
 
834
- # due to complicated response we change its formating
835
- response = response.data(:results).first[1]
848
+ unless response["error"].nil?
849
+ raise DTK::Client::DtkError, response["error"]
850
+ end
836
851
 
837
- unless response["error"].nil?
838
- raise DTK::Client::DtkError, response["error"]
839
- end
852
+ # removing invalid chars from log
853
+ output = response["output"].gsub(/`/,'\'')
840
854
 
841
- # removing invalid chars from log
842
- output = response["output"].gsub(/`/,'\'')
855
+ unless output.empty?
856
+ file_ready = true
857
+ tail_temp_file << output
858
+ tail_temp_file.flush
859
+ end
843
860
 
844
- unless output.empty?
861
+ last_line = response["last_line"]
862
+ sleep(LOG_SLEEP_TIME_W)
863
+ else
845
864
  file_ready = true
846
- tail_temp_file << output
865
+ tail_temp_file << "\n\nError while logging there was no successful response after 3 tries, (^C, Q) to exit. \n\n"
847
866
  tail_temp_file.flush
867
+ tail_temp_file.close
868
+ Thread.current.exit
848
869
  end
849
-
850
- last_line = response["last_line"]
851
- sleep(LOG_SLEEP_TIME_W)
852
870
  end
853
871
  end
854
872
 
@@ -25,6 +25,7 @@ module DTK::Client
25
25
  begin
26
26
  YAML.load(file_content)
27
27
  rescue Exception => e
28
+ e.to_s.gsub!(/\(<unknown>\)/,'')
28
29
  raise DTK::Client::DSLParsing::YAMLParsing.new("YAML parsing error #{e} in file",file)
29
30
  end
30
31
  end
@@ -33,7 +33,7 @@ module DTK::Client
33
33
 
34
34
  def self.add_key(path_to_key, name=nil)
35
35
  match, matched_username = nil, nil
36
-
36
+
37
37
  unless File.file?(path_to_key)
38
38
  OsUtil.put_warning "[ERROR] " ,"No ssh key file found at (#{path_to_key}). Path is wrong or it is necessary to generate the public rsa key (e.g., run `ssh-keygen -t rsa`)", :red
39
39
  abort
@@ -45,32 +45,21 @@ module DTK::Client
45
45
 
46
46
  post_body.merge!(:username => name.chomp) if name
47
47
  proper_response = nil
48
- response, key_exists_already = Account.internal_add_user_access("service_module/add_user_direct_access", post_body, 'service module')
49
- return response unless (response.ok? || key_exists_already)
50
-
51
48
 
52
- if response.ok?
53
- proper_response = response
54
- match = response.data['match']
55
- matched_username = response.data['matched_username']
56
- end
49
+ response, key_exists_already = Account.internal_add_user_access("account/add_user_direct_access", post_body, 'service module')
57
50
 
58
- response, key_exists_already = Account.internal_add_user_access("component_module/add_user_direct_access", post_body, 'component module')
59
51
  return response unless (response.ok? || key_exists_already)
60
- proper_response = response if response.ok?
61
-
62
- # if either of request passed we will add to known hosts
63
- if match
64
- OsUtil.print("Provided RSA public key already exists, user creation aborted!", :yellow)
65
- elsif proper_response
66
- repo_manager_fingerprint,repo_manager_dns = proper_response.data_ret_and_remove!(:repo_manager_fingerprint,:repo_manager_dns)
52
+
53
+ match = response.data['match']
54
+ matched_username = response.data['matched_username']
55
+
56
+ if response && !match
57
+ repo_manager_fingerprint,repo_manager_dns = response.data_ret_and_remove!(:repo_manager_fingerprint,:repo_manager_dns)
67
58
  SshProcessing.update_ssh_known_hosts(repo_manager_dns,repo_manager_fingerprint)
68
59
  OsUtil.print("Ssh key added successfully!", :yellow)
69
-
70
- return proper_response
71
- else
72
- nil
73
60
  end
61
+
62
+ return response, match, matched_username
74
63
  end
75
64
 
76
65
  desc "set-password", "Change password for your dtk user account"
@@ -123,9 +112,16 @@ module DTK::Client
123
112
  def add_ssh_key(context_params)
124
113
  name, path_to_key = context_params.retrieve_arguments([:option_1!, :option_2],method_argument_names)
125
114
  path_to_key ||= SshProcessing.default_rsa_pub_key_path()
126
- access_granted = Account.add_key(path_to_key, name)
127
115
 
128
- FileUtils.touch(DTK::Client::Configurator::DIRECT_ACCESS) if access_granted
116
+ response, matched, matched_username = Account.add_key(path_to_key, name)
117
+
118
+ if matched
119
+ DTK::Client::OsUtil.print("Provided SSH PUB key has already been added.", :yellow)
120
+ elsif matched_username
121
+ DTK::Client::OsUtil.print("User ('#{matched_username}') already exists.", :yellow)
122
+ else
123
+ FileUtils.touch(DTK::Client::Configurator::DIRECT_ACCESS) if response.ok?
124
+ end
129
125
  end
130
126
 
131
127
  desc "remove-ssh-key NAME ","Removes user and direct access to modules."
@@ -139,7 +135,8 @@ module DTK::Client
139
135
  response = post rest_url("service_module/remove_user_direct_access"), post_body
140
136
  return response unless response.ok?
141
137
 
142
- OsUtil.print("Ssh key removed successfully!", :yellow)
138
+ OsUtil.print("SSH key removed successfully!", :yellow)
139
+ response
143
140
  end
144
141
 
145
142
 
@@ -211,17 +211,26 @@ module DTK::Client
211
211
  :type => :string,
212
212
  :banner => "TARGET-NAME/ID",
213
213
  :desc => "Target (id) to create assembly in"
214
+ #hidden option
215
+ method_option "instance-bindings",
216
+ :type => :string
217
+
214
218
  def stage(context_params)
215
219
  assembly_template_id, name = context_params.retrieve_arguments([:assembly_id!, :option_1],method_argument_names)
216
220
  post_body = {
217
221
  :assembly_id => assembly_template_id
218
222
  }
219
223
 
224
+ # using this to make sure cache will be invalidated after new assembly is created from other commands e.g.
225
+ # 'assembly-create', 'install' etc.
226
+ @@invalidate_map << :assembly
227
+
220
228
  assembly_template_name = get_assembly_name(assembly_template_id)
221
229
  assembly_template_name.gsub!('::','-') if assembly_template_name
222
230
 
223
231
  # we check current options and forwarded options (from deploy method)
224
232
  in_target = options["in-target"] || context_params.get_forwarded_thor_option("in-target")
233
+ instance_bindings = options["instance-bindings"]
225
234
  assembly_list = Assembly.assembly_list()
226
235
 
227
236
  if name
@@ -232,6 +241,7 @@ module DTK::Client
232
241
 
233
242
  post_body.merge!(:target_id => in_target) if in_target
234
243
  post_body.merge!(:name => name) if name
244
+ post_body.merge!(:instance_bindings => instance_bindings) if instance_bindings
235
245
 
236
246
  response = post rest_url("assembly/stage"), post_body
237
247
  return response unless response.ok?
@@ -242,6 +252,7 @@ module DTK::Client
242
252
  return response
243
253
  end
244
254
 
255
+ =begin
245
256
  # desc "ASSEMBLY-NAME/ID deploy [-v VERSION] [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "Stage and deploy assembly in target."
246
257
  # version_method_option
247
258
  desc "ASSEMBLY-NAME/ID deploy [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "Stage and deploy assembly in target."
@@ -300,7 +311,7 @@ module DTK::Client
300
311
 
301
312
  return ret
302
313
  end
303
-
314
+ =end
304
315
 
305
316
  desc "delete ASSEMBLY-ID", "Delete assembly"
306
317
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
@@ -296,10 +296,12 @@ TODO: might deprecate
296
296
 
297
297
  external_dependencies = response.data(:external_dependencies)
298
298
 
299
- if error = response.data(:dsl_parsed_info)
300
- dsl_parsed_message = ServiceImporter.error_message(module_name, error)
301
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
302
- end
299
+ # commented out for now, since we have this same part of the code in push method
300
+ # which will always be called from this method
301
+ # if error = response.data(:dsl_parsed_info)
302
+ # dsl_parsed_message = ServiceImporter.error_message(module_name, error)
303
+ # DTK::Client::OsUtil.print(dsl_parsed_message, :red)
304
+ # end
303
305
 
304
306
  dsl_created_info = response.data(:dsl_created_info)
305
307
  if dsl_created_info and !dsl_created_info.empty?
@@ -312,8 +314,11 @@ TODO: might deprecate
312
314
  # we push clone changes anyway, user can change and push again
313
315
  context_params.add_context_to_params(module_name, :"component-module", module_id)
314
316
  response = push(context_params, true)
315
- response[:module_id] = module_id if git_import
316
- response.add_data_value!(:external_dependencies,external_dependencies) if external_dependencies
317
+
318
+ if git_import
319
+ response[:module_id] = module_id
320
+ response.add_data_value!(:external_dependencies,external_dependencies) if external_dependencies
321
+ end
317
322
 
318
323
  return response
319
324
  end
@@ -709,7 +714,8 @@ TODO: might deprecate
709
714
  end
710
715
 
711
716
  # desc "COMPONENT-MODULE-NAME/ID push [-v VERSION] [-m COMMIT-MSG]", "Push changes from local copy of component module to server"
712
- desc "COMPONENT-MODULE-NAME/ID push [-m COMMIT-MSG]", "Push changes from local copy of component module to server"
717
+ # desc "COMPONENT-MODULE-NAME/ID push [-m COMMIT-MSG]", "Push changes from local copy of component module to server"
718
+ desc "COMPONENT-MODULE-NAME/ID push", "Push changes from local copy of component module to server"
713
719
  version_method_option
714
720
  method_option "message",:aliases => "-m" ,
715
721
  :type => :string,
@@ -732,7 +738,8 @@ TODO: might deprecate
732
738
  push_clone_changes_aux(:component_module,component_module_id,version,options["message"]||DEFAULT_COMMIT_MSG,internal_trigger)
733
739
  end
734
740
 
735
- desc "COMPONENT-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of component module to remote repository (dtkn)."
741
+ # desc "COMPONENT-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of component module to remote repository (dtkn)."
742
+ desc "COMPONENT-MODULE-NAME/ID push-dtkn [-n NAMESPACE]", "Push changes from local copy of component module to remote repository (dtkn)."
736
743
  method_option "message",:aliases => "-m" ,
737
744
  :type => :string,
738
745
  :banner => "COMMIT-MSG",
@@ -163,9 +163,15 @@ module DTK::Client
163
163
  return response
164
164
  end
165
165
 
166
- desc "NODE-NAME/ID delete-component COMPONENT-ID", "Delete component from node"
166
+ desc "NODE-NAME/ID delete-component COMPONENT-ID [-y]", "Delete component from node"
167
+ method_option :force, :aliases => '-y', :type => :boolean, :default => false
167
168
  def delete_component(context_params)
168
169
  node_id,component_id = context_params.retrieve_arguments([:node_id!, :option_1!],method_argument_names)
170
+
171
+ unless options.force?
172
+ return unless Console.confirmation_prompt("Are you sure you want to delete component '#{component_id}'"+'?')
173
+ end
174
+
169
175
  post_body = {
170
176
  :node_id => node_id,
171
177
  :component_id => component_id
@@ -35,7 +35,8 @@ module DTK::Client
35
35
  return response
36
36
  end
37
37
  =end
38
- desc "list --all -t [TARGET-NAME]", "List all node templates."
38
+ # desc "list --all -t [TARGET-NAME]", "List all node templates."
39
+ desc "list", "List all node templates."
39
40
  method_option :all, :type => :boolean, :default => false
40
41
  method_option "target_identifier",:aliases => "-t" ,
41
42
  :type => :string,
@@ -61,7 +62,7 @@ module DTK::Client
61
62
  }
62
63
  post rest_url("node/image_upgrade"), post_body
63
64
  end
64
-
65
+ =begin
65
66
  #TODO: move to form desc "NODE-TEMPLATE-NAME/ID stage [INSTANCE-NAME]"
66
67
  #will then have to reverse arguments
67
68
  desc "stage NODE-TEMPLATE-NAME [INSTANCE-NAME]", "Stage node template in target."
@@ -81,8 +82,9 @@ module DTK::Client
81
82
  @@invalidate_map << :node_template
82
83
  @@invalidate_map << :node
83
84
 
84
- return response
85
+ response
85
86
  end
87
+ =end
86
88
  end
87
89
  end
88
90
 
@@ -35,17 +35,26 @@ module DTK::Client
35
35
  return Provider.valid_children().include?(name_of_sub_context.to_sym)
36
36
  end
37
37
 
38
- desc "create-provider PROVIDER-TYPE:PROVIDER-NAME --access-key ACCESS_KEY --secret-key SECRET_KEY --keypair KEYPAIR --security-group SECURITY-GROUP [--no-bootstrap]", "Create provider"
38
+ desc "create-provider PROVIDER-TYPE:PROVIDER-NAME --keypair KEYPAIR --security-group SECURITY-GROUP [--no-bootstrap]", "Create provider"
39
39
  method_option :keypair, :type => :string
40
- method_option :access_key, :type => :string
41
- method_option :secret_key, :type => :string
42
40
  method_option :security_group, :type => :string
43
41
  method_option :no_bootstrap, :type => :boolean, :default => false
44
42
  def create_provider(context_params)
45
43
  composed_provider_name = context_params.retrieve_arguments([:option_1!],method_argument_names)
46
44
 
47
45
  provider_type, provider_name = decompose_provider_type_and_name(composed_provider_name)
48
- access_key, secret_key, keypair, security_group = context_params.retrieve_thor_options([:access_key!, :secret_key!, :keypair!, :security_group!], options)
46
+ keypair, security_group = context_params.retrieve_thor_options([:keypair!, :security_group!], options)
47
+
48
+ result = DTK::Shell::InteractiveWizard::interactive_user_input(
49
+ {'IAAS Credentials' => { :type => :group, :options => [
50
+ {:key => {}},
51
+ {:secret => {}}
52
+ ]}})
53
+
54
+ access_key, secret_key = result['IAAS Credentials'].values_at(:key, :secret)
55
+
56
+ # Remove sensitive readline history
57
+ OsUtil.pop_readline_history(2)
49
58
 
50
59
  post_body = {
51
60
  :iaas_properties => {
@@ -173,6 +173,13 @@ TODO: overlaps with different meaning
173
173
  }, [:utils])
174
174
  end
175
175
 
176
+ desc "SERVICE-NAME/ID destroy-and-reset-nodes [-y]", "Terminates all nodes, but keeps config state so they can be spun up from scratch."
177
+ method_option :force, :aliases => '-y', :type => :boolean, :default => false
178
+ def destroy_and_reset_nodes(context_params)
179
+ destroy_and_reset_nodes_aux(context_params)
180
+ end
181
+
182
+
176
183
  desc "SERVICE-NAME/ID start [NODE-NAME]", "Starts all the service nodes. A single node can be selected."
177
184
  def start(context_params)
178
185
  start_aux(context_params)
@@ -188,7 +195,8 @@ TODO: overlaps with different meaning
188
195
  def cancel_task(context_params)
189
196
  cancel_task_aux(context_params)
190
197
  end
191
-
198
+ =begin
199
+ #TODO: until we investigate DTK-1349
192
200
  desc "rename SERVICE-NAME NEW-SERVICE-NAME","Change service name."
193
201
  def rename(context_params)
194
202
  assembly_name, new_assembly_name = context_params.retrieve_arguments([:option_1!,:option_2!],method_argument_names)
@@ -211,6 +219,7 @@ TODO: overlaps with different meaning
211
219
  @@invalidate_map << :service
212
220
  response
213
221
  end
222
+ =end
214
223
 
215
224
  #desc "ASSEMBLY-NAME/ID clear-tasks", "Clears the tasks that have been run already."
216
225
  #def clear_tasks(context_params)
@@ -218,13 +227,14 @@ TODO: overlaps with different meaning
218
227
  #end
219
228
 
220
229
  desc "SERVICE-NAME/ID create-assembly SERVICE-MODULE-NAME ASSEMBLY-NAME", "Create a new assembly from this service instance in the designated service module."
221
- def create_service(context_params)
230
+ def create_assembly(context_params)
222
231
  assembly_id, service_module_name, assembly_template_name = context_params.retrieve_arguments([:service_id!,:option_1!,:option_2!],method_argument_names)
223
232
  response = promote_assembly_aux(:create,assembly_id,service_module_name,assembly_template_name)
224
233
  return response unless response.ok?
225
234
 
226
235
  @@invalidate_map << :assembly
227
- @@invalidate_map << :service_module
236
+ @@invalidate_map << :service
237
+
228
238
  Response::Ok.new()
229
239
  end
230
240
 
@@ -237,8 +247,8 @@ TODO: overlaps with different meaning
237
247
  converge_aux(context_params)
238
248
  end
239
249
 
240
- desc "SERVICE-NAME/ID push-assembly-updates [SERVICE-MODULE-NAME/ASSEMBLY-NAME]", "Push service instance to the designated assembly; default is parent assembly."
241
- def push_service_updates(context_params)
250
+ desc "SERVICE-NAME/ID push-assembly-updates [SERVICE-MODULE-NAME/ASSEMBLY-NAME]", "Push changes made to this service instance to the designated assembly; default is parent assembly."
251
+ def push_assembly_updates(context_params)
242
252
  assembly_id, qualified_assembly_name = context_params.retrieve_arguments([:service_id!,:option_1],method_argument_names)
243
253
  service_module_name, assembly_template_name =
244
254
  if qualified_assembly_name
@@ -562,7 +572,7 @@ TODO: will put in dot release and will rename to 'extend'
562
572
  # only supported at node-level
563
573
  # using HIDE_FROM_BASE to hide this command from base context (dtk:/assembly>)
564
574
  desc "HIDE_FROM_BASE add-component NODE-NAME COMPONENT", "Add a component to the service."
565
- def addcomponent(context_params)
575
+ def add_component(context_params)
566
576
  response = create_component_aux(context_params)
567
577
 
568
578
  @@invalidate_map << :service
@@ -608,7 +618,6 @@ TODO: will put in dot release and will rename to 'extend'
608
618
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
609
619
  def delete_component(context_params)
610
620
  response = delete_component_aux(context_params)
611
- return response unless response.ok?
612
621
 
613
622
  @@invalidate_map << :service
614
623
  @@invalidate_map << :service_node
@@ -72,7 +72,7 @@ module DTK::Client
72
72
  ["info","info","# Info for given assembly in current service module."],
73
73
  ["stage", "stage [INSTANCE-NAME] [-t TARGET-NAME/ID]", "# Stage assembly in target."],
74
74
  # ["deploy","deploy [-v VERSION] [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
75
- ["deploy","deploy [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
75
+ # ["deploy","deploy [INSTANCE-NAME] [-t TARGET-NAME/ID] [-m COMMIT-MSG]", "# Stage and deploy assembly in target."],
76
76
  ["list-nodes","list-nodes", "# List all nodes for given assembly."],
77
77
  ["list-components","list-components", "# List all components for given assembly."]
78
78
  ]
@@ -586,7 +586,8 @@ module DTK::Client
586
586
  PushCatalogs = ["origin", "dtkn"]
587
587
  =end
588
588
 
589
- desc "SERVICE-MODULE-NAME/ID push [-m COMMIT-MSG]", "Push changes from local copy to server (origin)."
589
+ # desc "SERVICE-MODULE-NAME/ID push [-m COMMIT-MSG]", "Push changes from local copy to server (origin)."
590
+ desc "SERVICE-MODULE-NAME/ID push", "Push changes from local copy to server."
590
591
  method_option "message",:aliases => "-m" ,
591
592
  :type => :string,
592
593
  :banner => "COMMIT-MSG",
@@ -608,7 +609,8 @@ module DTK::Client
608
609
  push_clone_changes_aux(:service_module,service_module_id,version,nil,internal_trigger)
609
610
  end
610
611
 
611
- desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of service module to remote repository (dtkn)."
612
+ # desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE] [-m COMMIT-MSG]", "Push changes from local copy of service module to remote repository (dtkn)."
613
+ desc "SERVICE-MODULE-NAME/ID push-dtkn [-n NAMESPACE]", "Push changes from local copy of service module to remote repository (dtkn)."
612
614
  method_option "message",:aliases => "-m" ,
613
615
  :type => :string,
614
616
  :banner => "COMMIT-MSG",
@@ -175,8 +175,8 @@ module DTK::Client
175
175
  push_module_updates_aux(context_params)
176
176
  end
177
177
 
178
- desc "WORKSPACE-NAME/ID push-assembly-updates SERVICE-MODULE-NAME/ASSEMBLY-NAME", "Push workspace instance to the designated assembly."
179
- def push_service_updates(context_params)
178
+ desc "WORKSPACE-NAME/ID push-assembly-updates SERVICE-MODULE-NAME/ASSEMBLY-NAME", "Push changes made to this workspace to the designated assembly."
179
+ def push_assembly_updates(context_params)
180
180
  workspace_id, qualified_assembly_name = context_params.retrieve_arguments([:workspace_id!,:option_1!],method_argument_names)
181
181
  if qualified_assembly_name =~ /(^[^\/]*)\/([^\/]*$)/
182
182
  service_module_name, assembly_template_name = [$1,$2]
@@ -192,7 +192,7 @@ module DTK::Client
192
192
  desc "WORKSPACE-NAME/ID create-assembly SERVICE-MODULE-NAME ASSEMBLY-NAME [-p]", "Create a new assembly from the workspace instance in the designated service module."
193
193
  # The option -p will purge the workspace after assembly creation."
194
194
  method_option :purge, :aliases => '-p', :type => :boolean, :default => false
195
- def create_service(context_params)
195
+ def create_assembly(context_params)
196
196
  workspace_id, service_module_name, assembly_template_name = context_params.retrieve_arguments([:workspace_id!,:option_1!,:option_2!],method_argument_names)
197
197
  response = promote_assembly_aux(:create,workspace_id,service_module_name,assembly_template_name)
198
198
  return response unless response.ok?
@@ -202,7 +202,8 @@ module DTK::Client
202
202
  end
203
203
 
204
204
  @@invalidate_map << :assembly
205
- @@invalidate_map << :service_module
205
+ @@invalidate_map << :service
206
+
206
207
  Response::Ok.new()
207
208
  end
208
209
 
@@ -266,7 +267,6 @@ module DTK::Client
266
267
  method_option :force, :aliases => '-y', :type => :boolean, :default => false
267
268
  def delete_component(context_params)
268
269
  response = delete_component_aux(context_params)
269
- return response unless response.ok?
270
270
 
271
271
  @@invalidate_map << :service
272
272
  @@invalidate_map << :service_node
@@ -396,6 +396,12 @@ module DTK::Client
396
396
  purge_aux(context_params)
397
397
  end
398
398
 
399
+ desc "WORKSPACE-NAME/ID destroy-and-reset-nodes [-y]", "Terminates all nodes, but keeps config state so they can be spun up from scratch."
400
+ method_option :force, :aliases => '-y', :type => :boolean, :default => false
401
+ def destroy_and_reset_nodes(context_params)
402
+ destroy_and_reset_nodes_aux(context_params)
403
+ end
404
+
399
405
  desc "WORKSPACE-NAME/ID set-target TARGET-NAME/ID", "Set target associated with workspace."
400
406
  def set_target(context_params)
401
407
  set_target_aux(context_params)
data/lib/core.rb CHANGED
@@ -82,6 +82,7 @@ def top_level_execute_core(entity_name, method_name, context_params=nil, options
82
82
  validation_message += ", usage: #{usage_info}"
83
83
 
84
84
  validation_message.gsub!("^^", '') if validation_message.include?("^^")
85
+ validation_message.gsub!("HIDE_FROM_BASE ", '') if validation_message.include?("HIDE_FROM_BASE")
85
86
  end
86
87
 
87
88
  DTK::Client::OsUtil.print(validation_message, :yellow)
@@ -115,14 +116,23 @@ def check_direct_access(params)
115
116
 
116
117
  puts "Adding direct access for current user..."
117
118
  # response = DTK::Client::Account.add_access(params[:ssh_key_path])
118
- response = DTK::Client::Account.add_key(params[:ssh_key_path])
119
+ response, matched_pub_key, matched_username = DTK::Client::Account.add_key(params[:ssh_key_path])
119
120
 
120
- if response.nil? || !response.ok?
121
- DTK::Client::OsUtil.print("We were not able to add direct access for current user. In order to properly use dtk-shell you will have to add access manually ('dtk account add-ssh-key').\n", :yellow)
122
- return
121
+ if !response.ok?
122
+ DTK::Client::OsUtil.print("We were not able to add direct access for current user, server error '#{response.error_message}'. In order to properly use dtk-shell you will have to add access manually ('dtk account add-ssh-key').\n", :yellow)
123
+ elsif matched_pub_key
124
+ # message will be displayed by add key # TODO: Refactor this flow
125
+ DTK::Client::OsUtil.print("Provided SSH PUB key has already been added.", :yellow)
126
+ FileUtils.touch(params[:file_path])
127
+ elsif matched_username
128
+ DTK::Client::OsUtil.print("User with provided name already exists.", :yellow)
129
+ else
130
+ DTK::Client::OsUtil.print("Your SSH PUB key has been successfully added.", :yellow)
131
+ FileUtils.touch(params[:file_path])
123
132
  end
133
+
124
134
 
125
- FileUtils.touch(params[:file_path])
135
+ response
126
136
  end
127
137
 
128
138
  module DTK
@@ -1,3 +1,3 @@
1
1
  module DtkClient
2
- VERSION="0.5.6.1"
2
+ VERSION="0.5.8"
3
3
  end
@@ -24,9 +24,12 @@ module DTK
24
24
  end
25
25
 
26
26
  # Generic wizard which will return hash map based on metadata input
27
+ #
28
+ # Example provided bellow
29
+ #
27
30
  def self.interactive_user_input(wizard_dsl, recursion_call = false)
28
31
  results = {}
29
-
32
+ wizard_dsl = [wizard_dsl].flatten
30
33
  begin
31
34
  wizard_dsl.each do |meta_input|
32
35
  input_name = meta_input.keys.first
@@ -56,7 +59,7 @@ module DTK
56
59
  validation = (validation_range_start..metadata[:options].size).to_a
57
60
  when :group
58
61
  # recursion call to populate second level of hash params
59
- puts " Enter '#{display_name}' details: "
62
+ puts " Enter '#{display_name}': "
60
63
  results[input_name] = self.interactive_user_input(metadata[:options], true)
61
64
  next
62
65
  end
data/lib/util/os_util.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  dtk_require_from_base('domain/response')
2
2
  dtk_require_from_base('auxiliary')
3
3
  require 'highline'
4
+ require 'readline'
4
5
 
5
6
  module DTK
6
7
  module Client
@@ -25,6 +26,14 @@ module DTK
25
26
  is_windows? ? genv(:temp) : '/tmp'
26
27
  end
27
28
 
29
+
30
+ def pop_readline_history(number_of_last_commands)
31
+ number_of_last_commands.downto(1) do
32
+ Readline::HISTORY.pop
33
+ end
34
+ nil
35
+ end
36
+
28
37
  def get_log_location
29
38
  return "#{dtk_local_folder}"
30
39
  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.6.1
4
+ version: 0.5.8
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-02-21 00:00:00.000000000 Z
11
+ date: 2014-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler