Я устанавливаю переменную из предыдущего воспроизведения, которая собирает значение (целое число), а затем вызываю ее в следующей задаче, используя модуль uri, чтобы передать ее через API. Но я всегда получаю сообщение об ошибке 422: «Значение должно быть целым».
- name: Deploy Staging Blueprint
local_action:
module: uri
url: "https://{{ server_address }}/api/application/{{app_id}}/deploy"
method: PUT
status_code: 202
validate_certs: no
headers:
Content-Type: 'application/json'
Accept: 'application/json'
AUTHTOKEN: "{{ server_session.token }}"
body_format: json
body:
version: "{{ staging.json.version }}"
run_once: true
register: deploy
changed_when: deploy|succeeded
Сначала я попытался преобразовать его в целое число с помощью "| int", но это не сработало. Затем я попробовал "| type_debug" и подтвердил, что переменная является целым числом.
Но я все равно получаю эту ошибку. Если я заменю переменную необработанным целым числом, она будет работать нормально. При использовании подробного вывода все равно кажется, что значение передается в виде строки.
"invocation": {
"module_args": {
"attributes": null,
"backup": null,
"body": {
"version": "48"
},
"body_format": "json",
Любая идея, что мне здесь не хватает или как я могу это обойти? В настоящее время я использую Ansible 2.4.0 для этого проекта.
Модуль ури может принимать предварительно отформатированное тело в формате JSON. Пытаться:
- name: Deploy Staging Blueprint
local_action:
module: uri
url: "https://{{ server_address }}/api/application/{{app_id}}/deploy"
method: PUT
status_code: 202
validate_certs: no
headers:
Content-Type: 'application/json'
Accept: 'application/json'
AUTHTOKEN: "{{ server_session.token }}"
body_format: json
body: '{ "version": {{ staging.json.version }} }'
run_once: true
register: deploy
changed_when: deploy|succeeded
Да, это действительно странное поведение Ansible по умолчанию. Он отображает каждое значение как строку независимо от его исходного типа. Таким образом, вы получаете staging.json.version
, являющийся строкой, а не числовым типом.
Это поведение можно изменить в последних выпусках Ansible с помощью флага jina2_nativeглобально.