2017-11-23 2 views
0

Ich möchte Tomcat über ansible auf einem Windows-Server installieren, ich überprüfe, ob es eine Java-Installation gibt und den Pfad zu java.exe erhalten. Welches ist:Wie erhält man einen Teilstring eines Pfadnamens mit Ansible?

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

Ich brauche JAVA_HOME in einem Config-var für tomcat zu setzen, wie kann ich den benötigten Teil erhalten ->D:\\Products\\abcd\\java\\jdk1.8.0_51 aus dem Weg? Ich kann JAVA_HOME nicht vom Remote-Server abrufen, da es verschiedene Installationen gibt.

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 
    } 
} 

Antwort

0

Um einen Pfad im Windows-Format gegeben zu extrahieren, verwenden win_dirname filter:

vars: 
    path: "D:\\Products\\abcd\\java\\jdk1.8.0_51\\bin\\java.exe" 
tasks: 
    - debug: 
     msg: "{{ path | win_dirname }}" 

Ergebnis:

ok: [localhost] => { 
    "msg": "D:\\Products\\abcd\\java\\jdk1.8.0_51\\bin" 
} 

Aber, wie Sie scheinbar von bin loswerden wollen - Teil müssen Sie sich für eine Methode entscheiden. So oder so, können Sie es mit einem regex Filter tun:

  • das letzte Element aus dem Pfad entfernen:

    {{ path | win_dirname | regex_replace('\\\\(?:(?!\\\\).)*$', '') }} 
    
  • die letzten \\bin aus dem Pfad entfernen:

    {{ path | win_dirname | regex_replace('\\\\bin$', '') }} 
    
  • entfernen Sie das feste Teil ohne win_dirname überhaupt zu verwenden:

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

Danke, gibt es eine Methode, um den extrahierten Pfad zu einer Variablen zu verwenden, anstatt dies in einer Debug-Anweisung zu tun? – MBushveld

+0

Ja: Verwenden Sie es in einer Variablenzuordnung anstelle einer Debug-Anweisung. – techraf

+0

Ich habe es mit set_facts gemacht: - set_fact: some_variable = {{file_info_java.files [0] .path | win_dirname | regex_replace ('\\\ bin', '')}} aber gibt es keinen besseren Weg, als die Fakten zu verderben? – MBushveld

Verwandte Themen