如何在 AAP API 中将带有变量的新主机发布到库存?

问题描述 投票:0回答:1

我有一个 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 请求,以创建与此清单关联的新主机。

  • variables
    :以 JSON 或 YAML 格式托管变量。 (json,默认=``)

我也尝试过这个方法:

- 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)."
  ]
}

第一种方法似乎是正确的方法,所以我不明白为什么它不起作用。我做错了什么以及实现此目标的正确方法是什么?

ansible
1个回答
0
投票

我有类似的问题,但能够克服同样的问题。

错误确切地说“不是有效的字符串”

将变量值作为字符串传递,它将起作用

© www.soinside.com 2019 - 2024. All rights reserved.