--- - name: fail with invalid path win_mapped_drive: letter: invalid state: absent register: fail_invalid_letter failed_when: "fail_invalid_letter.msg != 'letter must be a single letter from A-Z, was: invalid'" - name: fail without specify path when creating drive win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' state: present register: fail_path_missing failed_when: "fail_path_missing.msg != 'state is present but all of the following are missing: path'" - name: fail when specifying letter with existing physical path win_mapped_drive: letter: c path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present register: fail_local_letter failed_when: fail_local_letter.msg != 'failed to create mapped drive c, this letter is in use and is pointing to a non UNC path' - name: create mapped drive check win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present register: create_drive_check check_mode: yes - name: get actual of create mapped drive check win_command: 'net use {{test_win_mapped_drive_letter}}:' # Get-PSDrive/Get-WmiObject/Get-CimInstance doesn't work over WinRM register: create_drive_actual_check failed_when: False - name: assert create mapped drive check assert: that: - create_drive_check is changed - create_drive_actual_check.rc == 2 # should fail with this error code when it isn't found - name: create mapped drive win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present register: create_drive - name: get actual of create mapped drive win_command: 'net use {{test_win_mapped_drive_letter}}:' register: create_drive_actual - name: assert create mapped drive assert: that: - create_drive is changed - create_drive_actual.rc == 0 - create_drive_actual.stdout_lines[1] == "Remote name \\\\{{ansible_hostname}}\\{{test_win_mapped_drive_path}}" - name: create mapped drive again win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present register: create_drive_again - name: assert create mapped drive again assert: that: - create_drive_again is not changed - name: change mapped drive target check win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path2}} state: present register: change_drive_target_check check_mode: yes - name: get actual of change mapped drive target check win_command: 'net use {{test_win_mapped_drive_letter}}:' register: change_drive_target_actual_check - name: assert change mapped drive target check assert: that: - change_drive_target_check is changed - change_drive_target_actual_check.rc == 0 - change_drive_target_actual_check.stdout_lines[1] == "Remote name \\\\{{ansible_hostname}}\\{{test_win_mapped_drive_path}}" - name: change mapped drive target win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path2}} state: present register: change_drive_target - name: get actual of change mapped drive target win_command: 'net use {{test_win_mapped_drive_letter}}:' register: change_drive_target_actual - name: assert change mapped drive target assert: that: - change_drive_target is changed - change_drive_target_actual.rc == 0 - change_drive_target_actual.stdout_lines[1] == "Remote name \\\\{{ansible_hostname}}\\{{test_win_mapped_drive_path2}}" - name: fail to delete mapped drive if target doesn't match win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: absent register: fail_delete_incorrect_target failed_when: fail_delete_incorrect_target.msg != 'did not delete mapped drive ' + test_win_mapped_drive_letter + ', the target path is pointing to a different location at \\\\' + ansible_hostname + '\\' + test_win_mapped_drive_path2 - name: delete mapped drive check win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path2}} state: absent register: delete_drive_check check_mode: yes - name: get actual of delete mapped drive check win_command: 'net use {{test_win_mapped_drive_letter}}:' register: delete_drive_actual_check - name: assert delete mapped drive check assert: that: - delete_drive_check is changed - delete_drive_actual_check.rc == 0 - delete_drive_actual_check.stdout_lines[1] == "Remote name \\\\{{ansible_hostname}}\\{{test_win_mapped_drive_path2}}" - name: delete mapped drive win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path2}} state: absent register: delete_drive - name: get actual of delete mapped drive win_command: 'net use {{test_win_mapped_drive_letter}}:' register: delete_drive_actual failed_when: False - name: assert delete mapped drive assert: that: - delete_drive is changed - delete_drive_actual.rc == 2 - name: delete mapped drive again win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path2}} state: absent register: delete_drive_again - name: assert delete mapped drive again assert: that: - delete_drive_again is not changed # not much we can do to test out the credentials except that it sets it, winrm # makes it hard to actually test out we can still access the mapped drive - name: map drive with current credentials check win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present username: '{{ansible_hostname}}\{{test_win_mapped_drive_temp_user}}' password: '{{test_win_mapped_drive_temp_password}}' register: map_with_credentials_check check_mode: yes - name: get actual of map drive with current credentials check win_command: 'net use {{test_win_mapped_drive_letter}}:' register: map_with_credentials_actual_check failed_when: False - name: assert map drive with current credentials check assert: that: - map_with_credentials_check is changed - map_with_credentials_actual_check.rc == 2 - name: map drive with current credentials win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present username: '{{ansible_hostname}}\{{test_win_mapped_drive_temp_user}}' password: '{{test_win_mapped_drive_temp_password}}' register: map_with_credentials - name: get actual of map drive with current credentials win_command: 'net use {{test_win_mapped_drive_letter}}:' register: map_with_credentials_actual - name: get username of mapped network drive with credentials win_reg_stat: path: HKCU:\Network\{{test_win_mapped_drive_letter}} name: UserName register: map_with_credential_actual_username - name: assert map drive with current credentials assert: that: - map_with_credentials is changed - map_with_credentials_actual.rc == 0 - map_with_credential_actual_username.value == '' # we explicitly remove the username part in the module - name: map drive with current credentials again win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present username: '{{ansible_hostname}}\{{test_win_mapped_drive_temp_user}}' password: '{{test_win_mapped_drive_temp_password}}' register: map_with_credentials_again - name: assert map drive with current credentials again assert: that: - not map_with_credentials_again is changed - name: delete mapped drive without path check win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' state: absent register: delete_without_path_check check_mode: yes - name: get actual delete mapped drive without path check win_command: 'net use {{test_win_mapped_drive_letter}}:' register: delete_without_path_actual_check - name: assert delete mapped drive without path check assert: that: - delete_without_path_check is changed - delete_without_path_actual_check.rc == 0 - name: delete mapped drive without path win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' state: absent register: delete_without_path - name: get actual delete mapped drive without path win_command: 'net use {{test_win_mapped_drive_letter}}:' register: delete_without_path_actual failed_when: False - name: assert delete mapped drive without path check assert: that: - delete_without_path is changed - delete_without_path_actual.rc == 2 - name: delete mapped drive without path again win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' state: absent register: delete_without_path_again - name: assert delete mapped drive without path check again assert: that: - delete_without_path_again is not changed - name: store credential for test network account win_credential: name: '{{ ansible_hostname }}' type: domain_password username: '{{ test_win_mapped_drive_temp_user }}' secret: '{{ test_win_mapped_drive_temp_password }}' state: present vars: &become_vars ansible_become: yes ansible_become_method: runas ansible_become_user: '{{ ansible_user }}' ansible_become_pass: '{{ ansible_password }}' - name: map drive with stored cred (check mode) win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present check_mode: yes vars: *become_vars register: map_with_stored_cred_check - name: get actual of map drive with stored cred (check mode) win_command: 'net use {{test_win_mapped_drive_letter}}:' register: map_with_stored_cred_actual_check failed_when: False - name: assert map drive with stored cred (check mode) assert: that: - map_with_stored_cred_check is changed - map_with_stored_cred_actual_check.rc == 2 - name: map drive with stored cred win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present vars: *become_vars register: map_with_stored_cred - name: get actual of map drive with stored cred win_command: 'net use {{test_win_mapped_drive_letter}}:' register: map_with_stored_cred_actual - name: get username of mapped network drive with stored cred win_reg_stat: path: HKCU:\Network\{{test_win_mapped_drive_letter}} name: UserName register: map_with_stored_cred_actual_username - name: assert map drive with stored cred assert: that: - map_with_stored_cred is changed - map_with_stored_cred_actual.rc == 0 - map_with_stored_cred_actual_username.value == '' - name: map drive with stored cred again win_mapped_drive: letter: '{{test_win_mapped_drive_letter}}' path: \\{{ansible_hostname}}\{{test_win_mapped_drive_path}} state: present vars: *become_vars register: map_with_stored_cred_again - name: assert map drive with stored cred again assert: that: - not map_with_stored_cred_again is changed