ansible变量引用:在ssh和命令之后无法从寄存器变量读取标准输出行
团队, 我的任务是在从注册变量中提取的主机上运行shell命令。目前有两台主机,但生产中将有100台。 我无法读出标准输出或标准输出行。我的任务和输出如下。将其发送到remove服务器,然后运行df-h命令并存储输出 实际输出(去掉部分文本,但不加括号) 从上面的输出中,我无法读取标准行以验证装入点 任务:ansible变量引用:在ssh和命令之后无法从寄存器变量读取标准输出行,ansible,ansible-2.x,ansible-facts,Ansible,Ansible 2.x,Ansible Facts,团队, 我的任务是在从注册变量中提取的主机上运行shell命令。目前有两台主机,但生产中将有100台。 我无法读出标准输出或标准输出行。我的任务和输出如下。将其发送到remove服务器,然后运行df-h命令并存储输出 实际输出(去掉部分文本,但不加括号) 从上面的输出中,我无法读取标准行以验证装入点 任务: 没有输出任何内容。我无法复制您的结果-我相信您在发布时遗漏了一些信息 例如,您的任务是否可能在不同的主机上运行?“raid_info”变量是按主机注册的,因此如果您的任务在不同的主机上运行,
没有输出任何内容。我无法复制您的结果-我相信您在发布时遗漏了一些信息 例如,您的任务是否可能在不同的主机上运行?“raid_info”变量是按主机注册的,因此如果您的任务在不同的主机上运行,这可能会导致您的问题 我的测试,使用类似的循环: -playbook.yml
---
- hosts: localhost
gather_facts: false
vars_files:
- packages.yml
tasks:
- name: Run a command
command: "echo {{item}}"
register: my_output
loop:
- 10.10.80.193
- 10.10.80.194
- name: Print the results
debug:
var: my_output
- name: Print only the second item in the list
debug:
var: my_output.results[1].stdout_lines
- 结果:
#ansible playbook-i inventory.yml playbook.yml
播放[本地主机]*************************************************************************************************************************
任务[运行命令]*********************************************************************************************************************
更改:[localhost]=>(项=10.10.80.193)
更改:[localhost]=>(项=10.10.80.194)
任务[打印结果]*****************************************************************************************************************
确定:[本地主机]=>{
“我的输出”:{
“改变”:对,
“msg”:“所有项目已完成”,
“结果”:[
{
},
{
}
]
}
}
任务[仅打印列表中的第二项]********************************************************************************************
确定:[本地主机]=>{
“我的输出。结果[1]。标准输出行:”[
"10.10.80.194"
]
}
重演*******************************************************************************************************************************
localhost:确定=3更改=1无法访问=0失败=0跳过=0获救=0忽略=0
我无法复制您的结果-我相信您在发布时遗漏了一些信息
例如,您的任务是否可能在不同的主机上运行?“raid_info”变量是按主机注册的,因此如果您的任务在不同的主机上运行,这可能会导致您的问题
我的测试,使用类似的循环:
-playbook.yml
---
- hosts: localhost
gather_facts: false
vars_files:
- packages.yml
tasks:
- name: Run a command
command: "echo {{item}}"
register: my_output
loop:
- 10.10.80.193
- 10.10.80.194
- name: Print the results
debug:
var: my_output
- name: Print only the second item in the list
debug:
var: my_output.results[1].stdout_lines
- 结果:
#ansible playbook-i inventory.yml playbook.yml
播放[本地主机]*************************************************************************************************************************
任务[运行命令]*********************************************************************************************************************
更改:[localhost]=>(项=10.10.80.193)
更改:[localhost]=>(项=10.10.80.194)
任务[打印结果]*****************************************************************************************************************
确定:[本地主机]=>{
“我的输出”:{
“改变”:对,
“msg”:“所有项目已完成”,
“结果”:[
{
},
{
}
]
}
}
任务[仅打印列表中的第二项]********************************************************************************************
确定:[本地主机]=>{
“我的输出。结果[1]。标准输出行:”[
"10.10.80.194"
]
}
重演*******************************************************************************************************************************
localhost:确定=3更改=1无法访问=0失败=0跳过=0获救=0忽略=0
该输出已被修改-有许多错误使其无效。您是否能够显示来自-debug:var=raid_info.results
的实际输出?您是对的:为了简洁起见,我这样做了。现在用相等的括号更新了输出。然而,我确实去掉了不必要的信息。每个括号9个。][和}{该输出已被修改-有许多错误使其无效。您是否能够显示来自-debug:var=raid_info.results
的实际输出?您是对的:为了简洁起见,我这样做了。现在用相等的括号更新了输出。但是,我删除了不必要的信息。每个括号9个。][和}{我的任务是在从注册变量中提取的主机上运行shell命令。目前有两台主机,但在生产环境中将有100台。我的示例也是如此-它在一台主机(在本例中为localhost)上运行shell命令。如果在多台主机上运行任务,请注意,注册的变量是在每台主机上注册的(如我在上面的回答中所述)。因此,您需要从正确的主机获得结果(在同一主机上运行第二个任务,或者使用hostvars[]
)如果我在所有主机上运行shell命令,那么你能详细说明一下你的答案吗?我的任务看起来如何?太棒了!我必须像你在任务中那样在raid_信息上设置debug,然后我就可以得到它了。但有一个问题是,我应该如何管理它?因为我将有100个节点。我不能打印debug 100次。可以吗我在调试中循环?调试只为您(和我)提供,以便在故障排除期间我们可以看到变量及其内容。对于生产,您将使用执行实际操作的模块替换debug
模块:)。为了回答最后一个问题,是的,当然-debug
只是另一个模块,使用它时可以循环。我的任务是在从注册变量中提取的主机上运行shell命令。目前有两台主机,但在生产中将有100台。我的示例也是如此-在主机上运行shell命令(在本例中为localhost)。如果
---
- hosts: localhost
gather_facts: false
vars_files:
- packages.yml
tasks:
- name: Run a command
command: "echo {{item}}"
register: my_output
loop:
- 10.10.80.193
- 10.10.80.194
- name: Print the results
debug:
var: my_output
- name: Print only the second item in the list
debug:
var: my_output.results[1].stdout_lines
# ansible-playbook -i inventory.yml playbook.yml
PLAY [localhost] *************************************************************************************************************************
TASK [Run a command] *********************************************************************************************************************
changed: [localhost] => (item=10.10.80.193)
changed: [localhost] => (item=10.10.80.194)
TASK [Print the results] *****************************************************************************************************************
ok: [localhost] => {
"my_output": {
"changed": true,
"msg": "All items completed",
"results": [
{ <snip>
},
{ <snip>
}
]
}
}
TASK [Print only the second item in the list] ********************************************************************************************
ok: [localhost] => {
"my_output.results[1].stdout_lines": [
"10.10.80.194"
]
}
PLAY RECAP *******************************************************************************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0