wake-up-neo.net

Zitate in ansible lineinfile

Wenn ich lineinfile in ansible verwende, schreibt es nicht ', " Zeichen lineinfile: 'dest=/home/xyz state=present line="CACHES="default""'

es gibt CACHES=default aber die gewünschte Ausgabe ist CACHES="default"

Wie kann ich das erreichen?

14
eldos

anscheinend können Sie den Anführungszeichen entgehen:

- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\""

Das gibt diese Ausgabe:

$ cat /tmp/xyz
CACHES="default"

Sie müssen keine einfachen Anführungszeichen in doppelte Anführungszeichen setzen:

- lineinfile: dest=/tmp/xyz state=present line="CACHES=\"default\" foo='x'"
cat /tmp/xyz
CACHES="default" foo='x'

source: YAML-Spezifikation , stackoverflow answer

18
tedder42

Ansible 1.9.2 enthält einen Fehler ( https://github.com/ansible/ansible/issues/10864 ), durch den doppelte Anführungszeichen am Anfang oder Ende der Zeile nicht eingefügt werden können.

Zum Beispiel das Folgende

- name: /home/core/linetest
 lineinfile: dest = "/ home/core/linetest" line = "" ma "ok" in\"" 

führt dazu, dass die ersten und letzten Anführungszeichen fehlen (auch wenn Sie sie nicht übernommen haben).

 #/home/core/linetest 
 ma "ok" in 

Um diesen Fehler zu kompensieren, können Sie den Anfangs- und Endanführungszeichen ein PREFIX hinzufügen und es anschließend entfernen.

- name: PREFIX erste und letzte doppelte Anführungszeichen mit 'KUCF' 
 lineinfile: dest = "/ home/core/linetest" line = "KUCF" main\"KUCF" 

- name: Entferne 'KUCF' PREFIX 
 replace: dest = "/ home/core/linetest" regexp = "KUCF" replace = "" 

was dir geben sollte

 #/home/core/linetest 
 "main" 

Stellen Sie sicher, dass der von Ihnen gewählte PREFIX niemals im Kontext der Zieldatei verwendet wird. Im Allgemeinen gilt: Je länger und zufälliger PREFIX ist, desto unwahrscheinlicher wird es mit dem vorhandenen Inhalt Ihrer Zieldatei.

Alternativ können Sie Ihren Ansible auf den neuesten Zweig aktualisieren.

4
Lord Mosuma

Wenn der zu ersetzende Inhalt in einer höheren Variable im Spielbuch enthalten ist, müssen Sie die Escape-Zeichen anstelle der Anführungszeichen verwenden, etwa wie folgt

---
- hosts: Tomcat

  vars:
    classpath: "CLASSPATH=\\\"$CATALINA_HOME/bin/foo.jar\\\""

  tasks:

    - lineinfile: dest="/Tomcat/bin/setenv.sh" line="{{ classpath }}" state=present

endet mit einer Zeile wie dieser in der resultierenden Datei

CLASSPATH="$CATALINA_HOME/bin/foo.jar"
1
Mark K.

Nur eine Folge davon, die obigen Beispiele funktionierten nicht für mich, als ich versuchte, eine Batchdatei in einer Windows-Box mit win_lineinfile zu erstellen. Die Datei wurde erstellt, die Zeile wurde eingefügt, aber die Anführungszeichen und Backslashes wurden furchtbar formatiert. Dies war mit ansible 2.4. Was ich schließlich am Ende eines Kollegenvorschlags tat, war Inline-Jinja-Templating;

- name: insert our batch file contents
  win_copy:
    dest: C:\QAAutomation\files\posauto.bat
    force: yes
    content: |
      {% raw %}"C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console.exe" "C:\QAAutomation\files\1POS Automation\Application Files\Bin\Automation.dll" > "c:\QAAutomation\results\nunit-console-output.txt" {% endraw %}
0
MLindsay