ansible - 当同步属性在 Ansible 中为多行时无法默认省略
问题描述
下面的 Ansible 在final_file_perm
定义时可以正常工作:
- 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
如您所见,在
我还尝试了以下操作__omit_place_holder__6fd53eb1f5a7fbe7c6691ba6f3aada2e52378343
之后, ansible 同步模块不喜欢:-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 []) }}
推荐阅读
- javascript - React axios请求请求UseEffect清理函数取消所有订阅和异步任务
- java - Spring MVC 在下一页传递空值
- docker - docker中“清理/清除数据”的命令行等效项是什么?
- java - 我怎样才能获得语言环境的语言?
- php - 创建动态页眉,了解在一次“addPage”操作中创建的 PDF 数量
- r - 如何始终在 geom_bar 中有固定数量的带有缺失值的 bin
- java - 如何使用改造处理布尔中的json对象
- vue.js - 如何从导入的文件中运行另一个 vue.file 中的函数
- c# - 为什么我的内部对象属性名称不是驼峰式的?
- azure-active-directory - 使用单点登录访问 Azure AD 上的多个租户