Отладка http постовых запросов ansible - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть следующая задача в одной из моих доступных книг:


    - name: Generate vault token
      uri:
        url: "{{vault_address}}/v1/auth/github/login"
        method: POST
        body: "{ \"token\": \"{{ token }}\" }"
        validate_certs: no
        body_format: json
      register: vault_token

    - name: debug vault
      debug:
        msg: "{{vault_address}}/v1/{{vault_path}}/db2w-flex/{{region_name}}"

    - name: Create secret in vault
      uri:
        url: "{{vault_address}}/v1/{{vault_path}}/db2w-flex/{{region_name}}"
        method: POST
        body: '{ "secret_access_key": "{{ (new_access_key.stdout |from_json).AccessKey.SecretAccessKey }}", "access_key_id": "{{ (new_access_key.stdout |from_json).AccessKey.AccessKeyId }}" }'
        validate_certs: no
        status_code: 204
        headers:
          X-VAULT-TOKEN: '{{ vault_token.json.auth.client_token }}'
        body_format: json        

Эта задача продолжает сбой с:

fatal: [localhost]: FAILED! => {"cache_control": "no-store", "changed": false, "content": "{\"errors\":[\"missing client token\"]}\n", "content_length": "36", "content_type": "application/json", "date": "Tue, 02 Apr 2019 20:16:03 GMT", "failed": true, "json": {"errors": ["missing client token"]}, "msg": "Status code was not [204]", "redirected": false, "status": 400}

Эта же задача отлично работает на другом хосте (a kubernetesPOD).Я запускаю это в новой системе (Docker-контейнер).Токен клиента сформирован правильно.Я могу сделать POST через curl, поэтому нет проблем с сетью на контейнере.Есть ли способ отладки, какие заголовки передаются, какой URL-адрес и т. Д.?Я не знаю, чего не хватает.

Я не пользуюсь хранилищем cli.Все основано на HTTP.

После добавления -vvvv вот журнал:

TASK [Create secret in vault] **************************************************
task path: /deployment/updateVault.yml:16
ESTABLISH LOCAL CONNECTION FOR USER: root
127.0.0.1 EXEC ( umask 22 && mkdir -p "$( echo $HOME/.ansible/tmp/ansible-tmp-1554241833.81-120109582683210 )" && echo "$( echo $HOME/.ansible/tmp/ansible-tmp-1554241833.81-120109582683210 )" )
127.0.0.1 PUT /tmp/tmpDgx1F_ TO /root/.ansible/tmp/ansible-tmp-1554241833.81-120109582683210/uri
127.0.0.1 EXEC LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1554241833.81-120109582683210/uri; rm -rf "/root/.ansible/tmp/ansible-tmp-1554241833.81-120109582683210/" > /dev/null 2>&1
fatal: [localhost]: FAILED! => {"cache_control": "no-store", "changed": false, "content": "{\"errors\":[\"missing client token\"]}\n", "content_length": "36", "content_type": "application/json", "date": "Tue, 02 Apr 2019 21:50:34 GMT", "failed": true, "invocation": {"module_args": {"backup": null, "body": {"access_key_id": "xxxxxxxxxxxx", "secret_access_key": "5ovB684peTr8YpnNMQBn+xxxxxxxxxxx+"}, "body_format": "json", "content": null, "creates": null, "delimiter": null, "dest": null, "directory_mode": null, "follow": false, "follow_redirects": "safe", "force": null, "force_basic_auth": false, "group": null, "headers": {"X-VAULT-TOKEN": "eee90f1c-3c9e-edaf-32e6-b6cexxxxx"}, "method": "POST", "mode": null, "owner": null, "password": null, "regexp": null, "remote_src": null, "removes": null, "return_content": false, "selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, "status_code": ["204"], "timeout": 30, "url": "https://vserv-us.sos.ibm.com:8200/v1/generic/user/akanksha-jain/db2w-flex/us", "user": null, "validate_certs": false}, "module_name": "uri"}, "json": {"errors": ["missing client token"]}, "msg": "Status code was not [204]", "redirected": false, "status": 400}

Я попытался запустить скручивание со всеми вышеупомянутыми деталями из того же модуля, и все прошло нормально.

Ответы [ 2 ]

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

Мне удалось обойти эту проблему с доступной версией 2.7.9 Я был на 2.0.0.2

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

Добавьте -vvvv в командную строку для отладки.

Как вы указали body_format: json, вы можете упростить вашу body часть:

- name: Generate vault token
  uri:
    url: "{{vault_address}}/v1/auth/github/login"
    method: POST
    body:
      token: mytoken
    validate_certs: no
    body_format: json
...