dsc-xmysql


Keywords
windows, puppetdsc, dsc
License
MIT
Install
puppet module install dsc-xmysql --version 2.0.0-0-1

Documentation

Build status

xMySql

The xMySql module contains the xMySqlServer, xMySqlDatabase, xMySqlUser, xMySqlGrant, xMySqlProvision DSC resources allowing you to setup and configure a MySQL servers, databases, users, and grants.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Contributing

Please check out common DSC Resources contributing guidelines.

Resources

  • xMySqlServer configures MySQL servers
  • xMySqlDatabase configures MySQL databases.
  • xMySqlUser configures MySQL users.
  • xMySqlGrant configures MySQL grants.
  • xMySqlProvison is a composite resource that provisions a set of MySQL servers, databases, users, and permission grants using the other resources.

xMySqlServer

  • ServiceName: Provides the service name to use during setup of MySQL.
  • Ensure: Ensures that the server is Present or Absent.
  • RootPassword: The root password that is used to install a MySQL server. Note: a PSCredential object is used to store the password securely. The user name can be any non-zero length string, but it will be ignored.

xMySqlDatabase

  • Name: Name of the database to create.
  • Ensure: Ensures that the database is Present or Absent.
  • ConnectionCredential: The credential that is used to create the MySQL database.

xMySqlUser

  • Name: Name of the MySQL user to create or remove.
  • Ensure: Ensures that the user is Present or Absent.
  • Credential: Credential for the MySQL user.
  • ConnectionCredential: The credential that is used to create or remove the user.

xMySqlGrant

  • UserName: Name of MySQL user.
  • DatabaseName: MySQL database name to grant permissions.
  • Ensure: Ensure permission grant is Present or Absent
  • PermissionType: MySQL user permission type.
  • ConnectionCredential: The credential that is used to create the grant.

xMySqlProvision

  • ServiceName: Provides the service name to use during setup of MySQL.
  • DownloadUri: The URL/URI used for downloading the MySQL MSI.
  • RootCredential:The MySQL root credentials, user name and password.
  • DatabaseName: The MySQL database name.
  • UserCredential:The credentials, user name and password, for the MySQL user.

Versions

Unreleased

  • Changed to the default appveyor.yml template.
  • Activate the GitHub App Stale on the GitHub repository.
  • Added default template files .codecov.yml, .gitattributes, and .gitignore, and .vscode folder.
  • Added new line to end of file for test files.

2.1.0.0

  • Added import for local MSFT_xMySqlUtilities in Tests
  • Fixed a SQL syntax error for REVOKE in MSFT_xMySqlGrant

2.0.0.0

  • NOTE: This contains breaking Changes
  • Updated all resources to contain unit tests
  • Modified schema on many resources to standardize naming
  • Fixed resources to removing hard coding of MySQL Version (Fixes #2)
  • Removed Debug Tracing of Passwords (Fixes #3)
  • Created standard library to reduce code redundancy

1.1.0.0

  • Resolved attribute between *.psm1 and *.schema.mof files.
  • Fixed encoding

1.0.0.0

  • Initial release with the following resources :
    • xMySqlServer
    • xMySqlDatabase
    • xMySqlUser
    • xMySqlGrant
    • xMySqlProvision

Setup a MySQL server on a single node

This configuration will setup a MySQL server on a single node.

Configuration SQLInstanceInstallationConfiguration
{
    param
    (
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $MySQLInstancePackagePath,
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $MySQLInstancePackageName
    )

    Import-DscResource -Module xMySql
    node $AllNodes.NodeName
    {

        xPackage mySqlInstaller
        {

            Path = $MySQLInstancePackagePath
            ProductId = $Node.PackageProductID
            Name = $MySQLInstancePackageName
        }

        xMySqlServer MySQLInstance
        {
            Ensure = "Present"
            RootPassword = $global:cred
            ServiceName = "MySQLServerInstanceName"
            DependsOn = "[xPackage]mySqlInstaller"
        }
    }
}
# Sample use (parameter values need to be changed according to your scenario):
$global:pwd = ConvertTo-SecureString "pass@word1" -AsPlainText -Force
$global:usrName = "administrator"
$global:cred = New-Object -TypeName System.Management.Automation.PSCredential ($global:usrName,$global:pwd)
SQLInstanceInstallationConfiguration `
    -MySQLInstancePackagePath "http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.17.0.msi" `
    -MySQLInstancePackageName "MySQL Installer" -ConfigurationData .\nodedata.psd1

Setup a MySQL server database

This configuration will setup a MySQL server and create a database.

Configuration SQLInstanceAndDatabaseInstallationConfiguration
{
    param
    (
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $MySQLInstancePackagePath,
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $MySQLInstancePackageName
    )
    Import-DscResource -Module xMySql

    node $AllNodes.NodeName
    {

        xPackage mySqlInstaller
        {

            Path = $MySQLInstancePackagePath
            ProductId = $Node.PackageProductID
            Name = $MySQLInstancePackageName
            Ensure = "Present"
        }

        xMySqlServer MySQLInstance
        {
            Ensure = "Present"
            RootPassword= $global:cred
            ServiceName = "MySQLInstanceServiceName"
            DependsOn = "[xPackage]mySqlInstaller"
        }
        xMySqlDatabase MySQLDatabase
        {
            Ensure = "Present"
            Name = "TestDB"
            ConnectionCredential = $global:cred
            DependsOn = "[xMySqlInstance]MySQLInstance"
        }
    }
}
# Sample use (parameter values need to be changed according to your scenario):
$global:pwd = ConvertTo-SecureString "pass@word1" -AsPlainText -Force
$global:usrName = "administrator"
$global:cred = New-Object -TypeName System.Management.Automation.PSCredential ($global:usrName,$global:pwd)
SQLInstanceAndDatabaseInstallationConfiguration `
    -MySQLInstancePackagePath "http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.17.0.msi" `
    -MySQLInstancePackageName "MySQL Installer" -ConfigurationData .\nodedata.psd1

Setup a MySQL server user

This configuration will setup a MySQL user, assuming mySQL is installed on a local machine with root user $RootUser and root password $global:pwd.

Configuration CreateMySQLUserConfiguration
{
    param
    (
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $Name
    )

    Import-DscResource -Module xMySql
    $mySQLUserCredential = New-Object -TypeName System.Management.Automation.PSCredential ($Name,$global:pwd)
    node ("localhost")
    {
        xMySqlUser NewMySqlUser1
        {
            Name = $Name
            Credential = $mySQLUserCredential
            Ensure = "Present"
            ConnectionCredential = $global:MySQLRootCredential

        }
    }
}
$global:pwd = ConvertTo-SecureString "pass@word1" -AsPlainText -Force
$global:RootUser = "root"
$global:MySQLRootCredential = New-Object -TypeName System.Management.Automation.PSCredential ($global:RootUser,$global:pwd)
# Create localhost.mof
CreateMySQLUserConfiguration -output "$env:temp\CreateMySQLUserConfiguration"

Setup a MySQL server grant

This configuration will grant full acesss to a given MySQL database for a given user. It assumes that mySQL is installed on a local machine with root user $RootUser and root password $global:pwd.

configuration MySQLGrantConfiguration
{
    param
    (
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $UserName,
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $DatabaseName
    )

    Import-DscResource -Module xMySql

    node ("localhost")
    {
        xMySqlGrant mySQLGrant
        {
            UserName = $UserName
            DatabaseName = $DatabaseName
            PermissionType = "ALL PRIVILEGES"
            Ensure = "Present"
            ConnectionCredential = $global:MySQLRootCredential

        }
    }
}
$global:pwd = ConvertTo-SecureString "pass@word1" -AsPlainText -Force
$global:RootUser = "root"
$global:MySQLRootCredential = New-Object -TypeName System.Management.Automation.PSCredential ($global:RootUser,$global:pwd)
# Create localhost.mof
CreateMySQLUserConfiguration -output "$env:temp\MySQLGrantConfiguration"