Skip to content

Replace Terraform ESS provisioning with oblt-cli; add Windows ARM64 CI#13546

Draft
michel-laterman wants to merge 8 commits intoelastic:mainfrom
michel-laterman:feature/oblt-cli-win-arm64
Draft

Replace Terraform ESS provisioning with oblt-cli; add Windows ARM64 CI#13546
michel-laterman wants to merge 8 commits intoelastic:mainfrom
michel-laterman:feature/oblt-cli-win-arm64

Conversation

@michel-laterman
Copy link
Copy Markdown
Contributor

Summary

  • Replace Terraform-based ESS deployment provisioning with oblt-cli for all integration test platforms, removing the Terraform dependency from CI runners
  • Add Windows ARM64 integration test steps targeting Azure agents
  • Based on the approach from 🚧 oblt-cli(hosted): support running ITs using oblt-cli #8591 by @v1v, rebased and updated for current main

What does this PR do?

oblt-cli migration (all platforms)

Replaces terraform apply/terraform destroy with oblt-cli cluster create custom --template ess-ea-it and oblt-cli cluster destroy. Credentials are now loaded from GCP Secret Manager via oblt-cli cluster secrets env instead of Terraform outputs or Buildkite metadata.

Scripts changed:

  • ess.sh / ess.ps1 — new ess_up(), ess_down(), ess_load_secrets() using oblt-cli
  • ess_start.sh / ess_down.sh — simplified, no Terraform state management
  • integration_tests_tf.sh / integration_tests_tf.ps1 — use ess_load_secrets instead of Buildkite metadata reads

Pipeline plugins replaced:

  • Removed: vault_ec_key_prod (EC API key via Vault)
  • Added: google_oidc_observability_plugin + oblt_cli_plugin + vault_github_token

Removed:

  • test_infra/ess/ directory (Terraform configs)
  • terraform from .tool-versions
  • ASDF_TERRAFORM_VERSION from pipeline env

Windows ARM64 integration tests (new)

Added "Stateful: Windows ARM64" group to bk.integration.pipeline.yml:

  • Targets Azure agents (provider: azure, vmSize: Standard_D4ps_v6)
  • Full test matrix matching Windows x86_64 (default, fleet, fleet-endpoint-security, fleet-privileged, standalone-upgrade, upgrade, upgrade-flavor, install-uninstall)
  • sudo and non-sudo variants

Note: Local mage integration:* commands are not affected — they use separate Go-based provisioners in pkg/testing/ess/.

Prerequisites (separate PRs/repos)

  • CI images (elastic/ci-agent-images): Build Windows ARM64 image for elastic-agent — update IMAGE_WIN_ARM64 placeholder once ready
  • GCP permissions (elastic/oblt-infra): Verify elastic-agent pipeline principal has google-oblt-cluster-secrets-access role

Test plan

  • /test extended to verify ESS stack provisions correctly via oblt-cli
  • Verify existing Linux/Windows x86 tests pass (no regression)
  • Verify ESS cleanup step runs successfully
  • Verify retry path works (oblt-cli creates new cluster on retry)
  • Windows ARM64 steps execute once CI image is available

🤖 Generated with Claude Code

@mergify
Copy link
Copy Markdown
Contributor

mergify bot commented Apr 9, 2026

This pull request does not have a backport label. Could you fix it @michel-laterman? 🙏
To fixup this pull request, you need to add the backport labels for the needed
branches, such as:

  • backport-./d./d is the label that automatically backports to the 8./d branch. /d is the digit
  • backport-active-all is the label that automatically backports to all active branches.
  • backport-active-8 is the label that automatically backports to all active minor branches for the 8 major.
  • backport-active-9 is the label that automatically backports to all active minor branches for the 9 major.

Comment thread .buildkite/scripts/steps/ess.sh
Comment thread .buildkite/scripts/steps/ess.sh
michel-laterman and others added 2 commits April 9, 2026 14:34
…4 CI

Replace the Terraform-based ESS deployment provisioning with oblt-cli for
all integration test platforms. This removes the Terraform dependency from
CI runners, enabling support for Windows ARM64 where Terraform has no
native binary.

Key changes:
- ess.sh/ess.ps1: Use `oblt-cli cluster create custom --template ess-ea-it`
  instead of `terraform apply`. Credentials are now loaded from GCP Secret
  Manager via `oblt-cli cluster secrets env` rather than Terraform outputs.
- Pipeline plugins: Replace `vault_ec_key_prod` (EC API key) with
  `google_oidc_observability_plugin` + `oblt_cli_plugin` + `vault_github_token`
- Add "Stateful: Windows ARM64" test group targeting Azure agents with the
  full test matrix matching Windows x86_64
- Remove `test_infra/ess/` Terraform configs and Terraform from .tool-versions

Based on the approach from elastic#8591 by @v1v.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@michel-laterman michel-laterman force-pushed the feature/oblt-cli-win-arm64 branch from 859eff5 to a986aff Compare April 9, 2026 21:34
Comment thread .buildkite/scripts/steps/ess.sh Outdated
@@ -7,25 +7,20 @@ env:
IMAGE_UBUNTU_2404_X86_64: "platform-ingest-elastic-agent-ubuntu-2404-1772525581"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AFAIK, we don't support FIPS in oblt-cli yet

# Source the secrets file
# shellcheck source=/dev/null
local src_rc=0
source "${secrets_file}" || src_rc=$?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for some reason the source is not loading the variables :/

I bet, we need to do some export of the file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

$Env:KIBANA_HOST = & terraform output -raw kibana_endpoint
$Env:KIBANA_USERNAME = $Env:ELASTICSEARCH_USERNAME
$Env:KIBANA_PASSWORD = $Env:ELASTICSEARCH_PASSWORD
$Env:INTEGRATIONS_SERVER_HOST = & terraform output -raw integrations_server_endpoint
Copy link
Copy Markdown
Member

@v1v v1v Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's this? Is fleet-server?

with oblt-cli there are different URLs:

Need to find the correct URL so we can replace INTEGRATIONS_SERVER_HOST with the relevant env variable provided by oblt-cli

I think it's ELASTIC_APM_SERVER_URL

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See 14559fe

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 14, 2026

🔍 Preview links for changed docs

$Env:KIBANA_PASSWORD = $Env:ELASTICSEARCH_PASSWORD
$Env:INTEGRATIONS_SERVER_HOST = & terraform output -raw integrations_server_endpoint
Pop-Location
& oblt-cli cluster create custom `
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's wait for elastic/oblt-cli-buildkite-plugin#41 so we can add support for Windows too

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wonder if we can split this PR into three steps:

  • Linux support
  • Windows support
  • FIPS support

For Linux I think it should work as is, for Windows we need a few changes to support that platform in the existing BK plugin, and for FIPS, it will not be available in the near future.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can use the FIPS image in the non frh-staging environment

v1v added 2 commits April 15, 2026 14:33
…l-laterman/elastic-agent into feature/oblt-cli-win-arm64

* 'feature/oblt-cli-win-arm64' of https://github.com/michel-laterman/elastic-agent:
  [main][Automation] Update elastic/beats to 323f731f84e5 (elastic#13622)
  Update OTel Collector components to v0.149.0/v1.55.0 (elastic#13599)
  build(deps): bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (elastic#13593)
  Fix clean stopping of beats on windows (elastic#13581)
  Handle multiple values for fleet and kibana headers (elastic#13506)
  [otel/kube-stack] Update the OpenTelemetry Kube Stack Helm Chart to latest versions (elastic#13522)
  Automate updates to opentelemetry-collector-components (elastic#13578)
  [beatreceiver] Add integration testing for kafka output (elastic#13550)
  Bump the version on main to 9.5.0 (elastic#13532)
  [beatreceivers] Enable otel runtime by default for kafka and logstash output (elastic#13514)
  Add Elastic Agent 9.3.3+IAR release notes (elastic#13556)
  fix(flake): clean up prefix install data dirs in RPM test fixture (elastic#13552)
  [Automation] Bump Golang version to 1.25.9 (elastic#13559)
  feat(helm): add support for Fleet URL and token from Kubernetes Secret (elastic#13507)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants