Ansible创建symlink时误添空格与引号问题求助
解决Ansible创建符号链接时名称带空格的问题
问题出在symlink_name变量的定义上:你用了>-折叠块语法,虽然它会去除末尾换行,但Jinja模板中条件分支的内容带有缩进和换行,导致生成的变量值前后包含空格,最终符号链接名称出现空格(ls输出里的引号是系统为了标记含空格的文件名自动添加的,并非实际存在的引号)。
以下是几种可行的解决方法:
方法一:使用trim过滤器去除前后空格
直接在变量引用时添加trim过滤器,过滤掉多余的空格:
- name: "Symlink to git branch" file: src: "{{ repository }}/{{ application }}" dest: "/path/to/my/{{ symlink_name | trim }}" state: link vars: symlink_name: >- {% if git_branch == 'development' %} my-development {% elif git_branch == 'master' %} newest {% elif git_branch == 'hotfix' %} my-hotfix {% endif %}
或者直接在变量定义时添加过滤器:
symlink_name: >- {% if git_branch == 'development' %} my-development {% elif git_branch == 'master' %} newest {% elif git_branch == 'hotfix' %} my-hotfix {% endif %} | trim
方法二:调整模板缩进,从根源避免空格
把Jinja条件分支的内容对齐到行首,去掉多余的缩进,这样生成的变量值就不会带前后空格:
- name: "Symlink to git branch" file: src: "{{ repository }}/{{ application }}" dest: "/path/to/my/{{ symlink_name }}" state: link vars: symlink_name: >- {% if git_branch == 'development' %} my-development {% elif git_branch == 'master' %} newest {% elif git_branch == 'hotfix' %} my-hotfix {% endif %}
方法三:改用单行Jinja表达式,简化定义
用嵌套的三元表达式写在一行,避免换行和缩进带来的问题:
- name: "Symlink to git branch" file: src: "{{ repository }}/{{ application }}" dest: "/path/to/my/{{ symlink_name }}" state: link vars: symlink_name: "{{ 'my-development' if git_branch == 'development' else 'newest' if git_branch == 'master' else 'my-hotfix' if git_branch == 'hotfix' else '' }}"
内容的提问来源于stack exchange,提问作者scrapkowe
相关产品推荐
相关产品推荐

