Class: NexusAPI::API
- Inherits:
-
Object
- Object
- NexusAPI::API
- Defined in:
- lib/nexus_api.rb
Constant Summary collapse
- TEAM_CONFIG =
File.join(File.dirname(__dir__), 'team_configs/default.yaml').freeze
Instance Attribute Summary collapse
-
#connection ⇒ Object
Returns the value of attribute connection.
-
#docker ⇒ Object
Returns the value of attribute docker.
-
#team_config ⇒ Object
Returns the value of attribute team_config.
Instance Method Summary collapse
-
#associate_tag(name:, sha1:, repository: nil) ⇒ Object
POST /service/rest/v1/tags/associate/tagName.
-
#create_tag(name:) ⇒ Object
POST /service/rest/v1/tags.
-
#delete_associated_tag(name:, sha1:, repository: nil) ⇒ Object
DELETE /service/rest/v1/tags/associate/tagName.
- #delete_local_docker_image(image:, tag:) ⇒ Object
-
#delete_script(name:) ⇒ Object
GET /service/rest/v1/script/name PUT /service/rest/v1/script/name DELETE /service/rest/v1/script/name.
-
#delete_tag(name:) ⇒ Object
GET /service/rest/v1/tags/name PUT /service/rest/v1/tags/name DELETE /service/rest/v1/tags/name.
- #docker_ready? ⇒ Boolean
- #download(id:, name: nil) ⇒ Object
- #download_docker_component(image:, tag:) ⇒ Object
-
#get_asset_size(asset_url:) ⇒ Object
—CUSTOM FUNCTIONS—.
-
#initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil) ⇒ API
constructor
A new instance of API.
-
#list_asset(id:) ⇒ Object
GET /service/rest/v1/assets/id.
-
#list_assets(repository: nil, paginate: false) ⇒ Object
—ASSETS— GET /service/rest/v1/assets.
-
#list_component(id:) ⇒ Object
GET /service/rest/v1/components/id.
-
#list_components(repository: nil, paginate: false) ⇒ Object
—COMPONENTS— GET /service/rest/v1/components.
-
#list_repositories ⇒ Object
—REPOSITORIES— (This endpoint does not paginate) GET /service/rest/v1/repositories.
- #list_repository_names ⇒ Object
-
#list_scripts ⇒ Object
—SCRIPT— GET /service/rest/v1/script.
-
#list_tags(paginate: false) ⇒ Object
—TAGS— GET /service/rest/v1/tags.
- #local_docker_image_exists?(image:, tag:) ⇒ Boolean
- #paginate? ⇒ Boolean
-
#run_script(name:) ⇒ Object
POST /service/rest/v1/script/name/run.
-
#search_asset(name:, format: nil, repository: nil, sha1: nil, version: nil, paginate: false) ⇒ Object
GET /service/rest/v1/search/assets.
-
#status ⇒ Object
—STATUS— GET /service/rest/v1/status.
-
#status_writable ⇒ Object
GET /service/rest/v1/status/writable.
- #upload_docker_component(image:, tag:) ⇒ Object
-
#upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil) ⇒ Object
POST /service/rest/v1/components.
- #upload_npm_component(filename:, repository: nil, tag: nil) ⇒ Object
- #upload_pypi_component(filename:, repository: nil, tag: nil) ⇒ Object
- #upload_raw_component(filename:, directory:, repository: nil, tag: nil) ⇒ Object
- #upload_rubygems_component(filename:, repository: nil, tag: nil) ⇒ Object
-
#upload_script(filename:) ⇒ Object
POST /service/rest/v1/script.
- #upload_yum_component(filename:, directory:, repository: nil, tag: nil) ⇒ Object
Constructor Details
#initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil) ⇒ API
Returns a new instance of API.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/nexus_api.rb', line 20 def initialize(username:, password:, hostname:, docker_pull_hostname: nil, docker_push_hostname: nil, team_config: nil) @connection = NexusAPI::NexusConnection.new( username: username, password: password, hostname: hostname, ) if docker_pull_hostname.nil? || docker_push_hostname.nil? @docker = nil else @docker = NexusAPI::DockerManager.new( docker: NexusAPI::DockerShell.new, options: { 'username' => username, 'password' => password, 'pull_host' => docker_pull_hostname, 'push_host' => docker_push_hostname, } ) end team_config ||= TEAM_CONFIG @team_config = NexusAPI::ConfigManager.new(config_path: team_config) end |
Instance Attribute Details
#connection ⇒ Object
Returns the value of attribute connection.
14 15 16 |
# File 'lib/nexus_api.rb', line 14 def connection @connection end |
#docker ⇒ Object
Returns the value of attribute docker.
15 16 17 |
# File 'lib/nexus_api.rb', line 15 def docker @docker end |
#team_config ⇒ Object
Returns the value of attribute team_config.
16 17 18 |
# File 'lib/nexus_api.rb', line 16 def team_config @team_config end |
Instance Method Details
#associate_tag(name:, sha1:, repository: nil) ⇒ Object
POST /service/rest/v1/tags/associate/tagName
297 298 299 300 301 302 303 304 305 |
# File 'lib/nexus_api.rb', line 297 def associate_tag(name:, sha1:, repository: nil) repository ||= @team_config.tag_repository search_query = "?"\ "wait=true&"\ "repository=#{repository}&"\ "sha1=#{sha1}" @connection.post(endpoint: "tags/associate/#{name}" + search_query) end |
#create_tag(name:) ⇒ Object
POST /service/rest/v1/tags
282 283 284 285 286 287 |
# File 'lib/nexus_api.rb', line 282 def create_tag(name:) parameters = JSON.dump({ 'name' => name, }) @connection.post(endpoint: 'tags', parameters: parameters) end |
#delete_associated_tag(name:, sha1:, repository: nil) ⇒ Object
DELETE /service/rest/v1/tags/associate/tagName
308 309 310 311 312 313 314 315 |
# File 'lib/nexus_api.rb', line 308 def delete_associated_tag(name:, sha1:, repository: nil) repository ||= @team_config.tag_repository search_query = "?"\ "repository=#{repository}&"\ "sha1=#{sha1}" @connection.delete(endpoint: "tags/associate/#{name}" + search_query) end |
#delete_local_docker_image(image:, tag:) ⇒ Object
350 351 352 |
# File 'lib/nexus_api.rb', line 350 def delete_local_docker_image(image:, tag:) @docker.delete(image_name: image, tag: tag) if docker_ready? end |
#delete_script(name:) ⇒ Object
GET /service/rest/v1/script/name PUT /service/rest/v1/script/name DELETE /service/rest/v1/script/name
210 211 212 |
# File 'lib/nexus_api.rb', line 210 def delete_script(name:) @connection.delete(endpoint: "script/#{name}") end |
#delete_tag(name:) ⇒ Object
GET /service/rest/v1/tags/name PUT /service/rest/v1/tags/name DELETE /service/rest/v1/tags/name
292 293 294 |
# File 'lib/nexus_api.rb', line 292 def delete_tag(name:) @connection.delete(endpoint: "tags/#{name}") end |
#docker_ready? ⇒ Boolean
330 331 332 333 334 335 336 |
# File 'lib/nexus_api.rb', line 330 def docker_ready? if @docker.nil? raise 'Docker push and pull endpoints not initialized!' return false end true end |
#download(id:, name: nil) ⇒ Object
354 355 356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/nexus_api.rb', line 354 def download(id:, name: nil) asset = list_asset(id: id) return false if asset == '' || asset.empty? return false if asset["downloadUrl"].nil? url = asset["downloadUrl"] response = @connection.download(url: url) if name File.write(name, response.body) else File.write(url.split('/').last, response.body) end true end |
#download_docker_component(image:, tag:) ⇒ Object
338 339 340 |
# File 'lib/nexus_api.rb', line 338 def download_docker_component(image:, tag:) @docker.download(image_name: image, tag: tag) if docker_ready? end |
#get_asset_size(asset_url:) ⇒ Object
—CUSTOM FUNCTIONS—
326 327 328 |
# File 'lib/nexus_api.rb', line 326 def get_asset_size(asset_url:) @connection.content_length(asset_url: asset_url) end |
#list_asset(id:) ⇒ Object
GET /service/rest/v1/assets/id
52 53 54 |
# File 'lib/nexus_api.rb', line 52 def list_asset(id:) @connection.get_response(endpoint: "assets/#{id}") end |
#list_assets(repository: nil, paginate: false) ⇒ Object
—ASSETS— GET /service/rest/v1/assets
46 47 48 49 |
# File 'lib/nexus_api.rb', line 46 def list_assets(repository: nil, paginate: false) repository ||= @team_config.assets_repository @connection.get_response(endpoint: "assets?repository=#{repository}", paginate: paginate) end |
#list_component(id:) ⇒ Object
GET /service/rest/v1/components/id
134 135 136 |
# File 'lib/nexus_api.rb', line 134 def list_component(id:) @connection.get_response(endpoint: "components/#{id}") end |
#list_components(repository: nil, paginate: false) ⇒ Object
—COMPONENTS— GET /service/rest/v1/components
65 66 67 68 |
# File 'lib/nexus_api.rb', line 65 def list_components(repository: nil, paginate: false) repository ||= @team_config.components_repository @connection.get_response(endpoint: "components?repository=#{repository}", paginate: paginate) end |
#list_repositories ⇒ Object
—REPOSITORIES— (This endpoint does not paginate) GET /service/rest/v1/repositories
178 179 180 |
# File 'lib/nexus_api.rb', line 178 def list_repositories @connection.get_response(endpoint: 'repositories') end |
#list_repository_names ⇒ Object
182 183 184 |
# File 'lib/nexus_api.rb', line 182 def list_repository_names list_repositories.map { |repo| repo['name'] } end |
#list_scripts ⇒ Object
—SCRIPT— GET /service/rest/v1/script
197 198 199 |
# File 'lib/nexus_api.rb', line 197 def list_scripts @connection.get_response(endpoint: "script") end |
#list_tags(paginate: false) ⇒ Object
—TAGS— GET /service/rest/v1/tags
277 278 279 |
# File 'lib/nexus_api.rb', line 277 def (paginate: false) @connection.get_response(endpoint: 'tags', paginate: paginate) end |
#local_docker_image_exists?(image:, tag:) ⇒ Boolean
346 347 348 |
# File 'lib/nexus_api.rb', line 346 def local_docker_image_exists?(image:, tag:) @docker.exists?(image_name: image, tag: tag) if docker_ready? end |
#paginate? ⇒ Boolean
368 369 370 |
# File 'lib/nexus_api.rb', line 368 def paginate? @connection.paginate? end |
#run_script(name:) ⇒ Object
POST /service/rest/v1/script/name/run
215 216 217 |
# File 'lib/nexus_api.rb', line 215 def run_script(name:) @connection.post(endpoint: "script/#{name}/run", headers: {'Content-Type' => 'text/plain'}) end |
#search_asset(name:, format: nil, repository: nil, sha1: nil, version: nil, paginate: false) ⇒ Object
GET /service/rest/v1/search/assets
224 225 226 227 228 229 230 231 232 |
# File 'lib/nexus_api.rb', line 224 def search_asset(name:, format: nil, repository: nil, sha1: nil, version: nil, paginate: false) repository ||= @team_config.search_repository endpoint = "search/assets?q=#{name}" endpoint += "&format=#{format}" unless format.nil? endpoint += "&repository=#{repository}" unless repository.nil? endpoint += "&sha1=#{sha1}" unless sha1.nil? endpoint += "&version=#{version}" unless version.nil? @connection.get_response(endpoint: endpoint, paginate: paginate) end |
#status ⇒ Object
—STATUS— GET /service/rest/v1/status
261 262 263 |
# File 'lib/nexus_api.rb', line 261 def status @connection.get(endpoint: 'status') end |
#status_writable ⇒ Object
GET /service/rest/v1/status/writable
266 267 268 |
# File 'lib/nexus_api.rb', line 266 def status_writable @connection.get(endpoint: 'status/writable') end |
#upload_docker_component(image:, tag:) ⇒ Object
342 343 344 |
# File 'lib/nexus_api.rb', line 342 def upload_docker_component(image:, tag:) @docker.upload(image_name: image, tag: tag) if docker_ready? end |
#upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil) ⇒ Object
POST /service/rest/v1/components
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/nexus_api.rb', line 71 def upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil) repository ||= @team_config.maven_repository parameters = { 'maven2.groupId' => group_id, 'maven2.artifactId' => artifact_id, 'maven2.version' => version, 'maven2.asset1' => File.open(filename, 'r'), 'maven2.asset1.extension' => filename.split('.').last, } parameters['maven2.tag'] = tag if tag @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {}) end |
#upload_npm_component(filename:, repository: nil, tag: nil) ⇒ Object
84 85 86 87 88 89 90 91 |
# File 'lib/nexus_api.rb', line 84 def upload_npm_component(filename:, repository: nil, tag: nil) repository ||= @team_config.npm_repository parameters = { 'npm.asset' => File.open(filename, 'r'), } parameters['npm.tag'] = tag if tag @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {}) end |
#upload_pypi_component(filename:, repository: nil, tag: nil) ⇒ Object
93 94 95 96 97 98 99 100 |
# File 'lib/nexus_api.rb', line 93 def upload_pypi_component(filename:, repository: nil, tag: nil) repository ||= @team_config.pypi_repository parameters = { 'pypi.asset' => File.open(filename, 'r'), } parameters['pypi.tag'] = tag if tag @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {}) end |
#upload_raw_component(filename:, directory:, repository: nil, tag: nil) ⇒ Object
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/nexus_api.rb', line 102 def upload_raw_component(filename:, directory:, repository: nil, tag: nil) repository ||= @team_config.raw_repository parameters = { 'raw.directory' => directory, 'raw.asset1' => File.open(filename, 'r'), 'raw.asset1.filename' => filename.split('/').last, } parameters['raw.tag'] = tag if tag @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {}) end |
#upload_rubygems_component(filename:, repository: nil, tag: nil) ⇒ Object
113 114 115 116 117 118 119 120 |
# File 'lib/nexus_api.rb', line 113 def upload_rubygems_component(filename:, repository: nil, tag: nil) repository ||= @team_config.rubygems_repository parameters = { 'rubygems.asset' => File.open(filename, 'r'), } parameters['rubygems.tag'] = tag if tag @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {}) end |
#upload_script(filename:) ⇒ Object
POST /service/rest/v1/script
202 203 204 205 |
# File 'lib/nexus_api.rb', line 202 def upload_script(filename:) file = File.read(filename) @connection.post(endpoint: "script", parameters: file) end |
#upload_yum_component(filename:, directory:, repository: nil, tag: nil) ⇒ Object
122 123 124 125 126 127 128 129 130 131 |
# File 'lib/nexus_api.rb', line 122 def upload_yum_component(filename:, directory:, repository: nil, tag: nil) repository ||= @team_config.yum_repository parameters = { 'yum.directory' => directory, 'yum.asset' => File.open(filename, 'r'), 'yum.asset.filename' => filename.split('/').last, } parameters['yum.tag'] = tag if tag @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {}) end |