使用Linux工具解析Ansible输出

Rub*_*dob 2 ansible

我有一个愚蠢的剧本,它只运行一个命令来获取webserver组中每个主机的vhost列表.由于所有vhost都位于/ var/www中,因此很容易获得网站列表.

问题是Ansible返回信息的方式.例如:

ok: [host1] => {
    "var": {
        "out.stdout_lines": [
            "",
            "host1.com"
        ]
    }
}
ok: [host2] => {
    "var": {
        "out.stdout_lines": [
            "",
            "host2.com"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

你知道一个简单的方法来获取虚拟主机的名称吗?使用grep awk或类似的东西?

Kon*_*rov 7

肮脏的方式:在打印之前stdout_lines用一些标记(例如ANSBLMRK_)添加每一行,所以你有一个列表,如果是"ANSBLMRK_host2.com",那么grep和cut.

好方法:设置ANSIBLE_STDOUT_CALLBACK=json和管道jq.