2017-11-16 1 views
2

Ich habe ein Skript, das in einer Bash-Shell funktioniert. Ich lege es in Ansible und es verursacht eine Ausnahme für das Playbook.FEHLER! Fehler beim Teilen von Argumenten, entweder ein unausgeglichener jinja2-Block oder Anführungszeichen:

- name: add mnt to ignore_filesystems 
    shell: | 
    grep ignore_filesystem {{ cdm_path }} | awk -F'=' '{print $2}' | egrep '\^\\/mnt\*' 
    if [ $? -eq 0 ]; then 
     echo 'do nothing'; 
    else 
     echo 'no'; 
     items=$(grep ignore_filesystem {{ cdm_path }} | awk -F'=' '{print $2}') 
     if [ ${#items} -gt 1 ]; then 
      echo 'making the change' 
      sed -ie '/ignore_filesystem/ s~$~|^\\/mnt*~' {{ cdm_path }} 
     else 
      echo 'making the change' 
      sed -ie '/ignore_filesystem/ s~ignore_filesystem = *~ignore_filesystem = ^\\/mnt*~' {{ cdm_path }} 
     fi 
    fi 
    register: ignore_filesystems 
    changed_when: '"making the change" in ignore_filesystems.stdout' 

ich folgende Meldung bin immer wenn das Textbuch auszuführen versuchen:

ERROR! failed at splitting arguments, either an unbalanced jinja2 block or quotes: grep ignore_filesystem {{ cdm_path }} | awk -F'=' '{print $2}' | egrep '\^\\/mnt\*' 
if [ $? -eq 0 ]; then 
    echo 'do nothing'; 
else 
    echo 'no'; 
    items=$(grep ignore_filesystem {{ cdm_path }} | awk -F'=' '{print $2}') 
    if [ ${#items} -gt 1 ]; then 
     echo 'making the change' 
     sed -ie '/ignore_filesystem/ s~$~|^\\/mnt*~' {{ cdm_path }} 
    else 
     echo 'making the change' 
     sed -ie '/ignore_filesystem/ s~ignore_filesystem = *~ignore_filesystem = ^\\/mnt*~' {{ cdm_path }} 
    fi 
fi 

The error appears to have been in '/home/username/provisioning/provisioning/edit_nimbus.yml': 
line 179, column 5, but may be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 


    - name: add mnt to ignore_filesystems 
    ^here 

Irgendwelche Gedanken darüber, warum dies könnte andernfalls?

============================================== ===========================

UPDATE:

Versuchte> sowie | und machte alle Zeilen die gleiche Einrückungsebene. Immer noch derselbe Fehler

Antwort

1

So stellte sich heraus, dass kein Problem mit Einrückung, sondern mit der Art, wie $ {# items} interpretiert wird. Ich konnte das mit dem folgenden Code arbeiten:

- name: add mnt to ignore_filesystems 
    shell: | 
    grep 'ignore_filesystem' {{ cdm_path }} | awk -F'=' '{print $2}' | egrep '\^\\/mnt\*'; 
    if [ $? -eq 0 ]; then 
     echo 'do nothing'; 
    else 
     echo 'no'; 
     items=$(sudo grep ignore_filesystem {{ cdm_path }} | awk -F'=' '{print $2}'); 
     len=$(echo -n $items | wc -m) 
     if [ ${len} -gt 1 ]; then 
      echo 'making the change'; 
      echo 'appending...'; 
      sed -ie '/ignore_filesystem/ s~$~|^\\/mnt*~' {{ cdm_path }}; 
     else 
      echo 'making the change'; 
      echo 'replacing'; 
      sudo sed -ie '/ignore_filesystem/ s~ignore_filesystem = *~ignore_filesystem = ^\\/mnt*~' {{ cdm_path }}; 
     fi 
    fi 
    register: ignore_filesystems 
    changed_when: '"making the change" in ignore_filesystems.stdout' 
Verwandte Themen