Skip to content

Add arm64 MicroOVN support#833

Open
ahmad-can wants to merge 8 commits into
canonical:mainfrom
ahmad-can:feat/dpu-arm64-microovn-deploy
Open

Add arm64 MicroOVN support#833
ahmad-can wants to merge 8 commits into
canonical:mainfrom
ahmad-can:feat/dpu-arm64-microovn-deploy

Conversation

@ahmad-can

@ahmad-can ahmad-can commented Jun 18, 2026

Copy link
Copy Markdown

Summary

Adds support for deploying the microovn-arm64 charm on ARM64 DPU nodes. Sunbeam now detects arm64 nodes and deploys the arm64 MicroOVN application with the correct Juju constraints.

Changes

  • Detect arm64 DPU nodes from clusterd/OVN metadata
  • Deploy microovn-arm64 as a separate Juju application for arm64 nodes
  • Apply arch=arm64 when deploying arm64 MicroOVN machines
  • Keep amd64 and arm64 MicroOVN machine lists separate in Terraform tfvars
  • Wait for both microovn and microovn-arm64 when both are present
  • Update optional integrations and reapply logic for the arm64 MicroOVN app
  • Update MAAS deployment logic to select the arm64 MicroOVN app for arm64 nodes
  • Add/update unit tests for arm64 deployment and readiness handling

Links

Jira card: OPEN-4508

image image

@hmlanigan
hmlanigan requested review from gboutry and hmlanigan June 30, 2026 18:33

@hmlanigan hmlanigan left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

How can I verify this change works in the real world, not only in unit tests?

@hmlanigan
hmlanigan self-requested a review July 6, 2026 17:24

@hmlanigan hmlanigan left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

A few questions and suggestions

Comment thread cloud/etc/deploy-microovn/main.tf Outdated
}

resource "juju_application" "microovn_arm64" {
count = length(var.microovn_arm64_machine_ids) > 0 ? 1 : 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

question: why is this count instead of units?

suggestion: 1 : 0 should be 1 : null

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

count is a terraform meta-argument, unit is a Juju provider attribute inside a juju_application, and count must be a whole number (0, 1, 2, …). null is not valid for count.

Comment thread cloud/etc/deploy-microovn/main.tf Outdated
count = length(var.microovn_arm64_machine_ids) > 0 ? 1 : 0
name = "microovn-arm64"
model_uuid = data.juju_model.machine_model.uuid
machines = toset(var.microovn_arm64_machine_ids)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
machines = toset(var.microovn_arm64_machine_ids)
machines = length(var.microovn_machine_ids) == 0 ? null : toset(var.microovn_machine_ids)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Comment thread cloud/etc/deploy-microovn/main.tf Outdated
model_uuid = data.juju_model.machine_model.uuid
machines = length(var.microovn_machine_ids) == 0 ? null : toset(var.microovn_machine_ids)
units = length(var.microovn_machine_ids) == 0 ? 1 : null
units = (

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

question: why does this change with the addition of arm64 machines?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Reverted.

Comment thread sunbeam-python/sunbeam/core/ovn.py Outdated
Comment on lines +135 to +142
def get_machines_amd64(self) -> list[str]:
"""Get amd64 machine IDs for MicroOVN."""
return self.get_machines(DEFAULT_ARCHITECTURE)

def get_machines_arm64(self) -> list[str]:
"""Get arm64 machine IDs for MicroOVN (e.g. DPU network nodes)."""
return self.get_machines(ARM64_ARCHITECTURE)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

question: what about s390x, riskv, and other architectures?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

These get_machines_amd64/arm64 helpers have been removed. Machine selection now goes through get_machines_by_architecture(), which groups by whatever arch clusterd reports (s390x, riscv, etc.)

@ahmad-can
ahmad-can requested a review from hmlanigan July 15, 2026 11:36
@ahmad-can

Copy link
Copy Markdown
Author

@hmlanigan @gboutry please review, thanks

@gboutry gboutry left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This is overall fine to me.

We'll need to sort out the role-distributor situation still.

The part that is more worrisome to me, but not necessarily this PR's concern, is how do we actually manage MicroOVN upgrade over multiple applications?

}
}

resource "juju_integration" "role-distributor-microovn" {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

WHy are we dropping this integration?

We should have the integration to all microovn apps

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Restored ✅

@ahmad-can
ahmad-can requested a review from gboutry July 17, 2026 12:35
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