我在物理主機上調配了一堆系統(VM)。我一直在VM的運行階段。現在我需要通過他們的DHCP地址登錄虛擬機。我可以從服務器上獲取IP地址,但我需要一種將這些設置爲host_vars的方法。這裏是我組:Play劇本中的Ansible動態變量
ok: [kvm01] => {
"msg": {
"all": [
"kvm01",
"dcos-master-1",
"dcos-agent-1",
"dcos-agent-2",
"dcos_bootstrap"
],
"dcos": [
"dcos-master-1",
"dcos-agent-1",
"dcos-agent-2",
"dcos_bootstrap"
],
"dcos-agents": [
"dcos-agent-1",
"dcos-agent-2"
],
"dcos-bootstraps": [
"dcos_bootstrap"
],
"dcos-masters": [
"dcos-master-1"
],
"kvm": [
"kvm01"
],
"ungrouped": []
}
}
這裏是我的命令:
- name: Get the IP of the VM (DHCP)
command: "/getip.sh {{ item }}"
register: "result"
with_items: "{{ groups['dcos'] }}"
- name: List the output of the variables
debug: msg="{{item.stdout}}"
with_items: "{{result.results}}"
當我運行的劇本,我得到的結果,但他們的命令,而不是標準輸出的完整JSON結果。可能有一種方法可以提取標準輸出並將其分配給一個事實,但它是一個複雜的散列。這是最後的結果:
TASK [vm_install : Get the IP of the VM (DHCP)] ***************************************************************************
changed: [kvm01] => (item=dcos-master-1)
changed: [kvm01] => (item=dcos-agent-1)
changed: [kvm01] => (item=dcos-agent-2)
changed: [kvm01] => (item=dcos_bootstrap)
TASK [vm_install : List the output of the variables] **********************************************************************
......
ok: [kvm01] => (item={'_ansible_parsed': True, 'stderr_lines': [u'] => {
"item": {
"changed": false,
"cmd": [
"/getip.sh",
"dcos_bootstrap"
],
"delta": "0:00:00.056193",
"end": "2017-09-18 15:45:45.409693",
"invocation": {
"module_args": {
"_raw_params": "/getip.sh dcos_bootstrap",
"_uses_shell": false,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"warn": true
}
},
"item": "dcos_bootstrap",
"rc": 0,
"start": "2017-09-18 15:45:45.353500",
"stderr": " ",
"stdout": "192.168.1.130",
"stdout_lines": [
"192.168.1.130"
]
},
"msg": "192.168.1.130"
}
如何將命令的輸出放入數組中,以便稍後在我的playbook中使用它?
重新讀取ansible文檔有關[循環和註冊(https://docs.ansible.com /ansible/latest/playbooks_loops.html#using-register-with-a-loop),看看是否有幫助。你的第二個任務需要遍歷第一個任務的結果(和「register:」{{item}}。ip'可能是錯誤的;你需要註冊一個簡單的命名變量,比如'register:hostips'。 – larsks
我已經更新了我的問題,做了一些調試後,實際得到了一個結果。我現在的問題是,我回來的結果不是標準輸出...它是完整的結果數據從ansible轉儲。顯然,我只想要什麼從命令返回 –
不,你得到了你想要的東西,看看你的輸出結果的底部,在那裏你看到「msg」:「192.168.1.130」'這就是調試的「輸出」 '任務(也就是'msg:'鍵的結果),你看到的其他東西都是調試信息,可以忽略,我想你已經全部設置好了 – larsks