@@ -188,11 +188,10 @@ registration as extension metadata. The `custom-action` path embeds them
188188directly into the payload file under ` physical-network-extension-details ` .
189189The schema is entirely yours — CloudStack treats it as opaque.
190190
191- > ** ` isolation_method=NetworkExtension ` ** tells CloudStack to select
192- > ` NetworkExtensionGuestNetworkGuru ` when designing guest networks backed by
193- > this extension. This is required whenever your ` implement-network ` handler
194- > outputs JSON that updates the network's broadcast domain type (e.g.
195- > ` "network.broadcast_domain_type": "Lswitch" ` for OVN-backed extensions).
191+ > ** ` network.isolation.method=NetworkExtension ` ** must be set as an Extension
192+ > detail (via ` createExtension ` or ` updateExtension ` ).
193+ > This is required whenever your ` implement-network ` handler outputs JSON that
194+ > updates the network's broadcast domain type.
196195> Without it the script output is accepted but silently ignored — the network
197196> record in the CloudStack database is not updated.
198197
@@ -391,14 +390,14 @@ configure the gateway.
391390> CloudStack now also includes ` network_ip6_gateway ` and ` network_ip6_cidr `
392391> when the guest network has IPv6 configured.
393392
394- ** Stdout (required when ` isolation_method =NetworkExtension` ):**
393+ ** Stdout (required when ` network.isolation.method =NetworkExtension` ):**
395394
396- When the physical-network registration detail ` isolation_method =NetworkExtension`
397- is set, CloudStack selects ` NetworkExtensionGuestNetworkGuru ` and applies the
398- JSON object printed to stdout back to the network record. The following two
399- fields ** must ** be present in the output so that CloudStack stores the correct
400- broadcast type and URI — without them the KVM agent (` OvsVifDriver ` ) will not
401- set ` external_ids:iface-id ` on the OVS tap port and OVN port-binding will fail:
395+ When the Extension detail ` network.isolation.method =NetworkExtension` is set,
396+ CloudStack selects ` NetworkExtensionGuestNetworkGuru ` and applies the JSON object
397+ printed to stdout back to the network record. The following two fields ** must **
398+ be present in the output so that CloudStack stores the correct broadcast type and
399+ URI — without them the KVM agent (` OvsVifDriver ` ) will not set
400+ ` external_ids:iface-id ` on the OVS tap port and OVN port-binding will fail:
402401
403402| Output key | Required value | Description |
404403| ---| ---| ---|
@@ -411,8 +410,8 @@ Example stdout:
411410{"network.broadcast_domain_type" : " Lswitch" , "network.broadcast_uri" : " ovn://cs-net-42" }
412411```
413412
414- > ** Note:** These fields are only consumed when ` isolation_method=NetworkExtension `
415- > is set on the physical-network registration . Without that detail , the script
413+ > ** Note:** These fields are only consumed when the Extension detail
414+ > ` network.isolation.method=NetworkExtension ` is set. Without it , the script
416415> output is accepted but the network record is ** not** updated (the update is
417416> silently skipped).
418417
@@ -1260,6 +1259,31 @@ To use this extension as a VPC provider:
12601259 it. The device must listen on this IP for DHCP, DNS, and metadata (port 80)
12611260 requests.
12621261
1262+ ### Opting out of the placeholder IP
1263+
1264+ Some extensions (e.g. OVN) manage their own data-plane addressing and do not
1265+ need CloudStack to reserve a real IP for networks that provide DHCP/DNS/UserData
1266+ without SourceNat or Gateway. This covers ** both** shared networks and isolated
1267+ networks that omit SourceNat. Set the Extension detail
1268+ ** ` network.allocate.extension.ip=false ` ** when creating or updating the Extension
1269+ to suppress the allocation:
1270+
1271+ ``` bash
1272+ cmk createExtension \
1273+ name=my-sdn \
1274+ ... \
1275+ " details[N].key=network.allocate.extension.ip" " details[N].value=false"
1276+ ```
1277+
1278+ When this detail is ` false ` , ` ensureExtensionIp ` returns ` null ` for any network
1279+ backed by this extension that reaches the placeholder-IP branch — i.e. networks
1280+ with DHCP/DNS/UserData but without SourceNat/Gateway. ` extension_ip ` will not
1281+ be set in command payloads, and no IP is consumed from the subnet pool.
1282+
1283+ Omitting the detail (or setting any value other than ` false ` ) preserves the
1284+ original behaviour — a placeholder NIC is allocated and ` extension_ip ` is
1285+ included in every command payload.
1286+
12631287---
12641288
12651289## Exit Codes
0 commit comments