lita-pulp 0.1.2 → 0.1.3

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