lib/databases.ps1
<#
.SYNOPSIS Set the custom Cosmos DB Database types to the database returned by an API call. .DESCRIPTION This function applies the custom types to the database returned by an API call. .PARAMETER Database This is the database that is returned by a user API call. #> function Set-CosmosDbDatabaseType { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] $Database ) foreach ($item in $Database) { $item.PSObject.TypeNames.Insert(0, 'CosmosDB.Database') } return $Database } <# .SYNOPSIS Return the resource path for a database object. .DESCRIPTION This cmdlet returns the resource identifier for a database object. .PARAMETER Id This is the Id of the database. #> function Get-CosmosDbDatabaseResourcePath { [CmdletBinding()] [OutputType([System.String])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id ) return ('dbs/{0}' -f $Id) } <# .SYNOPSIS Return the databases in a CosmosDB account. .DESCRIPTION This cmdlet will return the databases in a CosmosDB account. If the Id is specified then only the database matching this Id will be returned, otherwise all databases will be returned. .PARAMETER Connection This is an object containing the connection information of the CosmosDB database that will be accessed. It should be created by `New-CosmosDbConnection`. If the connection contains a database it will be ignored. .PARAMETER Account The account name of the CosmosDB to access. .PARAMETER Key The key to be used to access this CosmosDB. .PARAMETER KeyType The type of key that will be used to access ths CosmosDB. .PARAMETER Id This is the Id of the database to get. #> function Get-CosmosDbDatabase { [CmdletBinding(DefaultParameterSetName = 'Connection')] [OutputType([Object])] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Connection')] [ValidateNotNullOrEmpty()] [CosmosDb.Connection] $Connection, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Id ) if ($PSBoundParameters.ContainsKey('Id')) { $null = $PSBoundParameters.Remove('Id') $database = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Get' ` -ResourceType 'dbs' ` -ResourcePath ('dbs/{0}' -f $Id) } else { $result = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Get' ` -ResourceType 'dbs' $database = $result.Databases } if ($database) { return (Set-CosmosDbDatabaseType -Database $database) } } <# .SYNOPSIS Create a new database in a CosmosDB account. .DESCRIPTION This cmdlet will create a database in CosmosDB. .PARAMETER Connection This is an object containing the connection information of the CosmosDB database that will be deleted. It should be created by `New-CosmosDbConnection`. .PARAMETER Account The account name of the CosmosDB to access. .PARAMETER Key The key to be used to access this CosmosDB. .PARAMETER KeyType The type of key that will be used to access ths CosmosDB. .PARAMETER Id This is the Id of the database to create. #> function New-CosmosDbDatabase { [CmdletBinding(DefaultParameterSetName = 'Connection')] [OutputType([Object])] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Connection')] [ValidateNotNullOrEmpty()] [CosmosDb.Connection] $Connection, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id ) $null = $PSBoundParameters.Remove('Id') $database = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Post' ` -ResourceType 'dbs' ` -Body "{ `"id`": `"$id`" }" if ($database) { return (Set-CosmosDbDatabaseType -Database $database) } } <# .SYNOPSIS Delete a datanase from a CosmosDB account. .DESCRIPTION This cmdlet will delete a database in CosmosDB. .PARAMETER Connection This is an object containing the connection information of the CosmosDB database that will be deleted. It should be created by `New-CosmosDbConnection`. .PARAMETER Account The account name of the CosmosDB to access. .PARAMETER Key The key to be used to access this CosmosDB. .PARAMETER KeyType The type of key that will be used to access ths CosmosDB. .PARAMETER Id This is the Id of the database to delete. #> function Remove-CosmosDbDatabase { [CmdletBinding(DefaultParameterSetName = 'Connection')] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Connection')] [ValidateNotNullOrEmpty()] [CosmosDb.Connection] $Connection, [Parameter(Mandatory = $true, ParameterSetName = 'Account')] [ValidateNotNullOrEmpty()] [System.String] $Account, [Parameter()] [ValidateNotNullOrEmpty()] [System.Security.SecureString] $Key, [Parameter()] [ValidateSet('master', 'resource')] [System.String] $KeyType = 'master', [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $Id ) $null = $PSBoundParameters.Remove('Id') $null = Invoke-CosmosDbRequest @PSBoundParameters ` -Method 'Delete' ` -ResourceType 'dbs' ` -ResourcePath ('dbs/{0}' -f $Id) } |