Проблемы с вставкой токена JWT в Ansible Playbook

#ansible #yaml #jwt-auth

#ansible #yaml #jwt

Вопрос:

Я пытаюсь включить токен JWT в свой Ansible playbook для доступа к конечной точке API. Вот плейбук:

 ---
 - name: Request ex API
   hosts: localhost
   connection: local
   tasks:
      - name: Get Ports
        uri:
            method: GET
            url: "https://sandboxapi.domain.com/ex/v3/port/userport"
            return_content: yes
        headers:
            Accept: application/json
            Authorization: "JWT {{token.json.token}}"
        register: response
      - debug:
            msg: "{{ response.content }}"
  

Однако я получил это сообщение об ошибке:

 lw@APMBC02D20RHMD6R playbooks % ansible-playbook ex.yml
ERROR! conflicting action statements: uri, headers
  

Ошибка, по-видимому, находится в ‘/ Users / lw / Ansible-EX / playbooks / ex.yml’: строка 6, столбец 9, но может
быть в другом месте файла в зависимости от конкретной синтаксической проблемы.

Нарушающая строка выглядит так:

    tasks:
      - name: Get Ports
        ^ here
  

Я не уверен в том, как я могу включить токен JWT в playbook. Кто-нибудь может помочь, предоставив рекомендации о том, как я могу включить токен JWT в playbook?

Ответ №1:

Давайте посмотрим на это сообщение об ошибке:

ОШИБКА! конфликтующие инструкции действий: uri, заголовки

Мы можем видеть uri , что и headers то, что он говорит, противоречат друг другу в качестве ключей определения задачи здесь:

    tasks:
      - name: Get Ports
        uri:
            ...
        headers:
            ...
  

Ansible рассматривает оба этих действия как отдельные действия над одной и той же задачей и не знает, что с этим делать. Вместо этого вам нужно передать headers модуль в качестве опции uri .

В удивительном мире YAML это означает изменение некоторых пробелов:

    tasks:
      - name: Get Ports
        uri:
            method: GET
            url: "https://sandboxapi.domain.com/ex/v3/port/userport"
            return_content: yes
            headers:
                Accept: application/json
                Authorization: "JWT {{token.json.token}}"
  

Ответ №2:

Ваш отступ неверен. Попробуйте:

 ---
- name: Request ex API
  hosts: localhost
  connection: local
  tasks:
    - name: Get Ports
      uri:
        method: GET
        url: "https://sandboxapi.domain.com/ex/v3/port/userport"
        return_content: yes
        headers:
          Accept: application/json
          Authorization: "JWT {{ token.json.token }}"
        register: response

    - debug:
        msg: "{{ response.content }}"
  

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

1. Спасибо @Kevin C — отступ исправлен. Кстати, как мне получить переменную для обработки токена JWT от POSTMAN?