Есть ли способ импортировать импорт AQL-файла извне в artifactory cleanup groovy script
Я использую этот скрипт ниже, чтобы удалить некоторые артефакты в Artifactory на основе определенных критериев по запросу AQL. Я новичок в groovy, но мне хотелось бы узнать, возможно ли импортировать AQL-запрос из внешнего файла, чтобы нам не приходилось каждый раз редактировать этот скрипт для каких-либо изменений в AQL-запросе. Этот приведенный ниже запрос в настоящее время работает, как и ожидалось, но любая помощь будет полезна, если вызвать AQL из внешнего файла.
заранее спасибо
import groovyx.net.http.RESTClient
import groovyx.net.http.HttpResponseException
import org.apache.http.conn.HttpHostConnectException
def query = '**items.find({"repo": "xxx-repo-for-poc","created_by" : "xxx","name" :{"$match": "*.nupkg"})**' // replace this with your AQL query
def artifactoryURL = 'http://Servername:8081/artifactory/' // replace this with Artifactory server
def restClient = new RESTClient(artifactoryURL)
restClient.setHeaders(['Authorization': 'Basic ' + "admin:password".getBytes('iso-8859-1').encodeBase64()]) //replace the 'admin:password' with your own credentials
def dryRun = true //set the value to false if you want the script to actually delete the artifacts
def itemsToDelete = this.&getAqlQueryResult(restClient, query)
if (itemsToDelete != null && itemsToDelete.size() > 0) {
this.&delete(restClient, itemsToDelete, dryRun)
} else {
println('NOTHING TO DELETE')
}
/**
* Send the AQL to Artifactory and collect the response.
*/
public List getAqlQueryResult(RESTClient restClient, String query) {
def response
try {
response = restClient.post(path: 'api/search/aql',
body: query,
requestContentType: 'text/plain'
)
} catch (Exception e) {
println(e.message)
}
if (response != null && response.getData()) {
def results = [];
response.getData().results.each {
results.add(constructPath(it))
}
return results;
} else return null
}
/**
* Construct the full path form the returned items.
* If the path is '.' (file is on the root) we ignores it and construct the full path from the repo and the file name only
*/
public constructPath(groovy.json.internal.LazyMap item) {
if (item.path.toString().equals(".")) {
return item.repo + "/" + item.name
}
return item.repo + "/" + item.path + "/" + item.name
}
/**
* Send DELETE request to Artifactory for each one of the returned items
*/
public delete(RESTClient restClient, List itemsToDelete, def dryRun) {
dryMessage = (dryRun) ? "*** This is a dry run ***" : "";
itemsToDelete.each {
println("Trying to delete artifact: '$it'. $dryMessage")
try {
if (!dryRun) {
restClient.delete(path: it)
}
println("Artifact '$it' has been successfully deleted. $dryMessage")
} catch (HttpResponseException e) {
println("Cannot delete artifact '$it': $e.message" +
", $e.statusCode")
} catch (HttpHostConnectException e) {
println("Cannot delete artifact '$it': $e.message")
}
}
}