| Server IP : 85.214.239.14 / Your IP : 216.73.216.213 Web Server : Apache/2.4.65 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 8.2.29 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/ansible_collections/community/windows/plugins/modules/ |
Upload File : |
#!powershell
# Copyright: (c) 2017, Red Hat, Inc.
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#Requires -Module Ansible.ModuleUtils.Legacy
$ErrorActionPreference = "Stop"
Set-StrictMode -Version 2
If (-not (Get-Command Get-DiskImage -ErrorAction SilentlyContinue)) {
Fail-Json -message "win_disk_image requires Windows 8+ or Windows Server 2012+"
}
$parsed_args = Parse-Args $args -supports_check_mode $true
$result = @{ changed = $false }
$image_path = Get-AnsibleParam $parsed_args "image_path" -failifempty $result
$state = Get-AnsibleParam $parsed_args "state" -default "present" -validateset "present", "absent"
$check_mode = Get-AnsibleParam $parsed_args "_ansible_check_mode" -default $false
$di = Get-DiskImage $image_path
If ($state -eq "present") {
If (-not $di.Attached) {
$result.changed = $true
If (-not $check_mode) {
$di = Mount-DiskImage $image_path -PassThru
# the actual mount is async, so the CIMInstance result may not immediately contain the data we need
$retry_count = 0
While (-not $di.Attached -and $retry_count -lt 5) {
Start-Sleep -Seconds 1 > $null
$di = $di | Get-DiskImage
$retry_count++
}
If (-not $di.Attached) {
Fail-Json $result -message "Timed out waiting for disk to attach"
}
}
}
# FUTURE: detect/handle "ejected" ISOs
# FUTURE: support explicit drive letter and NTFS in-volume mountpoints.
# VHDs don't always auto-assign, and other system settings can prevent automatic assignment
If ($di.Attached) {
# only try to get the mount_path if the disk is attached (
If ($di.StorageType -eq 1) {
# ISO, we can get the mountpoint directly from Get-Volume
$drive_letters = ($di | Get-Volume).DriveLetter
}
ElseIf ($di.StorageType -in @(2, 3)) {
# VHD/VHDX, need Get-Disk + Get-Partition to discover mountpoint
$drive_letters = ($di | Get-Disk | Get-Partition).DriveLetter
}
# remove any null entries (no drive letter)
$drive_letters = $drive_letters | Where-Object { $_ }
If (-not $drive_letters) {
Fail-Json -message "Unable to retrieve drive letter from mounted image"
}
$result.mount_paths = @($drive_letters | ForEach-Object { "$($_):\" })
}
}
ElseIf ($state -eq "absent") {
If ($di.Attached) {
$result.changed = $true
If (-not $check_mode) {
Dismount-DiskImage $image_path > $null
}
}
}
Exit-Json $result