Skip to content

Commit 7f7d044

Browse files
committed
NE: pass network/nic IPv6 information to extension
1 parent 4f7a1a2 commit 7f7d044

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/network/NetworkExtensionElement.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,7 @@ public boolean implement(Network network, NetworkOffering offering, DeployDestin
414414
implementPayload.addProperty("vlan", safeStr(vlanId));
415415
implementPayload.addProperty("gateway", safeStr(network.getGateway()));
416416
implementPayload.addProperty("cidr", safeStr(network.getCidr()));
417+
addNetworkIpv6ToPayload(implementPayload, network);
417418
implementPayload.addProperty("extension_ip", safeStr(extensionIp));
418419
addVpcIdToPayload(implementPayload, network);
419420

@@ -758,6 +759,7 @@ public boolean applyIps(Network network, List<? extends PublicIpAddress> ipAddre
758759
payload.addProperty("source_nat", String.valueOf(isSourceNat));
759760
payload.addProperty("gateway", safeStr(network.getGateway()));
760761
payload.addProperty("cidr", safeStr(network.getCidr()));
762+
addNetworkIpv6ToPayload(payload, network);
761763
payload.addProperty("public_gateway", safeStr(publicGateway));
762764
payload.addProperty("public_cidr", safeStr(publicCidr));
763765
payload.addProperty("public_vlan", publicVlanTag);
@@ -1054,6 +1056,33 @@ private void addNicUuidToPayload(JsonObject payload, NicProfile nic) {
10541056
}
10551057
}
10561058

1059+
private void addNetworkIpv6ToPayload(JsonObject payload, Network network) {
1060+
if (payload == null || network == null) {
1061+
return;
1062+
}
1063+
if (StringUtils.isNotBlank(network.getIp6Gateway())) {
1064+
payload.addProperty("network_ip6_gateway", safeStr(network.getIp6Gateway()));
1065+
}
1066+
if (StringUtils.isNotBlank(network.getIp6Cidr())) {
1067+
payload.addProperty("network_ip6_cidr", safeStr(network.getIp6Cidr()));
1068+
}
1069+
}
1070+
1071+
private void addNicIpv6ToPayload(JsonObject payload, NicProfile nic) {
1072+
if (payload == null || nic == null) {
1073+
return;
1074+
}
1075+
if (StringUtils.isNotBlank(nic.getIPv6Address())) {
1076+
payload.addProperty("nic_ip6_address", safeStr(nic.getIPv6Address()));
1077+
}
1078+
if (StringUtils.isNotBlank(nic.getIPv6Gateway())) {
1079+
payload.addProperty("nic_ip6_gateway", safeStr(nic.getIPv6Gateway()));
1080+
}
1081+
if (StringUtils.isNotBlank(nic.getIPv6Cidr())) {
1082+
payload.addProperty("nic_ip6_cidr", safeStr(nic.getIPv6Cidr()));
1083+
}
1084+
}
1085+
10571086
// ---- Detail helpers ----
10581087

10591088
/**
@@ -1388,10 +1417,12 @@ public boolean addDhcpEntry(Network network, NicProfile nic, VirtualMachineProfi
13881417
payload.addProperty("hostname", safeStr(vm.getHostName()));
13891418
payload.addProperty("gateway", safeStr(network.getGateway()));
13901419
payload.addProperty("cidr", safeStr(network.getCidr()));
1420+
addNetworkIpv6ToPayload(payload, network);
13911421
payload.addProperty("dns", safeStr(getNetworkDns(network)));
13921422
payload.addProperty("default_nic", String.valueOf(nic.isDefaultNic()));
13931423
payload.addProperty("domain", safeStr(network.getNetworkDomain()));
13941424
payload.addProperty("extension_ip", safeStr(extensionIp));
1425+
addNicIpv6ToPayload(payload, nic);
13951426
addNicUuidToPayload(payload, nic);
13961427
addVpcIdToPayload(payload, network);
13971428
return executeScript(network, CMD_ADD_DHCP_ENTRY, payload);
@@ -1410,10 +1441,12 @@ public boolean configDhcpSupportForSubnet(Network network, NicProfile nic, Virtu
14101441
payload.addProperty("network_id", String.valueOf(network.getId()));
14111442
payload.addProperty("gateway", safeStr(network.getGateway()));
14121443
payload.addProperty("cidr", safeStr(network.getCidr()));
1444+
addNetworkIpv6ToPayload(payload, network);
14131445
payload.addProperty("dns", safeStr(getNetworkDns(network)));
14141446
payload.addProperty("vlan", safeStr(getVlanId(network)));
14151447
payload.addProperty("domain", safeStr(network.getNetworkDomain()));
14161448
payload.addProperty("extension_ip", safeStr(extensionIp));
1449+
addNicIpv6ToPayload(payload, nic);
14171450
addNicUuidToPayload(payload, nic);
14181451
addVpcIdToPayload(payload, network);
14191452
return executeScript(network, CMD_CONFIG_DHCP_SUBNET, payload);
@@ -1481,6 +1514,7 @@ public boolean removeDhcpEntry(Network network, NicProfile nic, VirtualMachinePr
14811514
payload.addProperty("network_id", String.valueOf(network.getId()));
14821515
payload.addProperty("mac", safeStr(nic.getMacAddress()));
14831516
payload.addProperty("ip", safeStr(nic.getIPv4Address()));
1517+
addNicIpv6ToPayload(payload, nic);
14841518
payload.addProperty("extension_ip", safeStr(extensionIp));
14851519
addNicUuidToPayload(payload, nic);
14861520
addVpcIdToPayload(payload, network);
@@ -1503,6 +1537,7 @@ public boolean addDnsEntry(Network network, NicProfile nic, VirtualMachineProfil
15031537
JsonObject payload = new JsonObject();
15041538
payload.addProperty("network_id", String.valueOf(network.getId()));
15051539
payload.addProperty("ip", safeStr(nic.getIPv4Address()));
1540+
addNicIpv6ToPayload(payload, nic);
15061541
payload.addProperty("hostname", safeStr(hostname));
15071542
payload.addProperty("extension_ip", safeStr(extensionIp));
15081543
addNicUuidToPayload(payload, nic);
@@ -1523,10 +1558,12 @@ public boolean configDnsSupportForSubnet(Network network, NicProfile nic, Virtua
15231558
payload.addProperty("network_id", String.valueOf(network.getId()));
15241559
payload.addProperty("gateway", safeStr(network.getGateway()));
15251560
payload.addProperty("cidr", safeStr(network.getCidr()));
1561+
addNetworkIpv6ToPayload(payload, network);
15261562
payload.addProperty("dns", safeStr(getNetworkDns(network)));
15271563
payload.addProperty("vlan", safeStr(getVlanId(network)));
15281564
payload.addProperty("domain", safeStr(network.getNetworkDomain()));
15291565
payload.addProperty("extension_ip", safeStr(extensionIp));
1566+
addNicIpv6ToPayload(payload, nic);
15301567
addNicUuidToPayload(payload, nic);
15311568
addVpcIdToPayload(payload, network);
15321569
return executeScript(network, CMD_CONFIG_DNS_SUBNET, payload);
@@ -1682,6 +1719,7 @@ public boolean addPasswordAndUserdata(Network network, NicProfile nic, VirtualMa
16821719
payload.addProperty("network_id", String.valueOf(network.getId()));
16831720
payload.addProperty("ip", safeStr(nicIpAddress));
16841721
payload.addProperty("gateway", safeStr(nic.getIPv4Gateway()));
1722+
addNicIpv6ToPayload(payload, nic);
16851723
payload.addProperty("extension_ip", safeStr(ensureExtensionIp(network)));
16861724
payload.addProperty("vm_data", vmDataArg);
16871725
addNicUuidToPayload(payload, nic);
@@ -1706,6 +1744,7 @@ public boolean savePassword(Network network, NicProfile nic, VirtualMachineProfi
17061744
payload.addProperty("network_id", String.valueOf(network.getId()));
17071745
payload.addProperty("ip", safeStr(nic.getIPv4Address()));
17081746
payload.addProperty("gateway", safeStr(nic.getIPv4Gateway()));
1747+
addNicIpv6ToPayload(payload, nic);
17091748
payload.addProperty("password", password);
17101749
payload.addProperty("extension_ip", safeStr(extensionIp));
17111750
addNicUuidToPayload(payload, nic);
@@ -1733,6 +1772,7 @@ public boolean saveUserData(Network network, NicProfile nic, VirtualMachineProfi
17331772
payload.addProperty("network_id", String.valueOf(network.getId()));
17341773
payload.addProperty("ip", safeStr(nic.getIPv4Address()));
17351774
payload.addProperty("gateway", safeStr(nic.getIPv4Gateway()));
1775+
addNicIpv6ToPayload(payload, nic);
17361776
payload.addProperty("userdata", userData);
17371777
payload.addProperty("extension_ip", safeStr(extensionIp));
17381778
addNicUuidToPayload(payload, nic);
@@ -1757,6 +1797,7 @@ public boolean saveSSHKey(Network network, NicProfile nic, VirtualMachineProfile
17571797
payload.addProperty("network_id", String.valueOf(network.getId()));
17581798
payload.addProperty("ip", safeStr(nic.getIPv4Address()));
17591799
payload.addProperty("gateway", safeStr(nic.getIPv4Gateway()));
1800+
addNicIpv6ToPayload(payload, nic);
17601801
payload.addProperty("sshkey", sshKeyBase64);
17611802
payload.addProperty("extension_ip", safeStr(extensionIp));
17621803
addNicUuidToPayload(payload, nic);
@@ -1781,6 +1822,7 @@ public boolean saveHypervisorHostname(NicProfile nic, Network network, VirtualMa
17811822
payload.addProperty("network_id", String.valueOf(network.getId()));
17821823
payload.addProperty("ip", safeStr(nic.getIPv4Address()));
17831824
payload.addProperty("gateway", safeStr(nic.getIPv4Gateway()));
1825+
addNicIpv6ToPayload(payload, nic);
17841826
payload.addProperty("hypervisor_hostname", hostname);
17851827
payload.addProperty("extension_ip", safeStr(extensionIp));
17861828
addNicUuidToPayload(payload, nic);
@@ -2025,6 +2067,7 @@ public boolean applyFWRules(Network network, List<? extends FirewallRule> rules)
20252067
payload.addProperty("vlan", safeStr(getVlanId(network)));
20262068
payload.addProperty("gateway", safeStr(network.getGateway()));
20272069
payload.addProperty("cidr", safeStr(network.getCidr()));
2070+
addNetworkIpv6ToPayload(payload, network);
20282071
payload.addProperty("fw_rules", rulesBase64);
20292072
addVpcIdToPayload(payload, network);
20302073

@@ -2100,6 +2143,7 @@ public boolean completeAggregatedExecution(Network network, DeployDestination de
21002143
payload.addProperty("network_id", String.valueOf(network.getId()));
21012144
payload.addProperty("gateway", safeStr(network.getGateway()));
21022145
payload.addProperty("cidr", safeStr(network.getCidr()));
2146+
addNetworkIpv6ToPayload(payload, network);
21032147
payload.addProperty("vlan", safeStr(getVlanId(network)));
21042148
payload.addProperty("extension_ip", safeStr(extensionIp));
21052149
payload.addProperty("dns", safeStr(getNetworkDns(network)));
@@ -2623,6 +2667,7 @@ public boolean applyNetworkACLs(Network config, List<? extends NetworkACLItem> r
26232667
payload.addProperty("vlan", safeStr(getVlanId(config)));
26242668
payload.addProperty("gateway", safeStr(config.getGateway()));
26252669
payload.addProperty("cidr", safeStr(config.getCidr()));
2670+
addNetworkIpv6ToPayload(payload, config);
26262671
payload.addProperty("acl_rules", aclRulesBase64);
26272672
addVpcIdToPayload(payload, config);
26282673

@@ -2664,6 +2709,7 @@ public boolean reorderAclRules(Vpc vpc, List<? extends Network> networks,
26642709
payload.addProperty("vlan", safeStr(getVlanId(network)));
26652710
payload.addProperty("gateway", safeStr(network.getGateway()));
26662711
payload.addProperty("cidr", safeStr(network.getCidr()));
2712+
addNetworkIpv6ToPayload(payload, network);
26672713
payload.addProperty("acl_rules", aclRulesBase64);
26682714
addVpcIdToPayload(payload, network);
26692715

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/network/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,17 @@ The following names appear repeatedly inside the nested `payload` object.
260260
| `vlan` | Guest VLAN tag (for example `100`). Extracted from the broadcast URI. May be empty for flat networks. |
261261
| `gateway` | Guest network gateway (for example `10.0.0.1`). |
262262
| `cidr` | Guest network CIDR (for example `10.0.0.0/24`). |
263+
| `network_ip6_gateway` | Guest network IPv6 gateway, when the network has IPv6 configured. |
264+
| `network_ip6_cidr` | Guest network IPv6 CIDR, when the network has IPv6 configured. |
263265
| `extension_ip` | The IP the extension device uses on the guest side. Equals the gateway when SourceNat/Gateway is provided; otherwise it is a dedicated IP from the guest subnet. |
264266
| `public_ip` | A public IP address. |
265267
| `public_cidr` | CIDR of the public IP (for example `203.0.113.5/24`). |
266268
| `public_vlan` | VLAN tag of the public IP segment. |
267269
| `public_gateway` | Gateway of the public IP segment. |
268270
| `private_ip` | A VM's private guest-network IP address. |
271+
| `nic_ip6_address` | VM NIC IPv6 address, when the NIC has IPv6 configured. |
272+
| `nic_ip6_gateway` | VM NIC IPv6 gateway, when available. |
273+
| `nic_ip6_cidr` | VM NIC IPv6 CIDR, when available. |
269274
| `source_nat` | Stringified boolean (`"true"` / `"false"`) indicating whether the public IP is a source-NAT IP. |
270275
| `nic_uuid` | NIC UUID when the current API path has a `NicProfile` available. |
271276
| `dns` | Comma-separated DNS server list. |
@@ -344,6 +349,10 @@ configure the gateway.
344349
| `extension_ip` | Device IP on the guest network. |
345350
| `vpc_id` | Present for VPC tier networks. |
346351

352+
> **IPv6 note:** For network-scoped commands that already include `gateway`/`cidr`,
353+
> CloudStack now also includes `network_ip6_gateway` and `network_ip6_cidr`
354+
> when the guest network has IPv6 configured.
355+
347356
---
348357

349358
### `shutdown-network`
@@ -641,6 +650,12 @@ network whose DHCP service is provided by this extension.
641650

642651
**Purpose:** Add or remove a static DHCP lease for the VM.
643652

653+
> **IPv6 note:** For NIC-scoped commands (`add/remove-dhcp-entry`,
654+
> `add-dns-entry`, `save-vm-data`, `save-password`, `save-userdata`,
655+
> `save-sshkey`, `save-hypervisor-hostname`), CloudStack includes
656+
> `nic_ip6_address`, `nic_ip6_gateway`, and `nic_ip6_cidr` when the NIC
657+
> has IPv6 information.
658+
644659
**`add-dhcp-entry` payload fields (`payload` object):**
645660

646661
| Field | Description |

0 commit comments

Comments
 (0)