DscResources/xMySqlProvision/xMySqlProvision.Schema.psm1

# Composite configuration to provision MySql
configuration xMySqlProvision
{
    param
    (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string] $DownloadUri,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $MySQLVersion,

        [Parameter(Mandatory = $true)]
        [PSCredential] $RootCredential,

        [String] $Port,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $DatabaseName,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $UserName,

        [Parameter(Mandatory = $true)]
        [PSCredential] $UserCredential,

        [parameter(Mandatory = $true)]
        [ValidateSet("ALL PRIVILEGES", "CREATE", "DROP", "DELETE", "INSERT", "SELECT", "UPDATE", "EXECUTE")]
        [ValidateNotNullOrEmpty()]
        [string[]] $PermissionType
    )

        # Make sure the MySQL Installer Console is installed
        Package mySqlInstaller
        {
            Ensure    = "Present"
            Path      = $DownloadURI
            ProductId = "{5848D524-F8CF-4A46-A3E4-B9BDB979A0FE}"
            Name      = "MySQL Installer - Community"
        }

        # Make sure MySQL is installed with the correct port and root credential
        xMySqlServer mySqlServer
        {
            Ensure       = "Present"
            MySQLVersion = $MySQLVersion
            RootPassword = $RootCredential
            Port         = $Port
            DependsOn    = "[Package]mySqlInstaller"
        }

        # Make sure the MySQL database exists
        xMySqlDatabase mySqlDatabase
        {
            Ensure         = "Present"
            DatabaseName   = $DatabaseName
            RootCredential = $RootCredential
            MySQLVersion   = $MySQLVersion
            DependsOn      = "[xMySqlServer]mySqlServer"
        }

        # Make sure the MySQL user exists
        xMySqlUser mySqlUser
        {
            Ensure         = "Present"
            UserName       = $UserName
            UserCredential = $UserCredential
            RootCredential = $RootCredential
            MySQLVersion   = $MySQLVersion
            DependsOn      = "[xMySqlDatabase]mySqlDatabase"
        }

        # Make sure the MySQL user has access to the MySQL database
        xMySqlGrant mySqlGrant
        {
            Ensure         = "Present"               
            UserName       = $UserName
            DatabaseName   = $DatabaseName
            RootCredential = $RootCredential
            PermissionType = $PermissionType
            MySQLVersion   = $MySQLVersion
            DependsOn      = "[xMySqlUser]mySqlUser"
        }
}