lita-pulp 0.1.2 → 0.1.3

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +3 -0
  4. data/CHANGELOG.md +5 -0
  5. data/README.md +2 -0
  6. data/lib/lita/handlers/pulp.rb +140 -0
  7. data/lib/pulphelper/misc.rb +6 -0
  8. data/lib/pulphelper/repo.rb +105 -3
  9. data/lib/pulphelper/user.rb +56 -0
  10. data/lita-pulp.gemspec +2 -1
  11. data/locales/en.yml +6 -0
  12. data/spec/fixtures/docker-compose.yml +98 -0
  13. data/spec/lita/handlers/pulp_repo_spec.rb +51 -17
  14. data/spec/lita/handlers/pulp_unit_spec.rb +1 -1
  15. data/spec/spec_helper.rb +29 -4
  16. metadata +21 -36
  17. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_puppet_between_repo/copy_puppet_module.yml +0 -86
  18. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_puppet_between_repo/copy_puppet_module_delete_new_and_publish.yml +0 -217
  19. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_rpm_between_repo/copy_rpm_package.yml +0 -86
  20. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_rpm_between_repo/copy_rpm_package_delete_new_and_publish.yml +0 -264
  21. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_publish_repo/publish_a_repository.yml +0 -140
  22. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_repos/list_puppet_repos.yml +0 -88
  23. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_search/search_puppet_with_repo.yml +0 -134
  24. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_search/search_puppet_without_author_name.yml +0 -134
  25. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_search/search_puppet_without_repo.yml +0 -134
  26. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_rpm_repos/list_rpm_repos.yml +0 -593
  27. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_rpm_search/search_rpm_with_repo.yml +0 -152
  28. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_rpm_search/search_rpm_without_repo.yml +0 -152
  29. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_show_repo_detail/show_a_puppet_repo_detail.yml +0 -52
  30. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_show_repo_detail/show_a_rpm_repo_detail.yml +0 -57
  31. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_show_rpm_repo_detail/show_an_rpm_repo_detail.yml +0 -100
  32. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_sync_repo/sync_a_repository.yml +0 -44
  33. data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_sync_repo/syncs_a_repository.yml +0 -44
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 416aacd0fb3aaabb6b65bea319aaabf2be13a661
4
- data.tar.gz: fd19b59ede4cc87d3c9a235e54ac1b5aa79c4b18
3
+ metadata.gz: d775ca939c7ede32f70b79ef4401a9cde3db7ec2
4
+ data.tar.gz: aab465a84478d3db40ca7939cc09b0036ed23634
5
5
  SHA512:
6
- metadata.gz: 7944048feedc01e4538293f039b84545b7c33838514b76ca5075c110e4c41b12ae43cecccc39fdce32ec7462e14a076f1f1f43c9a4305dd1fafd1940f6eddc92
7
- data.tar.gz: 0dff1314caf747d268801c93560533aa567beb63ce74658c2a94d3576fb8136ce6928e7ca4c6d9cb5e302f79d3e366c100741a3da5f950dab8322bc7561a2b78
6
+ metadata.gz: 5b2ada338e80d7be5399d35602170c24f7abfba8d67e5d0e205bdce6d003623e3e4cee58ae92c0ebb74fbd712dd272f6a493e91506ee749d326f5bfe8bbbff4e
7
+ data.tar.gz: b8ab71676d0c5fedf6e0c7ab99b23364fddd9acb0be37d428d9de31966fe733d304d04423beed0f72331ee3a939ba581a4949277f46da1bb8554220ee275b258
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  .vscode
19
+ spec/fixtures/cassettes
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --fail-fast
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Lita-Pulp Change Log
2
+
3
+ ## 0.1.3
4
+ * create puppet rpm repository
5
+ * delete a repository
data/README.md CHANGED
@@ -34,3 +34,5 @@ It can do following:
34
34
  - Search puppet module
35
35
  - Copy rpm package from one repository to another
36
36
  - Copy puppet module from one repository to another
37
+ - Create rpm/puppet repository
38
+ - Delete a repository
@@ -11,6 +11,7 @@ module Lita
11
11
  config :url, required: true, type: String
12
12
  config :api_path, required: true, type: String
13
13
  config :verify_ssl, required:true, types: [TrueClass, FalseClass], default: false
14
+ config :pulp_version, required:true, types: String # like 2.7.1 2.7.2 2.8 used to work aroud isse #1394
14
15
 
15
16
  include ::PulpHelper::Misc
16
17
  include ::PulpHelper::Repo
@@ -199,6 +200,15 @@ module Lita
199
200
  }
200
201
  )
201
202
 
203
+ route(
204
+ /^pulp\s+delete\s+repo\s+(\S+)$/,
205
+ :cmd_delete_repository,
206
+ command: true,
207
+ help: {
208
+ t('help.cmd_delete_repository_key') => t('help.cmd_delete_repository_value')
209
+ }
210
+ )
211
+
202
212
  route(
203
213
  /^pulp\s+sync\s+(\S+)$/,
204
214
  :repo_sync,
@@ -208,6 +218,87 @@ module Lita
208
218
  }
209
219
  )
210
220
 
221
+ route(
222
+ /^pulp\s+create\s+rpm\s+repo/i,
223
+ :cmd_create_rpm_repo,
224
+ command: true,
225
+ kwargs: {
226
+ repo_id: {
227
+ short: "r",
228
+ },
229
+ name: {
230
+ short: "n"
231
+ },
232
+ description: {
233
+ short: "d"
234
+ },
235
+ feed: {
236
+ short: "f"
237
+ },
238
+ relative_url: {
239
+ short: "u"
240
+ },
241
+ http: {
242
+ short: "h",
243
+ boolean: true
244
+ },
245
+ https: {
246
+ short: "s",
247
+ boolean: true
248
+ },
249
+ auto_publish: {
250
+ short: 'p',
251
+ boolean: true
252
+ }
253
+ },
254
+ help: {
255
+ t("help.cmd_create_rpm_repo_key") => t("help.cmd_create_rpm_repo_value")
256
+ }
257
+ )
258
+
259
+ route(
260
+ /^pulp\s+create\s+puppet\s+repo/i,
261
+ :cmd_create_puppet_repo,
262
+ command: true,
263
+ kwargs: {
264
+ repo_id: {
265
+ short: "r",
266
+ },
267
+ name: {
268
+ short: "n"
269
+ },
270
+ description: {
271
+ short: "d"
272
+ },
273
+ feed: {
274
+ short: "f"
275
+ },
276
+ remove_missing: {
277
+ short: 'm',
278
+ boolean: true
279
+ },
280
+ queries: {
281
+ short: 'q'
282
+ },
283
+ http: {
284
+ short: "h",
285
+ boolean: true
286
+ },
287
+ https: {
288
+ short: "s",
289
+ boolean: true
290
+ },
291
+ auto_publish: {
292
+ short: 'p',
293
+ boolean: true
294
+ }
295
+ },
296
+ help: {
297
+ t("help.cmd_create_puppet_repo_key") => t("help.cmd_create_puppet_repo_value")
298
+ }
299
+ )
300
+
301
+
211
302
  # route(
212
303
  # /^pulp\s+sync_status\s+(\S+)$/,
213
304
  # :check_sync_status,
@@ -235,6 +326,7 @@ module Lita
235
326
  begin
236
327
  result=list_repo(REPO_TYPE_PUPPET)
237
328
  #response.reply result.to_json
329
+ #puts result
238
330
  s = StringIO.new
239
331
  result.each do |r|
240
332
  s << "["<< r[:id] << "] : " << r[:name] << ", " << r[:description] << "\n"
@@ -438,6 +530,54 @@ module Lita
438
530
  end
439
531
  end
440
532
 
533
+ def cmd_create_rpm_repo(response)
534
+ args = response.extensions[:kwargs]
535
+ #puts "args: #{args}"
536
+ repo_id = args[:repo_id]
537
+ name = args[:name] || repo_id
538
+ description = args[:description]
539
+ feed = args[:feed]
540
+ relative_url = args[:relative_url]
541
+ serve_http = args[:http].nil? ? true : args[:http]
542
+ serve_https = args[:https].nil? ? false : args[:https]
543
+ auto_publish = args[:auto_publish].nil? ? false : args[:auto_publish]
544
+ begin
545
+ success = create_rpm_repo(repo_id: repo_id, display_name: name , description: description, feed_url: feed, relative_url: relative_url, serve_http: serve_http, serve_https: serve_https, auto_publish: auto_publish )
546
+ response.reply "Repo created successfully."
547
+ rescue Exception => e
548
+ response.reply e.message
549
+ end
550
+ end
551
+
552
+ def cmd_create_puppet_repo(response)
553
+ args = response.extensions[:kwargs]
554
+ #puts "args: #{args}"
555
+ repo_id = args[:repo_id]
556
+ name = args[:name] || repo_id
557
+ description = args[:description]
558
+ feed = args[:feed]
559
+ queries = args[:queries]
560
+ remove_missing = args[:remove_missing].nil? ? false : args[:remove_missing] #default false
561
+ serve_http = args[:http].nil? ? true : args[:http] #default true
562
+ serve_https = args[:https].nil? ? false : args[:https]
563
+ auto_publish = args[:auto_publish].nil? ? false : args[:auto_publish]
564
+ begin
565
+ success = create_puppet_repo(repo_id: repo_id, display_name: name , description: description, feed_url: feed, queries: queries, remove_missing: remove_missing, serve_http: serve_http, serve_https: serve_https, auto_publish: auto_publish )
566
+ response.reply "Repo created successfully."
567
+ rescue Exception => e
568
+ response.reply e.message
569
+ end
570
+ end
571
+
572
+ def cmd_delete_repository(response)
573
+ repo_id = response.matches[0][0]
574
+ begin
575
+ success = delete_repository(repo_id)
576
+ response.reply "Repo deleted successfully."
577
+ rescue Exception => e
578
+ response.reply e.message
579
+ end
580
+ end
441
581
 
442
582
  Lita.register_handler(self)
443
583
  #Lita.register_hook(:trigger_route, Lita::Extensions::KeywordArguments)
@@ -1,4 +1,5 @@
1
1
  require 'runcible'
2
+ require 'json'
2
3
 
3
4
  module PulpHelper
4
5
  module Misc
@@ -12,5 +13,10 @@ module PulpHelper
12
13
  :logger => "",
13
14
  })
14
15
  end
16
+ def get_version
17
+ response = client.resources.repository.call(:get, "/status/")
18
+ version = response['versions']['platform_version']
19
+ version
20
+ end
15
21
  end
16
22
  end
@@ -6,18 +6,25 @@ module PulpHelper
6
6
  REPO_TYPE_RPM="rpm-repo"
7
7
  REPO_TYPE_PUPPET="puppet-repo"
8
8
 
9
+ YUM_IMPORTER_ID = "yum_importer"
10
+ PUPPET_IMPORTER_ID = 'puppet_importer'
11
+
12
+ YUM_DISTRIBUTOR_ID = "yum_distributor"
13
+ PUPPET_DISTRIBUTOR_ID = "puppet_distributor"
14
+ YUM_EXPORT_DISTRIBUTOR_ID="export_distributor"
15
+
9
16
  def list_repo(type)
17
+ # use $in seems buggy
10
18
  criteria = {
11
19
  "filters" => {
12
- "notes._repo-type" => {
13
- "$in" => [type]
14
- }
20
+ "notes._repo-type" => type
15
21
  }
16
22
  }
17
23
  #puts "criteria:#{criteria}"
18
24
  response=client.resources.repository.search(criteria)
19
25
  code=response.code
20
26
  body=response.body
27
+ #puts "list result: #{body}"
21
28
  result=[]
22
29
  case code
23
30
  when 200
@@ -131,6 +138,83 @@ module PulpHelper
131
138
  end
132
139
  end#list_repo_details
133
140
 
141
+ def create_rpm_repo(repo_id:, display_name: nil , description: '', feed_url: nil, relative_url: nil, serve_http: true, serve_https: false, auto_publish: false)
142
+
143
+ if relative_url.nil? || relative_url.strip.length<1
144
+ raise "Invalid relative_url"
145
+ end
146
+ importer = Runcible::Models::YumImporter.new
147
+ importer.feed = feed_url if feed_url
148
+ yum_distributor = Runcible::Models::YumDistributor.new relative_url, serve_http, serve_https
149
+ yum_distributor.auto_publish = auto_publish
150
+ yum_distributor.id = 'yum_distributor'
151
+
152
+ export_distributor = Runcible::Models::ExportDistributor.new serve_http, serve_https, relative_url
153
+ export_distributor.auto_publish = auto_publish
154
+ export_distributor.id = 'export_distributor'
155
+
156
+ optional = {
157
+ :display_name => display_name,
158
+ :description => description,
159
+ }
160
+
161
+ begin
162
+ version = get_version #get server version
163
+ # pulp issue https://pulp.plan.io/issues/1520
164
+ if Gem::Version.new('2.8.0') > Gem::Version.new(version)
165
+ def export_distributor.config
166
+ to_ret = as_json
167
+ to_ret.delete('auto_publish')
168
+ to_ret.delete('id')
169
+ to_ret.delete('relative_url')
170
+ to_ret
171
+ end
172
+ end
173
+ response = client.extensions.repository.create_with_importer_and_distributors(repo_id, importer, [yum_distributor, export_distributor], optional)
174
+ code=response.code
175
+ body=response.body
176
+ puts "code #{code}"
177
+ case code
178
+ when 201
179
+ return true
180
+ default
181
+ raise "Operation failed, response code:#{code}, #{response}"
182
+ end
183
+ rescue Exception => e
184
+ raise "Failed to create repo, #{e.message}"
185
+ end
186
+ end
187
+
188
+ def create_puppet_repo(repo_id:, display_name: nil , description: '', feed_url: nil, queries: nil, remove_missing: false, serve_http: true, serve_https: false, auto_publish: false)
189
+ importer = Runcible::Models::PuppetImporter.new
190
+ importer.feed = feed_url if feed_url
191
+ importer.remove_missing = remove_missing
192
+ importer.queries = queries
193
+ puppet_distributor = Runcible::Models::PuppetDistributor.new nil, serve_http, serve_https
194
+ puppet_distributor.auto_publish = auto_publish
195
+ puppet_distributor.id = 'puppet_distributor'
196
+
197
+ optional = {
198
+ :display_name => display_name,
199
+ :description => description,
200
+ }
201
+
202
+ begin
203
+ response = client.extensions.repository.create_with_importer_and_distributors(repo_id, importer, [puppet_distributor], optional)
204
+ code=response.code
205
+ body=response.body
206
+ puts "code #{code}"
207
+ case code
208
+ when 201
209
+ return true
210
+ default
211
+ raise "Operation failed, response code:#{code}, #{response}"
212
+ end
213
+ rescue Exception => e
214
+ raise "Failed to create repo, #{e.message}"
215
+ end
216
+ end
217
+
134
218
  def publish_repo!(forge_id)
135
219
  message = "Publish #{forge_id} submitted successfully"
136
220
  begin
@@ -290,7 +374,23 @@ module PulpHelper
290
374
  end
291
375
  end# copy puppet
292
376
 
377
+ def delete_repository(repo_id)
378
+ begin
379
+ response=client.resources.repository.delete(repo_id)
380
+ case response.code
381
+ when 202
382
+ true
383
+ when 404
384
+ rase "Repository does not exist."
385
+ default
386
+ raise "Failed to delete repository."
387
+ end
388
+ rescue StandardError => e
389
+ raise "Excpetion: Failed to delete, #{e.message}"
390
+ end
391
+ end
293
392
 
393
+ ##### private functions #####
294
394
  private
295
395
  def get_rpm_search_params (name, version, release, arch)
296
396
  search_optional= {
@@ -380,5 +480,7 @@ module PulpHelper
380
480
  }
381
481
  return criteria
382
482
  end#function
483
+
484
+
383
485
  end#module
384
486
  end#module
@@ -0,0 +1,56 @@
1
+ require 'runcible'
2
+
3
+ module PulpHelper
4
+ module User
5
+
6
+ def create_user(username, password)
7
+ response = client.resources.user.create(username, :name => username, :password => password)
8
+ if response.code == 201
9
+ "User created."
10
+ else
11
+ raise "Failed to create user, response code: #{response.code}"
12
+ end
13
+ end
14
+
15
+ def get_user(username)
16
+ response = client.resources.retrive(username)
17
+ if response.code == 200
18
+ response.body
19
+ else
20
+ raise "Failed to retrieve user, response code #{response.code}"
21
+ end
22
+ end
23
+
24
+ def delete_user(username)
25
+ response = client.resources.delete(username)
26
+ if response.code == 200
27
+ response.body
28
+ else
29
+ raise "Failed to delete user, response code #{response.code}"
30
+ end
31
+ end
32
+
33
+ def change_password(password)
34
+
35
+ end
36
+
37
+ def assign_role(user, role)
38
+ response = client.resources.add(role, user)
39
+ if response.code == 200
40
+ response.body
41
+ else
42
+ raise "Failed to assign role to user, response code #{response.code}"
43
+ end
44
+ end
45
+
46
+ def unassign_role(user, role)
47
+ response = client.resources.remove(role, user)
48
+ if response.code == 200
49
+ response.body
50
+ else
51
+ raise "Failed to unassign role from user, response code #{response.code}"
52
+ end
53
+ end
54
+
55
+ end
56
+ end
data/lita-pulp.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "lita-pulp"
4
- spec.version = "0.1.2"
4
+ spec.version = "0.1.3"
5
5
  spec.authors = ["Wang, Dawei"]
6
6
  spec.email = ["daweiwang.gatekeeper@gmail.com"]
7
7
  spec.description = "Lita bot for pulp server"
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "rspec", ">= 3.0.0"
27
27
  spec.add_development_dependency "webmock"
28
28
  spec.add_development_dependency "vcr"
29
+ spec.add_development_dependency "docker-compose"
29
30
  end
data/locales/en.yml CHANGED
@@ -27,3 +27,9 @@ en:
27
27
  sync_repo_value: "Sync repository REPO_ID"
28
28
  sync_status_key: "pulp sync_status REPO_ID"
29
29
  sync_status_value: "Check repository REPO_ID sync status"
30
+ cmd_create_rpm_repo_key: 'pulp create rpm repo --repo_id [--name REPONAME] [--description DESCRIPTION] [--feed FEED_URL] [--relative_url RELATIVEURL] [--http] [--https] [--auto_publish]'
31
+ cmd_create_rpm_repo_value: 'Create a rpm repository'
32
+ cmd_create_puppet_repo_key: 'pulp create puppet repo --repo_id [--name REPONAME] [--description DESCRIPTION] [--feed FEED_URL] [--queries "query1,query2"] [--remove_missing] [--http] [--https] [--auto_publish]'
33
+ cmd_create_puppet_repo_value: 'Create a puppet repository'
34
+ cmd_delete_repository_key: 'pulp delete repo REPO_ID'
35
+ cmd_delete_repository_value: 'Delete a repository'