Ansible конвертировать запрос curl с --data-urlencode - PullRequest
0 голосов
/ 31 августа 2018

Я хочу загрузить HTML-файл в GitLab через его REST API с Ansible.

Мой запрос curl работает нормально:

 curl -H "Content-Type: application/x-www-form-urlencoded" --request POST  --header 'PRIVATE-TOKEN: my_tocken' --data-urlencode content@/tmp/report.html 'https://my_server/api/v4/projects/3/repository/files/my_customer%2Freportname%2Ehtml?branch=master&commit_message=create%20a%20new%20report' -k

Как перевести его с помощью модуля uri?

uri:
  url: "https://my_server/api/v4/projects/3/repository/files/my_customer%2Freportname%2Ehtml?branch=master&commit_message=create%20a%20new%20report"
  validate_certs: no
  method: POST
  headers:
     Content-Type: application/x-www-form-urlencoded
     PRIVATE-TOKEN: "my_tocken"
  status_code: 200
  body: "data-urlencode=content@/tmp/report.html"

Я получаю:

 "json": {
    "error": "content is missing"
    },

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Спасибо Techraf, вы правы.

Правильный запрос:

 - name:  Gitlab | upload file
       uri:
         url: "https://my_server/api/v4/projects/3/repository/files/my_customer%2Freportname%2Ehtml?branch=master&commit_message=create%20a%20new%20report%20for%20server"
        validate_certs: no
         method: POST
         headers:
            Content-Type: application/x-www-form-urlencoded
            PRIVATE-TOKEN: "my_tocken"
      status_code: 201
      body: "content={{ lookup('file', '/tmp/report.html')|urlencode }}"
    delegate_to: localhost
0 голосов
/ 31 августа 2018

Если /tmp/report.html на машине контроллера Ansible, то:

uri:
  url: "https://my_server/api/v4/projects/3/repository/files/my_customer%2Freportname%2Ehtml?branch=master&commit_message=create%20a%20new%20report"
  validate_certs: no
  method: POST
  headers:
     Content-Type: application/x-www-form-urlencoded
     PRIVATE-TOKEN: "my_tocken"
  status_code: 200
  body: content={{ lookup('file', '/tmp/report.html') | urlencode }}

Если он находится на другом объекте, вам нужно slurp сначала данные.

...