dtk-client 0.6.8 → 0.7.0

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