|
| 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