dtk-client 0.6.8 → 0.7.0

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.
Files changed (39) hide show
  1. checksums.yaml +8 -8
  2. data/bin/dtk +5 -1
  3. data/lib/auxiliary.rb +0 -1
  4. data/lib/commands/common/thor/assembly_workspace.rb +20 -1
  5. data/lib/commands/common/thor/inventory_parser.rb +1 -1
  6. data/lib/commands/common/thor/module/import.rb +41 -106
  7. data/lib/commands/common/thor/module.rb +13 -226
  8. data/lib/commands/common/thor/poller.rb +48 -0
  9. data/lib/commands/common/thor/puppet_forge.rb +7 -1
  10. data/lib/commands/common/thor/purge_clone.rb +2 -1
  11. data/lib/commands/common/thor/task_status.rb +15 -14
  12. data/lib/commands/common/thor/test_action_agent.rb +39 -0
  13. data/lib/commands/thor/component_module.rb +2 -2
  14. data/lib/commands/thor/node.rb +55 -14
  15. data/lib/commands/thor/node_group.rb +2 -26
  16. data/lib/commands/thor/service.rb +31 -11
  17. data/lib/commands/thor/service_module.rb +3 -1
  18. data/lib/commands/thor/workspace.rb +13 -3
  19. data/lib/core.rb +16 -6
  20. data/lib/domain/git_adapter.rb +0 -3
  21. data/lib/domain/response.rb +25 -13
  22. data/lib/dtk-client/version.rb +1 -1
  23. data/lib/parser/adapters/thor.rb +8 -5
  24. data/lib/shell/context.rb +8 -19
  25. data/lib/shell/domain/active_context.rb +169 -0
  26. data/lib/shell/domain/context_entity.rb +72 -0
  27. data/lib/shell/domain/context_params.rb +202 -0
  28. data/lib/shell/domain/override_tasks.rb +71 -0
  29. data/lib/shell/domain/shadow_entity.rb +59 -0
  30. data/lib/shell/help_monkey_patch.rb +76 -71
  31. data/lib/shell/message_queue.rb +2 -0
  32. data/lib/shell/status_monitor.rb +5 -3
  33. data/lib/shell.rb +4 -2
  34. data/lib/util/dtk_puppet.rb +8 -6
  35. data/lib/util/os_util.rb +5 -1
  36. data/lib/view_processor/table_print.rb +67 -12
  37. data/spec/lib/spec_thor.rb +5 -2
  38. metadata +9 -3
  39. data/lib/shell/domain.rb +0 -492
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTNhNzQ0NThlZmEwYTM4MTBjY2VmYWRkMjM1MTNiOTk1NGFiNWEwYQ==
4
+ ODdhNDYxZmYwMjY5YjVlODJhNzA4YjAzNGZlYTJiMWUzNDU4ZTQ3MQ==
5
5
  data.tar.gz: !binary |-
6
- NTlmMzU3OTZmYTdkNjVhMWVlYThiNWE5YmVlOGE1NDQxNGJlYjhlZA==
6
+ YWU3YjdjMjgxNjk4MDMwZDJkMjM5NjhkM2QxNmUwNjQxYTQyMWFiNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OTc0YjFhOTUzOGVmMmViMjNiMzY4MzcyZWFkMTA4M2NhY2YyZDgyMThhMThm
10
- MjJlMzVlNWU4NTI3YWNjODI5YmJhMzE1YjE3ZGVhODc4NjAzZmFhZTI1OTE4
11
- ZDEwMzQzMDJlM2M3MmY3YmQ4MjUwZjQ5OTY0ZGVlZGQ1OGZlNDk=
9
+ YjgxYTk4MWM2ODA2OWNiNjI5NjQwYjJlZGI0MWY5MTMzNjgzMGUyZjExZTZi
10
+ OWUxMmQwMjFlYmEyMWI0ZGE1OWQ1YmMyOTI0MzljMDU4MDI0YzM2NmY0ZWEw
11
+ ZjY0YTliNzRmMGZjMmMzYzg4YzM5ZDFiNzNkZTBiNWY1OTM3NjQ=
12
12
  data.tar.gz: !binary |-
13
- ZjIwY2M4NWFiYmUwOWUwNDU5MGQ4ODBmNWQ1NDgwZjA3MDcyM2NjOTY3OGVi
14
- YTVmOGIyMmI3YmY4OWUxNDI0OTQyODY4M2VmZmE3YTQzNzgwYzBkNDZjZDNi
15
- OWUyMzkzYTYyMWY5NTIyMTE1YjkyNjRiNzM0MmUwZDg0ZWVhNzE=
13
+ MDMyYzU2YWZmYzc4NjQ0YTI2YTIzN2E2OTllMjRhMDZlM2Q5ODU2ZGY1ZTI5
14
+ M2Q2OTY3NWY5ODJiOGMxZWY3MzZiZDdhZWViZTZiNGMyYzNlM2Q0YmQ0ODkx
15
+ N2NlNzZhYWE5Y2UzYWIzOGJjZDc3ZWUzYzFmZDcyYmNhNzdkMTM=
data/bin/dtk CHANGED
@@ -7,7 +7,11 @@ require File.expand_path('../lib/client', File.dirname(__FILE__))
7
7
  require File.expand_path('../lib/configurator', File.dirname(__FILE__))
8
8
  require File.expand_path('../lib/parser/adapters/thor', File.dirname(__FILE__))
9
9
  require File.expand_path('../lib/shell/context', File.dirname(__FILE__))
10
- require File.expand_path('../lib/shell/domain', File.dirname(__FILE__))
10
+ require File.expand_path('../lib/shell/domain/context_entity', File.dirname(__FILE__))
11
+ require File.expand_path('../lib/shell/domain/active_context', File.dirname(__FILE__))
12
+ require File.expand_path('../lib/shell/domain/context_params', File.dirname(__FILE__))
13
+ require File.expand_path('../lib/shell/domain/override_tasks', File.dirname(__FILE__))
14
+ require File.expand_path('../lib/shell/domain/shadow_entity', File.dirname(__FILE__))
11
15
  require File.expand_path('../lib/commands/thor/account', File.dirname(__FILE__))
12
16
  require File.expand_path('../lib/shell/parse_monkey_patch', File.dirname(__FILE__))
13
17
  require File.expand_path('../lib/shell/help_monkey_patch', File.dirname(__FILE__))
data/lib/auxiliary.rb CHANGED
@@ -10,7 +10,6 @@ module DTK
10
10
  end
11
11
  end
12
12
 
13
- #TODO: probably move this
14
13
  class PostBody < Hash
15
14
  def initialize(raw={})
16
15
  super()
@@ -78,6 +78,7 @@ module DTK::Client
78
78
 
79
79
  post_body.merge!(:assembly_template_name => assembly_template_name) if assembly_template_name
80
80
  post_body.merge!(:use_module_namespace => true) if opts[:use_module_namespace]
81
+ post_body.merge!(:description => opts[:description]) if opts[:description]
81
82
  response = post rest_url("assembly/promote_to_template"), post_body
82
83
  return response unless response.ok?()
83
84
 
@@ -103,6 +104,11 @@ module DTK::Client
103
104
  response.render_table(:violation)
104
105
  end
105
106
 
107
+ def print_includes_aux(context_params)
108
+ assembly_or_workspace_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID],method_argument_names)
109
+ response = post rest_url("assembly/print_includes"),:assembly_id => assembly_or_workspace_id
110
+ end
111
+
106
112
  def converge_aux(context_params)
107
113
  assembly_or_workspace_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID],method_argument_names)
108
114
 
@@ -270,7 +276,7 @@ module DTK::Client
270
276
 
271
277
  def task_status_aw_aux(context_params)
272
278
  assembly_or_workspace_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID],method_argument_names)
273
- response = task_status_aux(assembly_or_workspace_id,:assembly,options.wait?)
279
+ response = task_status_aux(assembly_or_workspace_id,:assembly,:wait => options.wait?,:summarize => options.summarize?)
274
280
 
275
281
  # TODO: Hack which is necessery for the specific problem (DTK-725), we don't get proper error message when there is a timeout doing converge
276
282
  unless response == true
@@ -285,6 +291,15 @@ module DTK::Client
285
291
  response
286
292
  end
287
293
 
294
+ def task_action_detail_aw_aux(context_params)
295
+ assembly_or_workspace_id, message_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID, :option_1!], method_argument_names)
296
+ post_body = {
297
+ :assembly_id => assembly_or_workspace_id,
298
+ :message_id => message_id
299
+ }
300
+ post rest_url("assembly/task_action_detail"), post_body
301
+ end
302
+
288
303
  def link_attributes_aux(context_params)
289
304
  assembly_id, target_attr_term, source_attr_term = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID,:option_1!,:option_2!],method_argument_names)
290
305
  post_body = {
@@ -521,6 +536,9 @@ module DTK::Client
521
536
  assembly_or_workspace_id, node_id, component_id, attribute_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID, :node_id, :component_id, :attribute_id],method_argument_names)
522
537
  is_json_return = context_params.get_forwarded_options[:json_return] || false
523
538
 
539
+ # return only node group info if triggered from node group
540
+ is_node_group = true if context_params.shadow_entity_name == 'node_group'
541
+
524
542
  post_body = {
525
543
  :assembly_id => assembly_or_workspace_id,
526
544
  :node_id => node_id,
@@ -530,6 +548,7 @@ module DTK::Client
530
548
  :json_return => is_json_return
531
549
  }
532
550
 
551
+ post_body.merge!(:only_node_group_info => true) if is_node_group
533
552
  resp = post rest_url("assembly/info"), post_body
534
553
 
535
554
  # if waiting for json response we do not need to render rest of data
@@ -17,7 +17,7 @@ module DTK::Client
17
17
  ssh_credentials = data["ssh_credentials"]||defaults["ssh_credentials"]
18
18
 
19
19
  raise DtkValidationError, "Credentials for '#{ssh_credentials}' does not exist in credentials file '#{ssh_creds_path}'" unless ssh_creds_data.include?(ssh_credentials)
20
-
20
+
21
21
  ref = "physical--#{display_name}"
22
22
  row = ret[ref] = {
23
23
  :display_name => display_name,
@@ -1,13 +1,4 @@
1
1
  dtk_require_from_base("util/os_util")
2
-
3
- # For Aldin: dont thing these are needed although this may be stylistic, which is fine; just putting here to make where the include
4
- # include ReparseMixin
5
- # ..
6
- # are comming from
7
- dtk_require_common_commands('thor/push_clone_changes')
8
- dtk_require_common_commands('thor/reparse')
9
- dtk_require_common_commands('thor/common')
10
-
11
2
  dtk_require_from_base('commands')
12
3
  dtk_require_from_base("command_helper")
13
4
 
@@ -19,7 +10,6 @@ module DTK::Client
19
10
  include PushCloneChangesMixin
20
11
  include ReparseMixin
21
12
 
22
- # For Rich: this is used for import-git
23
13
  def from_git()
24
14
  git_repo_url, module_name = retrieve_arguments([:option_1!, :option_2!])
25
15
  namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
@@ -48,11 +38,6 @@ module DTK::Client
48
38
  @context_params.forward_options(thor_options)
49
39
  create_response = from_git_or_file()
50
40
 
51
- if create_response.ok?
52
- module_name, module_namespace, repo_url, branch, not_ok_response = workspace_branch_info(module_type, create_response.data['module_id'], create_response.data['version'])
53
- create_response = not_ok_response if not_ok_response
54
- end
55
-
56
41
  unless create_response.ok?
57
42
  delete_dir = namespace.nil? ? local_module_name : "#{namespace}/#{local_module_name}"
58
43
  full_module_name = create_response.data[:full_module_name]
@@ -63,10 +48,10 @@ module DTK::Client
63
48
  end
64
49
 
65
50
  opts_pull = {
66
- :local_branch => branch,
67
- :namespace => module_namespace
51
+ :local_branch => @branch,
52
+ :namespace => @module_namespace
68
53
  }
69
- pull_response = Helper(:git_repo).pull_changes(module_type, module_name, opts_pull)
54
+ pull_response = Helper(:git_repo).pull_changes(module_type, @module_name, opts_pull)
70
55
  return pull_response unless pull_response.ok?
71
56
 
72
57
  if external_dependencies = create_response.data(:external_dependencies)
@@ -76,93 +61,46 @@ module DTK::Client
76
61
  Response::Ok.new()
77
62
  end
78
63
 
79
- # For Rich: this is for import
80
64
  def from_file()
81
65
  module_type = @command.get_module_type(@context_params)
82
66
  module_name = retrieve_arguments([:option_1!])
67
+ opts = {}
83
68
  namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
84
- opts = {}
85
69
 
86
70
  response = from_git_or_file()
87
71
  return response unless response.ok?
88
72
 
89
- repo_obj = response.data['repo_obj']
90
- module_final_dir = repo_obj.repo_dir
91
- old_dir = response.data['old_dir']
92
- new_module_name = response.data['new_module_name']
93
-
94
- module_name, module_namespace, repo_url, branch, not_ok_response = workspace_branch_info(module_type, response.data['module_id'], response.data['version'])
95
- return not_ok_response if not_ok_response
96
-
97
73
  opts_pull = {
98
- :local_branch => branch,
99
- :namespace => module_namespace
74
+ :local_branch => @branch,
75
+ :namespace => @module_namespace
100
76
  }
77
+ resp = Helper(:git_repo).pull_changes(module_type, @module_name, opts_pull)
78
+ return resp unless resp.ok?
101
79
 
102
- dsl_updated_info = response.data(:dsl_updated_info)
103
- dsl_created_info = response.data(:dsl_created_info)
104
- external_dependencies = response.data(:external_dependencies)
105
-
106
- dsl_updated_info = response.data(:dsl_updated_info)
107
- if dsl_updated_info and !dsl_updated_info.empty?
108
- new_commit_sha = dsl_updated_info[:commit_sha]
109
- unless new_commit_sha and new_commit_sha == commit_sha
110
- resp = Helper(:git_repo).pull_changes(module_type, module_name, opts_pull)
111
- return resp unless resp.ok?
112
- end
113
- end
114
-
115
- # For Aldin; wil update the server side to have dsl_created_info not have content when that is added on server side
116
- # so setting acondition wrt to this and casing on this, i.e., whether need to commit file and then do push
117
- # after we make sure working we can remove code that commits dsl file on client side
118
- push_needed = false
119
- if dsl_created_info and !dsl_created_info.empty?
120
- path = dsl_created_info["path"]
121
- msg = "A #{path} file has been created for you, located at #{module_final_dir}"
122
- if content = dsl_created_info["content"]
123
- resp = Helper(:git_repo).add_file(repo_obj, path, content, msg)
124
- return resp unless resp.ok?
125
- push_needed = true
126
- end
127
- end
128
-
129
- ##### code that does push that can be removed once we always do commit of dsl on server side
130
- if push_needed
131
- if external_dependencies
132
- ambiguous = external_dependencies['ambiguous']||[]
133
- possibly_missing = external_dependencies["possibly_missing"]||[]
134
- opts.merge!(:set_parsed_false => true, :skip_module_ref_update => true) unless ambiguous.empty? && possibly_missing.empty?
135
- end
136
-
137
- @context_params.add_context_to_params(local_module_name, module_type.to_s.gsub!(/\_/,'-').to_sym, response.data['module_id'])
138
- response = push_module_aux(@context_params, true, opts)
139
-
140
- unless response.ok?
141
- # remove new directory and leave the old one if import without namespace failed
142
- if old_dir and (old_dir != module_final_dir)
143
- FileUtils.rm_rf(module_final_dir) unless namespace
144
- end
145
- return response
146
- end
80
+ if error = response.data(:dsl_parse_error)
81
+ dsl_parsed_message = ServiceImporter.error_message(module_name, error)
82
+ DTK::Client::OsUtil.print(dsl_parsed_message, :red)
147
83
  end
148
- ##### end: code that does push
149
84
 
150
85
  # remove source directory if no errors while importing
151
- if old_dir and (old_dir != module_final_dir)
152
- FileUtils.rm_rf(old_dir) unless namespace
86
+ module_final_dir = @repo_obj.repo_dir
87
+ if @old_dir and (@old_dir != module_final_dir)
88
+ FileUtils.rm_rf(@old_dir) unless namespace
153
89
  end
154
90
 
155
- if external_dependencies
91
+ if external_dependencies = response.data(:external_dependencies)
156
92
  print_external_dependencies(external_dependencies, 'dtk.model.yaml includes')
157
93
  end
158
94
 
159
95
  # if user do import from default directory (e.g. import ntp - without namespace) print message
160
- DTK::Client::OsUtil.print("Module '#{new_module_name}' has been created and module directory moved to #{module_final_dir}",:yellow) unless namespace
96
+ DTK::Client::OsUtil.print("Module '#{@new_module_name}' has been created and module directory moved to #{module_final_dir}",:yellow) unless namespace
161
97
 
162
98
  Response::Ok.new()
163
99
  end
164
100
 
165
- # For Rich: common code for import-git and import
101
+
102
+ private
103
+
166
104
  def from_git_or_file()
167
105
  default_ns = @context_params.get_forwarded_options()[:default_namespace]
168
106
  git_import = @context_params.get_forwarded_options()[:git_import]
@@ -171,7 +109,6 @@ module DTK::Client
171
109
  module_name = @context_params.retrieve_arguments([name_option])
172
110
  module_type = @command.get_module_type(@context_params)
173
111
  version = @options["version"]
174
- create_response = {}
175
112
 
176
113
  # extract namespace and module_name from full name (r8:maven will result in namespace = r8 & name = maven)
177
114
  namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
@@ -193,57 +130,55 @@ module DTK::Client
193
130
  response = post(rest_url("#{module_type}/create"), post_body)
194
131
  return response unless response.ok?
195
132
 
196
- repo_url,repo_id,module_id,branch,new_module_name = response.data(:repo_url, :repo_id, :module_id, :workspace_branch, :full_module_name)
197
- response = Helper(:git_repo).rename_and_initialize_clone_and_push(module_type.to_sym, local_module_name, new_module_name, branch, repo_url, module_directory)
133
+ repo_url, repo_id, @module_id, branch, @new_module_name = response.data(:repo_url, :repo_id, :module_id, :workspace_branch, :full_module_name)
134
+ response = Helper(:git_repo).rename_and_initialize_clone_and_push(module_type.to_sym, local_module_name, @new_module_name, branch, repo_url, module_directory)
198
135
  return response unless (response && response.ok?)
199
136
 
200
- repo_obj, commit_sha = response.data(:repo_obj, :commit_sha)
201
- module_final_dir = repo_obj.repo_dir
202
- old_dir = response.data[:old_dir]
137
+ @repo_obj, commit_sha = response.data(:repo_obj, :commit_sha)
138
+ module_final_dir = @repo_obj.repo_dir
139
+ @old_dir = response.data[:old_dir]
203
140
 
204
141
  post_body = {
205
142
  :repo_id => repo_id,
206
143
  :commit_sha => commit_sha,
207
144
  :commit_dsl => true,
208
145
  :scaffold_if_no_dsl => true,
209
- "#{module_type}_id".to_sym => module_id
146
+ "#{module_type}_id".to_sym => @module_id
210
147
  }
148
+
149
+ # For Rich: DTK-1925
150
+ # we need to send :update_from_includes that will be used on server in /Users/aldin/Reactor8/server/application/model/module/base_module/update_module.rb:111
151
+ #
152
+ # this line bellow
211
153
  post_body.merge!(:git_import => true) if git_import
154
+ # should be changed with this code:
155
+ # if git_import
156
+ # post_body.merge!(:git_import => true)
157
+ # else
158
+ # post_body.merge!(:update_from_includes => true)
159
+ # end
212
160
  response = post(rest_url("#{module_type}/update_from_initial_create"), post_body)
213
161
 
214
162
  unless response.ok?
215
- response.set_data_hash({ :full_module_name => new_module_name })
163
+ response.set_data_hash({ :full_module_name => @new_module_name })
216
164
  # remove new directory and leave the old one if import without namespace failed
217
- if old_dir and (old_dir != module_final_dir)
165
+ if @old_dir and (@old_dir != module_final_dir)
218
166
  FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
219
167
  end
220
168
  return response
221
169
  end
222
170
 
223
- dsl_updated_info = response.data(:dsl_updated_info)
224
- dsl_created_info = response.data(:dsl_created_info)
225
- external_dependencies = response.data(:external_dependencies)
171
+ dsl_updated_info = response.data(:dsl_updated_info)
172
+ dsl_created_info = response.data(:dsl_created_info)
226
173
  DTK::Client::OsUtil.print("A module_refs.yaml file has been created for you, located at #{module_final_dir}", :yellow) if dsl_updated_info && !dsl_updated_info.empty?
227
174
  DTK::Client::OsUtil.print("A #{dsl_created_info["path"]} file has been created for you, located at #{module_final_dir}", :yellow) if dsl_created_info && !dsl_created_info.empty?
228
175
 
229
- module_name, module_namespace, repo_url, branch, not_ok_response = workspace_branch_info(module_type, module_id, version)
176
+ @module_name, @module_namespace, repo_url, @branch, not_ok_response = workspace_branch_info(module_type, @module_id, version)
230
177
  return not_ok_response if not_ok_response
231
178
 
232
- # For Rich: did not have time today, but should find better way to pass these arguments to from_git and from_file methods
233
- # For Aldin: are all these values needed in teh calling fns. ANyways anotehr way to do it is to just set instance vars so from here
234
- # @module_id = module_id
235
- # then calling fn coudl just use @module_id
236
- response.add_data_value!(:module_id, module_id)
237
- response.add_data_value!(:version, version)
238
- response.add_data_value!(:repo_obj, repo_obj)
239
- response.add_data_value!(:old_dir, old_dir)
240
- response.add_data_value!(:new_module_name, new_module_name)
241
-
242
179
  response
243
180
  end
244
181
 
245
- private
246
- # ... the methods that represent the basic steps of from_git and from_git_or_file
247
182
  end
248
183
  end
249
184
  end
@@ -21,8 +21,6 @@ PULL_CATALOGS = ["dtkn"]
21
21
 
22
22
  module DTK::Client
23
23
  class CommonModule
24
- # TODO: For Aldin; looking to use nested file structure if helpers just relate to one file in common;
25
- # example here is import which is helper for module.rb
26
24
  dtk_require_common_commands('thor/module/import')
27
25
 
28
26
  def initialize(command,context_params)
@@ -130,6 +128,15 @@ module DTK::Client
130
128
  return nil unless is_go
131
129
  end
132
130
 
131
+ post_body = {
132
+ "#{module_type}_id".to_sym => module_id
133
+ }
134
+ action = (version ? "delete_version" : "delete")
135
+ post_body[:version] = version if version
136
+
137
+ response = post(rest_url("#{module_type}/#{action}"), post_body)
138
+ return response unless response.ok?
139
+
133
140
  response =
134
141
  if options.purge? || method_opts[:purge]
135
142
  opts = {:module_name => module_name}
@@ -143,15 +150,6 @@ module DTK::Client
143
150
 
144
151
  return response unless response.ok?
145
152
 
146
- post_body = {
147
- "#{module_type}_id".to_sym => module_id
148
- }
149
- action = (version ? "delete_version" : "delete")
150
- post_body[:version] = version if version
151
-
152
- response = post(rest_url("#{module_type}/#{action}"), post_body)
153
- return response unless response.ok?
154
-
155
153
  unless method_opts[:no_error_msg]
156
154
  msg = "Module '#{module_name}' "
157
155
  if version then msg << "version #{version} has been deleted"
@@ -220,221 +218,11 @@ module DTK::Client
220
218
  end
221
219
 
222
220
  def import_git_module_aux(context_params)
223
- # For Aldin
224
- # This would now be one top level call
225
- # uncomment this out to se simple example
226
- # CommonModule::Import.new(self,context_params).from_git()
227
-
228
- git_repo_url, module_name = context_params.retrieve_arguments([:option_1!, :option_2!], method_argument_names)
229
- namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
230
-
231
- module_type = get_module_type(context_params)
232
- thor_options = { :git_import => true}
233
-
234
- unless namespace
235
- resp = post rest_url("namespace/default_namespace_name")
236
- return resp unless resp.ok?
237
-
238
- namespace = resp.data
239
- thor_options[:default_namespace] = namespace
240
- end
241
-
242
- opts = {
243
- :namespace => namespace,
244
- :branch => options['branch']
245
- }
246
- response = Helper(:git_repo).create_clone_from_optional_branch(module_type.to_sym, local_module_name, git_repo_url, opts)
247
- return response unless response.ok?
248
-
249
- # Remove .git directory to rid of git pointing to user's github
250
- FileUtils.rm_rf("#{response['data']['module_directory']}/.git")
251
-
252
- context_params.forward_options(thor_options)
253
- create_response = import_module_aux(context_params)
254
-
255
- if create_response.ok?
256
- if external_dependencies = create_response.data(:external_dependencies)
257
- inconsistent = external_dependencies["inconsistent"]||[]
258
- possibly_missing = external_dependencies["possibly_missing"]||[]
259
- ambiguous = external_dependencies["ambiguous"]||[]
260
- amb_sorted = ambiguous.map { |k,v| "#{k.split('/').last} (#{v.join(', ')})" }
261
- OsUtil.print("There are inconsistent module dependencies mentioned in the git repo: #{inconsistent.join(', ')}", :red) unless inconsistent.empty?
262
- OsUtil.print("There are missing module dependencies mentioned in the git repo: #{possibly_missing.join(', ')}", :yellow) unless possibly_missing.empty?
263
- OsUtil.print("There are ambiguous module dependencies mentioned in the git repo: '#{amb_sorted.join(', ')}'. One of the namespaces should be selected by editing the module_refs file", :yellow) if ambiguous && !ambiguous.empty?
264
- end
265
- else
266
- delete_dir = namespace.nil? ? local_module_name : "#{namespace}/#{local_module_name}"
267
- full_module_name = create_response.data[:full_module_name]
268
- local_module_name = full_module_name.nil? ? delete_dir : full_module_name
269
- delete_module_sub_aux(context_params, local_module_name, :force_delete => true, :no_error_msg => true, :purge => true)
270
- return create_response
271
- end
272
-
273
- Response::Ok.new()
221
+ CommonModule::Import.new(self, context_params).from_git()
274
222
  end
275
- def import_module_aux(context_params)
276
- # CommonModule::Import.new(self,context_params).from_file()
277
- if context_params.get_forwarded_options()
278
- default_ns = context_params.get_forwarded_options()[:default_namespace]
279
- git_import = context_params.get_forwarded_options()[:git_import]
280
- end
281
-
282
- name_option = git_import ? :option_2! : :option_1!
283
- module_name = context_params.retrieve_arguments([name_option],method_argument_names)
284
- module_type = get_module_type(context_params)
285
- version = options["version"]
286
- opts = {}
287
-
288
- # extract namespace and module_name from full name (r8:maven will result in namespace = r8 & name = maven)
289
- namespace, local_module_name = get_namespace_and_name(module_name, ModuleUtil::NAMESPACE_SEPERATOR)
290
- namespace = default_ns if default_ns && namespace.nil?
291
223
 
292
- # first check that there is a directory there and it is not already a git repo, and it ha appropriate content
293
- response = Helper(:git_repo).check_local_dir_exists_with_content(module_type.to_sym, local_module_name, nil, namespace)
294
- return response unless response.ok?
295
-
296
- #check for yaml/json parsing errors before import
297
- module_directory = response.data(:module_directory)
298
- reparse_aux(module_directory)
299
-
300
- # first make call to server to create an empty repo
301
- post_body = {
302
- :module_name => local_module_name,
303
- :module_namespace => namespace
304
- }
305
- response = post(rest_url("#{module_type}/create"), post_body)
306
- return response unless response.ok?
307
-
308
- repo_url,repo_id,module_id,branch,new_module_name = response.data(:repo_url, :repo_id, :module_id, :workspace_branch, :full_module_name)
309
- response = Helper(:git_repo).rename_and_initialize_clone_and_push(module_type.to_sym, local_module_name, new_module_name, branch, repo_url, module_directory)
310
- return response unless (response && response.ok?)
311
-
312
- repo_obj, commit_sha = response.data(:repo_obj, :commit_sha)
313
- module_final_dir = repo_obj.repo_dir
314
- old_dir = response.data[:old_dir]
315
-
316
- post_body = {
317
- :repo_id => repo_id,
318
- :commit_sha => commit_sha,
319
- :commit_dsl => true,
320
- :scaffold_if_no_dsl => true,
321
- "#{module_type}_id".to_sym => module_id
322
- }
323
- post_body.merge!(:git_import => true) if git_import
324
- response = post(rest_url("#{module_type}/update_from_initial_create"), post_body)
325
-
326
- if error = response.data(:dsl_parse_error)
327
- dsl_parsed_message = ServiceImporter.error_message(module_name, error)
328
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
329
- end
330
-
331
- unless response.ok?
332
- response.set_data_hash({ :full_module_name => new_module_name })
333
- # remove new directory and leave the old one if import without namespace failed
334
- if old_dir and (old_dir != module_final_dir)
335
- FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
336
- end
337
- return response
338
- end
339
-
340
- dsl_updated_info = response.data(:dsl_updated_info)
341
- dsl_created_info = response.data(:dsl_created_info)
342
- external_dependencies = response.data(:external_dependencies)
343
- DTK::Client::OsUtil.print("A module_refs.yaml file has been created for you, located at #{module_final_dir}", :yellow) if dsl_updated_info && !dsl_updated_info.empty?
344
- DTK::Client::OsUtil.print("A #{dsl_created_info["path"]} file has been created for you, located at #{module_final_dir}", :yellow) if dsl_created_info && !dsl_created_info.empty?
345
-
346
- module_name, module_namespace, repo_url, branch, not_ok_response = workspace_branch_info(module_type, module_id, version)
347
- return not_ok_response if not_ok_response
348
-
349
- opts_pull = {
350
- :local_branch => branch,
351
- :namespace => module_namespace
352
- }
353
-
354
- # if import-git then always pull changes because files are created on server side
355
- if git_import
356
- resp = Helper(:git_repo).pull_changes(module_type, module_name, opts_pull)
357
- return resp unless resp.ok?
358
- response[:module_id] = module_id
359
- else
360
- # For Aldin; I think all code below this is just for import for file; so think we reorganize to have evrything above this be a common
361
- # routine called by both; and then put in new method for 'import from file' that calss common , whcih passes back response
362
- # and then calls the rest in the 'import from file' body
363
-
364
- # since we are creating module_refs and dtk,,odel.yaml files on server need to pull
365
- dsl_updated_info = response.data(:dsl_updated_info)
366
- if dsl_updated_info and !dsl_updated_info.empty?
367
- new_commit_sha = dsl_updated_info[:commit_sha]
368
- unless new_commit_sha and new_commit_sha == commit_sha
369
- resp = Helper(:git_repo).pull_changes(module_type, module_name, opts_pull)
370
- return resp unless resp.ok?
371
- end
372
- end
373
-
374
- # For Aldin; wil update the server side to have dsl_created_info not have content when that is added on server side
375
- # so setting acondition wrt to this and casing on this, i.e., whether need to commit file and then do push
376
- # after we make sure working we can remove code that commits dsl file on client side
377
- push_needed = false
378
- if dsl_created_info and !dsl_created_info.empty?
379
- path = dsl_created_info["path"]
380
- msg = "A #{path} file has been created for you, located at #{module_final_dir}"
381
- if content = dsl_created_info["content"]
382
- resp = Helper(:git_repo).add_file(repo_obj, path, content, msg)
383
- return resp unless resp.ok?
384
- push_needed = true
385
- end
386
- end
387
-
388
- ##### code that does push that can be removed once we always do commit of dsl on server side
389
- if push_needed
390
- if external_dependencies
391
- ambiguous = external_dependencies['ambiguous']||[]
392
- possibly_missing = external_dependencies["possibly_missing"]||[]
393
- opts.merge!(:set_parsed_false => true, :skip_module_ref_update => true) unless ambiguous.empty? && possibly_missing.empty?
394
- end
395
-
396
- context_params.add_context_to_params(local_module_name, module_type.to_s.gsub!(/\_/,'-').to_sym, module_id)
397
- response = push_module_aux(context_params, true, opts)
398
-
399
- if error = response.data(:dsl_parse_error)
400
- dsl_parsed_message = ServiceImporter.error_message(module_name, error)
401
- DTK::Client::OsUtil.print(dsl_parsed_message, :red)
402
- end
403
-
404
- unless response.ok?
405
- # remove new directory and leave the old one if import without namespace failed
406
- if old_dir and (old_dir != module_final_dir)
407
- FileUtils.rm_rf(module_final_dir) unless namespace
408
- end
409
- return response
410
- end
411
- end
412
- ##### end: code that does push
413
-
414
- response = Response::Ok.new()
415
-
416
- # remove source directory if no errors while importing
417
- if old_dir and (old_dir != module_final_dir)
418
- FileUtils.rm_rf(old_dir) unless namespace
419
- end
420
-
421
- # For Aldin: need to also check to see if any parsing errors by looking at what is now in response under dsl_parse_error
422
- # (it was just renamed from dsl_parse_info)
423
-
424
- if external_dependencies
425
- ambiguous = external_dependencies["ambiguous"]||[]
426
- amb_sorted = ambiguous.map { |k,v| "#{k.split('/').last} (#{v.join(', ')})" }
427
- possibly_missing = external_dependencies["possibly_missing"]||[]
428
- OsUtil.print("There are missing module dependencies in dtk.model.yaml includes: #{possibly_missing.join(', ')}", :yellow) unless possibly_missing.empty?
429
- OsUtil.print("There are ambiguous module dependencies in dtk.model.yaml includes: '#{amb_sorted.join(', ')}'. One of the namespaces should be selected by editing the module_refs file", :yellow) unless ambiguous.empty?
430
- end
431
-
432
- # if user do import from default directory (e.g. import ntp - without namespace) print message
433
- # module directory moved from (~/dtk/component_module/<module_name>) to (~/dtk/component_module/<default_namespace>/<module_name>)
434
- DTK::Client::OsUtil.print("Module '#{new_module_name}' has been created and module directory moved to #{module_final_dir}",:yellow) unless namespace
435
- end
436
-
437
- response
224
+ def import_module_aux(context_params)
225
+ CommonModule::Import.new(self,context_params).from_file()
438
226
  end
439
227
 
440
228
  def install_module_aux(context_params)
@@ -654,7 +442,7 @@ module DTK::Client
654
442
  # if catalog.to_s.eql?("origin")
655
443
  # push_clone_changes_aux(:component_module,component_module_id,version,options["message"]||DEFAULT_COMMIT_MSG,internal_trigger)
656
444
  if catalog.to_s.eql?("dtkn")
657
- module_refs_content = RemoteDependencyUtil.module_ref_content(module_location) if module_type == :service_module
445
+ module_refs_content = RemoteDependencyUtil.module_ref_content(module_location) if module_type == 'service_module'
658
446
  remote_module_info = get_remote_module_info_aux(module_type.to_sym, module_id, options["namespace"], version, module_refs_content, local_namespace)
659
447
  return remote_module_info unless remote_module_info.ok?
660
448
 
@@ -733,7 +521,6 @@ module DTK::Client
733
521
  assembly_template_location = "#{module_location}/assemblies/#{assembly_template_name}"
734
522
  base_file = "#{module_location}/assemblies/#{assembly_template_name}.dtk.assembly"
735
523
 
736
- # Aldin: could not find better solution, leaving as is for now
737
524
  assembly_file_location =
738
525
  if File.exists?("#{base_file}.yaml")
739
526
  "#{base_file}.yaml"