Skip to content

Commit 96becf2

Browse files
authored
Merge pull request #1518 from OctopusDeploy/add-argo-rollout-steps
Adding argo rollout step templates
2 parents 7bccb40 + ae71c4c commit 96becf2

6 files changed

+236
-0
lines changed

gulpfile.babel.js

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ function humanize(categoryId) {
111111
return "ApexSQL";
112112
case "apollo":
113113
return "Apollo GraphQL";
114+
case "argo":
115+
return "Argo";
114116
case "aspnet":
115117
return "ASP.NET";
116118
case "aws":
+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"Id": "a757705d-2551-42bf-8cef-8dd99bd6b4f9",
3+
"Name": "Argo - Rollouts Pause",
4+
"Description": "Set the rollout paused state to 'true'",
5+
"ActionType": "Octopus.KubernetesRunScript",
6+
"Version": 1,
7+
"CommunityActionTemplateId": null,
8+
"Packages": [],
9+
"GitDependencies": [],
10+
"Properties": {
11+
"Octopus.Action.Script.ScriptSource": "Inline",
12+
"Octopus.Action.Script.Syntax": "PowerShell",
13+
"Octopus.Action.Script.ScriptBody": "# Installs the Argo Rollouts plugin\nfunction Install-Plugin\n{\n# Define parameters\n\tparam ($PluginUri,\n $PluginFilename\n )\n \n # Check for plugin folder\n if ((Test-Path -Path \"$PWD/plugins\") -eq $false)\n {\n\t\t# Create new plugins folder\n New-Item -Path \"$PWD/plugins\" -ItemType \"Directory\"\n \n # Add to path\n $env:PATH = \"$($PWD)/plugins$([IO.Path]::PathSeparator)\" + $env:PATH\n }\n\n\t# Download plugin\n\tInvoke-WebRequest -Uri \"$PluginUri\" -OutFile \"$PWD/plugins/$PluginFilename\"\n\n\t# Make file executable\n if ($IsLinux)\n {\n\t\t# Make it executable\n \tchmod +x ./plugins/$PluginFilename\n }\n \n if ($IsWindows)\n {\n \t# Update filename to include .exe extension\n Rename-Item -Path \"$PWD/plugins/$PluginFilename\" -NewName \"$PWD/plugins/$($PluginFilename).exe\"\n }\n}\n\n# When listing plugins, kubectl looks in all paths defined in $env:PATH and will fail if the path does not exist\nfunction Verify-Path-Variable\n{\n\t# Get current path and split into array\n $paths = $env:PATH.Split([IO.Path]::PathSeparator)\n $verifiedPaths = @()\n \n # Loop through paths\n foreach ($path in $paths)\n {\n \t# Check for existence\n if ((Test-Path -Path $path) -eq $true)\n {\n \t# Add to verified\n $verifiedPaths += $path\n }\n }\n \n # Return verified paths\n return ($verifiedPaths -join [IO.Path]::PathSeparator)\n}\n\nfunction Get-Plugin-Installed\n{\n\t# Define parameters\n param (\n \t$PluginName,\n $InstalledPlugins\n )\n \n \t$isInstalled = $false\n \n\tforeach ($plugin in $installedPlugins)\n \t{\n\t\tif ($plugin -like \"$($PluginName)*\")\n {\n \t$isInstalled = $true\n \tbreak\n }\n\t}\n \n return $isInstalled\n}\n\n# Check to see if $IsWindows is available\nif ($null -eq $IsWindows) {\n Write-Host \"Determining Operating System...\"\n $IsWindows = ([System.Environment]::OSVersion.Platform -eq \"Win32NT\")\n $IsLinux = ([System.Environment]::OSVersion.Platform -eq \"Unix\")\n}\n\n# Fix ANSI Color on PWSH Core issues when displaying objects\nif ($PSEdition -eq \"Core\") {\n $PSStyle.OutputRendering = \"PlainText\"\n}\n\n# Check to see if it's running on Windows\nif ($IsWindows) {\n # Disable the progress bar so downloading files via Invoke-WebRequest are faster\n $ProgressPreference = 'SilentlyContinue'\n}\n\n# Set TLS\n[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12\n\n# Verify all PATH variables are avaialable\n$env:PATH = Verify-Path-Variable\nif ($IsLinux)\n{\n\t$pluginUri = \"https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64\"\n}\n\nif ($IsWindows)\n{\n\t$pluginUri = \"https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-windows-amd64\"\n}\n\ntry \n{\n # Check to see if plugins are installed\n $pluginList = (kubectl plugin list 2>&1)\n\n # This is the path that Linux will take\n if ($lastExitCode -ne 0 -and $pluginList.Exception.Message -eq \"error: unable to find any kubectl plugins in your PATH\") \n {\n Install-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\"\n }\n else\n {\n # Parse list\n \t$pluginList = $pluginList.Split(\"`n\", [System.StringSplitOptions]::RemoveEmptyEntries)\n \n if ((Get-Plugin-Installed -PluginName \"kubectl-argo-rollouts\" -InstalledPlugins $pluginList) -eq $false)\n {\n \tInstall-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\"\n }\n else\n {\n \tWrite-Host \"Argo Rollout kubectl plugin found ...\"\n }\n } \n}\ncatch\n{\n\t# On Windows, the executable will cause an error if no plugins found so this the path Windows will take\n if ($_.Exception.Message -eq \"error: unable to find any kubectl plugins in your PATH\")\n {\n Install-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\" \n }\n else\n {\n \t# Something else happened, we need to surface the error\n throw\n }\n}\n\n# Get parameters\n$rolloutsName = $OctopusParameters['Argo.Rollout.Name']\n$rolloutsNamespace = $OctopusParameters['Argo.Rollout.Namespace']\n\n# Create arguments array\n$kubectlArguments = @(\"argo\", \"rollouts\", \"pause\", $rolloutsName, \"--namespace\", $rolloutsNamespace)\n\n# Pause rollout\nkubectl $kubectlArguments"
14+
},
15+
"Parameters": [
16+
{
17+
"Id": "d7665ee0-08b1-4c3a-b7f9-bf9ccfa63219",
18+
"Name": "Argo.Rollout.Name",
19+
"Label": "Rollout Name",
20+
"HelpText": "Name of the Argo Rollout to pause.",
21+
"DefaultValue": "",
22+
"DisplaySettings": {
23+
"Octopus.ControlType": "SingleLineText"
24+
}
25+
},
26+
{
27+
"Id": "8a9ed999-5c3f-4652-abbb-07f592205bfc",
28+
"Name": "Argo.Rollout.Namespace",
29+
"Label": "Namespace",
30+
"HelpText": "The namespace where the rollout exists.",
31+
"DefaultValue": "default",
32+
"DisplaySettings": {
33+
"Octopus.ControlType": "SingleLineText"
34+
}
35+
}
36+
],
37+
"StepPackageId": "Octopus.KubernetesRunScript",
38+
"$Meta": {
39+
"ExportedAt": "2024-06-06T19:54:47.156Z",
40+
"OctopusVersion": "2024.1.12815",
41+
"Type": "ActionTemplate"
42+
},
43+
"LastModifiedBy": "twerthi",
44+
"Category": "argo"
45+
}
+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"Id": "cccd7fe9-b3b5-4f56-84bd-2986d5e68e06",
3+
"Name": "Argo - Rollouts Promote",
4+
"Description": "Promotes an Argo Rollout.",
5+
"ActionType": "Octopus.KubernetesRunScript",
6+
"Version": 1,
7+
"CommunityActionTemplateId": null,
8+
"Packages": [],
9+
"GitDependencies": [],
10+
"Properties": {
11+
"Octopus.Action.Script.ScriptSource": "Inline",
12+
"Octopus.Action.Script.Syntax": "PowerShell",
13+
"Octopus.Action.Script.ScriptBody": "# Installs the Argo Rollouts plugin\nfunction Install-Plugin\n{\n# Define parameters\n\tparam ($PluginUri,\n $PluginFilename\n )\n \n # Check for plugin folder\n if ((Test-Path -Path \"$PWD/plugins\") -eq $false)\n {\n\t\t# Create new plugins folder\n New-Item -Path \"$PWD/plugins\" -ItemType \"Directory\"\n \n # Add to path\n $env:PATH = \"$($PWD)/plugins$([IO.Path]::PathSeparator)\" + $env:PATH\n }\n\n\t# Download plugin\n\tInvoke-WebRequest -Uri \"$PluginUri\" -OutFile \"$PWD/plugins/$PluginFilename\"\n\n\t# Make file executable\n if ($IsLinux)\n {\n\t\t# Make it executable\n \tchmod +x ./plugins/$PluginFilename\n }\n \n if ($IsWindows)\n {\n \t# Update filename to include .exe extension\n Rename-Item -Path \"$PWD/plugins/$PluginFilename\" -NewName \"$PWD/plugins/$($PluginFilename).exe\"\n }\n}\n\n# When listing plugins, kubectl looks in all paths defined in $env:PATH and will fail if the path does not exist\nfunction Verify-Path-Variable\n{\n\t# Get current path and split into array\n $paths = $env:PATH.Split([IO.Path]::PathSeparator)\n $verifiedPaths = @()\n \n # Loop through paths\n foreach ($path in $paths)\n {\n \t# Check for existence\n if ((Test-Path -Path $path) -eq $true)\n {\n \t# Add to verified\n $verifiedPaths += $path\n }\n }\n \n # Return verified paths\n return ($verifiedPaths -join [IO.Path]::PathSeparator)\n}\n\nfunction Get-Plugin-Installed\n{\n\t# Define parameters\n param (\n \t$PluginName,\n $InstalledPlugins\n )\n \n \t$isInstalled = $false\n \n\tforeach ($plugin in $installedPlugins)\n \t{\n\t\tif ($plugin -like \"$($PluginName)*\")\n {\n \t$isInstalled = $true\n \tbreak\n }\n\t}\n \n return $isInstalled\n}\n\n# Check to see if $IsWindows is available\nif ($null -eq $IsWindows) {\n Write-Host \"Determining Operating System...\"\n $IsWindows = ([System.Environment]::OSVersion.Platform -eq \"Win32NT\")\n $IsLinux = ([System.Environment]::OSVersion.Platform -eq \"Unix\")\n}\n\n# Fix ANSI Color on PWSH Core issues when displaying objects\nif ($PSEdition -eq \"Core\") {\n $PSStyle.OutputRendering = \"PlainText\"\n}\n\n# Check to see if it's running on Windows\nif ($IsWindows) {\n # Disable the progress bar so downloading files via Invoke-WebRequest are faster\n $ProgressPreference = 'SilentlyContinue'\n}\n\n# Set TLS\n[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12\n\n# Verify all PATH variables are avaialable\n$env:PATH = Verify-Path-Variable\nif ($IsLinux)\n{\n\t$pluginUri = \"https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64\"\n}\n\nif ($IsWindows)\n{\n\t$pluginUri = \"https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-windows-amd64\"\n}\n\ntry \n{\n # Check to see if plugins are installed\n $pluginList = (kubectl plugin list 2>&1)\n\n # This is the path that Linux will take\n if ($lastExitCode -ne 0 -and $pluginList.Exception.Message -eq \"error: unable to find any kubectl plugins in your PATH\") \n {\n Install-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\"\n }\n else\n {\n # Parse list\n \t$pluginList = $pluginList.Split(\"`n\", [System.StringSplitOptions]::RemoveEmptyEntries)\n \n if ((Get-Plugin-Installed -PluginName \"kubectl-argo-rollouts\" -InstalledPlugins $pluginList) -eq $false)\n {\n \tInstall-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\"\n }\n else\n {\n \tWrite-Host \"Argo Rollout kubectl plugin found ...\"\n }\n } \n}\ncatch\n{\n\t# On Windows, the executable will cause an error if no plugins found so this the path Windows will take\n if ($_.Exception.Message -eq \"error: unable to find any kubectl plugins in your PATH\")\n {\n\t\tInstall-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\" \n }\n else\n {\n \t# Something else happened, we need to surface the error\n throw\n }\n}\n\n# Get parameters\n$rolloutsName = $OctopusParameters['Argo.Rollout.Name']\n$rolloutsNamespace = $OctopusParameters['Argo.Rollout.Namespace']\n$rolloutsFullPromotion = [System.Convert]::ToBoolean($OctopusParameters['Argo.Rollout.FullPromotion'])\n\n# Create arguments array\n$kubectlArguments = @(\"argo\", \"rollouts\", \"promote\", $rolloutsName, \"--namespace\", $rolloutsNamespace)\n\n# Check for additional argument\nif ($rolloutsFullPromotion)\n{\n\t$kubectlArguments += \"--full\"\n}\n\n# Promote rollout\nkubectl $kubectlArguments"
14+
},
15+
"Parameters": [
16+
{
17+
"Id": "d1dbd00e-facb-494d-bf10-27ba68334f30",
18+
"Name": "Argo.Rollout.Name",
19+
"Label": "Rollout Name",
20+
"HelpText": "Name of the Argo Rollout to promote.",
21+
"DefaultValue": "",
22+
"DisplaySettings": {
23+
"Octopus.ControlType": "SingleLineText"
24+
}
25+
},
26+
{
27+
"Id": "c9c4937a-e833-4df0-8f31-b53722b881c3",
28+
"Name": "Argo.Rollout.Namespace",
29+
"Label": "Namespace",
30+
"HelpText": "The namespace to execute the promotion of the rollout against.",
31+
"DefaultValue": "default",
32+
"DisplaySettings": {
33+
"Octopus.ControlType": "SingleLineText"
34+
}
35+
},
36+
{
37+
"Id": "efaf2401-e059-4724-b2b3-30ac8864e450",
38+
"Name": "Argo.Rollout.FullPromotion",
39+
"Label": "Full Promotion",
40+
"HelpText": "Fully promote a rollout to desired version, skipping analysis, pauses, and steps",
41+
"DefaultValue": "False",
42+
"DisplaySettings": {
43+
"Octopus.ControlType": "Checkbox"
44+
}
45+
}
46+
],
47+
"StepPackageId": "Octopus.KubernetesRunScript",
48+
"$Meta": {
49+
"ExportedAt": "2024-06-06T19:55:28.116Z",
50+
"OctopusVersion": "2024.1.12815",
51+
"Type": "ActionTemplate"
52+
},
53+
"LastModifiedBy": "twerthi",
54+
"Category": "argo"
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
{
2+
"Id": "5449ea73-7f77-45d7-a4d7-e56286d679f5",
3+
"Name": "Argo - Rollouts Set Image",
4+
"Description": "Sets a new image tag on an Argo Rollout.",
5+
"ActionType": "Octopus.KubernetesRunScript",
6+
"Version": 1,
7+
"CommunityActionTemplateId": null,
8+
"Packages": [
9+
{
10+
"Id": "67a06773-8f2b-49a7-95bb-1e087a38b3b9",
11+
"Name": "Argo.Rollout.Image",
12+
"PackageId": null,
13+
"FeedId": "feeds-builtin",
14+
"AcquisitionLocation": "NotAcquired",
15+
"Properties": {
16+
"Extract": "True",
17+
"SelectionMode": "deferred",
18+
"PackageParameterName": "Argo.Rollout.Image",
19+
"Purpose": ""
20+
}
21+
}
22+
],
23+
"GitDependencies": [],
24+
"Properties": {
25+
"Octopus.Action.Script.ScriptSource": "Inline",
26+
"Octopus.Action.Script.Syntax": "PowerShell",
27+
"Octopus.Action.Script.ScriptBody": "function Install-Plugin\n{\n# Define parameters\n\tparam ($PluginUri,\n $PluginFilename\n )\n \n # Check for plugin folder\n if ((Test-Path -Path \"$PWD/plugins\") -eq $false)\n {\n\t\t# Create new plugins folder\n New-Item -Path \"$PWD/plugins\" -ItemType \"Directory\"\n \n # Add to path\n $env:PATH = \"$($PWD)/plugins$([IO.Path]::PathSeparator)\" + $env:PATH\n }\n\n\t# Download plugin\n\tInvoke-WebRequest -Uri \"$PluginUri\" -OutFile \"$PWD/plugins/$PluginFilename\"\n\n\t# Check for Linux\n if ($IsLinux)\n {\n\t\t# Make it executable\n \tchmod +x ./plugins/$PluginFilename\n }\n \n if ($IsWindows)\n {\n \t# Update filename to include .exe extension\n Rename-Item -Path \"$PWD/plugins/$PluginFilename\" -NewName \"$PWD/plugins/$($PluginFilename).exe\"\n } \n}\n\n# When listing plugins, kubectl looks in all paths defined in $env:PATH and will fail if the path does not exist\nfunction Verify-Path-Variable\n{\n\t# Get current path and split into array\n $paths = $env:PATH.Split([IO.Path]::PathSeparator)\n $verifiedPaths = @()\n \n # Loop through paths\n foreach ($path in $paths)\n {\n \t# Check for existence\n if ((Test-Path -Path $path) -eq $true)\n {\n \t# Add to verified\n $verifiedPaths += $path\n }\n }\n \n # Return verified paths\n return ($verifiedPaths -join [IO.Path]::PathSeparator)\n}\n\nfunction Get-Plugin-Installed\n{\n\t# Define parameters\n param (\n \t$PluginName,\n $InstalledPlugins\n )\n \n \t$isInstalled = $false\n \n\tforeach ($plugin in $installedPlugins)\n \t{\n\t\tif ($plugin -like \"$($PluginName)*\")\n {\n \t$isInstalled = $true\n \tbreak\n }\n\t}\n \n return $isInstalled\n}\n\n# Check to see if $IsWindows is available\nif ($null -eq $IsWindows) {\n Write-Host \"Determining Operating System...\"\n $IsWindows = ([System.Environment]::OSVersion.Platform -eq \"Win32NT\")\n $IsLinux = ([System.Environment]::OSVersion.Platform -eq \"Unix\")\n}\n\n# Fix ANSI Color on PWSH Core issues when displaying objects\nif ($PSEdition -eq \"Core\") {\n $PSStyle.OutputRendering = \"PlainText\"\n}\n\n# Check to see if it's running on Windows\nif ($IsWindows) {\n # Disable the progress bar so downloading files via Invoke-WebRequest are faster\n $ProgressPreference = 'SilentlyContinue'\n}\n\n# Set TLS\n[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12\n\n# Verify all PATH variables are avaialable\n$env:PATH = Verify-Path-Variable\nif ($IsLinux)\n{\n\t$pluginUri = \"https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64\"\n}\n\nif ($IsWindows)\n{\n\t$pluginUri = \"https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-windows-amd64\"\n}\n\n\ntry \n{\n # Check to see if plugins are installed\n $pluginList = (kubectl plugin list --name-only=true 2>&1)\n\n # This is the path that Linux will take\n if ($lastExitCode -ne 0 -and $pluginList.Exception.Message -eq \"error: unable to find any kubectl plugins in your PATH\") \n {\n # Install the plugin\n Install-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\"\n }\n else\n {\n # Parse list\n \t$pluginList = $pluginList.Split(\"`n\", [System.StringSplitOptions]::RemoveEmptyEntries)\n \n if ((Get-Plugin-Installed -PluginName \"kubectl-argo-rollouts\" -InstalledPlugins $pluginList) -eq $false)\n {\n \tInstall-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\"\n }\n else\n {\n \tWrite-Host \"Argo Rollout kubectl plugin found ...\"\n }\n }\n}\ncatch\n{\n\t# On Windows, the executable will cause an error if no plugins found so this the path Windows will take\n if ($_.Exception.Message -eq \"error: unable to find any kubectl plugins in your PATH\")\n {\n Install-Plugin -PluginUri $pluginUri -PluginFilename \"kubectl-argo-rollouts\" \n }\n else\n {\n \t# Something else happened, we need to surface the error\n throw\n }\n}\n\n# Get variables\n$rolloutName = $OctopusParameters['Argo.Rollout.Name']\n$rolloutNamespace = $OctopusParameters['Argo.Rollout.Namespace']\n$containerName = $OctopusParameters[\"Argo.Rollout.Container.Name\"]\n$imageName = $OctopusParameters[\"Octopus.Action.Package[Argo.Rollout.Image].PackageId\"]\n$imageTag = $OctopusParameters[\"Octopus.Action.Package[Argo.Rollout.Image].PackageVersion\"]\n\n# Create arguments array\n$kubectlArguments = @(\"argo\", \"rollouts\", \"set\", \"image\", $rolloutName, \"$containerName=`\"$($imageName):$($imageTag)`\"\", \"--namespace\", $rolloutNamespace)\n\n# Set image\nkubectl $kubectlArguments"
28+
},
29+
"Parameters": [
30+
{
31+
"Id": "892ac50a-e53c-47e5-997d-0ce1935b7303",
32+
"Name": "Argo.Rollout.Name",
33+
"Label": "Rollout Name",
34+
"HelpText": "Name of the Argo Rollout to set the image on.",
35+
"DefaultValue": "",
36+
"DisplaySettings": {
37+
"Octopus.ControlType": "SingleLineText"
38+
}
39+
},
40+
{
41+
"Id": "a08c104a-3877-4989-9436-bf582b3a8505",
42+
"Name": "Argo.Rollout.Namespace",
43+
"Label": "Namespace",
44+
"HelpText": "The namespace to execute the command against.",
45+
"DefaultValue": "default",
46+
"DisplaySettings": {
47+
"Octopus.ControlType": "SingleLineText"
48+
}
49+
},
50+
{
51+
"Id": "05bf80a9-0419-4d8d-b9ca-457d66a2edb0",
52+
"Name": "Argo.Rollout.Image",
53+
"Label": "Image",
54+
"HelpText": "Select the image to update the rollout to.",
55+
"DefaultValue": "",
56+
"DisplaySettings": {
57+
"Octopus.ControlType": "Package"
58+
}
59+
},
60+
{
61+
"Id": "115ebf6d-5613-4131-83f5-03d74fbc0f14",
62+
"Name": "Argo.Rollout.Container.Name",
63+
"Label": "Container Name",
64+
"HelpText": "Name of the container to update the image tag on.",
65+
"DefaultValue": "",
66+
"DisplaySettings": {
67+
"Octopus.ControlType": "SingleLineText"
68+
}
69+
}
70+
],
71+
"StepPackageId": "Octopus.KubernetesRunScript",
72+
"$Meta": {
73+
"ExportedAt": "2024-06-06T19:56:12.397Z",
74+
"OctopusVersion": "2024.1.12815",
75+
"Type": "ActionTemplate"
76+
},
77+
"LastModifiedBy": "twerthi",
78+
"Category": "argo"
79+
}

0 commit comments

Comments
 (0)