patterndockerMinor
Ansible - Copy multiple files
Viewed 0 times
filesansiblemultiplecopy
Problem
I am trying to copy multiple files to the target like so:
The files directory is in the same directory as the Ansible playbook. However when running the script, I get this error:
Why is that? Why can Ansible not copy the files to the target machine?
tasks:
- name: "Copying files"
copy:
src: files/{{ item }}
dest: /my/folder/
with_items:
- file.txtThe files directory is in the same directory as the Ansible playbook. However when running the script, I get this error:
docker: TASK [Gathering Facts] *********************************************************
docker: fatal: [test]: FAILED! => {"msg": "failed to transfer file to /home/user/.ansible/tmp/ansible-local-123331or28t2a/tmp6st_fxv1 ~user/.ansible/tmp/ansible-tmp-1579990845.0734024-189911264147319/AnsiballZ_setup.py:\n\n\n"}
docker:Why is that? Why can Ansible not copy the files to the target machine?
Solution
Following you comment: no I cannot reproduce your problem. Since you did not provide the rest of your files (inventory, etc...) and I cannot guess where is your problem, here is a quick proof by example using the
php:7.0-apache image.- The inventory (
inventories/docker_test/hosts.yml)
---
all:
hosts:
docker_test:
ansible_connection: docker- Launching the test container
docker run -d --rm --name docker_test php:7.0-apache- The test
playbook.yml
---
- hosts: docker_test
gather_facts: false
tasks:
# Your image does not have python which is mandatory for ansible
# Please note this is for demo only. You should get python installed
# by extending the image through a Dockerfile and build it.
- name: Dirty low-level command to get python installed
raw: apt-get update && apt-get install -y python3
- name: Gather facts now we can
setup:
- name: Copy a dummy file
copy:
dest: /etc/apache2/sites-available/dummy.conf
content: "# I'm a dummy file"- Playbook run and output
$ ansible-playbook -i inventories/docker_test/ playbook.yml
PLAY [docker_test] ********************************************************************************************************************************************************************************************************
TASK [Dirty low-level command to get python installed] ********************************************************************************************************************************************************************
changed: [docker_test]
TASK [Gather facts now we can] ********************************************************************************************************************************************************************************************
[WARNING]: Platform linux on host docker_test is using the discovered Python interpreter at /usr/bin/python3.5, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [docker_test]
TASK [Copy a dummy file] **************************************************************************************************************************************************************************************************
changed: [docker_test]
PLAY RECAP ****************************************************************************************************************************************************************************************************************
docker_test : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0Code Snippets
---
all:
hosts:
docker_test:
ansible_connection: dockerdocker run -d --rm --name docker_test php:7.0-apache---
- hosts: docker_test
gather_facts: false
tasks:
# Your image does not have python which is mandatory for ansible
# Please note this is for demo only. You should get python installed
# by extending the image through a Dockerfile and build it.
- name: Dirty low-level command to get python installed
raw: apt-get update && apt-get install -y python3
- name: Gather facts now we can
setup:
- name: Copy a dummy file
copy:
dest: /etc/apache2/sites-available/dummy.conf
content: "# I'm a dummy file"$ ansible-playbook -i inventories/docker_test/ playbook.yml
PLAY [docker_test] ********************************************************************************************************************************************************************************************************
TASK [Dirty low-level command to get python installed] ********************************************************************************************************************************************************************
changed: [docker_test]
TASK [Gather facts now we can] ********************************************************************************************************************************************************************************************
[WARNING]: Platform linux on host docker_test is using the discovered Python interpreter at /usr/bin/python3.5, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [docker_test]
TASK [Copy a dummy file] **************************************************************************************************************************************************************************************************
changed: [docker_test]
PLAY RECAP ****************************************************************************************************************************************************************************************************************
docker_test : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0Context
StackExchange DevOps Q#10597, answer score: 1
Revisions (0)
No revisions yet.