Postgres - Execute SQL

Octopus.Script exported 2022-06-15 by twerthi belongs to ‘PostgreSQL’ category.

Creates a Postgres database if it doesn’t already exist.

Note:

  • AWS EC2 IAM Role authentication requires the AWS CLI be installed.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Server

postgresqlServerName =

Hostname (or IP) of the MySQL database server.

Authentication Method

postgresqlAuthenticationMethod = usernamepassword

Method used to authenticate to the PostgreSQL server.

Username

postgresqlUsername =

Username to use for the connection

Password

postgesqlUserPassword =

Password for the user account

Database Name

postgresqlDatabaseName =

Name of the database to execute against.

Port

postgresqlServerPort = 5432

Port for the database instance.

Trust SSL Certificate

postgresqlTrustSSL = False

Force trusting an SSL Certificate.

Command Timeout

postgresqlCommandTimeout = 30

Timeout value (in seconds) for SQL commands

Command

postgresqlCommand =

SQL statement(s) to execute.

Script body

Steps based on this template will execute the following PowerShell script.

# Define functions
function Get-ModuleInstalled
{
    # Define parameters
    param(
        $PowerShellModuleName
    )

    # Check to see if the module is installed
    if ($null -ne (Get-Module -ListAvailable -Name $PowerShellModuleName))
    {
        # It is installed
        return $true
    }
    else
    {
        # Module not installed
        return $false
    }
}

function Install-PowerShellModule
{
    # Define parameters
    param(
        $PowerShellModuleName,
        $LocalModulesPath
    )

	# Check to see if the package provider has been installed
    if ((Get-NugetPackageProviderNotInstalled) -ne $false)
    {
    	# Display that we need the nuget package provider
        Write-Host "Nuget package provider not found, installing ..."
        
        # Install Nuget package provider
        Install-PackageProvider -Name Nuget -Force
    }

	# Save the module in the temporary location
    Save-Module -Name $PowerShellModuleName -Path $LocalModulesPath -Force
}

function Get-NugetPackageProviderNotInstalled
{
	# See if the nuget package provider has been installed
    return ($null -eq (Get-PackageProvider -ListAvailable -Name Nuget -ErrorAction SilentlyContinue))
}

# Define PowerShell Modules path
$LocalModules = (New-Item "$PSScriptRoot\Modules" -ItemType Directory -Force).FullName
$env:PSModulePath = "$LocalModules$([System.IO.Path]::PathSeparator)$env:PSModulePath"
$PowerShellModuleName = "SimplySql"

# Set secure protocols
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12

# Check to see if SimplySql module is installed
if ((Get-ModuleInstalled -PowerShellModuleName $PowerShellModuleName) -ne $true)
{
    # Tell user what we're doing
    Write-Output "PowerShell module $PowerShellModuleName is not installed, downloading temporary copy ..."

    # Install temporary copy
    Install-PowerShellModule -PowerShellModuleName $PowerShellModuleName -LocalModulesPath $LocalModules
}

# Display
Write-Output "Importing module $PowerShellModuleName ..."

# Check to see if it was downloaded
if ((Test-Path -Path "$LocalModules\$PowerShellModuleName") -eq $true)
{
	# Use specific version
    $PowerShellModuleName = "$LocalModules\$PowerShellModuleName"
}

# Import the module
Import-Module -Name $PowerShellModuleName

# Get whether trust certificate is necessary
$postgresqlTrustSSL = [System.Convert]::ToBoolean("$postgresqlTrustSSL")

try
{
	# Declare initial connection string
    $connectionString = "Server=$postgresqlServerName;Port=$postgresqlServerPort;Database=$postgresqlDatabaseName;"
    
	# Check to see if we need to trust the ssl cert
	if ($postgresqlTrustSSL -eq $true)
	{
        # Append SSL connection string components
        $connectionString += "SSL Mode=Require;Trust Server Certificate=true;"
	}

    # Update the connection string based on authentication method
    switch ($postgreSqlAuthenticationMethod)
    {
        "azuremanagedidentity"
        {
        	# Get login token
            Write-Host "Generating Azure Managed Identity token ..."
            $token = Invoke-RestMethod -Method GET -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://ossrdbms-aad.database.windows.net" -Headers @{"MetaData" = "true"}
            
            # Append remaining portion of connection string
            $connectionString += ";User Id=$postgresqlUsername;Password=`"$($token.access_token)`";"
            
            break
        }
        "awsiam"
        {
            # Region is part of the RDS endpoint, extract
            $region = ($createPosgreSQLServerName.Split("."))[2]

            Write-Host "Generating AWS IAM token ..."
            $createUserPassword = (aws rds generate-db-auth-token --hostname $postgresqlServerName --region $region --port $createPort --username $postgresqlUsername)

            # Append remaining portion of connection string
            $connectionString += ";User Id=$postgresqlUsername;Password=`"$postgesqlUserPassword`";"

            break
        }
        "gcpserviceaccount"
        {
            # Define header
            $header = @{ "Metadata-Flavor" = "Google"}

            # Retrieve service accounts
            $serviceAccounts = Invoke-RestMethod -Method Get -Uri "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -Headers $header

            # Results returned in plain text format, get into array and remove empty entries
            $serviceAccounts = $serviceAccounts.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)

            # Retreive the specific service account assigned to the VM
            $serviceAccount = $serviceAccounts | Where-Object {$_.Contains("iam.gserviceaccount.com") }

            Write-Host "Generating GCP IAM token ..."
            # Retrieve token for account
            $token = Invoke-RestMethod -Method Get -Uri "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/$serviceAccount/token" -Headers $header
            
            # Check to see if there was a username provided
            if ([string]::IsNullOrWhitespace($postgresqlUsername))
            {
            	# Use the service account name, but strip off the .gserviceaccount.com part
                $postgresqlUsername = $serviceAccount.SubString(0, $serviceAccount.IndexOf(".gserviceaccount.com"))
            }
  
            # Append remaining portion of connection string
            $connectionString += ";User Id=$postgresqlUsername;Password=`"$($token.access_token)`";"
  
            break
        }
        "usernamepassword"
        {
            # Append remaining portion of connection string
            $connectionString += ";User Id=$postgresqlUsername;Password=`"$postgesqlUserPassword`";"

            break    
        }

        "windowsauthentication"
        {
            # Append remaining portion of connection string
            $connectionString += ";Integrated Security=True;"
        }
    }

	# Open connection
    Open-PostGreConnection -ConnectionString $connectionString

    # Execute the statement
    $executionResult = Invoke-SqlUpdate -Query "$postgresqlCommand" -CommandTimeout $postgresqlCommandTimeout
    
    # Display the result
    Get-SqlMessage
}
finally
{
    Close-SqlConnection
}



Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "9a9c8c2c-d50e-4dc8-8e7e-b561f6e8fc15",
  "Name": "Postgres - Execute SQL",
  "Description": "Creates a Postgres database if it doesn't already exist.\n\nNote:\n- AWS EC2 IAM Role authentication requires the AWS CLI be installed.",
  "Version": 3,
  "ExportedAt": "2022-06-15T21:51:29.119Z",
  "ActionType": "Octopus.Script",
  "Author": "twerthi",
  "Packages": [],
  "Parameters": [
    {
      "Id": "3adf249d-aef2-41dc-922d-a3cfb67c4afe",
      "Name": "postgresqlServerName",
      "Label": "Server",
      "HelpText": "Hostname (or IP) of the MySQL database server.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "0fbfc453-3495-42b9-b13a-c7db532bc030",
      "Name": "postgresqlAuthenticationMethod",
      "Label": "Authentication Method",
      "HelpText": "Method used to authenticate to the PostgreSQL server.",
      "DefaultValue": "usernamepassword",
      "DisplaySettings": {
        "Octopus.ControlType": "Select",
        "Octopus.SelectOptions": "awsiam|AWS EC2 IAM Role\nazuremanagedidentity|Azure Managed Identity\ngcpserviceaccount|GCP Service Account\nusernamepassword|Username\\Password\nwindowsauthentication|Windows Authentication"
      }
    },
    {
      "Id": "cba7ecb6-e23d-462e-97d8-2d72e28d3233",
      "Name": "postgresqlUsername",
      "Label": "Username",
      "HelpText": "Username to use for the connection",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "0fc033f0-7446-4698-b003-bc18549d45b3",
      "Name": "postgesqlUserPassword",
      "Label": "Password",
      "HelpText": "Password for the user account",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "0f2cea01-dd43-4f3e-87aa-1d1ca2974e3e",
      "Name": "postgresqlDatabaseName",
      "Label": "Database Name",
      "HelpText": "Name of the database to execute against.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "ef1a940d-cd67-49b6-b584-c79d918b4707",
      "Name": "postgresqlServerPort",
      "Label": "Port",
      "HelpText": "Port for the database instance.",
      "DefaultValue": "5432",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "355fb14a-2dfd-4b41-98a3-87b7d177f716",
      "Name": "postgresqlTrustSSL",
      "Label": "Trust SSL Certificate",
      "HelpText": "Force trusting an SSL Certificate.",
      "DefaultValue": "False",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "4d7dbc06-697c-4585-b18d-043ed1c120a7",
      "Name": "postgresqlCommandTimeout",
      "Label": "Command Timeout",
      "HelpText": "Timeout value (in seconds) for SQL commands",
      "DefaultValue": "30",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "5a810fee-d9e9-4200-8540-2a22b3681be9",
      "Name": "postgresqlCommand",
      "Label": "Command",
      "HelpText": "SQL statement(s) to execute.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "MultiLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "# Define functions\nfunction Get-ModuleInstalled\n{\n    # Define parameters\n    param(\n        $PowerShellModuleName\n    )\n\n    # Check to see if the module is installed\n    if ($null -ne (Get-Module -ListAvailable -Name $PowerShellModuleName))\n    {\n        # It is installed\n        return $true\n    }\n    else\n    {\n        # Module not installed\n        return $false\n    }\n}\n\nfunction Install-PowerShellModule\n{\n    # Define parameters\n    param(\n        $PowerShellModuleName,\n        $LocalModulesPath\n    )\n\n\t# Check to see if the package provider has been installed\n    if ((Get-NugetPackageProviderNotInstalled) -ne $false)\n    {\n    \t# Display that we need the nuget package provider\n        Write-Host \"Nuget package provider not found, installing ...\"\n        \n        # Install Nuget package provider\n        Install-PackageProvider -Name Nuget -Force\n    }\n\n\t# Save the module in the temporary location\n    Save-Module -Name $PowerShellModuleName -Path $LocalModulesPath -Force\n}\n\nfunction Get-NugetPackageProviderNotInstalled\n{\n\t# See if the nuget package provider has been installed\n    return ($null -eq (Get-PackageProvider -ListAvailable -Name Nuget -ErrorAction SilentlyContinue))\n}\n\n# Define PowerShell Modules path\n$LocalModules = (New-Item \"$PSScriptRoot\\Modules\" -ItemType Directory -Force).FullName\n$env:PSModulePath = \"$LocalModules$([System.IO.Path]::PathSeparator)$env:PSModulePath\"\n$PowerShellModuleName = \"SimplySql\"\n\n# Set secure protocols\n[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12\n\n# Check to see if SimplySql module is installed\nif ((Get-ModuleInstalled -PowerShellModuleName $PowerShellModuleName) -ne $true)\n{\n    # Tell user what we're doing\n    Write-Output \"PowerShell module $PowerShellModuleName is not installed, downloading temporary copy ...\"\n\n    # Install temporary copy\n    Install-PowerShellModule -PowerShellModuleName $PowerShellModuleName -LocalModulesPath $LocalModules\n}\n\n# Display\nWrite-Output \"Importing module $PowerShellModuleName ...\"\n\n# Check to see if it was downloaded\nif ((Test-Path -Path \"$LocalModules\\$PowerShellModuleName\") -eq $true)\n{\n\t# Use specific version\n    $PowerShellModuleName = \"$LocalModules\\$PowerShellModuleName\"\n}\n\n# Import the module\nImport-Module -Name $PowerShellModuleName\n\n# Get whether trust certificate is necessary\n$postgresqlTrustSSL = [System.Convert]::ToBoolean(\"$postgresqlTrustSSL\")\n\ntry\n{\n\t# Declare initial connection string\n    $connectionString = \"Server=$postgresqlServerName;Port=$postgresqlServerPort;Database=$postgresqlDatabaseName;\"\n    \n\t# Check to see if we need to trust the ssl cert\n\tif ($postgresqlTrustSSL -eq $true)\n\t{\n        # Append SSL connection string components\n        $connectionString += \"SSL Mode=Require;Trust Server Certificate=true;\"\n\t}\n\n    # Update the connection string based on authentication method\n    switch ($postgreSqlAuthenticationMethod)\n    {\n        \"azuremanagedidentity\"\n        {\n        \t# Get login token\n            Write-Host \"Generating Azure Managed Identity token ...\"\n            $token = Invoke-RestMethod -Method GET -Uri \"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://ossrdbms-aad.database.windows.net\" -Headers @{\"MetaData\" = \"true\"}\n            \n            # Append remaining portion of connection string\n            $connectionString += \";User Id=$postgresqlUsername;Password=`\"$($token.access_token)`\";\"\n            \n            break\n        }\n        \"awsiam\"\n        {\n            # Region is part of the RDS endpoint, extract\n            $region = ($createPosgreSQLServerName.Split(\".\"))[2]\n\n            Write-Host \"Generating AWS IAM token ...\"\n            $createUserPassword = (aws rds generate-db-auth-token --hostname $postgresqlServerName --region $region --port $createPort --username $postgresqlUsername)\n\n            # Append remaining portion of connection string\n            $connectionString += \";User Id=$postgresqlUsername;Password=`\"$postgesqlUserPassword`\";\"\n\n            break\n        }\n        \"gcpserviceaccount\"\n        {\n            # Define header\n            $header = @{ \"Metadata-Flavor\" = \"Google\"}\n\n            # Retrieve service accounts\n            $serviceAccounts = Invoke-RestMethod -Method Get -Uri \"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/\" -Headers $header\n\n            # Results returned in plain text format, get into array and remove empty entries\n            $serviceAccounts = $serviceAccounts.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)\n\n            # Retreive the specific service account assigned to the VM\n            $serviceAccount = $serviceAccounts | Where-Object {$_.Contains(\"iam.gserviceaccount.com\") }\n\n            Write-Host \"Generating GCP IAM token ...\"\n            # Retrieve token for account\n            $token = Invoke-RestMethod -Method Get -Uri \"http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/$serviceAccount/token\" -Headers $header\n            \n            # Check to see if there was a username provided\n            if ([string]::IsNullOrWhitespace($postgresqlUsername))\n            {\n            \t# Use the service account name, but strip off the .gserviceaccount.com part\n                $postgresqlUsername = $serviceAccount.SubString(0, $serviceAccount.IndexOf(\".gserviceaccount.com\"))\n            }\n  \n            # Append remaining portion of connection string\n            $connectionString += \";User Id=$postgresqlUsername;Password=`\"$($token.access_token)`\";\"\n  \n            break\n        }\n        \"usernamepassword\"\n        {\n            # Append remaining portion of connection string\n            $connectionString += \";User Id=$postgresqlUsername;Password=`\"$postgesqlUserPassword`\";\"\n\n            break    \n        }\n\n        \"windowsauthentication\"\n        {\n            # Append remaining portion of connection string\n            $connectionString += \";Integrated Security=True;\"\n        }\n    }\n\n\t# Open connection\n    Open-PostGreConnection -ConnectionString $connectionString\n\n    # Execute the statement\n    $executionResult = Invoke-SqlUpdate -Query \"$postgresqlCommand\" -CommandTimeout $postgresqlCommandTimeout\n    \n    # Display the result\n    Get-SqlMessage\n}\nfinally\n{\n    Close-SqlConnection\n}\n\n\n"
  },
  "Category": "PostgreSQL",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/postgres-execute-sql.json",
  "Website": "/step-templates/9a9c8c2c-d50e-4dc8-8e7e-b561f6e8fc15",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Wednesday, June 15, 2022