Ошибка HTTP 400 с использованием модуля URI Ansibles с gitlab api - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь зафиксировать проект gitlab, используя модуль ansibles uri и gitlab api .

Конечная цель - переместить JSON вШаблон и фиксация информации с нескольких машин в разных файлах в проекте gitlab.

Но сейчас я застрял, используя модуль uri propperly.

Я смог зафиксировать, используя gitlab api и curlна поле ansible linux.

PAYLOAD=$(cat << 'JSON'
{
  "branch": "master",
  "commit_message": "some commit message",
  "actions": [
    {
      "action": "create",
      "file_path": "Leer/test",
      "content": "some content"
    }
]
}
JSON
)
curl --request POST --header "PRIVATE-TOKEN: xxxxxxxxxxxxxxxx" --header "Content-Type: application/json" --data "$PAYLOAD" http://gitlab/api/v4/projects/2/repository/commits

И перевел его в следующую gible-commit роль ANSI:

- name: commit to gitlab
  uri:
    url: http://gitlab/api/v4/projects/2/repository/commits
    method: POST
    body_format: json
    headers:
      PRIVATE-TOKEN: "xxxxxxxxxxxxxxxx"
    body: |
      '{
        "branch": "master",
        "commit_message": "some ansible commit message",
        "actions": [
         {
           "action": "create",
           "file_path": "Leer/test2",
           "content": "some new content"
         }
        ]
      }'

Использовал роль в git.yml Playbook:

---
- hosts: 10.101.127.116
  connection: local
  gather_facts: no
  become: true
  roles:
  - git-commit

И запустите Playbook:

ansible-playbook -k git.yml

Но я получаю следующую ошибку http 400:

fatal: [10.101.127.116]: FAILED! => 
{
"changed": false,
"connection": "close",
"content": "", 
"content_length": "0", 
"content_type": "text/html; charset=utf-8", "date": 
"Thu, 18 Apr 2019 13:11:13 GMT", 
"msg": "Status code was 400 and not [200]: HTTP Error 400: Bad Request", "redirected": false, 
"server": "nginx", 
"status": 400, 
"url": "http://gitlab/api/v4/projects/2/repository/commits", 
"x_request_id": "WNfjPOBkVk5", "x_runtime": "0.002530"
}

Я ценю любую помощь

1 Ответ

1 голос
/ 18 апреля 2019

Вы неверно используете YAML-кавычки:

   body: |
      '{

Означает, что body - это буквально символ одинарной кавычки, а затем открытая скобка, потому что символ yaml | сам по себе является конструкцией кавычек..

Вы можете либо удалить обе одинарные кавычки (символ одинарной кавычки недопустим в JSON), либо удалить трубу и затем переместить одинарную кавычку до уровня body:

.

Вы можете использовать инструмент преобразования YAML в JSON, чтобы увидеть, как будет выглядеть документ;Есть несколько онлайн, и remarshal , который работает на вашем компьютере

...