Explains the Rivet plug-in system
Rivet plug-ins allow users to modify migration operations or perform other work before and after an operation is applied to a database. Examples include:
USE
statement.There are two plug-in points: before an operation is applied to a database and after an operation is applied to a database.
In order to cancel a migration, a plug-in must throw an exception. For example,
throw ('Operation is invalid: all tables are required to specify a description. Use the -Description parameter to document this table''s purpose.')
To enable plug-ins, you need to configure Rivet so it knows where to look for
them. Set the plug-insRoot
option to the directory path where you want to put
your plug-ins. For example,
{
"SqlServerName": "example.com\Rivet",
"DatabasesRoot": "Databases",
"PluginsRoot": "Tools\\Rivet\\Plugins"
}
Paths in rivet.json files are relative to the rivet.json file. See about_Rivet_Configuration for more information.
Once you've defined your plug-ins directory, you create the plug-in scripts. To
run code before an operation is applied to database, create a
Start-MigrationOperation.ps1
script in your plug-ins directory. It should look
like this:
function Start-MigrationOperation
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[Rivet.Migration]
# The migration the operation is part of.
$Migration,
[Parameter(Mandatory=$true)]
[Rivet.Operation]
# The operation which is about to be applied.
$Operation
)
Set-StrictMode -Version 'Latest'
# Your plug-in logic goes here.
}
To run code after an operation is applied to a database, create a
Complete-MigrationOperation.ps1
script in your plug-ins directory. It should
look like this:
function Complete-MigrationOperation
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[Rivet.Migration]
# The migration the operation is part of.
$Migration,
[Parameter(Mandatory=$true)]
[Rivet.Operation]
# The operation which was just applied.
$Operation
)
Set-StrictMode -Version 'Latest'
# Your plug-in logic goes here.
}
Rivet ships with some sample plug-ins. Look in the Extras
directory.
Each plug-in should have two parameters: the first is a Rivet.Migration
object representing the migration getting run. The second is a
Rivet.Operation
object representing the specific operation getting run. Each
plug-in will get called for each operation in a migration. You'll get the same
migration object for each operation in that migration.
Each operation in Rivet is represented by a unique C# object that you can modify. You can't remove operations from being run. Instead, throw an exception to reject the operation. You are allowed to run additional operations and/or return additional C# operation objects. See the sample plug-ins in the Extras directory that ships with Rivet.