import groovy.json.JsonOutput def getResourceHREF( String credentials, String resourceEndpoint, String resourceName, String pulpHost = 'pulp.cadoles.com' ) { def response = httpRequest authentication: credentials, url: "https://${pulpHost}/pulp/api/v3/${resourceEndpoint}", httpMode: 'GET', ignoreSslErrors: true, validResponseCodes: "200" def jsonResponse = readJSON text: response.content def resource = jsonResponse.results.find { it -> it.name == resourceName} if (resource) { return resource.pulp_href } return null } def waitForTaskCompletion( String credentials, String taskHREF, String pulpHost = 'pulp.cadoles.com' ) { def status = '' def created_resources = [] while (status != 'completed') { def response = httpRequest authentication: credentials, url: "https://${pulpHost}${taskHREF}", httpMode: 'GET', ignoreSslErrors: true, validResponseCodes: "200" def jsonResponse = readJSON text: response.content status = jsonResponse.state if (status == 'completed') { return jsonResponse.created_resources } else if (!(status in ['running','waiting'])) { break } sleep(10) } throw new Exception("Task failed:" + jsonResponse.error.description) } def exportPackages( String credentials, List packages = [], String pulpHost = 'pulp.cadoles.com' ) { def exportTasks = [] packages.each { def response = httpRequest authentication: credentials, url: "https://${pulpHost}/pulp/api/v3/content/deb/packages/", httpMode: 'POST', ignoreSslErrors: true, multipartName: "file", timeout: 900, uploadFile: "${it}", validResponseCodes: "202" def jsonResponse = readJSON text: response.content exportTasks << jsonResponse['task'] } return exportTasks } def createRepository( String credentials, String name, String pulpHost = 'pulp.cadoles.com' ) { def repositoryName = ["name": name] def postBody = JsonOutput.toJson(repositoryName) def response = httpRequest authentication: credentials, url: "https://${pulpHost}/pulp/api/v3/repositories/deb/apt/", httpMode: 'POST', requestBody: postBody, contentType: 'APPLICATION_JSON', ignoreSslErrors: true, validResponseCodes: "201" def jsonResponse = readJSON text: response.content return jsonResponse.pulp_href } def getRepositoryHREF( String credentials, String repository = 'Cadoles4MSE unstable' ) { def repositoryHREF = getResourceHREF(credentials, 'repositories/deb/apt/', repository) if (repositoryHREF) { return repositoryHREF } else { return createRepository(credentials, repository) } } def addToRepository( String credentials, List packagesHREF, String repositoryHREF, String pulpHost = 'pulp.cadoles.com' ) { def packagesHREFURL = ["add_content_units": packagesHREF.collect { "https://$pulpHost$it" }] def postBody = JsonOutput.toJson(packagesHREFURL) def response = httpRequest authentication: credentials, url: "https://${pulpHost}${repositoryHREF}modify/", httpMode: 'POST', requestBody: postBody, contentType: 'APPLICATION_JSON', ignoreSslErrors: true, validResponseCodes: "202" def jsonResponse = readJSON text: response.content return waitForTaskCompletion(credentials, jsonResponse.task) } def publishRepository( String credentials, String repositoryHREF, String signing_service = null, String pulpHost = 'pulp.cadoles.com' ) { def postContent = ["repository": repositoryHREF, "simple": true] if (signing_service) { def signingServiceHREF = getResourceHREF(credentials, 'signing-services/', signing_service) if (signingServiceHREF) { postContent.put("signing_service", "https://${pulpHost}${signingServiceHREF}") } } def postBody = JsonOutput.toJson(postContent) def response = httpRequest authentication: credentials, url: "https://${pulpHost}/pulp/api/v3/publications/deb/apt/", httpMode: 'POST', requestBody: postBody, contentType: 'APPLICATION_JSON', ignoreSslErrors: true, validResponseCodes: "202" def jsonResponse = readJSON text: response.content return waitForTaskCompletion(credentials, jsonResponse.task) } def distributePublication( String credentials, String publicationHREF, String distributionName, String basePath, String contentGuard = null, String pulpHost = 'pulp.cadoles.com' ) { def httpMode = '' def url = '' def distributionHREF = getResourceHREF(credentials, 'distributions/deb/apt/', distributionName) if (distributionHREF) { httpMode = 'PUT' url = distributionHREF } else { httpMode = 'POST' url = '/pulp/api/v3/distributions/deb/apt/' } def bodyContent = ["publication": publicationHREF, "name": distributionName, "base_path": basePath] if (contentGuard) { def contentGuardHREF = getResourceHREF(credentials, 'contentguards/core/rbac/', contentGuard) if (contentGuardHREF) { bodyContent.put('content_guard', "https://${pulpHost}${contentGuardHREF}") } } def postBody = JsonOutput.toJson(bodyContent) response = httpRequest authentication: credentials, url: "https://${pulpHost}${url}", httpMode: httpMode, requestBody: postBody, contentType: 'APPLICATION_JSON', ignoreSslErrors: true, validResponseCodes: "202" jsonResponse = readJSON text: response.content if (distributionHREF) { waitForTaskCompletion(credentials, jsonResponse.task) return [url] } else { return waitForTaskCompletion(credentials, jsonResponse.task) } } def getDistributionURL( String credentials, String resourceHREF, String pulpHost = 'pulp.cadoles.com' ) { def response = httpRequest authentication: credentials, url: "https://${pulpHost}${resourceHREF}", httpMode: 'GET', ignoreSslErrors: true, validResponseCodes: "200" def jsonResponse = readJSON text: response.content println(jsonResponse) return jsonResponse.base_url }