我想通过ansible在 Windows服务器上安装tomcat,我检查是否有安装java并获取java.exe的路径。这是:
"path": "D:\\Products\\abcd\\java\\jdk1.8.0_51\\bin\\java.exe"
我需要在tomcat的config var中设置JAVA_HOME,如何获得所需的部分 - > D:\\Products\\abcd\\java\\jdk1.8.0_51
来自路径?我无法从远程服务器获取JAVA_HOME,因为有各种安装。
TASK [tomcat : debug]
ok: [v-sax-769-e-a.develop.ebiz.grp] => {
"file_info_java.files[0]": {
"attributes": "Archive",
"checksum": "8c2c2f3d687fe99d9a724514f09f53bcb989a1e0",
"creationtime": 1511365795.4331064,
"extension": ".exe",
"filename": "java.exe",
"isarchive": true,
"isdir": false,
"ishidden": false,
"islnk": false,
"isreadonly": false,
"isshared": false,
"lastaccesstime": 1511365795.4331064,
"lastwritetime": 1438168336,
"owner": "BUILTIN\\Administrators",
"path": "D:\\Products\\CPeRef\\java\\jdk1.8.0_51\\bin\\java.exe",
"size": 206400
}
}
答案 0 :(得分:0)
要提取以Windows格式指定的路径,请使用win_dirname
filter:
vars:
path: "D:\\Products\\abcd\\java\\jdk1.8.0_51\\bin\\java.exe"
tasks:
- debug:
msg: "{{ path | win_dirname }}"
结果:
ok: [localhost] => {
"msg": "D:\\Products\\abcd\\java\\jdk1.8.0_51\\bin"
}
但是,因为你似乎想要摆脱bin
- 部分,你需要决定一个方法。无论哪种方式,您都可以使用正则表达式过滤器:
从路径中删除最后一个元素:
{{ path | win_dirname | regex_replace('\\\\(?:(?!\\\\).)*$', '') }}
从路径中删除最后一个\\bin
:
{{ path | win_dirname | regex_replace('\\\\bin$', '') }}
完全删除固定部分而不使用win_dirname
:
{{ path | regex_replace('\\\\bin\\\\java.exe$', '') }}