Artifactory - ошибки Tomcat при выполнении вызовов REST

Я пытаюсь выполнить определенные действия с моим экземпляром Artifactory с помощью REST API, но когда я делаю определенные вызовы, я получаю следующую ошибку Tomcat:

HTTP Status 404
The requested resource is not available.

Я делаю это с помощью скрипта Python, и мой экземпляр Artifactory v4.2.2 rev 40049 развернут с использованием пакета RPM через эти инструкции.

Проблема возникает только тогда, когда я сделал определенные вызовы REST, которые используют URI api/ вместо URI artifactory/. Вот несколько примеров того, что я имею в виду:

Я могу успешно развернуть артефакт с помощью этой команды:

>>import requests
>>session = requests.session()
>>response = session.put('http://artifactory.domain.com/artifactory/repo/test.txt')

Ответ:

>>response.status_code
201
>>response.text
u'{\n  "repo" : "repo",\n  "path" : "/",\n  "created" : "2015-11-17T12:10:12.679-07:00",\n  "createdBy" : "anonymous",\n  "downloadUri" : "http://artifactory.domain.com:8081/artifactory/repo/test.txt",\n  "mimeType" : "application/octet-stream",\n  "size" : "0",\n  "checksums" : {\n    "sha1" : "da39a3ee5e6b4b0d3255bfef95601890afd80709",\n    "md5" : "d41d8cd98f00b204e9800998ecf8427e"\n  },\n  "originalChecksums" : {\n  },\n  "uri" : "http://artifactory.domain.com:8081/artifactory/repo/test.txt"\n}'

Но если я попытаюсь сделать что-то вроде копирования или перемещения, использующего URI api/, я получу сообщение об ошибке Tomcat:

>>response = session.post('http://artifactory.domain.com/api/copy/repo/test.txt?to=/repo/folder/test.txt')
>>response.status_code
404
>>response.text
u'<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.22 - Error report</title><style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> </head><body><h1>HTTP Status 404 - /api/copy/repo/test.txt</h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u>/api/copy/repo/test.txt</u></p><p><b>description</b> <u>The requested resource is not available.</u></p><hr class="line"><h3>Apache Tomcat/8.0.22</h3></body></html>'

Я искал в Интернете и обнаружил, что у некоторых людей были проблемы resource not available, когда папка приложения имела неправильные разрешения, но, насколько я могу судить с веб-сайта JFrog, мои разрешения для папки правильные.

Я также проверил несколько файлов журналов в системе, и они даже не содержат никаких ссылок на вызовы REST, которые я сделал, что привело к ошибке Tomcat:

Журнал Каталины:

/var/opt/jfrog/artifactory/logs/catalina/catalina.out

2015-11-17 12:16:47,434 [http-nio-8081-exec-5] [INFO ] (o.a.e.UploadServiceImpl:453) - Deploy to 'repo:test.txt' Content-Length: 6

Основной журнал Artifactory:

/var/opt/jfrog/artifactory/logs/artifactory.log

2015-11-17 12:16:47,434 [http-nio-8081-exec-5] [INFO ] (o.a.e.UploadServiceImpl:453) - Deploy to 'repo:test.txt' Content-Length: 6

Вот содержимое каталога /var/opt/jfrog/artifactory:

drwxrwxr-x 3 artifactory artifactory 4096 Sep 22 02:00 backup
drwxrwxr-x 5 artifactory artifactory 4096 Nov  6 08:06 data
lrwxrwxrwx 1 artifactory artifactory   26 Nov  6 08:06 etc -> /etc/opt/jfrog/artifactory
drwxrwxr-x 3 artifactory artifactory 4096 Sep 21 13:24 logs
lrwxrwxrwx 1 artifactory artifactory   27 Nov  6 08:06 misc -> /opt/jfrog/artifactory/misc
drwxrwxr-x 2 artifactory artifactory 4096 Nov  6 09:23 temp
lrwxrwxrwx 1 artifactory artifactory   29 Nov  6 08:06 tomcat -> /opt/jfrog/artifactory/tomcat
lrwxrwxrwx 1 artifactory artifactory   30 Nov  6 08:06 webapps -> /opt/jfrog/artifactory/webapps
drwxrwxr-x 3 artifactory artifactory 4096 Sep 21 13:24 work

Любые идеи относительно того, почему одни вызовы REST успешны, а другие нет?


person stimko68    schedule 17.11.2015    source источник


Ответы (1)


Итак, очевидно, причина, по которой мой API не работает для копирования и перемещения и т. д., заключается в том, что мне нужно включить artifactory/ перед префиксом api/ в строку URI, например:

>>response = session.post('http://artifactory.domain.com/artifactory/api/copy/repo/test.txt?to=/repo/folder/test.txt')
>>response.status_code
200
>>response.text
u'{\n  "messages" : [ {\n    "level" : "INFO",\n    "message" : "copying repo:test.txt to repo:folder/test.txt completed successfully, 1 artifacts and 0 folders were copied"\n  } ]\n}'
person stimko68    schedule 17.11.2015