From 0b35bf20dee32600c787141426a2a7dcb89fce0a Mon Sep 17 00:00:00 2001 From: Harrison Ravazzolo <38767391+harrisonravazzolo@users.noreply.github.com> Date: Wed, 27 May 2026 19:28:48 -0700 Subject: [PATCH] Add AWS Client VPN as a Window FMA (#46301) ## Summary by CodeRabbit * **New Features** * Added support for AWS Client VPN on Windows platform * Version 5.3.4 is now available for management and deployment * Updated app icon and visual representation [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/46301?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) --------- Co-authored-by: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> --- .../inputs/winget/aws-vpn-client.json | 10 ++++++++ ee/maintained-apps/outputs/apps.json | 7 ++++++ .../outputs/aws-vpn-client/windows.json | 23 ++++++++++++++++++ .../components/icons/AwsVpnClient.tsx | 2 +- .../app-icon-aws-vpn-client-60x60@2x.png | Bin 11391 -> 11347 bytes 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 ee/maintained-apps/inputs/winget/aws-vpn-client.json create mode 100644 ee/maintained-apps/outputs/aws-vpn-client/windows.json diff --git a/ee/maintained-apps/inputs/winget/aws-vpn-client.json b/ee/maintained-apps/inputs/winget/aws-vpn-client.json new file mode 100644 index 0000000000..80d9c76cc4 --- /dev/null +++ b/ee/maintained-apps/inputs/winget/aws-vpn-client.json @@ -0,0 +1,10 @@ +{ + "name": "AWS Client VPN", + "slug": "aws-vpn-client/windows", + "package_identifier": "Amazon.AWSVPNClient", + "unique_identifier": "AWS VPN Client", + "installer_arch": "x64", + "installer_type": "msi", + "installer_scope": "machine", + "default_categories": ["Productivity"] +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 3781beb957..ff8cb26d3f 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -239,6 +239,13 @@ "unique_identifier": "com.amazonaws.acvc.osx", "description": "AWS Client VPN is a managed client-based VPN service to securely access AWS resources." }, + { + "name": "AWS Client VPN", + "slug": "aws-vpn-client/windows", + "platform": "windows", + "unique_identifier": "AWS VPN Client", + "description": "AWS Client VPN is a managed client-based VPN service to securely access AWS resources." + }, { "name": "Backblaze", "slug": "backblaze/darwin", diff --git a/ee/maintained-apps/outputs/aws-vpn-client/windows.json b/ee/maintained-apps/outputs/aws-vpn-client/windows.json new file mode 100644 index 0000000000..f925ecf833 --- /dev/null +++ b/ee/maintained-apps/outputs/aws-vpn-client/windows.json @@ -0,0 +1,23 @@ +{ + "versions": [ + { + "version": "5.3.4", + "queries": { + "exists": "SELECT 1 FROM programs WHERE name = 'AWS VPN Client' AND publisher = 'Amazon';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM programs WHERE name = 'AWS VPN Client' AND publisher = 'Amazon' AND version_compare(version, '5.3.4') < 0);" + }, + "installer_url": "https://d20adtppz83p9s.cloudfront.net/WPF/5.3.4/AWS_VPN_Client.msi", + "install_script_ref": "8959087b", + "uninstall_script_ref": "4a75ca68", + "sha256": "81a5c5101624c5f74de8afdcb816f03ea8ff9e8c6a5eaa8890a95779a94dbe41", + "default_categories": [ + "Developer tools" + ], + "upgrade_code": "{8D1975AA-4987-4668-ACD2-66EC556E5608}" + } + ], + "refs": { + "4a75ca68": "# Fleet uninstalls app by finding all related product codes for the specified upgrade code\n$inst = New-Object -ComObject \"WindowsInstaller.Installer\"\n$timeoutSeconds = 300 # 5 minute timeout per product\n\nforeach ($product_code in $inst.RelatedProducts('{8D1975AA-4987-4668-ACD2-66EC556E5608}')) {\n $process = Start-Process msiexec -ArgumentList @(\"/quiet\", \"/x\", $product_code, \"/norestart\") -PassThru\n \n # Wait for process with timeout\n $completed = $process.WaitForExit($timeoutSeconds * 1000)\n \n if (-not $completed) {\n Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue\n Exit 1603 # ERROR_UNINSTALL_FAILURE\n }\n \n # If the uninstall failed, bail\n if ($process.ExitCode -ne 0) {\n Write-Output \"Uninstall for $($product_code) exited $($process.ExitCode)\"\n Exit $process.ExitCode\n }\n}\n\n# All uninstalls succeeded; exit success\nExit 0\n", + "8959087b": "$logFile = \"${env:TEMP}/fleet-install-software.log\"\n\ntry {\n\n$installProcess = Start-Process msiexec.exe `\n -ArgumentList \"/quiet /norestart /lv ${logFile} /i `\"${env:INSTALLER_PATH}`\"\" `\n -PassThru -Verb RunAs -Wait\n\nGet-Content $logFile -Tail 500\n\nExit $installProcess.ExitCode\n\n} catch {\n Write-Host \"Error: $_\"\n Exit 1\n}\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/AwsVpnClient.tsx b/frontend/pages/SoftwarePage/components/icons/AwsVpnClient.tsx index 3fce14a3b5..59edbf5057 100644 --- a/frontend/pages/SoftwarePage/components/icons/AwsVpnClient.tsx +++ b/frontend/pages/SoftwarePage/components/icons/AwsVpnClient.tsx @@ -7,7 +7,7 @@ const AwsVpnClient = (props: SVGProps) => ( ); diff --git a/website/assets/images/app-icon-aws-vpn-client-60x60@2x.png b/website/assets/images/app-icon-aws-vpn-client-60x60@2x.png index a88e24f7677b97f35d26665b7fca404b1b824ca2..d9bd958dbfa661498750998852d2653d3d670c06 100644 GIT binary patch literal 11347 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 I)FANx0Fe)c#sB~S literal 11391 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 E54}#HssI20