Получить конкретные данные из URL-адреса API GitHub через Ansible?

#github #ansible #uri

#github #ansible #uri

Вопрос:

Я пытаюсь получить browser_download_url от https://api.github.com/repos/LIMXTEC/BitCore/releases/latest который содержит gnu_no-wallet.tar.gz

Я действительно новичок в Ansible и пытаюсь понять, как я могу сделать это самым простым способом.

Комментарии:

1. Добро пожаловать в StackOverflow. Несколько советов для вашего будущего вопроса и чтобы избежать отрицательных отзывов: покажите хотя бы то, что вы пробовали до сих пор, мы, как правило, не являемся сервисом «пожалуйста, напишите мне этот код» .

2. Спасибо, вы обратите внимание в будущем.

Ответ №1:

Вы можете достичь того, что ищете, с помощью модуля uri и, исходя из его результатов register , использовать комбинацию a loop и a when , чтобы точно определить искомое значение.

С помощью playbook:

 - hosts: all
  gather_facts: no
      
  tasks:
    - uri: 
        url: https://api.github.com/repos/LIMXTEC/BitCore/releases/latest
      register: github_call
    
    - debug:
        msg: "{{ item.browser_download_url }}"
      loop: "{{ github_call.json.assets }}"
      when: "'gnu_no-wallet.tar.gz' in item.browser_download_url"
      loop_control:
        label: "{{ item.name }}"
 

Вы получите резюме:

 PLAY [all] *******************************************************************************************************

TASK [uri] *******************************************************************************************************
ok: [localhost]

TASK [debug] *****************************************************************************************************
skipping: [localhost] => (item=bitcore-0.90.9.7-win32-setup.exe) 
skipping: [localhost] => (item=bitcore-0.90.9.7-win64-setup.exe) 
skipping: [localhost] => (item=bitcore-arm-linux-gnueabihf.tar.gz) 
skipping: [localhost] => (item=bitcore-i686-pc-linux-gnu.tar.gz) 
skipping: [localhost] => (item=bitcore-qt-win32.exe) 
skipping: [localhost] => (item=bitcore-qt-win64.exe) 
skipping: [localhost] => (item=bitcore-win32-daemon.zip) 
skipping: [localhost] => (item=bitcore-win64-daemon.zip) 
ok: [localhost] => (item=bitcore-x86_64-linux-gnu_no-wallet.tar.gz) => {
    "msg": "https://github.com/LIMXTEC/BitCore/releases/download/0.90.9.7/bitcore-x86_64-linux-gnu_no-wallet.tar.gz"
}
skipping: [localhost] => (item=bitcore-x86_64-linux-gnu_qt5-dev.tar.gz) 
skipping: [localhost] => (item=bitcore-x86_64-linux-gnu_qt5_with-libs.tar.gz) 

PLAY RECAP *******************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
 

Комментарии:

1. Привет, спасибо за вашу помощь и объяснение относительно моих будущих публикаций. Я попробовал ваш код, буде я получаю эту ошибку: ERROR! 'loop_control' is not a valid attribute for a Task The error appears to have been in '/root/ansible/api.yaml': line 9, column 7, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - debug: ^ here что не так?

2. Вероятно, у вас проблема с идентификацией. Имейте в виду, что, как и в Python, в YAML неправильный отступ изменяет значение различных элементов.

3. Я просто скопировал ваш код и вставил его в свой файл yaml, поэтому все идентификаторы также копируются из вашего кода.

4. Какая у вас версия Ansible? В противном случае просто удалите loop_control и label , это просто для уменьшения выходных данных, которые в противном случае могли бы быть загромождены

5. хорошо, обновленный Ansible до 2.9, теперь работает. Извините, моя вина! Большое вам спасибо за ваше время и вашу помощь 🙂