Translate curl——数据urlencode到Ansible uri模块

Translate curl——数据urlencode到Ansible uri模块,curl,ansible,Curl,Ansible,您将如何将此curl请求转换为ansible uri模块 curl -G http://localhost:8086/query?u=admin&p=password \ --data-urlencode "q=SHOW databases" 我不知道如何或将如何放置--data urlencode部分 这就是我目前所拥有的(不工作): 我得到的错误是: “错误”:“缺少必需的参数\”q“ 但是,以下方法可行: - name: Create influx users with PO

您将如何将此
curl
请求转换为ansible uri模块

curl -G http://localhost:8086/query?u=admin&p=password \
  --data-urlencode "q=SHOW databases"
我不知道如何或将如何放置
--data urlencode
部分

这就是我目前所拥有的(不工作):

我得到的错误是:

“错误”:“缺少必需的参数\”q“

但是,以下方法可行:

- name: Create influx users with POST
  uri:
    url: "http://localhost:8086/ping"
    method: GET
    status_code: 204
编辑:最终工作解决方案

这个工作示例将向您展示XDB的当前用户

- name: Create influx users with POST
   uri:
     url: "http://localhost:8086/query?q={{'SHOW USERS '|urlencode}}"
     method: GET
     user: admin
     password: password
Jinja有一个过滤器…但还有另一个问题。
GET
请求没有主体;运行时:

curl -G 'http://localhost:8086/query?u=admin&p=password' --data-urlencode "q=SHOW databases"
实际情况是:

GET /query?u=admin&p=password&q=SHOW%20databases
因此,您需要像这样重写您的任务:

- name: Create influx users with POST
   uri:
     url: "http://localhost:8086/query/?u=admin&p=password?{{ 'q=SHOW databases'|urlencode }}"
     method: GET

您可以使用方法POST将
uri
body\u格式设置为
formurlencoded

- name: Show Databases
  uri:
    url: "http://localhost:8086/query"
    user: admin
    password: password
    method: POST
    body: 
      q: SHOW DATABASES
    body_format: form-urlencoded

这只会将主体更改为“body”:“q%3DSHOW%20databases”,而不是“body”:“q=show databases”,并且我仍然得到:“error”:“缺少必需的参数\“q\”。结果是,
-G
+
--data urlencode
最终只是将“body”添加为附加查询参数。请参阅答案中的更新。当我使用
uri:'http://localhost:8086/query?q=HELP“
,我得到了正确的响应,但当我使用
url:http://localhost:8086/query?{{'q=SHOW databases'| urlencode}}
我仍然得到
'缺少的参数\q
Nginx日志:
“GET/query?q%3DSHOW%20数据库
但是通过curl正确的一个看起来像:
”GET/query?p=%5编辑的%5D&q=show+databases&u=admin
url:“-如果我将空间硬编码为“%20”,这是可行的,但是如果你将
q=
移到
{…}
块之外,它会起作用吗?
url:”http://localhost:8086/query/?u=admin&p=password?q={{‘显示数据库’| urlencode}}“
- name: Show Databases
  uri:
    url: "http://localhost:8086/query"
    user: admin
    password: password
    method: POST
    body: 
      q: SHOW DATABASES
    body_format: form-urlencoded