如何解决Ansible 中同步属性为多行时无法默认省略
当定义 final_file_perm
时,Ansible 下面的工作正常:
- name: Copying from "{{ inventory_hostname }}" to this ansible server.
synchronize:
src: "{{ item }}"
dest: "{{ playbook_dir }}/tmpfiles/{{ Latest_Build_Number }}/"
rsync_opts: "{{ final_file_perm | default(omit) }}"
mode: pull
with_items:
- "{{ source_file.split() }}"
但是,我的要求是在新行上有多个多行 rsync_opts
,如下所示:
rsync_opts:
- "--chmod=F0775"
- "--chmod=D0775"
所以我尝试了以下方法:
- name: Copying from "{{ inventory_hostname }}" to this ansible server.
synchronize:
src: "{{ item }}"
dest: "{{ playbook_dir }}/tmpfiles/{{ Latest_Build_Number }}/"
rsync_opts:
- "{{ final_file_perm | default(omit) }}"
- "{{ final_folder_perm | default(omit) }}"
mode: pull
with_items:
- "{{ source_file.split() }}"
上述方法不起作用,并给我以下错误:
TASK [Copying from "remhost" to this ansible server.] *********************
failed: [remhost] (item=/u/files/inst.zip) => {"changed": false,"cmd": "/bin/rsync --delay-updates -F --compress --archive --rsh=/usr/share/centrifydc/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null __omit_place_holder__6fd53eb1f5a7fbe7c6691ba6f3aada2e52378343 __omit_place_holder__6fd53eb1f5a7fbe7c6691ba6f3aada2e52378343 --out-format=<<CHANGED>>%i %n%L remuser@remhost:/u/files/inst.zip /web/playbooks/filecopy/tmpfiles/124/","item": "/u/files/inst.zip","msg": "Unexpected remote arg: remuser@remhost:/u/files/inst.zip\nrsync error: syntax or usage error (code 1) at main.c(1344) [sender=3.1.2]\n","rc": 1}
to retry,use: --limit @/web/playbooks/filecopy/copyfiles.retry
正如你所看到的,ansible 同步模块在 __omit_place_holder__6fd53eb1f5a7fbe7c6691ba6f3aada2e52378343
之后不喜欢 -o UserKnownHostsFile=/dev/null
我还尝试了以下方法:
rsync_opts: [ '{{ final_file_perm | default(omit) }}','{{ final_folder_perm | default(omit) }}' ]
但是,我遇到了与上面共享的类似错误。
注意:这在定义 final_file_perm
和 final_folder_perm
时工作正常。仅当错误未定义且我希望省略它们时才会出现错误。
您能否提出一个解决方案,让我可以将 default(omit)
用于多个换行符的属性?
解决方法
然后,您将希望有条件地构建 rsync_opts
列表,而不是在列表中拥有数量为 None
项的内容
- name: Copying from "{{ inventory_hostname }}" to this ansible server.
synchronize:
src: "{{ item }}"
dest: "{{ playbook_dir }}/tmpfiles/{{ Latest_Build_Number }}/"
rsync_opts: "{{ my_rsync_opts }}"
mode: pull
with_items:
- "{{ source_file.split() }}"
vars:
my_rsync_opts: >-
{{ [] +
([final_file_perm] if final_file_perm|d("") else []) +
([final_folder_perm] if final_folder_perm|d("") else []) }}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。