这应该很简单,但我已经尝试了一个小时。我的代码获得Ansible将.vimrc
复制到每个主机,但.vim
会被忽略。
---
- name: vim pkg
apt: pkg=vim state=installed
- name: vim dirs
file: path=/home/jefdaj/.vim state=directory
file: path=/root/.vim state=directory
- name: vim files
# these work
copy: src=vim/vimrc dest=/home/jefdaj/.vimrc force=yes
copy: src=vim/vimrc dest=/root/.vimrc force=yes
# but these don't
copy: src=vim/bundle dest=/home/jefdaj/.vim/bundle force=yes recurse=yes
copy: src=vim/bundle dest=/root/.vim/bundle force=yes recurse=yes
这是怎么回事? 我在路径上尝试了很多变化。 它发生在Debian的ansible 1.5.5以及当前的git版本中。
编辑:现在它尝试复制,但在创建许多目录之一时总是失败并出现OSError: [Errno 2] No such file or directory: '/root/.vim/bundle/bundle/vim-easymotion/autoload/vital/Over'
答案 0 :(得分:6)
不确定copy
失败的原因,但解决方案是使用synchronize
代替。这有效:
- name: vim files
synchronize:
src=/absolute/repo/path/roles/common/files/{{ item.src }}
dest={{ item.dst }}
with_items:
- {src: vim/bundle, dst: /home/jefdaj/.vim }
- {src: vim/vimrc , dst: /home/jefdaj/.vimrc}
- {src: vim/bundle, dst: /root/.vim }
- {src: vim/vimrc , dst: /root/.vimrc }
- name: vim permissions
file: path={{ item.pth }} owner={{ item.own }} group={{ item.grp }} recurse=yes
with_items:
- {pth: /root/.vim , own: root , grp: root }
- {pth: /root/.vimrc , own: root , grp: root }
- {pth: /home/jefdaj/.vim , own: jefdaj, grp: jefdaj}
- {pth: /home/jefdaj/.vimrc, own: jefdaj, grp: jefdaj}
我不得不对基本路径进行硬编码,因为它似乎无法正确处理相对路径。
答案 1 :(得分:1)
file
和copy
任务的问题在于任务中有多个操作。 Ansible任务只能有一个动作。
按照以下方式更改您的游戏,它应该有效:
---
- name: vim pkg
apt: pkg=vim state=installed
- name: vim dir for jefdaj
file: path=/home/jefdaj/.vim state=directory
- name: vim dir for root
file: path=/root/.vim state=directory
...
这同样适用于“vim文件”任务:将它们分成四个任务。