nexus_api 1.6.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/Gemfile.lock +1 -1
- data/README.md +142 -4
- data/bin/test +2 -1
- data/lib/endpoints/repositories.rb +101 -21
- data/lib/nexus_api/version.rb +1 -1
- data/lib/utilities/parameter_builder.rb +365 -47
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cef507212dc118ed642feb046f02507b8d3d1dd5f6ef82ea575debf5f9ec435
|
4
|
+
data.tar.gz: d2cc63846f5ad0957d06ff7a2d1f894aebc43cd02f1897bdd8781ca13d755cb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b5ed7626a93a6c8da54c4147dc55d8dd1cf7daa85af4397866a8942489c1ac4374495a66450a26f4f3b54e2ff55eb2f9931252445fd40b610c4f2f2df9475e7
|
7
|
+
data.tar.gz: 6b1a560d2f14f54d481c97c776c53980acbd8a99c203aa27ea933a0f90fcabad05257553332804474bd22a2ed23507b8f5d0a2c39e1316c4147b86a59cda9824
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,28 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
7
|
|
8
|
+
## [2.0.0](https://github.com/Cisco-AMP/nexus_api/compare/v1.6.1...v2.0.0) - 2020-07-27
|
9
|
+
### Added
|
10
|
+
- Fully implemented create methods for group, hosted, and proxy type repository in the following formats:
|
11
|
+
- docker
|
12
|
+
- maven
|
13
|
+
- npm
|
14
|
+
- pypi
|
15
|
+
- raw
|
16
|
+
- rubygems
|
17
|
+
- yum
|
18
|
+
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
- Method signature for `NexusAPI::API.create_repository_docker_hosted()`
|
22
|
+
- Method signature for `NexusAPI::API.create_repository_maven_hosted()`
|
23
|
+
- Method signature for `NexusAPI::API.create_repository_npm_hosted()`
|
24
|
+
- Method signature for `NexusAPI::API.create_repository_pypi_hosted()`
|
25
|
+
- Method signature for `NexusAPI::API.create_repository_raw_hosted()`
|
26
|
+
- Method signature for `NexusAPI::API.create_repository_rubygems_hosted()`
|
27
|
+
- Method signature for `NexusAPI::API.create_repository_yum_hosted()`
|
28
|
+
|
29
|
+
|
8
30
|
## [1.6.1](https://github.com/Cisco-AMP/nexus_api/compare/v1.6.0...v1.6.1) - 2020-07-20
|
9
31
|
### Fixed
|
10
32
|
- Parameters for tag creation were being JSON encoded twice resulting in data Nexus could not parse
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -65,35 +65,166 @@ api = NexusAPI::API.new(
|
|
65
65
|
)
|
66
66
|
# NOTE: All Docker commands will fail if the docker hostnames are not initialized
|
67
67
|
|
68
|
+
|
69
|
+
# You can create various types of repositories in different formats
|
70
|
+
api.create_repository_docker_group(
|
71
|
+
name: REPOSITORY_NAME,
|
72
|
+
members: REPOSITORY_MEMBERS,
|
73
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
74
|
+
)
|
75
|
+
api.create_repository_docker_hosted(
|
76
|
+
name: REPOSITORY_NAME,
|
77
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
78
|
+
)
|
79
|
+
api.create_repository_docker_proxy(
|
80
|
+
name: REPOSITORY_NAME,
|
81
|
+
remote_url: URL_TO_PROXY,
|
82
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
83
|
+
)
|
84
|
+
|
85
|
+
api.create_repository_maven_group(
|
86
|
+
name: REPOSITORY_NAME,
|
87
|
+
members: REPOSITORY_MEMBERS,
|
88
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
89
|
+
)
|
90
|
+
api.create_repository_maven_hosted(
|
91
|
+
name: REPOSITORY_NAME,
|
92
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
93
|
+
)
|
94
|
+
api.create_repository_maven_proxy(
|
95
|
+
name: REPOSITORY_NAME,
|
96
|
+
remote_url: URL_TO_PROXY,
|
97
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
98
|
+
)
|
99
|
+
|
100
|
+
api.create_repository_npm_group(
|
101
|
+
name: REPOSITORY_NAME,
|
102
|
+
members: REPOSITORY_MEMBERS,
|
103
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
104
|
+
)
|
105
|
+
api.create_repository_npm_hosted(
|
106
|
+
name: REPOSITORY_NAME,
|
107
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
108
|
+
)
|
109
|
+
api.create_repository_npm_proxy(
|
110
|
+
name: REPOSITORY_NAME,
|
111
|
+
remote_url: URL_TO_PROXY,
|
112
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
113
|
+
)
|
114
|
+
|
115
|
+
api.create_repository_pypi_group(
|
116
|
+
name: REPOSITORY_NAME,
|
117
|
+
members: REPOSITORY_MEMBERS,
|
118
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
119
|
+
)
|
120
|
+
api.create_repository_pypi_hosted(
|
121
|
+
name: REPOSITORY_NAME,
|
122
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
123
|
+
)
|
124
|
+
api.create_repository_pypi_proxy(
|
125
|
+
name: REPOSITORY_NAME,
|
126
|
+
remote_url: URL_TO_PROXY,
|
127
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
128
|
+
)
|
129
|
+
|
130
|
+
api.create_repository_raw_group(
|
131
|
+
name: REPOSITORY_NAME,
|
132
|
+
members: REPOSITORY_MEMBERS,
|
133
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
134
|
+
)
|
135
|
+
api.create_repository_raw_hosted(
|
136
|
+
name: REPOSITORY_NAME,
|
137
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
138
|
+
)
|
139
|
+
api.create_repository_raw_proxy(
|
140
|
+
name: REPOSITORY_NAME,
|
141
|
+
remote_url: URL_TO_PROXY,
|
142
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
143
|
+
)
|
144
|
+
|
145
|
+
api.create_repository_rubygems_group(
|
146
|
+
name: REPOSITORY_NAME,
|
147
|
+
members: REPOSITORY_MEMBERS,
|
148
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
149
|
+
)
|
150
|
+
api.create_repository_rubygems_hosted(
|
151
|
+
name: REPOSITORY_NAME,
|
152
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
153
|
+
)
|
154
|
+
api.create_repository_rubygems_proxy(
|
155
|
+
name: REPOSITORY_NAME,
|
156
|
+
remote_url: URL_TO_PROXY,
|
157
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
158
|
+
)
|
159
|
+
|
160
|
+
api.create_repository_yum_group(
|
161
|
+
name: REPOSITORY_NAME,
|
162
|
+
members: REPOSITORY_MEMBERS,
|
163
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
164
|
+
)
|
165
|
+
api.create_repository_yum_hosted(
|
166
|
+
name: REPOSITORY_NAME,
|
167
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
168
|
+
)
|
169
|
+
api.create_repository_yum_proxy(
|
170
|
+
name: REPOSITORY_NAME,
|
171
|
+
remote_url: URL_TO_PROXY,
|
172
|
+
options: HASH_OF_REPOSITORY_OPTIONS # Optional
|
173
|
+
)
|
174
|
+
|
175
|
+
|
68
176
|
# You can query information through the list methods
|
69
|
-
api.
|
177
|
+
api.list_all_assets(repository: REPOSITORY_NAME)
|
178
|
+
api.list_assets(repository: REPOSITORY_NAME, paginate: BOOLEAN)
|
70
179
|
api.list_asset(id: ASSET_ID)
|
71
|
-
|
180
|
+
|
181
|
+
api.list_all_components(repository: REPOSITORY_NAME)
|
182
|
+
api.list_components(repository: REPOSITORY_NAME, paginate: BOOLEAN)
|
72
183
|
api.list_component(id: ASSET_ID)
|
184
|
+
|
73
185
|
api.list_privileges
|
186
|
+
api.list_privilege(privilege_id: ID)
|
187
|
+
|
74
188
|
api.list_repositories
|
75
189
|
api.list_repository_names
|
190
|
+
|
76
191
|
api.list_roles
|
192
|
+
api.list_role(id: ROLE_ID)
|
193
|
+
|
77
194
|
api.list_scripts
|
78
|
-
|
195
|
+
|
196
|
+
api.list_all_tags
|
197
|
+
api.list_tags(paginate: BOOLEAN)
|
198
|
+
|
79
199
|
api.list_users
|
80
200
|
|
201
|
+
|
81
202
|
# You can search for an asset by its name
|
82
203
|
# Optionally, you can pass in additional fields to filter the results
|
204
|
+
api.search_all_assets(
|
205
|
+
name: ASSET_NAME,
|
206
|
+
format: REPOSITORY_FORMAT, # Optional
|
207
|
+
repository: REPOSITORY_NAME, # Optional
|
208
|
+
sha1: SHA1, # Optional
|
209
|
+
version: VERSION, # Optional
|
210
|
+
)
|
211
|
+
# You can also paginate through the results if you want to do some additional filtering
|
83
212
|
api.search_asset(
|
84
213
|
name: ASSET_NAME,
|
85
214
|
format: REPOSITORY_FORMAT, # Optional
|
86
215
|
repository: REPOSITORY_NAME, # Optional
|
87
216
|
sha1: SHA1, # Optional
|
88
217
|
version: VERSION, # Optional
|
218
|
+
paginate: BOOLEAN # Optional
|
89
219
|
)
|
90
220
|
|
221
|
+
|
91
222
|
# The following endpoints will paginate:
|
92
223
|
# - list_assets
|
93
224
|
# - list_components
|
94
225
|
# - list_tags
|
95
226
|
# - search_asset
|
96
|
-
#
|
227
|
+
# Or you can use the following methods to automatically gather data from all pages for you:
|
97
228
|
# - list_all_assets
|
98
229
|
# - list_all_components
|
99
230
|
# - list_all_tags
|
@@ -106,9 +237,11 @@ set = Array.new.tap do |set|
|
|
106
237
|
end
|
107
238
|
end
|
108
239
|
|
240
|
+
|
109
241
|
# You can move all components that are tagged to a new destination
|
110
242
|
api.move_components_to(destination: DESTINATION, tag: TAG)
|
111
243
|
|
244
|
+
|
112
245
|
# You can download an asset by using its asset_id
|
113
246
|
# Optionally, you can rename the file on download
|
114
247
|
api.download(
|
@@ -116,6 +249,7 @@ api.download(
|
|
116
249
|
name: NEW_FILE_NAME, # Optional
|
117
250
|
)
|
118
251
|
|
252
|
+
|
119
253
|
# Different asset types require differing information to be uploaded
|
120
254
|
# Optionally, you can tag the component provided the tag already exists
|
121
255
|
api.upload_maven_component(
|
@@ -154,12 +288,14 @@ api.upload_yum_component(
|
|
154
288
|
tag: TAG, # Optional
|
155
289
|
)
|
156
290
|
|
291
|
+
|
157
292
|
# Docker is a special case and uses the local Docker daemon
|
158
293
|
# If this daemon is not installed and running these methods will fail
|
159
294
|
# NOTE: Docker login/logout is handled as part of the docker methods
|
160
295
|
api.download_docker_component(image: IMAGE_NAME, tag: DOCKER_TAG)
|
161
296
|
api.upload_docker_component(image: IMAGE_NAME, tag: DOCKER_TAG)
|
162
297
|
|
298
|
+
|
163
299
|
# You can create/delete tags and associate/disassociate them from components
|
164
300
|
# (we use the SHA1 rather than the file name because the Nexus search is inconsistent)
|
165
301
|
api.create_tag(name: TAG)
|
@@ -167,10 +303,12 @@ api.associate_tag(name: TAG, sha1: SHA1_SUM, repository: REPOSITORY_NAME)
|
|
167
303
|
api.delete_associated_tag(name: TAG, sha1: SHA1_SUM, repository: REPOSITORY_NAME)
|
168
304
|
api.delete_tag(name: TAG)
|
169
305
|
|
306
|
+
|
170
307
|
# You can query the Nexus status
|
171
308
|
api.status
|
172
309
|
api.status_writable
|
173
310
|
|
311
|
+
|
174
312
|
# Using an asset's URL you can gather its filesize as a String
|
175
313
|
api.get_asset_size(asset_url: URL)
|
176
314
|
```
|
data/bin/test
CHANGED
@@ -36,15 +36,25 @@ module NexusAPI
|
|
36
36
|
# POST /service/rest/beta/repositories/conan/proxy
|
37
37
|
# PUT /service/rest/beta/repositories/conan/proxy/{repositoryName}
|
38
38
|
# POST /service/rest/beta/repositories/docker/group
|
39
|
+
def create_repository_docker_group(name:, members:, options: {})
|
40
|
+
parameters = ParameterBuilder.docker_group(name, members, options)
|
41
|
+
create('repositories/docker/group', parameters)
|
42
|
+
end
|
43
|
+
|
39
44
|
# PUT /service/rest/beta/repositories/docker/group/{repositoryName}
|
40
45
|
# POST /service/rest/beta/repositories/docker/hosted
|
41
|
-
def create_repository_docker_hosted(name:,
|
42
|
-
parameters = ParameterBuilder.docker_hosted(name,
|
43
|
-
|
46
|
+
def create_repository_docker_hosted(name:, options: {})
|
47
|
+
parameters = ParameterBuilder.docker_hosted(name, options)
|
48
|
+
create('repositories/docker/hosted', parameters)
|
44
49
|
end
|
45
50
|
|
46
51
|
# PUT /service/rest/beta/repositories/docker/hosted/{repositoryName}
|
47
52
|
# POST /service/rest/beta/repositories/docker/proxy
|
53
|
+
def create_repository_docker_proxy(name:, remote_url:, options: {})
|
54
|
+
parameters = ParameterBuilder.docker_proxy(name, remote_url, options)
|
55
|
+
create('repositories/docker/proxy', parameters)
|
56
|
+
end
|
57
|
+
|
48
58
|
# PUT /service/rest/beta/repositories/docker/proxy/{repositoryName}
|
49
59
|
# POST /service/rest/beta/repositories/gitlfs/hosted
|
50
60
|
# PUT /service/rest/beta/repositories/gitlfs/hosted/{repositoryName}
|
@@ -57,26 +67,46 @@ module NexusAPI
|
|
57
67
|
# POST /service/rest/beta/repositories/helm/proxy
|
58
68
|
# PUT /service/rest/beta/repositories/helm/proxy/{repositoryName}
|
59
69
|
# POST /service/rest/beta/repositories/maven/group
|
70
|
+
def create_repository_maven_group(name:, members:, options: {})
|
71
|
+
parameters = ParameterBuilder.maven_group(name, members, options)
|
72
|
+
create('repositories/maven/group', parameters)
|
73
|
+
end
|
74
|
+
|
60
75
|
# PUT /service/rest/beta/repositories/maven/group/{repositoryName}
|
61
76
|
# POST /service/rest/beta/repositories/maven/hosted
|
62
|
-
def create_repository_maven_hosted(name:)
|
63
|
-
parameters = ParameterBuilder.maven_hosted(name)
|
64
|
-
|
77
|
+
def create_repository_maven_hosted(name:, options: {})
|
78
|
+
parameters = ParameterBuilder.maven_hosted(name, options)
|
79
|
+
create('repositories/maven/hosted', parameters)
|
65
80
|
end
|
66
81
|
|
67
82
|
# PUT /service/rest/beta/repositories/maven/hosted/{repositoryName}
|
68
83
|
# POST /service/rest/beta/repositories/maven/proxy
|
84
|
+
def create_repository_maven_proxy(name:, remote_url:, options: {})
|
85
|
+
parameters = ParameterBuilder.maven_proxy(name, remote_url, options)
|
86
|
+
create('repositories/maven/proxy', parameters)
|
87
|
+
end
|
88
|
+
|
69
89
|
# PUT /service/rest/beta/repositories/maven/proxy/{repositoryName}
|
70
90
|
# POST /service/rest/beta/repositories/npm/group
|
91
|
+
def create_repository_npm_group(name:, members:, options: {})
|
92
|
+
parameters = ParameterBuilder.npm_group(name, members, options)
|
93
|
+
create('repositories/npm/group', parameters)
|
94
|
+
end
|
95
|
+
|
71
96
|
# PUT /service/rest/beta/repositories/npm/group/{repositoryName}
|
72
97
|
# POST /service/rest/beta/repositories/npm/hosted
|
73
|
-
def create_repository_npm_hosted(name:)
|
74
|
-
parameters = ParameterBuilder.npm_hosted(name)
|
75
|
-
|
98
|
+
def create_repository_npm_hosted(name:, options: {})
|
99
|
+
parameters = ParameterBuilder.npm_hosted(name, options)
|
100
|
+
create('repositories/npm/hosted', parameters)
|
76
101
|
end
|
77
102
|
|
78
103
|
# PUT /service/rest/beta/repositories/npm/hosted/{repositoryName}
|
79
104
|
# POST /service/rest/beta/repositories/npm/proxy
|
105
|
+
def create_repository_npm_proxy(name:, remote_url:, options: {})
|
106
|
+
parameters = ParameterBuilder.npm_proxy(name, remote_url, options)
|
107
|
+
create('repositories/npm/proxy', parameters)
|
108
|
+
end
|
109
|
+
|
80
110
|
# PUT /service/rest/beta/repositories/npm/proxy/{repositoryName}
|
81
111
|
# POST /service/rest/beta/repositories/nuget/group
|
82
112
|
# PUT /service/rest/beta/repositories/nuget/group/{repositoryName}
|
@@ -87,15 +117,25 @@ module NexusAPI
|
|
87
117
|
# POST /service/rest/beta/repositories/p2/proxy
|
88
118
|
# PUT /service/rest/beta/repositories/p2/proxy/{repositoryName}
|
89
119
|
# POST /service/rest/beta/repositories/pypi/group
|
120
|
+
def create_repository_pypi_group(name:, members:, options: {})
|
121
|
+
parameters = ParameterBuilder.pypi_group(name, members, options)
|
122
|
+
create('repositories/pypi/group', parameters)
|
123
|
+
end
|
124
|
+
|
90
125
|
# PUT /service/rest/beta/repositories/pypi/group/{repositoryName}
|
91
126
|
# POST /service/rest/beta/repositories/pypi/hosted
|
92
|
-
def create_repository_pypi_hosted(name:)
|
93
|
-
parameters = ParameterBuilder.pypi_hosted(name)
|
94
|
-
|
127
|
+
def create_repository_pypi_hosted(name:, options: {})
|
128
|
+
parameters = ParameterBuilder.pypi_hosted(name, options)
|
129
|
+
create('repositories/pypi/hosted', parameters)
|
95
130
|
end
|
96
131
|
|
97
132
|
# PUT /service/rest/beta/repositories/pypi/hosted/{repositoryName}
|
98
133
|
# POST /service/rest/beta/repositories/pypi/proxy
|
134
|
+
def create_repository_pypi_proxy(name:, remote_url:, options: {})
|
135
|
+
parameters = ParameterBuilder.pypi_proxy(name, remote_url, options)
|
136
|
+
create('repositories/pypi/proxy', parameters)
|
137
|
+
end
|
138
|
+
|
99
139
|
# PUT /service/rest/beta/repositories/pypi/proxy/{repositoryName}
|
100
140
|
# POST /service/rest/beta/repositories/r/group
|
101
141
|
# PUT /service/rest/beta/repositories/r/group/{repositoryName}
|
@@ -104,37 +144,77 @@ module NexusAPI
|
|
104
144
|
# POST /service/rest/beta/repositories/r/proxy
|
105
145
|
# PUT /service/rest/beta/repositories/r/proxy/{repositoryName}
|
106
146
|
# POST /service/rest/beta/repositories/raw/group
|
147
|
+
def create_repository_raw_group(name:, members:, options: {})
|
148
|
+
parameters = ParameterBuilder.raw_group(name, members, options)
|
149
|
+
create('repositories/raw/group', parameters)
|
150
|
+
end
|
151
|
+
|
107
152
|
# PUT /service/rest/beta/repositories/raw/group/{repositoryName}
|
108
153
|
# POST /service/rest/beta/repositories/raw/hosted
|
109
|
-
def create_repository_raw_hosted(name:)
|
110
|
-
parameters = ParameterBuilder.raw_hosted(name)
|
111
|
-
|
154
|
+
def create_repository_raw_hosted(name:, options: {})
|
155
|
+
parameters = ParameterBuilder.raw_hosted(name, options)
|
156
|
+
create('repositories/raw/hosted', parameters)
|
112
157
|
end
|
113
158
|
|
114
159
|
# PUT /service/rest/beta/repositories/raw/hosted/{repositoryName}
|
115
160
|
# POST /service/rest/beta/repositories/raw/proxy
|
161
|
+
def create_repository_raw_proxy(name:, remote_url:, options: {})
|
162
|
+
parameters = ParameterBuilder.raw_proxy(name, remote_url, options)
|
163
|
+
create('repositories/raw/proxy', parameters)
|
164
|
+
end
|
165
|
+
|
116
166
|
# PUT /service/rest/beta/repositories/raw/proxy/{repositoryName}
|
117
167
|
# POST /service/rest/beta/repositories/rubygems/group
|
168
|
+
def create_repository_rubygems_group(name:, members:, options: {})
|
169
|
+
parameters = ParameterBuilder.rubygems_group(name, members, options)
|
170
|
+
create('repositories/rubygems/group', parameters)
|
171
|
+
end
|
172
|
+
|
118
173
|
# PUT /service/rest/beta/repositories/rubygems/group/{repositoryName}
|
119
174
|
# POST /service/rest/beta/repositories/rubygems/hosted
|
120
|
-
def create_repository_rubygems_hosted(name:)
|
121
|
-
parameters = ParameterBuilder.rubygems_hosted(name)
|
122
|
-
|
175
|
+
def create_repository_rubygems_hosted(name:, options: {})
|
176
|
+
parameters = ParameterBuilder.rubygems_hosted(name, options)
|
177
|
+
create('repositories/rubygems/hosted', parameters)
|
123
178
|
end
|
124
179
|
|
125
180
|
# PUT /service/rest/beta/repositories/rubygems/hosted/{repositoryName}
|
126
181
|
# POST /service/rest/beta/repositories/rubygems/proxy
|
182
|
+
def create_repository_rubygems_proxy(name:, remote_url:, options: {})
|
183
|
+
parameters = ParameterBuilder.rubygems_proxy(name, remote_url, options)
|
184
|
+
create('repositories/rubygems/proxy', parameters)
|
185
|
+
end
|
186
|
+
|
127
187
|
# PUT /service/rest/beta/repositories/rubygems/proxy/{repositoryName}
|
128
188
|
# POST /service/rest/beta/repositories/yum/group
|
189
|
+
def create_repository_yum_group(name:, members:, options: {})
|
190
|
+
parameters = ParameterBuilder.yum_group(name, members, options)
|
191
|
+
create('repositories/yum/group', parameters)
|
192
|
+
end
|
193
|
+
|
129
194
|
# PUT /service/rest/beta/repositories/yum/group/{repositoryName}
|
130
195
|
# POST /service/rest/beta/repositories/yum/hosted
|
131
|
-
def create_repository_yum_hosted(name:,
|
132
|
-
parameters = ParameterBuilder.yum_hosted(name,
|
133
|
-
|
196
|
+
def create_repository_yum_hosted(name:, options: {})
|
197
|
+
parameters = ParameterBuilder.yum_hosted(name, options)
|
198
|
+
create('repositories/yum/hosted', parameters)
|
134
199
|
end
|
135
200
|
|
136
201
|
# PUT /service/rest/beta/repositories/yum/hosted/{repositoryName}
|
137
202
|
# POST /service/rest/beta/repositories/yum/proxy
|
203
|
+
def create_repository_yum_proxy(name:, remote_url:, options: {})
|
204
|
+
parameters = ParameterBuilder.yum_proxy(name, remote_url, options)
|
205
|
+
create('repositories/yum/proxy', parameters)
|
206
|
+
end
|
207
|
+
|
138
208
|
# PUT /service/rest/beta/repositories/yum/proxy/{repositoryName}
|
209
|
+
|
210
|
+
private
|
211
|
+
|
212
|
+
def create(endpoint, parameters)
|
213
|
+
@connection.post(
|
214
|
+
endpoint: endpoint,
|
215
|
+
parameters: parameters,
|
216
|
+
api_version: 'beta'
|
217
|
+
)
|
218
|
+
end
|
139
219
|
end
|
140
220
|
end
|
data/lib/nexus_api/version.rb
CHANGED
@@ -1,114 +1,432 @@
|
|
1
1
|
module NexusAPI
|
2
2
|
class ParameterBuilder
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
def self.docker_group(name, members, options)
|
4
|
+
default_options = {
|
5
|
+
'online' => true,
|
6
|
+
'storage' => {
|
7
|
+
'blobStoreName' => 'default',
|
8
|
+
'strictContentTypeValidation' => true
|
9
|
+
},
|
10
|
+
'docker' => {
|
11
|
+
'v1Enabled' => false,
|
12
|
+
'forceBasicAuth' => true
|
13
|
+
},
|
14
|
+
'group' => {}
|
15
|
+
}
|
16
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
17
|
+
end
|
16
18
|
|
17
|
-
def self.docker_hosted(name,
|
18
|
-
{
|
19
|
-
'name' => name,
|
19
|
+
def self.docker_hosted(name, options)
|
20
|
+
default_options = {
|
20
21
|
'online' => true,
|
21
22
|
'storage' => {
|
22
23
|
'blobStoreName' => 'default',
|
23
24
|
'strictContentTypeValidation' => true,
|
24
|
-
'writePolicy' =>
|
25
|
+
'writePolicy' => 'allow_once'
|
26
|
+
},
|
27
|
+
'cleanup' => {
|
28
|
+
'policyNames' => []
|
29
|
+
},
|
30
|
+
'docker' => {
|
31
|
+
'v1Enabled' => false,
|
32
|
+
'forceBasicAuth' => true
|
33
|
+
}
|
34
|
+
}
|
35
|
+
apply_changes(default: default_options, override: options, name: name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.docker_proxy(name, remote_url, options)
|
39
|
+
default_options = {
|
40
|
+
'online' => true,
|
41
|
+
'storage' => {
|
42
|
+
'blobStoreName' => 'default',
|
43
|
+
'strictContentTypeValidation' => true
|
44
|
+
},
|
45
|
+
'proxy' => {
|
46
|
+
'contentMaxAge' => 1440,
|
47
|
+
'metadataMaxAge' => 1440
|
48
|
+
},
|
49
|
+
'negativeCache' => {
|
50
|
+
'enabled' => true,
|
51
|
+
'timeToLive' => 1440
|
52
|
+
},
|
53
|
+
'httpClient' => {
|
54
|
+
'blocked' => false,
|
55
|
+
'autoBlock' => true
|
25
56
|
},
|
26
57
|
'docker' => {
|
27
58
|
'v1Enabled' => false,
|
28
|
-
'forceBasicAuth' => true
|
29
|
-
|
59
|
+
'forceBasicAuth' => true
|
60
|
+
},
|
61
|
+
'dockerProxy' => {
|
62
|
+
'indexType' => 'REGISTRY'
|
30
63
|
}
|
31
64
|
}
|
65
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
32
66
|
end
|
33
67
|
|
34
|
-
def self.
|
35
|
-
{
|
36
|
-
'
|
68
|
+
def self.maven_group(name, members, options)
|
69
|
+
default_options = {
|
70
|
+
'online' => true,
|
71
|
+
'storage' => {
|
72
|
+
'blobStoreName' => 'default',
|
73
|
+
'strictContentTypeValidation' => true
|
74
|
+
},
|
75
|
+
'group' => {}
|
76
|
+
}
|
77
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.maven_hosted(name, options)
|
81
|
+
default_options = {
|
37
82
|
'online' => true,
|
38
83
|
'storage' => {
|
39
84
|
'blobStoreName' => 'default',
|
40
85
|
'strictContentTypeValidation' => true,
|
41
|
-
'writePolicy' =>
|
86
|
+
'writePolicy' => 'allow_once'
|
87
|
+
},
|
88
|
+
'cleanup' => {
|
89
|
+
'policyNames' => []
|
90
|
+
},
|
91
|
+
'maven' => {
|
92
|
+
'versionPolicy' => 'RELEASE',
|
93
|
+
'layoutPolicy' => 'STRICT'
|
94
|
+
}
|
95
|
+
}
|
96
|
+
apply_changes(default: default_options, override: options, name: name)
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.maven_proxy(name, remote_url, options)
|
100
|
+
default_options = {
|
101
|
+
'online' => true,
|
102
|
+
'storage' => {
|
103
|
+
'blobStoreName' => 'default',
|
104
|
+
'strictContentTypeValidation' => true
|
105
|
+
},
|
106
|
+
'cleanup' => {
|
107
|
+
'policyNames' => []
|
108
|
+
},
|
109
|
+
'proxy' => {
|
110
|
+
'contentMaxAge' => 1440,
|
111
|
+
'metadataMaxAge' => 1440
|
112
|
+
},
|
113
|
+
'negativeCache' => {
|
114
|
+
'enabled' => true,
|
115
|
+
'timeToLive' => 1440
|
116
|
+
},
|
117
|
+
'httpClient' => {
|
118
|
+
'blocked' => false,
|
119
|
+
'autoBlock' => true,
|
42
120
|
},
|
43
121
|
'maven' => {
|
44
|
-
'versionPolicy' =>
|
45
|
-
'layoutPolicy' =>
|
122
|
+
'versionPolicy' => 'RELEASE',
|
123
|
+
'layoutPolicy' => 'STRICT'
|
46
124
|
}
|
47
125
|
}
|
126
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
48
127
|
end
|
49
128
|
|
50
|
-
def self.
|
51
|
-
{
|
52
|
-
'
|
129
|
+
def self.npm_group(name, members, options)
|
130
|
+
default_options = {
|
131
|
+
'online' => true,
|
132
|
+
'storage' => {
|
133
|
+
'blobStoreName' => 'default',
|
134
|
+
'strictContentTypeValidation' => true
|
135
|
+
},
|
136
|
+
'group' => {}
|
137
|
+
}
|
138
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.npm_hosted(name, options)
|
142
|
+
default_options = {
|
53
143
|
'online' => true,
|
54
144
|
'storage' => {
|
55
145
|
'blobStoreName' => 'default',
|
56
146
|
'strictContentTypeValidation' => true,
|
57
|
-
'writePolicy' =>
|
147
|
+
'writePolicy' => 'allow_once'
|
148
|
+
},
|
149
|
+
'cleanup' => {
|
150
|
+
'policyNames' => []
|
58
151
|
}
|
59
152
|
}
|
153
|
+
apply_changes(default: default_options, override: options, name: name)
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.npm_proxy(name, remote_url, options)
|
157
|
+
default_options = {
|
158
|
+
'online' => true,
|
159
|
+
'storage' => {
|
160
|
+
'blobStoreName' => 'default',
|
161
|
+
'strictContentTypeValidation' => true
|
162
|
+
},
|
163
|
+
'cleanup' => {
|
164
|
+
'policyNames' => []
|
165
|
+
},
|
166
|
+
'proxy' => {
|
167
|
+
'contentMaxAge' => 1440,
|
168
|
+
'metadataMaxAge' => 1440
|
169
|
+
},
|
170
|
+
'negativeCache' => {
|
171
|
+
'enabled' => true,
|
172
|
+
'timeToLive' => 1440
|
173
|
+
},
|
174
|
+
'httpClient' => {
|
175
|
+
'blocked' => false,
|
176
|
+
'autoBlock' => true,
|
177
|
+
},
|
178
|
+
}
|
179
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
60
180
|
end
|
61
181
|
|
62
|
-
def self.
|
63
|
-
{
|
64
|
-
'
|
182
|
+
def self.pypi_group(name, members, options)
|
183
|
+
default_options = {
|
184
|
+
'online' => true,
|
185
|
+
'storage' => {
|
186
|
+
'blobStoreName' => 'default',
|
187
|
+
'strictContentTypeValidation' => true
|
188
|
+
},
|
189
|
+
'group' => {}
|
190
|
+
}
|
191
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
192
|
+
end
|
193
|
+
|
194
|
+
def self.pypi_hosted(name, options)
|
195
|
+
default_options = {
|
65
196
|
'online' => true,
|
66
197
|
'storage' => {
|
67
198
|
'blobStoreName' => 'default',
|
68
199
|
'strictContentTypeValidation' => true,
|
69
|
-
'writePolicy' =>
|
200
|
+
'writePolicy' => 'allow_once'
|
201
|
+
},
|
202
|
+
'cleanup' => {
|
203
|
+
'policyNames' => []
|
70
204
|
}
|
71
205
|
}
|
206
|
+
apply_changes(default: default_options, override: options, name: name)
|
72
207
|
end
|
73
208
|
|
74
|
-
def self.
|
75
|
-
{
|
76
|
-
'
|
209
|
+
def self.pypi_proxy(name, remote_url, options)
|
210
|
+
default_options = {
|
211
|
+
'online' => true,
|
212
|
+
'storage' => {
|
213
|
+
'blobStoreName' => 'default',
|
214
|
+
'strictContentTypeValidation' => true
|
215
|
+
},
|
216
|
+
'cleanup' => {
|
217
|
+
'policyNames' => []
|
218
|
+
},
|
219
|
+
'proxy' => {
|
220
|
+
'contentMaxAge' => 1440,
|
221
|
+
'metadataMaxAge' => 1440
|
222
|
+
},
|
223
|
+
'negativeCache' => {
|
224
|
+
'enabled' => true,
|
225
|
+
'timeToLive' => 1440
|
226
|
+
},
|
227
|
+
'httpClient' => {
|
228
|
+
'blocked' => false,
|
229
|
+
'autoBlock' => true,
|
230
|
+
},
|
231
|
+
}
|
232
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
233
|
+
end
|
234
|
+
|
235
|
+
def self.raw_group(name, members, options)
|
236
|
+
default_options = {
|
237
|
+
'online' => true,
|
238
|
+
'storage' => {
|
239
|
+
'blobStoreName' => 'default',
|
240
|
+
'strictContentTypeValidation' => true
|
241
|
+
},
|
242
|
+
'group' => {}
|
243
|
+
}
|
244
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
245
|
+
end
|
246
|
+
|
247
|
+
def self.raw_hosted(name, options)
|
248
|
+
default_options = {
|
77
249
|
'online' => true,
|
78
250
|
'storage' => {
|
79
251
|
'blobStoreName' => 'default',
|
80
252
|
'strictContentTypeValidation' => true,
|
81
|
-
'writePolicy' =>
|
253
|
+
'writePolicy' => 'allow_once'
|
254
|
+
},
|
255
|
+
'cleanup' => {
|
256
|
+
'policyNames' => []
|
257
|
+
}
|
258
|
+
}
|
259
|
+
apply_changes(default: default_options, override: options, name: name)
|
260
|
+
end
|
261
|
+
|
262
|
+
def self.raw_proxy(name, remote_url, options)
|
263
|
+
default_options = {
|
264
|
+
'online' => true,
|
265
|
+
'storage' => {
|
266
|
+
'blobStoreName' => 'default',
|
267
|
+
'strictContentTypeValidation' => true
|
268
|
+
},
|
269
|
+
'cleanup' => {
|
270
|
+
'policyNames' => []
|
271
|
+
},
|
272
|
+
'proxy' => {
|
273
|
+
'contentMaxAge' => 1440,
|
274
|
+
'metadataMaxAge' => 1440
|
275
|
+
},
|
276
|
+
'negativeCache' => {
|
277
|
+
'enabled' => true,
|
278
|
+
'timeToLive' => 1440
|
279
|
+
},
|
280
|
+
'httpClient' => {
|
281
|
+
'blocked' => false,
|
282
|
+
'autoBlock' => true,
|
82
283
|
}
|
83
284
|
}
|
285
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
84
286
|
end
|
85
287
|
|
86
|
-
def self.
|
87
|
-
{
|
88
|
-
'
|
288
|
+
def self.rubygems_group(name, members, options)
|
289
|
+
default_options = {
|
290
|
+
'online' => true,
|
291
|
+
'storage' => {
|
292
|
+
'blobStoreName' => 'default',
|
293
|
+
'strictContentTypeValidation' => true
|
294
|
+
},
|
295
|
+
'group' => {}
|
296
|
+
}
|
297
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
298
|
+
end
|
299
|
+
|
300
|
+
def self.rubygems_hosted(name, options)
|
301
|
+
default_options = {
|
89
302
|
'online' => true,
|
90
303
|
'storage' => {
|
91
304
|
'blobStoreName' => 'default',
|
92
305
|
'strictContentTypeValidation' => true,
|
93
|
-
'writePolicy' =>
|
306
|
+
'writePolicy' => 'allow_once'
|
307
|
+
},
|
308
|
+
'cleanup' => {
|
309
|
+
'policyNames' => []
|
94
310
|
}
|
95
311
|
}
|
312
|
+
apply_changes(default: default_options, override: options, name: name)
|
96
313
|
end
|
97
314
|
|
98
|
-
def self.
|
99
|
-
{
|
100
|
-
'
|
315
|
+
def self.rubygems_proxy(name, remote_url, options)
|
316
|
+
default_options = {
|
317
|
+
'online' => true,
|
318
|
+
'storage' => {
|
319
|
+
'blobStoreName' => 'default',
|
320
|
+
'strictContentTypeValidation' => true
|
321
|
+
},
|
322
|
+
'cleanup' => {
|
323
|
+
'policyNames' => []
|
324
|
+
},
|
325
|
+
'proxy' => {
|
326
|
+
'contentMaxAge' => 1440,
|
327
|
+
'metadataMaxAge' => 1440
|
328
|
+
},
|
329
|
+
'negativeCache' => {
|
330
|
+
'enabled' => true,
|
331
|
+
'timeToLive' => 1440
|
332
|
+
},
|
333
|
+
'httpClient' => {
|
334
|
+
'blocked' => false,
|
335
|
+
'autoBlock' => true,
|
336
|
+
},
|
337
|
+
}
|
338
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
339
|
+
end
|
340
|
+
|
341
|
+
def self.yum_group(name, members, options)
|
342
|
+
default_options = {
|
343
|
+
'online' => true,
|
344
|
+
'storage' => {
|
345
|
+
'blobStoreName' => 'default',
|
346
|
+
'strictContentTypeValidation' => true
|
347
|
+
},
|
348
|
+
'group' => {}
|
349
|
+
}
|
350
|
+
apply_changes(default: default_options, override: options, name: name, members: members)
|
351
|
+
end
|
352
|
+
|
353
|
+
def self.yum_hosted(name, options)
|
354
|
+
default_options = {
|
101
355
|
'online' => true,
|
102
356
|
'storage' => {
|
103
357
|
'blobStoreName' => 'default',
|
104
358
|
'strictContentTypeValidation' => true,
|
105
|
-
'writePolicy' =>
|
359
|
+
'writePolicy' => 'allow_once'
|
360
|
+
},
|
361
|
+
'cleanup' => {
|
362
|
+
'policyNames' => []
|
106
363
|
},
|
107
364
|
'yum' => {
|
108
|
-
'repodataDepth' =>
|
109
|
-
'deployPolicy' =>
|
365
|
+
'repodataDepth' => 3,
|
366
|
+
'deployPolicy' => 'STRICT'
|
110
367
|
}
|
111
368
|
}
|
369
|
+
apply_changes(default: default_options, override: options, name: name)
|
370
|
+
end
|
371
|
+
|
372
|
+
def self.yum_proxy(name, remote_url, options)
|
373
|
+
default_options = {
|
374
|
+
'online' => true,
|
375
|
+
'storage' => {
|
376
|
+
'blobStoreName' => 'default',
|
377
|
+
'strictContentTypeValidation' => true
|
378
|
+
},
|
379
|
+
'cleanup' => {
|
380
|
+
'policyNames' => []
|
381
|
+
},
|
382
|
+
'proxy' => {
|
383
|
+
'contentMaxAge' => 1440,
|
384
|
+
'metadataMaxAge' => 1440
|
385
|
+
},
|
386
|
+
'negativeCache' => {
|
387
|
+
'enabled' => true,
|
388
|
+
'timeToLive' => 1440
|
389
|
+
},
|
390
|
+
'httpClient' => {
|
391
|
+
'blocked' => false,
|
392
|
+
'autoBlock' => true,
|
393
|
+
},
|
394
|
+
}
|
395
|
+
apply_changes(default: default_options, override: options, name: name, url: remote_url)
|
396
|
+
end
|
397
|
+
|
398
|
+
|
399
|
+
private
|
400
|
+
|
401
|
+
def self.deep_merge(default_hash, hash)
|
402
|
+
full_hash = {}
|
403
|
+
|
404
|
+
default_hash.each do |key, value|
|
405
|
+
if hash[key].nil?
|
406
|
+
full_hash[key] = value
|
407
|
+
else
|
408
|
+
if value.is_a?(Hash)
|
409
|
+
full_hash[key] = deep_merge(value, hash[key])
|
410
|
+
else
|
411
|
+
full_hash[key] = hash[key]
|
412
|
+
end
|
413
|
+
hash.delete(key)
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
hash.each do |key, value|
|
418
|
+
full_hash[key] = value
|
419
|
+
end
|
420
|
+
|
421
|
+
return full_hash
|
422
|
+
end
|
423
|
+
|
424
|
+
def self.apply_changes(default:, override:, name:, url: nil, members: nil)
|
425
|
+
options = deep_merge(default, override)
|
426
|
+
options['name'] = name
|
427
|
+
options['proxy']['remoteUrl'] = url unless url.nil?
|
428
|
+
options['group']['memberNames'] = members unless members.nil?
|
429
|
+
return options
|
112
430
|
end
|
113
431
|
end
|
114
432
|
end
|