【问题标题】:How to get a substring of a path name with Ansible?如何使用 Ansible 获取路径名的子字符串?
【发布时间】:2017-11-23 10:53:33
【问题描述】:

我想通过 ansible 在 windows 服务器 上安装 tomcat,我检查是否已经安装了 java 并获取 java.exe 的路径。即:

"path": "D:\\Products\\abcd\\java\\jdk1.8.0_51\\bin\\java.exe"

我需要在 tomcat 的配置变量中设置 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
    }
}

【问题讨论】:

    标签: ansible


    【解决方案1】:

    要提取以 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-part,因此您需要决定一种方法。无论哪种方式,您都可以使用正则表达式过滤器:

    • 从路径中移除最后一个元素:

      {{ path | win_dirname | regex_replace('\\\\(?:(?!\\\\).)*$', '') }}
      
    • 从路径中删除最后一个\\bin

      {{ path | win_dirname | regex_replace('\\\\bin$', '') }}
      
    • 完全不使用win_dirname删除固定部分:

      {{ path | regex_replace('\\\\bin\\\\java.exe$', '') }}
      

    【讨论】:

    • 谢谢,有没有一种方法可以将提取的路径分配给变量,而不是在调试语句中这样做?
    • 是的:在变量赋值而不是调试语句中使用它。
    • 我已经用 set_facts:- set_fact: some_variable={{ file_info_java.files[0].path | win_dirname | regex_replace('\\\\bin', '') }} 但没有比破坏事实更好的方法吗?
    • 所以 set_facts 正在工作,但没有其他方法来分配变量我几乎可以肯定,但我在文档中找不到它
    • 只需将此 Jinja2 模板放在您需要使用的任何地方。我不明白你的担忧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    相关资源
    最近更新 更多