我的Playbook打算通过上传模式文件来扩展LDAP模式。该命令如下所示:
- name: LDAP extend schema
copy: src={{ 'cn={10}subs.ldif' }} dest={{ '/opt/data/ldap/config/cn=config/cn=schema/cn={10}subs.ldif }} owner=joe group=joe mode=0600
ignore_errors: True
正如您所看到的,我{{eval}}路径为\ escaping不起作用。架构正确上传,但剧本停止,我想它不能进行校验和测试,因为它无法解决路径。我得到的错误如下:
fatal: [xx.domain.com] => failed to parse: Exception OSError: (2, 'No such file or directory', '/opt/data/ldap/config/cn=config/cn=schema/.ansible_tmp6XkGOucn={10}subs.ldif') in <bound method _TemporaryFileWrapper.__del__ of <closed file '<fdopen>', mode 'w+b' at 0x813660>> ignored
{"src": "/root/.ansible/tmp/ansible-tmp-1457985747.12-41932258379232/source", "md5sum": "651e7b60ebdcad75a95a5ff8e91695a8", "group": "joe", "uid": 498, "dest": "/opt/data/ldap/config/cn=config/cn=schema/cn={11}subs.ldif", "changed": true, "state": "file", "gid": 498, "secontext": "system_u:object_r:usr_t:s0", "mode": "0600", "owner": "joe", "size": 2481}
FATAL: all hosts have already failed -- aborting
我已经完成了一些谷歌搜索,看起来这不是一个错误,这是一个类似的问题:https://github.com/ansible/ansible/issues/8032
我想我做错了,并且有一些简单的方法可以将可逃避的字符作为src
和dest
传递给anisble的复制模块,但是我没有找到它会是什么。
答案 0 :(得分:1)
我不确定你想要逃脱哪些角色,但我认为这是等号。
您发布的任务会在Ansible 2中抛出解析器错误,所以我还假设您运行Ansible 1.x,因为您得到了不同的内容。
意外异常:分割参数时出错,可能是不平衡的jinja2块或引号
鉴于我的第一个假设是正确的,您可以轻松解决转义问题,而不使用key = value表示法,但使用正确的YAML语法。
- name: LDAP extend schema
copy:
src: cn={10}subs.ldif
dest: /opt/data/ldap/config/cn=config/cn=schema/cn={10}subs.ldif
owner: joe
group: joe
还有一个小的副作用,它实际上是可读的。 ;-)
这适用于Ansible 2.如果这不适用于您的Ansible版本,我不知道如果不升级Ansible就无法帮助您。因为这部分错误信息:
的/ opt /数据/ LDAP /配置/ CN =配置/ CN =架构/的 .ansible_tmp6XkGOu 强> CN = {10} subs.ldif
显示它在文件名中注入一个唯一的字符串,通常不会在中间发生。所以我猜它在文件名中有一些特殊字符存在问题。无论您如何定义任务(YAML或k = v)
,Ansible 1都可能如此解决方法是将文件复制到具有不同名称的位置,然后使用shell任务将其移动到所需位置。这应该独立于Ansible版本。
- name: LDAP extend schema
copy:
src: cn={10}subs.ldif
dest: /tmp/ldap.extension
owner: joe
group: joe
register: extension
- shell: "mv /tmp/ldap.extension /opt/data/ldap/config/cn=config/cn=schema/cn={10}subs.ldif"
when: extension | changed
creates: /opt/data/ldap/config/cn=config/cn=schema/cn={10}subs.ldif
removes: /tmp/ldap.extension
但它也很难看......