ansible变量引用:在ssh和命令之后无法从寄存器变量读取标准输出行

ansible变量引用:在ssh和命令之后无法从寄存器变量读取标准输出行,ansible,ansible-2.x,ansible-facts,Ansible,Ansible 2.x,Ansible Facts,团队, 我的任务是在从注册变量中提取的主机上运行shell命令。目前有两台主机,但生产中将有100台。 我无法读出标准输出或标准输出行。我的任务和输出如下。将其发送到remove服务器,然后运行df-h命令并存储输出 实际输出(去掉部分文本,但不加括号) 从上面的输出中,我无法读取标准行以验证装入点 任务: 没有输出任何内容。我无法复制您的结果-我相信您在发布时遗漏了一些信息 例如,您的任务是否可能在不同的主机上运行?“raid_info”变量是按主机注册的,因此如果您的任务在不同的主机上运行,

团队, 我的任务是在从注册变量中提取的主机上运行shell命令。目前有两台主机,但生产中将有100台。 我无法读出标准输出或标准输出行。我的任务和输出如下。将其发送到remove服务器,然后运行df-h命令并存储输出

实际输出(去掉部分文本,但不加括号)

从上面的输出中,我无法读取标准行以验证装入点

任务:


没有输出任何内容。

我无法复制您的结果-我相信您在发布时遗漏了一些信息

例如,您的任务是否可能在不同的主机上运行?“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