Ansible:在剧本中使用 hosts.ini 的主机地址
Ansible: use host address of hosts.ini in playbook
我必须用 ansible 做一个 POST 请求。
我的 hosts.ini
文件是:
[workers]
worker1 ansible_host=111.111.111.111
worker2 ansible_host=222.222.222.222
我必须连接的 url 需要 worker1 的 ip 地址,所以我将剧本写为:
- hosts: worker1
tasks:
- name: inizialize worker
uri:
url: "http://{{ worker1 }}:8080/xxx/yyy"
method: POST
user: admin
password: password
force_basic_auth: yes
return_content: yes
body: "field=myfield"
但是运行它,我得到:
the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'worker1' is undefined
问题出在哪里?
您没有定义名为 worker1
的变量。
如果您想用 111.111.111.111
替换值,您应该使用 magic variables:
url: "http://{{ hostvars['worker1']['ansible_host'] }}:8080/xxx/yyy"
但考虑到你的整部戏,你不妨:
url: "http://{{ ansible_host }}:8080/xxx/yyy"
请注意,您的清单文件定义了一个名为 workers
的主机组,而您的游戏引用了一个名为 worker1
的主机组——这完全没有意义。
我必须用 ansible 做一个 POST 请求。
我的 hosts.ini
文件是:
[workers]
worker1 ansible_host=111.111.111.111
worker2 ansible_host=222.222.222.222
我必须连接的 url 需要 worker1 的 ip 地址,所以我将剧本写为:
- hosts: worker1
tasks:
- name: inizialize worker
uri:
url: "http://{{ worker1 }}:8080/xxx/yyy"
method: POST
user: admin
password: password
force_basic_auth: yes
return_content: yes
body: "field=myfield"
但是运行它,我得到:
the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'worker1' is undefined
问题出在哪里?
您没有定义名为 worker1
的变量。
如果您想用 111.111.111.111
替换值,您应该使用 magic variables:
url: "http://{{ hostvars['worker1']['ansible_host'] }}:8080/xxx/yyy"
但考虑到你的整部戏,你不妨:
url: "http://{{ ansible_host }}:8080/xxx/yyy"
请注意,您的清单文件定义了一个名为 workers
的主机组,而您的游戏引用了一个名为 worker1
的主机组——这完全没有意义。