通过我的 Ansible 任务为特定分支创建
symlink
,我发现它在创建的 symlink
中添加了空格和撇号。
- 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 %}
结果是:
root# ls -lha
' my-development ' -> /path/to/my/symlink
它基于
development
分支。我尝试在symlink_name
之前和之后添加不同的标志,不幸的是没有成功。
引号只是操作系统指示符号链接包含空格的一种方式,它们不是链接的一部分。
不过,这些空格来自 Jinja 表达式,因为 Jinja 语句侵入的空格会阻止所有内容位于新行中。
请注意,您使用折叠的 YAML 语法会导致这种情况:它用空格替换新行!
解决此问题的一个简单方法是使用 Jinja 的 whitespace control:
vars:
symlink_name: >-
{%- if git_branch == 'development' -%}
my-development
{%- elif git_branch == 'master' -%}
newest
{%- elif git_branch == 'hotfix' -%}
my-hotfix
{%- endif -%}
解决此问题的另一种可以说更紧凑的方法是制作分支及其等效符号链接的字典:
- name: "Symlink to git branch"
file:
src: "{{ repository }}/{{ application }}"
dest: "/path/to/my/{{ symlink_name[git_branch] }}"
state: link
vars:
symlink_name:
development: my-development
master: newest
hotfix: my-hotfix