Skip to content

feat: add cloud_engine testnet type#9635

Merged
severin-amrein merged 9 commits intomasterfrom
sev/cloud-engine-testnet-type
Mar 30, 2026
Merged

feat: add cloud_engine testnet type#9635
severin-amrein merged 9 commits intomasterfrom
sev/cloud-engine-testnet-type

Conversation

@severin-amrein
Copy link
Copy Markdown
Contributor

@severin-amrein severin-amrein commented Mar 27, 2026

Summary

  • Add a new cloud_engine testnet with a 4-node System/NNS subnet, a 4-node CloudEngine subnet (1 node per DC across 4 datacenters), and 4 unassigned nodes (1 per DC)
  • Extend the InternetComputer builder to support adding data center records and node operator entries directly to the initial registry
  • Allow per-node node_operator_principal_id assignment so nodes can be associated with different datacenters in the registry

Test plan

  • Spin up testnet with ict testnet create cloud_engine and verify all nodes boot
./ci/container/container-run.sh ict testnet create cloud_engine --no-ttl --set-required-host-features=dmz --output-dir=./cloud_engine -- --test_env=DKG_INTERVAL=49 --test_tmpdir=./cloud_engine
  • Verify registry shows correct DC assignments for CloudEngine and unassigned nodes
   "subnets": [
      {
        "nodes": [
          {
            "domain": null,
            "id": "k5bj4-rb74n-okfhd-5x55f-6deqk-ckyr7-qkcs4-6ggiw-ym243-yyd5i-vqe",
            "ipv6": "2602:fb2b:100:101:50aa:90ff:fe0b:54d9"
          },
...
        ],
        "subnet_id": "nz4w2-jqn3j-zmcxx-4gvov-wlahu-b2w22-slhas-vi2cx-uxf2i-hbdeu-oqe",
        "subnet_type": "system"
      },
      {
        "nodes": [
          {
            "domain": null,
            "id": "wjyiu-z5ymc-g2pkl-6hwh2-2tyqa-aqbyc-chblx-sdeqo-olgn5-wu547-gae",
            "ipv6": "2602:fb2b:100:101:5083:ceff:fed5:5b45"
          },
...
        ],
        "subnet_id": "qdknn-usgac-6vtgi-2obfr-lhgz4-yuspz-vjwgd-j56k4-3absf-6yqta-kqe",
        "subnet_type": "cloud_engine"
      }
    ],
    "unassigned_nodes": [
      {
        "domain": null,
        "id": "ajy3v-y4g6a-s47rf-xnnvd-h4pg5-pq5r5-ml7db-xyzso-2s35e-qrcv2-lae",
        "ipv6": "2602:fb2b:100:101:50c7:76ff:fe4c:2a78"
      },
...
    ]
  },
  • Get DC information via backend
{
  "data_centers": [
    {
      "id": "dc1",
      "region": "us-west-1",
      "owner": "owner1",
      "gps": {
        "latitude": 37.7749,
        "longitude": -122.4194
      }
    },
    {
      "id": "dc2",
      "region": "eu-west-1",
      "owner": "owner2",
      "gps": {
        "latitude": 53.3498,
        "longitude": -6.2603
      }
    },
    {
      "id": "dc3",
      "region": "ap-east-1",
      "owner": "owner3",
      "gps": {
        "latitude": 22.3193,
        "longitude": 114.1694
      }
    },
    {
      "id": "dc4",
      "region": "us-east-1",
      "owner": "owner4",
      "gps": {
        "latitude": 39.0438,
        "longitude": -77.4874
      }
    }
  ],
  "total": 4
}

The registry invariant requires CloudEngine subnets to have a free
cycles cost schedule.
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new cloud_engine dynamic testnet configuration and extends the system-test InternetComputer builder / ic-prep plumbing to seed data center + node operator records into the initial registry and support per-node node-operator assignment.

Changes:

  • Introduces rs/tests/testnets/cloud_engine.rs testnet topology (System/NNS subnet + CloudEngine subnet distributed across 4 DCs + unassigned nodes) and wires it into Cargo/Bazel.
  • Extends InternetComputer (system-test driver) with add_data_center, add_node_operator, and per-node node_operator_principal_id.
  • Extends ic-prep (IcConfig) to accept initial DC records and node operator entries and to avoid overwriting per-node operator IDs when applying the initial operator.

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
rs/tests/testnets/cloud_engine.rs New dynamic testnet definition, including DC + node operator seeding and per-node operator assignment.
rs/tests/testnets/Cargo.toml Adds deps and registers the new cloud_engine binary.
rs/tests/testnets/BUILD.bazel Adds a system_test_nns Bazel target for cloud_engine with required runtime deps.
rs/tests/driver/src/driver/ic.rs Extends InternetComputer/Node builder types to support DC/operator registry seeding and per-node operator IDs.
rs/tests/driver/src/driver/bootstrap.rs Plumbs DC/operator entries into IcConfig and passes per-node operator IDs into NodeConfiguration.
rs/prep/src/internet_computer.rs Updates initial-node-operator behavior and adds IcConfig APIs to inject DC/node-operator registry entries.
Cargo.lock Updates lockfile for new direct crate deps.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

…gator

- Add @dfinity/dre as code owner for cloud_engine.rs
- Rename add_node_operator_entry to add_node_operator_record
- Add rewardable_nodes (type4.1) to node operator config
- Remove SNS_AGGREGATOR_WASM_PATH from runtime deps
@severin-amrein severin-amrein marked this pull request as ready for review March 27, 2026 16:36
@severin-amrein severin-amrein requested review from a team as code owners March 27, 2026 16:36
@severin-amrein severin-amrein added this pull request to the merge queue Mar 30, 2026
Merged via the queue into master with commit ceb03de Mar 30, 2026
38 checks passed
@severin-amrein severin-amrein deleted the sev/cloud-engine-testnet-type branch March 30, 2026 08:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants