File: //lib/python3.9/site-packages/ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1
#!powershell
# -*- coding: utf-8 -*-
# (c) 2022, John McCall (@lowlydba)
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#AnsibleRequires -CSharpUtil Ansible.Basic
#AnsibleRequires -PowerShell ansible_collections.lowlydba.sqlserver.plugins.module_utils._SqlServerUtils
#Requires -Modules @{ ModuleName="dbatools"; ModuleVersion="1.1.112" }
$ErrorActionPreference = "Stop"
$spec = @{
supports_check_mode = $true
options = @{
database = @{type = 'str'; required = $true }
path = @{type = 'str'; required = $false }
file_path = @{type = 'str'; required = $false }
increment_prefix = @{type = 'bool'; required = $false; default = $false }
replace_in_name = @{type = 'bool'; required = $false; default = $false }
copy_only = @{type = 'bool'; required = $false; default = $false }
type = @{type = 'str'; required = $false; default = 'database'; choices = @('full', 'log', 'differential', 'diff', 'database') }
timestamp_format = @{type = 'str'; required = $false }
encryption_certificate = @{type = 'str'; required = $false }
encryption_algorithm = @{type = 'str'; required = $false; choices = @('AES128', 'AES192', 'AES256', 'TRIPLEDES') }
create_folder = @{type = 'bool'; required = $false; default = $false }
file_count = @{type = 'int'; required = $false; default = 0 }
compress = @{type = 'bool'; required = $false; default = $false }
checksum = @{type = 'bool'; required = $false; default = $false }
verify = @{type = 'bool'; required = $false; default = $false }
no_recovery = @{type = 'bool'; required = $false; default = $false }
build_path = @{type = 'bool'; required = $false; default = $false }
max_transfer_size = @{type = 'int'; required = $false; default = 0 }
with_format = @{type = 'bool'; required = $false; default = $false }
initialize = @{type = 'bool'; required = $false; default = $false }
ignore_file_checks = @{type = 'bool'; required = $false; default = $false }
block_size = @{type = 'str'; required = $false; choices = @('0.5kb', '1kb', '2kb', '4kb', '8kb', '16kb', '32kb', '64kb') }
buffer_count = @{type = 'int'; required = $false; default = 0 }
azure_base_url = @{type = 'str'; required = $false }
azure_credential = @{type = 'str'; required = $false }
}
mutually_exclusive = @(
, @('path', 'azure_base_url')
)
required_together = @(
, @('encryption_algorithm', 'encryption_certificate')
)
}
$module = [Ansible.Basic.AnsibleModule]::Create($args, $spec, @(Get-LowlyDbaSqlServerAuthSpec))
$sqlInstance, $sqlCredential = Get-SqlCredential -Module $module
$database = $module.Params.database
$path = $module.Params.path
$filePath = $module.Params.file_path
$incrementPrefix = $module.Params.increment_prefix
$replaceInName = $module.Params.replace_in_name
$copyOnly = $module.Params.copy_only
$type = $module.Params.type
$createFolder = $module.Params.create_folder
$fileCount = $module.Params.file_count
$compressBackup = $module.Params.compress_backup
$checkSum = $module.Params.checksum
$verify = $module.Params.verify
$maxTransferSize = $module.Params.max_transfer_size
$blockSize = $module.Params.block_size
$bufferCount = $module.Params.buffer_count
$noRecovery = $module.Params.no_recovery
$buildPath = $module.Params.build_path
$withFormat = $module.Params.with_format
$initialize = $module.Params.initialize
$timestampFormat = $module.Params.timestamp_format
$ignoreFileChecks = $module.Params.ignore_file_checks
$encryptionAlgorithm = $module.Params.encryption_algorithm
$encryptionCertificate = $modules.Params.encryption_certificate
$azureBaseUrl = $modules.Params.azure_base_url
$azureCredential = $modules.Param.azure_credential
$checkMode = $module.CheckMode
$module.Result.changed = $false
$PSDefaultParameterValues = @{ "*:EnableException" = $true; "*:Confirm" = $false; "*:WhatIf" = $checkMode }
try {
$backupSplat = @{
SqlInstance = $sqlInstance
SqlCredential = $sqlCredential
Database = $database
IncrementPrefix = $incrementPrefix
ReplaceInName = $replaceInName
CopyOnly = $copyOnly
Type = $type
CreateFolder = $createFolder
FileCount = $fileCount
CompressBackup = $compressBackup
Checksum = $checkSum
Verify = $verify
MaxTransferSize = $maxTransferSize
BufferCount = $bufferCount
NoRecovery = $noRecovery
BuildPath = $buildPath
WithFormat = $withFormat
Initialize = $initialize
IgnoreFileChecks = $ignoreFileChecks
}
if ($null -ne $path) {
$backupSplat.Add("Path", $path)
}
if ($null -ne $filePath) {
$backupSplat.Add("FilePath", $filePath)
}
if ($null -ne $blockSize) {
$backupSplat.Add("BlockSize", ($blockSize / 1))
}
if ($null -ne $timestampFormat) {
$backupSplat.Add("TimestampFormat", $timestampFormat)
}
if ($null -ne $encryptionAlgorithm) {
$backupSplat.Add("EncryptionAlgorithm", $encryptionAlgorithm)
}
if ($null -ne $encryptionCertificate) {
$backupSplat.Add("EncryptionCertificate", $encryptionCertificate)
}
if ($null -ne $azureBaseUrl) {
$backupSplat.Add("AzureBaseURL", $azureBaseUrl)
}
if ($null -ne $azureCredential) {
$backupSplat.Add("AzureCredential", $azureCredential)
}
$output = Backup-DbaDatabase @backupSplat
if ($null -ne $output) {
$resultData = ConvertTo-SerializableObject -InputObject $output
$module.Result.data = $resultData
$module.Result.changed = $true
}
$module.ExitJson()
}
catch {
$module.FailJson("Error backing up database: $($_.Exception.Message).", $_)
}