Copy File from Azure Storage mapped drive to VM

84 views
Skip to first unread message

Brad

unread,
Aug 16, 2023, 1:53:37 PM8/16/23
to Ansible Project
Hi,

I'm trying to get Ansible to copy files from a mapped azure drive locally but I keep getting the below error:

fatal: [192.168.1.193]: FAILED! => {"changed": false, "dest": "C:\\Temp\\dotNET53", "msg": "Cannot copy src file: 'Z:\\Software\\Microsoft\\dotNET3\\microsoft-windows-netfx3.cab' as it does not exist", "src": "Z:\\Software\\Microsoft\\dotNET3\\microsoft-windows-netfx3.cab"}

My code is:

- name: Copy dotNET 3.5 CAB File to Server
  win_copy:
    src: Z:\Software\Microsoft\dotNET3\microsoft-windows-netfx3.cab
    dest: "{{ Generic_Temp_Path }}\\dotNET53"
    remote_src: true

All the online reading I've done seems to point to double hop creds being the issue.  But I'm a bit stuck since the authentication to the mapped drive is using the storage key as the pass and localhost\storageaccountname as username.

If I log in as ansible_user then run net use shows the drive mapped.  I can't switch to Azure AD auth as the boxes may or may not be joined.

Has anyone got any suggestions? I didnt think this would be so complex haha!

Thanks,

Brad.

Atul Nasir

unread,
Aug 19, 2023, 1:18:02 PM8/19/23
to Ansible Project
---
- name: Copy dotNET 3.5 CAB File to Server and Troubleshoot
  hosts: your_target_host
  tasks:
    - name: Check if Mapped Drive Exists
      win_shell: dir Z:
      register: mapped_drive_status
      ignore_errors: yes  # Ignore errors, we just want to check if drive is accessible

    - name: Debug Mapped Drive Status
      debug:
        var: mapped_drive_status

    - name: Use UNC Path if Mapped Drive is Unavailable
      set_fact:
        use_unc_path: "{{ 'false' if mapped_drive_status.failed else 'true' }}"

    - name: Copy dotNET 3.5 CAB File to Server using UNC Path
      win_copy:
        src: "\\{{ storage_account_name }}.file.core.windows.net\share\Software\Microsoft\dotNET3\microsoft-windows-netfx3.cab"
        dest: "{{ Generic_Temp_Path }}\\dotNET53"
      when: use_unc_path == 'true'

    - name: Check File Existence on Mapped Drive
      win_stat:
        path: "Z:\\Software\\Microsoft\\dotNET3\\microsoft-windows-netfx3.cab"
      register: file_status

    - name: Display File Status on Mapped Drive
      debug:
        var: file_status

    - name: Copy dotNET 3.5 CAB File to Server using Mapped Drive

      win_copy:
        src: "Z:\\Software\\Microsoft\\dotNET3\\microsoft-windows-netfx3.cab"
        dest: "{{ Generic_Temp_Path }}\\dotNET53"
      when: file_status.stat.exists

    - name: Display Debug Information
      debug:
        msg: "UNC Path: {{ use_unc_path }} | File Exists: {{ file_status.stat.exists }}"

Brad

unread,
Aug 22, 2023, 3:31:26 PM8/22/23
to Ansible Project
Im afraid that didnt work. Still getting the same issues.

I've been playing with win_shell also and still same issue.  Im actually executing two roles in my playbook.  The first role is Add storage creds & map drive & the second is the copy file.

 - name: Add storage creds & map drive
  block:
  - name: Adding creds for mapped drive
    win_credential:
      name: storage.file.core.windows.net
      type: domain_password
      username: localhost\storage
      secret: "{{ storage_account_keys.json['keys'].0.value }}"

  - name: Map drive
    win_mapped_drive:
      letter: Z
      path: \\storage.file.core.windows.net\cmdb
      username: localhost\storage
      password: "{{ storage_account_keys.json['keys'].0.value }}"
  vars:
    ansible_become: yes
    ansible_become_method: runas
    ansible_become_user: "{{ ansible_user }}"
    ansible_become_password: "{{ ansible_password }}"

- name: Copy File
  #win_shell: Copy-Item Z:\Software\Microsoft\dotNET3\microsoft-windows-netfx3.cab -Destination "{{ Generic_Temp_Path }}\\dotNET53\\microsoft-windows-netfx3.cab"
  win_shell: Copy-Item \\storage.file.core.windows.net\cmdb\Software\Microsoft\dotNET3\microsoft-windows-netfx3.cab -Destination "{{ Generic_Temp_Path }}\\dotNET53\\microsoft-windows-netfx3.cab"
  vars:
    become: true
    become_method: runas
    #become_user: SYSTEM
    become_user: "{{ ansible_user }}"
    become_password: "{{ ansible_password }}"
    #become_flags: logon_type=new_credentials logon_flags=netcredentials_only
    become_flags: logon_type=interactive logon_flags=netcredentials_only

If I login as {{ ansible_user }} and run net use without UAC and I can see the Z:.  Yet Ansible will not copy the file.  Ive played with various become flags and all fail.

Any ideas?

Cheers!

Reply all
Reply to author
Forward
0 new messages