Copy files from Windows CIFS share to a Linux folder

In this post, I will show a playbook with different tasks to copy files from Windows CIFS shared folder to a Linux folder.

First, the status and the prerequisites:

  • I have 3 machines:
    • The Ansible controller ansible_srv01 where the playbook while be launched
    • The Windows machine win_srv01
    • The Linux machine lin_srv01
  • The data to copy is located in win_srv01 in the CIFS shared folder called : \\win_srv01\d$\src_data
  • The serveur win_srv01 is member of the Active Directory called mydom.local
  • Credentials to connect to the CIFS shared folder are:
    • user : cifs_user_readaccess
    • password : myS3cretPassword
  • The destination folder is located on lin_srv01 folder called /opt/my_dest

The steps to copy my files will be the following:

  • Create a temporary folder on lin_srv01 to act as a mountpoint for the CIFS shared folder : /tmp/my_tmp_mountpoint
  • Mount the CIFS shared folder
  • Copy data from win_srv01 to lin_srv01
  • Umount
  • Remove the mountpoint

And now the Ansible playbook:

---
- name: My copy playbook
  hosts: lin_srv01
  gather_facts: no
  vars:
    mountpath: "/tmp/my_tmp_mountpoint"
  tasks:
  - name: Create mount point on {{ inventory_hostname }}
    file:
      path: "{{ mountpath }}"
      state: directory

  - name: Mount the win_srv01 CIFS volume
    mount:
      path: "{{ mountpath }}"
      src: //win_srv01/d$/src_data
      # do not use in the following line in production.
      # Protect your credentials using Ansible vaults
      # https://docs.ansible.com/ansible/latest/user_guide/vault.html
      opts: vers=2.1,user=cifs_user_readaccess,pass=myS3cretPassword,dom=mydom
      state: mounted
      fstype: cifs
      
  - name: Copy data
    copy:
      src: "{{ mountpath }}/"
      dest: /opt/my_dest
      remote_src: yes
      
  - name: Unmount the mounted volume
    mount:
      path: "{{ mountpath }}"
      # absent = umount and remove from fstab
      state: absent
      
  - name: Delete temporary mount point on {{ inventory_hostname }}
    file:
      path: "{{ mountpath }}"
      state: absent

Copy files from Windows CIFS share

Leave a Reply

Your email address will not be published. Required fields are marked *