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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +3 -0
- data/CHANGELOG.md +5 -0
- data/README.md +2 -0
- data/lib/lita/handlers/pulp.rb +140 -0
- data/lib/pulphelper/misc.rb +6 -0
- data/lib/pulphelper/repo.rb +105 -3
- data/lib/pulphelper/user.rb +56 -0
- data/lita-pulp.gemspec +2 -1
- data/locales/en.yml +6 -0
- data/spec/fixtures/docker-compose.yml +98 -0
- data/spec/lita/handlers/pulp_repo_spec.rb +51 -17
- data/spec/lita/handlers/pulp_unit_spec.rb +1 -1
- data/spec/spec_helper.rb +29 -4
- metadata +21 -36
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_puppet_between_repo/copy_puppet_module.yml +0 -86
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_puppet_between_repo/copy_puppet_module_delete_new_and_publish.yml +0 -217
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_rpm_between_repo/copy_rpm_package.yml +0 -86
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_copy_rpm_between_repo/copy_rpm_package_delete_new_and_publish.yml +0 -264
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_publish_repo/publish_a_repository.yml +0 -140
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_repos/list_puppet_repos.yml +0 -88
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_search/search_puppet_with_repo.yml +0 -134
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_search/search_puppet_without_author_name.yml +0 -134
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_puppet_search/search_puppet_without_repo.yml +0 -134
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_rpm_repos/list_rpm_repos.yml +0 -593
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_rpm_search/search_rpm_with_repo.yml +0 -152
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_rpm_search/search_rpm_without_repo.yml +0 -152
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_show_repo_detail/show_a_puppet_repo_detail.yml +0 -52
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_show_repo_detail/show_a_rpm_repo_detail.yml +0 -57
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_show_rpm_repo_detail/show_an_rpm_repo_detail.yml +0 -100
- data/spec/fixtures/cassettes/Lita_Handlers_Pulp/_sync_repo/sync_a_repository.yml +0 -44
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d775ca939c7ede32f70b79ef4401a9cde3db7ec2
|
4
|
+
data.tar.gz: aab465a84478d3db40ca7939cc09b0036ed23634
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b2ada338e80d7be5399d35602170c24f7abfba8d67e5d0e205bdce6d003623e3e4cee58ae92c0ebb74fbd712dd272f6a493e91506ee749d326f5bfe8bbbff4e
|
7
|
+
data.tar.gz: b8ab71676d0c5fedf6e0c7ab99b23364fddd9acb0be37d428d9de31966fe733d304d04423beed0f72331ee3a939ba581a4949277f46da1bb8554220ee275b258
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
data/lib/lita/handlers/pulp.rb
CHANGED
@@ -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)
|
data/lib/pulphelper/misc.rb
CHANGED
@@ -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
|
data/lib/pulphelper/repo.rb
CHANGED
@@ -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.
|
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'
|