nexus_api 1.6.1 → 2.0.0
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.
- 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
|