PSAzureSQLElasticJob.psd1
|
# # Module manifest for module 'PSAzureSQLElasticJob' # # Generated by: Constantin Hager # # Generated on: 17.08.2026 # @{ # Script module or binary module file associated with this manifest. RootModule = 'PSAzureSQLElasticJob.psm1' # Version number of this module. ModuleVersion = '0.2.0' # Supported PSEditions CompatiblePSEditions = @('Core') # ID used to uniquely identify this module GUID = '65db4f19-f166-4956-ad69-a24ddeeb6ced' # Author of this module Author = 'Constantin Hager' # Company or vendor of this module CompanyName = 'Constantin Hager' # Copyright statement for this module Copyright = '(c) Constantin Hager. All rights reserved.' # Description of the functionality provided by this module Description = 'Manages Azure SQL Elastic Jobs, including idempotent provisioning of the Elastic Job Agent server, job database and agent.' # Minimum version of the PowerShell engine required by this module PowerShellVersion = '7.0' # Name of the PowerShell host required by this module # PowerShellHostName = '' # Minimum version of the PowerShell host required by this module # PowerShellHostVersion = '' # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # DotNetFrameworkVersion = '' # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # ClrVersion = '' # Processor architecture (None, X86, Amd64) required by this module # ProcessorArchitecture = '' # Modules that must be imported into the global environment prior to importing this module RequiredModules = @( @{ ModuleName = 'Az.Accounts'; ModuleVersion = '2.13.0' } @{ ModuleName = 'Az.Sql'; ModuleVersion = '4.0.0' } @{ ModuleName = 'Az.ManagedServiceIdentity'; ModuleVersion = '2.0.0' } @{ ModuleName = 'Az.Resources'; ModuleVersion = '6.0.0' } @{ ModuleName = 'PSFramework'; ModuleVersion = '1.9.310' } ) # Assemblies that must be loaded prior to importing this module # RequiredAssemblies = @() # Script files (.ps1) that are run in the caller's environment prior to importing this module. # ScriptsToProcess = @() # Type files (.ps1xml) to be loaded when importing this module # TypesToProcess = @() # Format files (.ps1xml) to be loaded when importing this module # FormatsToProcess = @() # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess # NestedModules = @() # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. FunctionsToExport = @('Add-SqlElasticJobStep','Add-SqlElasticJobTarget','Get-SqlElasticJob','Get-SqlElasticJobAgent','Get-SqlElasticJobCredential','Get-SqlElasticJobStep','Get-SqlElasticJobTargetGroup','New-SqlElasticJob','New-SqlElasticJobAgent','New-SqlElasticJobCredential','New-SqlElasticJobEnvironment','New-SqlElasticJobTargetGroup','New-SqlElasticJobUserAssignedIdentity','Remove-SqlElasticJob','Remove-SqlElasticJobAgent','Remove-SqlElasticJobCredential','Remove-SqlElasticJobStep','Remove-SqlElasticJobTarget','Remove-SqlElasticJobTargetGroup','Set-SqlElasticJob','Set-SqlElasticJobAgent','Set-SqlElasticJobCredential','Set-SqlElasticJobStep','Start-SqlElasticJob','Stop-SqlElasticJob','Test-SqlElasticJobEnvironment') # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = @() # Variables to export from this module VariablesToExport = @() # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. AliasesToExport = @() # DSC resources to export from this module DscResourcesToExport = @() # List of all modules packaged with this module # ModuleList = @() # List of all files packaged with this module # FileList = @() # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. PrivateData = @{ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. Tags = @('Azure', 'AzureSQL', 'ElasticJob', 'ElasticJobs', 'SQL', 'Automation', 'PSEdition_Core') # A URL to the license for this module. LicenseUri = 'https://github.com/constantinhager/PSAzureSQLElasticJob/blob/main/LICENSE' # A URL to the main website for this project. ProjectUri = 'https://github.com/constantinhager/PSAzureSQLElasticJob' # A URL to an icon representing this module. # IconUri = '' # ReleaseNotes of this module ReleaseNotes = '## [0.2.0-preview0004] - 2026-08-20 ### Added - Opt-in Azure subscription integration tests that validate the Elastic Job lifecycle while preserving the supplied resource group, server and database. - Sampler-based project scaffold with GitVersion, Pester 5 and GitHub Actions. - `New-SqlElasticJobEnvironment` to provision the logical SQL server, job database and Elastic Job agent, creating only the parts that are missing. - `New-SqlElasticJobEnvironment` accepts `-UseUserAssignedManagedIdentity` and `-UserAssignedIdentityId` to assign an existing user-assigned managed identity to the Elastic Job agent, idempotently. The output object gains an `Identity` property with the agent''s identity details when used. - `New-SqlElasticJobUserAssignedIdentity` to idempotently create a user-assigned managed identity, and a `-CreateUserAssignedManagedIdentity` (with `-UserAssignedIdentityName`) parameter set on `New-SqlElasticJobEnvironment` that creates the identity when missing and assigns it to the Elastic Job agent in one call. `New-SqlElasticJobUserAssignedIdentity` registers the `Microsoft.ManagedIdentity` resource provider automatically when it is not already registered on the subscription. - `Test-SqlElasticJobEnvironment` to report which parts of an environment exist without changing anything. - `Get-SqlElasticJobAgent`, `New-SqlElasticJobAgent`, `Set-SqlElasticJobAgent` and `Remove-SqlElasticJobAgent` for Elastic Job agent CRUD. - Job CRUD: `Get-SqlElasticJob`, `New-SqlElasticJob`, `Set-SqlElasticJob`, `Remove-SqlElasticJob`, plus `Start-SqlElasticJob` and `Stop-SqlElasticJob`. Schedules are set through the job itself with `-RunOnce` or `-IntervalType`/`-IntervalCount`, matching the Elastic Jobs object model. - Job step CRUD: `Get-SqlElasticJobStep`, `Add-SqlElasticJobStep`, `Set-SqlElasticJobStep` and `Remove-SqlElasticJobStep`. - Job credential CRUD: `Get-SqlElasticJobCredential`, `New-SqlElasticJobCredential`, `Set-SqlElasticJobCredential` and `Remove-SqlElasticJobCredential`. - Target group CRUD: `Get-SqlElasticJobTargetGroup`, `New-SqlElasticJobTargetGroup` and `Remove-SqlElasticJobTargetGroup`, plus `Add-SqlElasticJobTarget` and `Remove-SqlElasticJobTarget`. - GitHub Actions workflow `.github/workflows/ci.yml` covering build, test and release to GitHub and the PowerShell Gallery. - GitHub issue templates under `.github/ISSUE_TEMPLATE/`. - MIT license file. ### Fixed - `-ServerAdministratorCredential` on `New-SqlElasticJobEnvironment` is optional again; it is only required when the logical SQL server does not yet exist. When omitted in that case, you are now prompted interactively for it instead of failing outright or being forced to always supply it. - `New-SqlElasticJobUserAssignedIdentity` now forces `-ErrorAction Stop` on the underlying `New-AzUserAssignedIdentity` call and fails when Azure returns no resource ID, instead of reporting success and letting `New-SqlElasticJobEnvironment` assign an empty identity ID to the Elastic Job agent. - `New-SqlElasticJobEnvironment`''s `AssignedIdentity` output property now reflects whether the Elastic Job agent currently has the requested identity assigned, instead of only whether this call performed the assignment. It previously reported `$false` for an idempotent re-run even though the agent already had the identity. ### Changed - Replace raw Azure not-found errors with a concise status explaining that provisioning will create an absent resource when needed. - Make ordinary Elastic Job lifecycle and existence messages visible by default. - `New-SqlElasticJobEnvironment` now reports whether it reused an existing environment or which resources it created. - The CI release and changelog tasks now use GitHub Actions'' automatic token with repository-content write access, so a successful `main` deployment creates its GitHub release instead of silently skipping it when no personal access token secret is configured. - Every Azure create, update, remove and execution call is now bracketed by an intent and a completion message, and every lookup is traced. Messages carry a resource tag and an operation tag, so `Get-PSFMessage -Tag ''agent''` or `-Tag ''remove''` slices the log without parsing console output. Enable a destination with `Set-PSFLoggingProvider` when a durable log is wanted. - The module now depends on PSFramework. Diagnostics go through `Write-PSFMessage` and are retrievable with `Get-PSFMessage`; domain failures in public commands go through `Stop-PSFFunction`. - Commands that can fail with a domain error gained an `-EnableException` parameter. It defaults to `$true`, which preserves the existing behaviour of raising a terminating error; pass `$false` for a warning and no output. - The job database service objective and logical server version defaults are now PSFramework settings (`PSAzureSQLElasticJob.Provisioning.ServiceObjective` and `...ServerVersion`) instead of hardcoded parameter defaults, so they can be retuned with `Set-PSFConfig` without editing code. ### Deprecated - For soon-to-be removed features. ### Removed - For now removed features. ### Fixed - Avoid duplicate Azure-context status messages during environment checks. - Stop provisioning after an Azure server, database or agent creation failure, preserving accurate creation state and logging the failed provisioning step. - Resource lookups no longer treat an unreadable resource as an absent one. A non-terminating authorization or throttling error from Azure was previously discarded, which could make provisioning attempt to create a resource that already existed and hide the real failure. ### Security - A permission, authentication, quota or throttling failure is never classified as a missing resource, even when Azure words it as "not found or you do not have access". An HTTP status now settles the classification on its own, and message text is only consulted when no status is available. - Every GitHub Actions reference is pinned to a commit SHA, so a moved tag cannot introduce new code into the job that holds the release secrets. - `.gitignore` now excludes common credential material. ' # Prerelease string of this module Prerelease = 'preview0004' # Flag to indicate whether the module requires explicit user acceptance for install/update/save # RequireLicenseAcceptance = $false # External dependent modules of this module # ExternalModuleDependencies = @() } # End of PSData hashtable } # End of PrivateData hashtable # HelpInfo URI of this module # HelpInfoURI = '' # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. # DefaultCommandPrefix = '' } |