Octopus.Script exported 2022-06-14 by twerthi belongs to ‘PostgreSQL’ category.
Adds database user to a role.
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 name
addPostgresServerName =
Name of the PostreSQL server.
Port
addPostgresServerPort = 5432
Port that the PostgreSQL server listens on.
Authentication Method
postgreSqlAuthenticationMethod = usernamepassword
Method used to authenticate to the PostgreSQL server.
Login name
addLoginWithAddRoleRights =
Login name of a user that can add roles to other users.
Login password
addLoginPasswordWithAddRoleRights =
Password for the login account.
User name
addUsername =
Name of the user to add the role to.
Role name
addRoleName =
Name of the role to add to the user.
Trust SSL certificate
addTrustSSL = False
Force trusting the SSL certificate.
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))
}
function Get-UserInRole
{
# Define parameters
param (
$Username,
$RoleName)
# Execute query
$userRole = Invoke-SqlQuery "SELECT r.rolname, r1.rolname as `"role`" FROM pg_catalog.pg_roles r JOIN pg_catalog.pg_auth_members m ON (m.member = r.oid) JOIN pg_roles r1 ON (m.roleid=r1.oid) WHERE r.rolcanlogin AND r1.rolname = '$RoleName' AND r.rolname = '$Username'"
# Check to see if anything was returned
if ($userRole.ItemArray.Count -gt 0)
{
# Found
return $true
}
# Not found
return $false
}
# 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 location
$PowerShellModuleName = "$LocalModules\$PowerShellModuleName"
}
# Import the module
Import-Module -Name $PowerShellModuleName
# Get whether trust certificate is necessary
$addTrustSSL = [System.Convert]::ToBoolean("$addTrustSSL")
try
{
# Declare initial connection string
$connectionString = "Server=$addPostgresServerName;Port=$addPostgresServerPort;Database=postgres;"
# Check to see if we need to trust the ssl cert
if ($addTrustSSL -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=$addLoginWithAddRoleRights;Password=`"$($token.access_token)`";"
break
}
"awsiam"
{
# Region is part of the RDS endpoint, extract
$region = ($addPostgresServerName.Split("."))[2]
Write-Host "Generating AWS IAM token ..."
$addLoginPasswordWithAddRoleRights = (aws rds generate-db-auth-token --hostname $addPostgresServerName --region $region --port $addPostgresServerPort --username $addLoginWithAddRoleRights)
# Append remaining portion of connection string
$connectionString += ";User Id=$addLoginWithAddRoleRights;Password=`"$addLoginPasswordWithAddRoleRights`";"
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($addLoginWithAddRoleRights))
{
# Use the service account name, but strip off the .gserviceaccount.com part
$addLoginWithAddRoleRights = $serviceAccount.SubString(0, $serviceAccount.IndexOf(".gserviceaccount.com"))
}
# Append remaining portion of connection string
$connectionString += ";User Id=$addLoginWithAddRoleRights;Password=`"$($token.access_token)`";"
break
}
"usernamepassword"
{
# Append remaining portion of connection string
$connectionString += ";User Id=$addLoginWithAddRoleRights;Password=`"$addLoginPasswordWithAddRoleRights`";"
break
}
"windowsauthentication"
{
# Append remaining portion of connection string
$connectionString += ";Integrated Security=True;"
}
}
# Open connection
Open-PostGreConnection -ConnectionString $connectionString
# See if database exists
$userInRole = Get-UserInRole -Username $addUsername -RoleName $addRoleName
if ($userInRole -eq $false)
{
# Create database
Write-Output "Adding user $addUsername to role $addRoleName ..."
$executionResults = Invoke-SqlUpdate "GRANT $addRoleName TO `"$addUsername`";"
# See if it was created
$userInRole = Get-UserInRole -Username $addUsername -RoleName $addRoleName
# Check array
if ($userInRole -eq $true)
{
# Success
Write-Output "$addUserName added to $addRoleName successfully!"
}
else
{
# Failed
Write-Error "Failure adding $addUserName to $addRoleName!"
}
}
else
{
# Display message
Write-Output "User $addUsername is already in role $addRoleName"
}
}
finally
{
Close-SqlConnection
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "72f8bfaf-14c3-4807-b687-c07738c14ba1",
"Name": "Postgres - Add Database User To Role",
"Description": "Adds database user to a role.\n\nNote:\n- AWS EC2 IAM Role authentication requires the AWS CLI be installed.",
"Version": 6,
"ExportedAt": "2022-06-14T15:09:44.806Z",
"ActionType": "Octopus.Script",
"Author": "twerthi",
"Packages": [],
"Parameters": [
{
"Id": "802920ef-155f-4d43-aba7-0c32b09e90e8",
"Name": "addPostgresServerName",
"Label": "Server name",
"HelpText": "Name of the PostreSQL server.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "89dcd174-d798-49be-8a09-d8a528cb6847",
"Name": "addPostgresServerPort",
"Label": "Port",
"HelpText": "Port that the PostgreSQL server listens on.",
"DefaultValue": "5432",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "e357a82c-a25d-4f0e-ac99-b7928d884c25",
"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": "9a975cd9-3891-4150-b747-bb78a76fcfb8",
"Name": "addLoginWithAddRoleRights",
"Label": "Login name",
"HelpText": "Login name of a user that can add roles to other users.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "76b5d5a6-4953-4dc4-92c9-3487b7852a2f",
"Name": "addLoginPasswordWithAddRoleRights",
"Label": "Login password",
"HelpText": "Password for the login account.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "Sensitive"
}
},
{
"Id": "cf31a6ae-244f-49bb-b60b-e80987b96cdf",
"Name": "addUsername",
"Label": "User name",
"HelpText": "Name of the user to add the role to.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "631a3a6c-203c-4925-9ee9-d2086debde37",
"Name": "addRoleName",
"Label": "Role name",
"HelpText": "Name of the role to add to the user.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "c2fa3736-8d0c-4de6-9d11-72d0910c9cb7",
"Name": "addTrustSSL",
"Label": "Trust SSL certificate",
"HelpText": "Force trusting the SSL certificate.",
"DefaultValue": "False",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
}
}
],
"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\nfunction Get-UserInRole\n{\n\t# Define parameters\n param (\n $Username,\n $RoleName)\n \n\t# Execute query\n $userRole = Invoke-SqlQuery \"SELECT r.rolname, r1.rolname as `\"role`\" FROM pg_catalog.pg_roles r JOIN pg_catalog.pg_auth_members m ON (m.member = r.oid) JOIN pg_roles r1 ON (m.roleid=r1.oid) WHERE r.rolcanlogin AND r1.rolname = '$RoleName' AND r.rolname = '$Username'\"\n\n # Check to see if anything was returned\n if ($userRole.ItemArray.Count -gt 0)\n {\n # Found\n return $true\n }\n \n\n # Not found\n return $false\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 location\n $PowerShellModuleName = \"$LocalModules\\$PowerShellModuleName\"\n}\n\n# Import the module\nImport-Module -Name $PowerShellModuleName\n\n# Get whether trust certificate is necessary\n$addTrustSSL = [System.Convert]::ToBoolean(\"$addTrustSSL\")\n\ntry\n{\n\t# Declare initial connection string\n $connectionString = \"Server=$addPostgresServerName;Port=$addPostgresServerPort;Database=postgres;\"\n\n\t# Check to see if we need to trust the ssl cert\n\tif ($addTrustSSL -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=$addLoginWithAddRoleRights;Password=`\"$($token.access_token)`\";\"\n \n break\n } \n \"awsiam\"\n {\n # Region is part of the RDS endpoint, extract\n $region = ($addPostgresServerName.Split(\".\"))[2]\n\n Write-Host \"Generating AWS IAM token ...\"\n $addLoginPasswordWithAddRoleRights = (aws rds generate-db-auth-token --hostname $addPostgresServerName --region $region --port $addPostgresServerPort --username $addLoginWithAddRoleRights)\n\n # Append remaining portion of connection string\n $connectionString += \";User Id=$addLoginWithAddRoleRights;Password=`\"$addLoginPasswordWithAddRoleRights`\";\"\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($addLoginWithAddRoleRights))\n {\n \t# Use the service account name, but strip off the .gserviceaccount.com part\n $addLoginWithAddRoleRights = $serviceAccount.SubString(0, $serviceAccount.IndexOf(\".gserviceaccount.com\"))\n }\n \n # Append remaining portion of connection string\n $connectionString += \";User Id=$addLoginWithAddRoleRights;Password=`\"$($token.access_token)`\";\"\n \n break\n }\n \"usernamepassword\"\n {\n # Append remaining portion of connection string\n $connectionString += \";User Id=$addLoginWithAddRoleRights;Password=`\"$addLoginPasswordWithAddRoleRights`\";\"\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 # See if database exists\n $userInRole = Get-UserInRole -Username $addUsername -RoleName $addRoleName\n\n if ($userInRole -eq $false)\n {\n # Create database\n Write-Output \"Adding user $addUsername to role $addRoleName ...\"\n $executionResults = Invoke-SqlUpdate \"GRANT $addRoleName TO `\"$addUsername`\";\"\n\n # See if it was created\n $userInRole = Get-UserInRole -Username $addUsername -RoleName $addRoleName\n \n # Check array\n if ($userInRole -eq $true)\n {\n # Success\n Write-Output \"$addUserName added to $addRoleName successfully!\"\n }\n else\n {\n # Failed\n Write-Error \"Failure adding $addUserName to $addRoleName!\"\n }\n }\n else\n {\n \t# Display message\n Write-Output \"User $addUsername is already in role $addRoleName\"\n }\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-add-database-user-to-role.json",
"Website": "/step-templates/72f8bfaf-14c3-4807-b687-c07738c14ba1",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Tuesday, June 14, 2022