summaryrefslogtreecommitdiffstats
path: root/ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1
diff options
context:
space:
mode:
Diffstat (limited to 'ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1')
-rw-r--r--ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1138
1 files changed, 138 insertions, 0 deletions
diff --git a/ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1 b/ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1
new file mode 100644
index 000000000..163d45036
--- /dev/null
+++ b/ansible_collections/lowlydba/sqlserver/plugins/modules/backup.ps1
@@ -0,0 +1,138 @@
+#!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).", $_)
+}