How to Copy Multiple Files to Remote Hosts with Ansible?

I'm going to show you a live Playbook with some simple Ansible code.

I'm Luca Berton and welcome to today's episode of Ansible Pilot.

Ansible Copy Multiple Files

  • ansible.builtin.fileglob
  • list files matching a pattern

Today we're talking about the Ansible lookup plugin fileglob.

Plugins are a way to expand the Ansible functionality. With lookup plugins specifically, you can load variables or templates with information from external sources.

The full name is ansible.builtin.fileglob, it's part of ansible-core and is included in all Ansible installations.

The purpose of the lookup plugin is to list files matching a pattern.

Usage

Parameters

  • \_terms string - path(s) of files to read

Return Values

  • \_list list - list of files

The parameters of the plugin fileglob.

The only required parameter is the default "\_terms", with the path(s) of files to read.

You could easily use it in any Ansible loop with the Ansible statement: with_fileglob.

## Playbook

Copy Multiple Files with Ansible Playbook.

code

  • copy-multiple.yml

``yaml

---

  • name: copy module Playbook

hosts: all

become: false

tasks:

- name: copy multiple file(s)

ansible.builtin.copy:

src: "{{ item }}"

dest: "/home/devops/"

owner: devops

mode: '0644'

with_fileglob:

- "examples/*.txt"

`

  • examples/report.txt

`txt

example

`

  • examples/report2.txt

`txt

example2

`

execution

`bash

$ ansible-playbook -i virtualmachines/demo/inventory copy\ files\ to\ remote\ hosts/copy-multiple.yml

PLAY [copy module Playbook] *

TASK [Gathering Facts]

ok: [demo.example.com]

TASK [copy multiple file(s)]

changed: [demo.example.com] => (item=/Users/lberton/prj/github/ansible-pilot/copy files to remote hosts/examples/report2.txt)

changed: [demo.example.com] => (item=/Users/lberton/prj/github/ansible-pilot/copy files to remote hosts/examples/report.txt)

PLAY RECAP **

demo.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

ansible-pilot $

`

idempotency

``bash

$ ansible-playbook -i virtualmachines/demo/inventory copy\ files\ to\ remote\ hosts/copy-multiple.yml

PLAY [copy module Playbook] *

TASK [Gathering Facts]

ok: [demo.example.com]

TASK [copy multiple file(s)]

ok: [demo.example.com] => (item=/Users/lberton/prj/github/ansible-pilot/copy files to remote hos