我有一个 Ansible 自动化平台 (AAP) 服务器。我有一个任务,需要通过 Rest API 在 AAP 的清单中创建一个新主机。我正在关注此文档。这是我的任务:
- name: Add new host
ansible.builtin.uri:
url: "https://{{ aap_fqdn }}/api/v2/inventories/{{ inventory }}/hosts/"
user: '{{ user }}'
password: '{{ pass }}'
method: POST
body:
name: "host_1"
variables:
ansible_host: "192.168.0.1"
force_basic_auth: yes
status_code: 200
body_format: json
validate_certs: no
此任务失败并出现以下错误:
"json": {
"variables": [
"Not a valid string."
]
},
"msg": "Status code was 400 and not [200]: HTTP Error 400: Bad Request",
我不明白当文档说:
时“变量”如何可能是无效字符串使用以下主机字段向此资源发出 POST 请求,以创建与此清单关联的新主机。
:以 JSON 或 YAML 格式托管变量。 (json,默认=``)variables
我也尝试过这个方法:
- name: Add new host
ansible.builtin.uri:
url: "https://{{ aap_fqdn }}/api/v2/inventories/{{ inventory }}/hosts/"
user: '{{ user }}'
password: '{{ pass }}'
method: POST
body:
name: "host_1"
ansible_host: "192.168.0.1"
force_basic_auth: yes
status_code: 200
body_format: json
validate_certs: no
这实际上适用于创建主机,但它不包含
ansible_host
变量并返回状态代码 201 而不是 200。
我也尝试过这个方法:
- name: Add new host
ansible.builtin.uri:
url: "https://{{ aap_fqdn }}/api/v2/inventories/{{ inventory }}/hosts/"
user: '{{ user }}'
password: '{{ pass }}'
method: POST
body:
name: "host_1"
variables: 'ansible_host=192.168.0.1'
force_basic_auth: yes
status_code: 200
body_format: json
validate_certs: no
这给了我这个错误:
"json": {
"variables": [
"Cannot parse as JSON (error: Expecting value: line 1 column 1 (char 0)) or YAML (error: Input type `str` is not a dictionary)."
]
}
第一种方法似乎是正确的方法,所以我不明白为什么它不起作用。我做错了什么以及实现此目标的正确方法是什么?
我有类似的问题,但能够克服同样的问题。
错误确切地说“不是有效的字符串”
将变量值作为字符串传递,它将起作用