Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions step-templates/clone-tenant.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"Name": "Clone Tenant",
"Description": "Clone an Octopus [tenant](https://octopus.com/docs/deployment-patterns/multi-tenant-deployments). The project connections and tenant tags will be cloned and the non-sensitive variables can optionally be cloned.",
"ActionType": "Octopus.Script",
"Version": 1,
"Version": 2,
"Packages": [],
"Properties": {
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptBody": "$apiKey = $CloneTenantStep_ApiKey\n$tenantToClone = $CloneTenantStep_TenantIdToClone\n$tenantName = $CloneTenantStep_TenantName\n$octopusBaseUrl = $OctopusParameters['Octopus.Web.BaseUrl'].Trim('/')\n$cloneVariables = $CloneTenantStep_CloneVariables\n\n$ErrorActionPreference = 'Stop'\n\nif ([string]::IsNullOrWhiteSpace($apiKey)) {\n throw \"The step parameter 'Octopus API Key' was not found. This step requires an API Key to function, please provide one and try again.\"\n}\n\nfunction Invoke-OctopusApi {\n param(\n [Parameter(Position = 0, Mandatory)]$Uri,\n [ValidateSet(\"Get\", \"Post\", \"Put\", \"Delete\")]$Method = 'Get',\n $Body\n )\n $requestParameters = @{\n Uri = ('{0}/{1}' -f $octopusBaseUrl, $Uri.TrimStart('/'))\n Method = $Method\n Headers = @{ \"X-Octopus-ApiKey\" = $apiKey }\n UseBasicParsing = $true\n }\n if ($null -ne $Body) { $requestParameters.Add('Body', ($Body | ConvertTo-Json -Depth 10)) }\n Write-Verbose \"$($Method.ToUpperInvariant()) $($requestParameters.Uri)\" \n \n\n return Invoke-WebRequest @requestParameters | % Content | ConvertFrom-Json\n}\n\n$tenant = Invoke-OctopusApi \"api/tenants/$tenantToClone\"\n\n$tenant.Id = $null\n$tenant.Name = $tenantName\n\n$newTenant = Invoke-OctopusApi \"/api/tenants\" -Method Post -Body $tenant\n\nif ($cloneVariables -eq $true) {\n $variables = Invoke-OctopusApi $tenant.Links.Variables\n $variables.TenantId = $newTenant.Id\n $variables.TenantName = $tenantName\n\n $newVars = Invoke-OctopusApi $newTenant.Links.Variables -Method Put -Body $variables\n}"
"Octopus.Action.Script.ScriptBody": "$apiKey = $CloneTenantStep_ApiKey\n$tenantToClone = $CloneTenantStep_TenantIdToClone\n$tenantName = $CloneTenantStep_TenantName\n$octopusBaseUrl = $OctopusParameters['Octopus.Web.BaseUrl'].Trim('/')\n$cloneVariables = $CloneTenantStep_CloneVariables\n\n$ErrorActionPreference = 'Stop'\n\nif ([string]::IsNullOrWhiteSpace($apiKey)) {\n throw \"The step parameter 'Octopus API Key' was not found. This step requires an API Key to function, please provide one and try again.\"\n}\n\nfunction Invoke-OctopusApi {\n param(\n [Parameter(Position = 0, Mandatory)]$Uri,\n [ValidateSet(\"Get\", \"Post\", \"Put\", \"Delete\")]$Method = 'Get',\n $Body\n )\n $requestParameters = @{\n Uri = ('{0}/{1}' -f $octopusBaseUrl, $Uri.TrimStart('/'))\n Method = $Method\n Headers = @{ \"X-Octopus-ApiKey\" = $apiKey }\n UseBasicParsing = $true\n }\n if ($null -ne $Body) { $requestParameters.Add('Body', ($Body | ConvertTo-Json -Depth 10)) }\n Write-Verbose \"$($Method.ToUpperInvariant()) $($requestParameters.Uri)\" \n \n\n return Invoke-WebRequest @requestParameters | % Content | ConvertFrom-Json\n}\n\nfunction Test-SpacesApi {\n\tWrite-Verbose \"Checking API compatibility\";\n\t$rootDocument = Invoke-OctopusApi 'api/';\n if($rootDocument.Links -ne $null -and $rootDocument.Links.Spaces -ne $null) {\n \tWrite-Verbose \"Spaces API found\"\n \treturn $true;\n }\n Write-Verbose \"Pre-spaces API found\"\n return $false;\n}\n\nif(Test-SpacesApi) {\n\t$spaceId = $OctopusParameters['Octopus.Space.Id'];\n\tif([string]::IsNullOrWhiteSpace($spaceId)) {\n throw \"This step needs to be run in a context that provides a value for the 'Octopus.Space.Id' system variable. In this case, we received a blank value, which isn't expected - please reach out to our support team at https://help.octopus.com if you encounter this error.\";\n }\n\t$tenantApiUrl = \"api/$spaceId/tenants\" ;\n} else {\n\t$tenantApiUrl = \"api/tenants\" ;\n}\n\n$tenant = Invoke-OctopusApi \"$tenantApiUrl/$tenantToClone\"\n\n$tenant.Id = $null\n$tenant.Name = $tenantName\n\n$newTenant = Invoke-OctopusApi $tenantApiUrl -Method Post -Body $tenant\n\nif ($cloneVariables -eq $true) {\n $variables = Invoke-OctopusApi $tenant.Links.Variables\n $variables.TenantId = $newTenant.Id\n $variables.TenantName = $tenantName\n\n $newVars = Invoke-OctopusApi $newTenant.Links.Variables -Method Put -Body $variables\n}"
},
"Parameters": [
{
Expand Down
4 changes: 2 additions & 2 deletions step-templates/create-tenant.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"Name": "Create Tenant",
"Description": "Create an Octopus [tenant](https://octopus.com/docs/deployment-patterns/multi-tenant-deployments) with optional tenant tags and project connections.",
"ActionType": "Octopus.Script",
"Version": 1,
"Version": 2,
"Packages": [],
"Properties": {
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptBody": "$ErrorActionPreference = 'Stop'\n\n$apiKey = $CreateTenantStep_ApiKey\n$tenantName = $CreateTenantStep_TenantName\n$tenantTags = if ($CreateTenantStep_TenantTags -eq $null) { @() } else { $CreateTenantStep_TenantTags | ConvertFrom-Json }\n$projectEnvironments = if ($CreateTenantStep_ProjectEnvironments -eq $null) { @{} } else { $CreateTenantStep_ProjectEnvironments | ConvertFrom-Json }\n$octopusBaseUrl = $OctopusParameters['Octopus.Web.BaseUrl'].Trim('/')\n\nif ([string]::IsNullOrWhiteSpace($apiKey)) {\n throw \"The step parameter 'Octopus API Key' was not found. This step requires an API Key to function, please provide one and try again.\"\n}\n\nfunction Invoke-OctopusApi {\n param(\n [Parameter(Position = 0, Mandatory)]$Uri,\n [ValidateSet(\"Get\", \"Post\", \"Put\", \"Delete\")]$Method = 'Get',\n $Body\n )\n $requestParameters = @{\n Uri = ('{0}/{1}' -f $octopusBaseUrl, $Uri.TrimStart('/'))\n Method = $Method\n Headers = @{ \"X-Octopus-ApiKey\" = $apiKey }\n UseBasicParsing = $true\n }\n if ($null -ne $Body) { $requestParameters.Add('Body', ($Body | ConvertTo-Json -Depth 10)) }\n Write-Verbose \"$($Method.ToUpperInvariant()) $($requestParameters.Uri)\" \n \n return Invoke-WebRequest @requestParameters | % Content | ConvertFrom-Json\n}\n\n$body = @{\n\tId = $null\n Name = $tenantName\n TenantTags = @($tenantTags)\n ProjectEnvironments = $projectEnvironments #@{ \"Projects-63\" = @(\"Environments-1\",\"Environments-2\") }\n}\n\nInvoke-OctopusApi \"/api/tenants\" -Method Post -Body $body | Out-Null"
"Octopus.Action.Script.ScriptBody": "$ErrorActionPreference = 'Stop'\n\n$apiKey = $CreateTenantStep_ApiKey\n$tenantName = $CreateTenantStep_TenantName\n$tenantTags = if ($CreateTenantStep_TenantTags -eq $null) { @() } else { $CreateTenantStep_TenantTags | ConvertFrom-Json }\n$projectEnvironments = if ($CreateTenantStep_ProjectEnvironments -eq $null) { @{} } else { $CreateTenantStep_ProjectEnvironments | ConvertFrom-Json }\n$octopusBaseUrl = $OctopusParameters['Octopus.Web.BaseUrl'].Trim('/')\n\nif ([string]::IsNullOrWhiteSpace($apiKey)) {\n throw \"The step parameter 'Octopus API Key' was not found. This step requires an API Key to function, please provide one and try again.\"\n}\n\nfunction Invoke-OctopusApi {\n param(\n [Parameter(Position = 0, Mandatory)]$Uri,\n [ValidateSet(\"Get\", \"Post\", \"Put\", \"Delete\")]$Method = 'Get',\n $Body\n )\n $requestParameters = @{\n Uri = ('{0}/{1}' -f $octopusBaseUrl, $Uri.TrimStart('/'))\n Method = $Method\n Headers = @{ \"X-Octopus-ApiKey\" = $apiKey }\n UseBasicParsing = $true\n }\n if ($null -ne $Body) { $requestParameters.Add('Body', ($Body | ConvertTo-Json -Depth 10)) }\n Write-Verbose \"$($Method.ToUpperInvariant()) $($requestParameters.Uri)\" \n \n return Invoke-WebRequest @requestParameters | % Content | ConvertFrom-Json\n}\n\nfunction Test-SpacesApi {\n\tWrite-Verbose \"Checking API compatibility\";\n\t$rootDocument = Invoke-OctopusApi 'api/';\n if($rootDocument.Links -ne $null -and $rootDocument.Links.Spaces -ne $null) {\n \tWrite-Verbose \"Spaces API found\"\n \treturn $true;\n }\n Write-Verbose \"Pre-spaces API found\"\n return $false;\n}\n\nif(Test-SpacesApi) {\n\t$spaceId = $OctopusParameters['Octopus.Space.Id'];\n if([string]::IsNullOrWhiteSpace($spaceId)) {\n throw \"This step needs to be run in a context that provides a value for the 'Octopus.Space.Id' system variable. In this case, we received a blank value, which isn't expected - please reach out to our support team at https://help.octopus.com if you encounter this error.\";\n }\n\t$baseApiUrl = \"/api/$spaceId\" ;\n} else {\n\t$baseApiUrl = \"/api\" ;\n}\n\n$body = @{\n\tId = $null\n Name = $tenantName\n TenantTags = @($tenantTags)\n ProjectEnvironments = $projectEnvironments #@{ \"Projects-63\" = @(\"Environments-1\",\"Environments-2\") }\n}\n\nInvoke-OctopusApi \"$baseApiUrl/tenants\" -Method Post -Body $body | Out-Null"
},
"Parameters": [
{
Expand Down
4 changes: 2 additions & 2 deletions step-templates/octopus-chain-deployment.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions step-templates/octopus-consolidate-releasenotes.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"Name": "Consolidate Release Notes",
"Description": "Consolidates all Release Notes between the last successful release in the current Environment and this one by merging or concatenating them.",
"ActionType": "Octopus.Script",
"Version": 9,
"Version": 10,
"Properties": {
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.RunOnServer": "true",
"Octopus.Action.Script.ScriptBody": "$baseUri = $OctopusParameters['Octopus.Web.BaseUrl']\r\n$reqheaders = @{\"X-Octopus-ApiKey\" = $Consolidate_ApiKey }\r\n$putReqHeaders = @{\"X-HTTP-Method-Override\" = \"PUT\"; \"X-Octopus-ApiKey\" = $Consolidate_ApiKey }\r\n\r\n$remWhiteSpace = [bool]::Parse($Consolidate_RemoveWhitespace)\r\n$deDupe = [bool]::Parse($Consolidate_Dedupe)\r\n$reverse = ($Consolidate_Order -eq \"Oldest\")\r\n\r\n# Get details we'll need\r\n$projectId = $OctopusParameters['Octopus.Project.Id']\r\n$thisReleaseNumber = $OctopusParameters['Octopus.Release.Number']\r\n$lastSuccessfulReleaseId = $OctopusParameters['Octopus.Release.CurrentForEnvironment.Id']\r\n$lastSuccessfulReleaseNumber = $OctopusParameters['Octopus.Release.CurrentForEnvironment.Number']\r\n\r\n# Get all previous releases to this environment\r\n$releaseUri = \"$baseUri/api/projects/$projectId/releases\"\r\ntry {\r\n $allReleases = Invoke-WebRequest $releaseUri -Headers $reqheaders -UseBasicParsing | ConvertFrom-Json\r\n} catch {\r\n if ($_.Exception.Response.StatusCode.Value__ -ne 404) {\r\n $result = $_.Exception.Response.GetResponseStream()\r\n $reader = New-Object System.Io.StreamReader($result);\r\n $responseBody = $reader.ReadToEnd();\r\n throw \"Error occurred: $responseBody\"\r\n }\r\n}\r\n\r\n# Find and aggregate release notes\r\n$aggregateNotes = @()\r\n\r\nWrite-Host \"Finding all release notes between the last successful release: $lastSuccessfulReleaseNumber and this release: $thisReleaseNumber\"\r\nforeach ($rel in $allReleases.Items) {\r\n if ($rel.Id -ne $lastSuccessfulReleaseId) {\r\n Write-Host \"Found release notes for $($rel.Version)\"\r\n $theseNotes = @()\r\n #split into lines\r\n $lines = $rel.ReleaseNotes -split \"`n\"\r\n foreach ($line in $lines) {\r\n if (-not $remWhitespace -or -not [string]::IsNullOrWhiteSpace($line)) {\r\n if (-not $deDupe -or -not $aggregateNotes.Contains($line)) {\r\n $theseNotes = $theseNotes + $line\r\n }\r\n }\r\n }\r\n if ($reverse) {\r\n $aggregateNotes = $theseNotes + $aggregateNotes\r\n } else {\r\n $aggregateNotes = $aggregateNotes + $theseNotes\r\n }\r\n } else {\r\n break\r\n }\r\n}\r\n$aggregateNotesText = $aggregateNotes -join \"`n`n\"\r\n\r\n# Get the current release\r\n$releaseUri = \"$baseUri/api/projects/$projectId/releases/$thisReleaseNumber\"\r\ntry {\r\n $currentRelease = Invoke-WebRequest $releaseUri -Headers $reqheaders -UseBasicParsing | ConvertFrom-Json\r\n} catch {\r\n if ($_.Exception.Response.StatusCode.Value__ -ne 404) {\r\n $result = $_.Exception.Response.GetResponseStream()\r\n $reader = New-Object System.Io.StreamReader($result);\r\n $responseBody = $reader.ReadToEnd();\r\n throw \"Error occurred: $responseBody\"\r\n }\r\n}\r\n\r\n# Update the release notes for the current release\r\n$currentRelease.ReleaseNotes = $aggregateNotesText\r\nWrite-Host \"Updating release notes for $thisReleaseNumber`:`n`n\"\r\nWrite-Host $aggregateNotesText\r\ntry {\r\n $releaseUri = \"$baseUri/api/releases/$($currentRelease.Id)\"\r\n $currentReleaseBody = $currentRelease | ConvertTo-Json\r\n $result = Invoke-WebRequest $releaseUri -Method Post -Headers $putReqHeaders -Body $currentReleaseBody -UseBasicParsing | ConvertFrom-Json\r\n} catch {\r\n $result = $_.Exception.Response.GetResponseStream()\r\n $reader = New-Object System.Io.StreamReader($result);\r\n $responseBody = $reader.ReadToEnd();\r\n Write-Host $responseBody\r\n throw \"Error occurred: $responseBody\"\r\n}",
"Octopus.Action.Script.ScriptBody": "$baseUri = $OctopusParameters['Octopus.Web.BaseUrl']\n$reqheaders = @{\"X-Octopus-ApiKey\" = $Consolidate_ApiKey }\n$putReqHeaders = @{\"X-HTTP-Method-Override\" = \"PUT\"; \"X-Octopus-ApiKey\" = $Consolidate_ApiKey }\n\n$remWhiteSpace = [bool]::Parse($Consolidate_RemoveWhitespace)\n$deDupe = [bool]::Parse($Consolidate_Dedupe)\n$reverse = ($Consolidate_Order -eq \"Oldest\")\n\n# Get details we'll need\n$projectId = $OctopusParameters['Octopus.Project.Id']\n$thisReleaseNumber = $OctopusParameters['Octopus.Release.Number']\n$lastSuccessfulReleaseId = $OctopusParameters['Octopus.Release.CurrentForEnvironment.Id']\n$lastSuccessfulReleaseNumber = $OctopusParameters['Octopus.Release.CurrentForEnvironment.Number']\n\nfunction Test-SpacesApi {\n\tWrite-Verbose \"Checking API compatibility\";\n\t$rootDocument = Invoke-WebRequest \"$baseUri/api\" -Headers $reqHeaders -UseBasicParsing | ConvertFrom-Json;\n if($rootDocument.Links -ne $null -and $rootDocument.Links.Spaces -ne $null) {\n \tWrite-Verbose \"Spaces API found\"\n \treturn $true;\n }\n Write-Verbose \"Pre-spaces API found\"\n return $false;\n}\n\nif(Test-SpacesApi) {\n\t$spaceId = $OctopusParameters['Octopus.Space.Id'];\n if([string]::IsNullOrWhiteSpace($spaceId)) {\n throw \"This step needs to be run in a context that provides a value for the 'Octopus.Space.Id' system variable. In this case, we received a blank value, which isn't expected - please reach out to our support team at https://help.octopus.com if you encounter this error.\";\n }\n\t$baseApiUrl = \"/api/$spaceId\" ;\n} else {\n\t$baseApiUrl = \"/api\" ;\n}\n\n# Get all previous releases to this environment\n$releaseUri = \"$baseUri$baseApiUrl/projects/$projectId/releases\"\ntry {\n $allReleases = Invoke-WebRequest $releaseUri -Headers $reqheaders -UseBasicParsing | ConvertFrom-Json\n} catch {\n if ($_.Exception.Response.StatusCode.Value__ -ne 404) {\n $result = $_.Exception.Response.GetResponseStream()\n $reader = New-Object System.Io.StreamReader($result);\n $responseBody = $reader.ReadToEnd();\n throw \"Error occurred: $responseBody\"\n }\n}\n\n# Find and aggregate release notes\n$aggregateNotes = @()\n\nWrite-Host \"Finding all release notes between the last successful release: $lastSuccessfulReleaseNumber and this release: $thisReleaseNumber\"\nforeach ($rel in $allReleases.Items) {\n if ($rel.Id -ne $lastSuccessfulReleaseId) {\n Write-Host \"Found release notes for $($rel.Version)\"\n $theseNotes = @()\n #split into lines\n $lines = $rel.ReleaseNotes -split \"`n\"\n foreach ($line in $lines) {\n if (-not $remWhitespace -or -not [string]::IsNullOrWhiteSpace($line)) {\n if (-not $deDupe -or -not $aggregateNotes.Contains($line)) {\n $theseNotes = $theseNotes + $line\n }\n }\n }\n if ($reverse) {\n $aggregateNotes = $theseNotes + $aggregateNotes\n } else {\n $aggregateNotes = $aggregateNotes + $theseNotes\n }\n } else {\n break\n }\n}\n$aggregateNotesText = $aggregateNotes -join \"`n`n\"\n\n# Get the current release\n$releaseUri = \"$baseUri$baseApiUrl/projects/$projectId/releases/$thisReleaseNumber\"\ntry {\n $currentRelease = Invoke-WebRequest $releaseUri -Headers $reqheaders -UseBasicParsing | ConvertFrom-Json\n} catch {\n if ($_.Exception.Response.StatusCode.Value__ -ne 404) {\n $result = $_.Exception.Response.GetResponseStream()\n $reader = New-Object System.Io.StreamReader($result);\n $responseBody = $reader.ReadToEnd();\n throw \"Error occurred: $responseBody\"\n }\n}\n\n# Update the release notes for the current release\n$currentRelease.ReleaseNotes = $aggregateNotesText\nWrite-Host \"Updating release notes for $thisReleaseNumber`:`n`n\"\nWrite-Host $aggregateNotesText\ntry {\n $releaseUri = \"$baseUri$baseApiUrl/releases/$($currentRelease.Id)\"\n $currentReleaseBody = $currentRelease | ConvertTo-Json\n $result = Invoke-WebRequest $releaseUri -Method Post -Headers $putReqHeaders -Body $currentReleaseBody -UseBasicParsing | ConvertFrom-Json\n} catch {\n $result = $_.Exception.Response.GetResponseStream()\n $reader = New-Object System.Io.StreamReader($result);\n $responseBody = $reader.ReadToEnd();\n Write-Host $responseBody\n throw \"Error occurred: $responseBody\"\n}",
"Octopus.Action.Script.ScriptFileName": null,
"Octopus.Action.Package.FeedId": null,
"Octopus.Action.Package.PackageId": null
Expand Down
Loading