use*_*716 8 bash yaml jinja2 ansible
我有一个可以在 bash shell 中运行的脚本。我将其放入 Ansible 中,导致 playbook 出现异常。
- 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'
Run Code Online (Sandbox Code Playgroud)
尝试执行剧本时收到以下消息:
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
Run Code Online (Sandbox Code Playgroud)
关于为什么这可能失败的任何想法?
=================================================== =======================
更新:
尝试过 > 以及 | 并使所有行具有相同的缩进级别。还是同样的错误
- 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'
Run Code Online (Sandbox Code Playgroud)
因此,这不是缩进的问题,而是 ${#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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15507 次 |
| 最近记录: |