Artifactory Rest API (Быстрый поиск) - Как правильно использовать подстановочные знаки при указании «репо»? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь использовать API быстрого поиска Artifactory (https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-ArtifactSearch(QuickSearch)), чтобы найти URL для данного артефакта, указав для него параметр репо с подстановочным знаком в нем. Я могу получить результат только при репозначение является точным соответствием.

Артефакты загружаются со следующими общими свойствами: build.name (IE: Enterprise-Communications :: NativeVXML-CICD-TestDemo :: v1.2.7rc) build.number (IE:1) тэг build.timestamp (метка времени Unix) (номер версии тэга Git) vcs.revision (думаю, что это git's commit_id)

Я не могу вспомнить все сайты и страницы, которые я проверял, но воттот, который показывает пользовательский интерфейс с использованием * и? в качестве подстановочных знаков. https://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API

Наша компания Artifactory является гео-избыточной и использует соглашение об именах корневых каталогов [Department] - [target] - [environment]что-то вроде «SysDev-general-dev» и «SysDev-general-prod» с конвейерным процессом копирования файла из -dev в -prod после завершения приема QA / UAT.

Артефактзагружено в репутациюo / папка «SysDev-general-dev / clientName / program / artifact.tar», и, очевидно, система добавляет ссылку «- [Site]» в репозиторий («SysDev-general-dev-DEN01»), ноэтот идентификатор сайта виден только при входе в один из пользовательских интерфейсов сайта или использовании поисковых API.


** Примечание: тесты выполнены с использованием Chrome, FireFox и Ansible playbook с модулем 'uri'.

При выполнении быстрого поиска по имени артефакта возвращается ожидаемый список URL-адресов."artifactory / api / search / artifact? name = NativeVXML-CICD-TestDemo.v1.2.7"

{ "results" : [ { "uri" : "http://<DOMAIN>/artifactory/api/storage/Enterprise-Communications-generic-preprod-SWN01/nreddy/NativeVXML-CICD-TestDemo/NativeVXML-CICD-TestDemo.v1.2.7.tar" }, { "uri" : "http://<DOMAIN>/artifactory/api/storage/Enterprise-Communications-generic-prod-SWN01/nreddy/NativeVXML-CICD-TestDemo/NativeVXML-CICD-TestDemo.v1.2.7.tar" } ] }


Использование фильтра репо с точным соответствием возвращает 1 URI, которыйЯ хочу.& repos = Enterprise-Communications-generic-preprod-SWN01 { "results" : [ { "uri" : "http://<DOMAIN>/artifactory/api/storage/Enterprise-Communications-generic-preprod-SWN01/nreddy/NativeVXML-CICD-TestDemo/NativeVXML-CICD-TestDemo.v1.2.7.tar" } ] }


При добавлении "& repos =" с первым фрагментом корневого каталога для фильтрации возврата возвращается пустой набор результатов."artifactory / api / search / artifact? name = NativeVXML-CICD-TestDemo.v1.2.7.tar & repos = Enterprise-Communications-generic-preprod"

{ "results" : [ ] }


Добавить* к имени репо с подстановочными символами: "артефакт / api / search / artifact? name = NativeVXML-CICD-TestDemo.v1.2.7.tar & repos = Enterprise-Communications-generic-preprod" { "results" : [ ] }


Wrapимя репо (с ) в кавычках артефакт / api / search / artifact? name = NativeVXML-CICD-TestDemo.v1.2.7.tar & repos = "Enterprise-Communications-generic-preprod " { "results" : [ ] }


Обернуть имя репо (с *) в кавычки, а URL кодировать: артефакт / api / search / artifact? Name = NativeVXML-CICD-TestDemo.v1.2.7.tar & repos =% 22Enterprise-Communications-generic-preprod%A2% 22 * ​​1044 *


Обернуть имя репо (с?) В кавычки артефакт / api / search / artifact? Name = NativeVXML-CICD-TestDemo.v1.2.7.tar & repos = "Enterprise-Communications-генерическая-preprod?»{ "results" : [ ] }

Playbook:

- name: "Search URL: {{find_uri}} " uri: url: '{{ find_uri }}' method: GET # Default is GET force_basic_auth: yes validate_certs: no return_content: yes timeout: 15 #Default is 30 register: artifact_list

Что я действительно хочу сделать, это передать ссылку на репо с подстановочным знаком и получить обратно только значения URI, которые содержатэто значение.

IE: & repos = "Enterprise-Communications-generic-preprod *"

{ "results" : [ { "uri" : "http://<DOMAIN>/artifactory/api/storage/Enterprise-Communications-generic-preprod-SWN01/nreddy/NativeVXML-CICD-TestDemo/NativeVXML-CICD-TestDemo.v1.2.7.tar" } ] }

1 Ответ

0 голосов
/ 19 апреля 2019

Ну, я бы предпочел не так, но я получил пару простых утверждений Jinja, которые помогут мне отфильтровать возвращенную карту URL.

- set_fact:
    artifact_url: "{{ (artifact_list.content | from_json ).results | map(attribute='uri') | select('match', artifact_root_dir) | list  }}" # will return a list or empty
    failed_when:  not artifact_url or artifact_url | length != 1    #fail when not set/empty or list contains more than 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...