2017-11-16 15 views
2

bash 쉘에서 작동하는 스크립트가 있습니다. 나는 그것을 Ansible에 넣었고, 플레이 북에 예외가 생깁니다.오류! 불균형 한 jinja2 블록이나 따옴표로 나누기에 실패했습니다.

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

나는 작전 실행하려고 다음과 같은 메시지가 무엇입니까 왜이 실패 할 수도 있습니다에

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 

어떤 생각을?

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

UPDATE :

시도

>뿐만 아니라 | 모든 줄을 동일한 들여 쓰기 수준으로 만들었습니다. 여전히 같은 오류

답변

1

이렇게 들여 쓰기가 문제가되지 않지만 $ {# items}이 해석되는 방식으로 문제가되는 것으로 판명되었습니다.

- 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' 
: 나는 다음과 같은 코드를 사용하여이 작업을 얻을 수 있었다