Aus*_*ray 19 ansible ansible-playbook
在我的剧本中我有
- name: Grab h5bp/server-configs-nginx
git: repo=https://github.com/h5bp/server-configs-nginx.git
dest=/tmp/server-configs-nginx
version="3db5d61f81d7229d12b89e0355629249a49ee4ac"
force=yes
- name: Copy over h5bp configuration
command: cp -r /tmp/server-configs-nginx/{{ item }} /etc/nginx/{{ item }}
with_items:
- "mime.types"
- "h5bp/"
Run Code Online (Sandbox Code Playgroud)
这引发了ansible-lint的警告:
[ANSIBLE0006] cp used in place of copy module
/Users/austinpray/Dropbox/DEV/opensauce/bedrock-ansible/roles/nginx/tasks/main.yml:0
Task/Handler: Copy over h5bp configuration
Run Code Online (Sandbox Code Playgroud)
所以这提出了一个问题:有没有更好的方法来使用ansible模块而不是命令?
ant*_*t31 16
您可以使用该synchronize模块与mode='pull'
- name: Copy over h5bp configuration
synchronize: mode=pull src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }}
with_items:
- "mime.types"
- "h5bp/"
Run Code Online (Sandbox Code Playgroud)
注意:要复制远程到远程,请使用相同的命令并添加delegate_to(作为远程源)和当前inventory_host(作为远程dest)
目前,command是您最好的选择.没有远程到远程选项.这是一个关于它的线程:如何使用远程系统上的Ansible任务移动/重命名文件
您还有其他几种选择:
file模块做一个符号链接(通过设置src,path和state=link.copy.这是部署代码的更常见模型.command但是用stat条件包装它所以它只会覆盖一次.如果您使用notify重新启动nginx,这将特别有用.最后,看起来你可能正在"通过git进行部署".这并不总是最好的选择,特别是如果你不"拥有"那个回购.但它可能很好 - 只是一些代码味道.
Ansible 2.0将remote_src参数带入copy模块:http://docs.ansible.com/ansible/copy_module.html
现在你只需要做一些事情:
- name: Copy over h5bp configuration
copy: src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }} remote_src=yes
with_items:
- "mime.types"
- "h5bp"
Run Code Online (Sandbox Code Playgroud)
另一种方法是先将文件夹压缩并使用该unarchive ansible模块:
- name: copy your folder using a work around
unarchive: src=your.zip dest=/destinationfolder
become: yes
Run Code Online (Sandbox Code Playgroud)
这将解压缩您目的地上的文件夹,以便您拥有文件夹副本;-)但不要忘记在目标计算机上安装解压缩包.
RHEL:
yum install unzip -y
Debian:
apt install unzip
| 归档时间: |
|
| 查看次数: |
48327 次 |
| 最近记录: |