From 6eddd6e927581b8bfdea8efb2833d2865a1d1544 Mon Sep 17 00:00:00 2001 From: zhuyue Date: Tue, 30 Nov 2021 10:59:49 +0800 Subject: [PATCH] fix: Fix create ipv6 subnet with ipv6_address_mode fix create ipv6 subnet with ipv6_address_mode Change-Id: I9edfea47a00d00087e5b941ce50727e751906418 --- src/components/FormItem/index.jsx | 2 + .../Network/actions/CreateNetwork.jsx | 38 +++++++++++++++++++ .../Network/actions/CreateSubnet.jsx | 37 ++++++++++++++++++ src/stores/neutron/network.js | 6 +++ 4 files changed, 83 insertions(+) diff --git a/src/components/FormItem/index.jsx b/src/components/FormItem/index.jsx index a4fb63a2..6e9a6a76 100644 --- a/src/components/FormItem/index.jsx +++ b/src/components/FormItem/index.jsx @@ -156,6 +156,7 @@ export default class FormItem extends React.Component { optionFilterProp = 'label', checkOptions, checkBoxInfo, + allowClear, } = this.props; return { options, @@ -169,6 +170,7 @@ export default class FormItem extends React.Component { optionFilterProp, checkOptions, checkBoxInfo, + allowClear, }; } default: { diff --git a/src/pages/network/containers/Network/actions/CreateNetwork.jsx b/src/pages/network/containers/Network/actions/CreateNetwork.jsx index 9ca26d81..eae42b61 100644 --- a/src/pages/network/containers/Network/actions/CreateNetwork.jsx +++ b/src/pages/network/containers/Network/actions/CreateNetwork.jsx @@ -400,6 +400,42 @@ export class CreateNetwork extends ModalAction { required: true, hidden: !create_subnet, }, + { + name: 'ipv6_ra_mode', + label: t('Router Advertisements Mode'), + type: 'select', + options: [ + { + label: 'dhcpv6-stateful', + value: 'dhcpv6-stateful', + }, + { + label: 'dhcpv6-stateless', + value: 'dhcpv6-stateless', + }, + { + label: 'slaac', + value: 'slaac', + }, + ], + hidden: ip_version !== 'ipv6', + dependencies: ['ipv6_address_mode'], + allowClear: true, + validator: (rule, value) => { + const ipv6_address_mode = + (this.formRef.current && + this.formRef.current.getFieldValue('ipv6_address_mode')) || + undefined; + // https://docs.openstack.org/neutron/xena/admin/config-ipv6.html + if (!value && ipv6_address_mode) { + return Promise.resolve(); + } + if (ipv6_address_mode && ipv6_address_mode !== value) { + return Promise.reject(new Error(t('Invalid combination'))); + } + return Promise.resolve(); + }, + }, { name: 'ipv6_address_mode', label: t('IP Distribution Mode'), @@ -419,6 +455,8 @@ export class CreateNetwork extends ModalAction { }, ], hidden: ip_version !== 'ipv6', + dependencies: ['ipv6_ra_mode'], + allowClear: true, }, { name: 'cidr', diff --git a/src/pages/network/containers/Network/actions/CreateSubnet.jsx b/src/pages/network/containers/Network/actions/CreateSubnet.jsx index ba23e270..70eda81e 100644 --- a/src/pages/network/containers/Network/actions/CreateSubnet.jsx +++ b/src/pages/network/containers/Network/actions/CreateSubnet.jsx @@ -177,6 +177,42 @@ export default class CreateSubnet extends ModalAction { }, required: true, }, + { + name: 'ipv6_ra_mode', + label: t('Router Advertisements Mode'), + type: 'select', + options: [ + { + label: 'dhcpv6-stateful', + value: 'dhcpv6-stateful', + }, + { + label: 'dhcpv6-stateless', + value: 'dhcpv6-stateless', + }, + { + label: 'slaac', + value: 'slaac', + }, + ], + hidden: ip_version !== 'ipv6', + dependencies: ['ipv6_address_mode'], + allowClear: true, + validator: (rule, value) => { + const ipv6_address_mode = + (this.formRef.current && + this.formRef.current.getFieldValue('ipv6_address_mode')) || + undefined; + // https://docs.openstack.org/neutron/xena/admin/config-ipv6.html + if (!value && ipv6_address_mode) { + return Promise.resolve(); + } + if (ipv6_address_mode && ipv6_address_mode !== value) { + return Promise.reject(new Error(t('Invalid combination'))); + } + return Promise.resolve(); + }, + }, { name: 'ipv6_address_mode', label: t('IP Distribution Mode'), @@ -196,6 +232,7 @@ export default class CreateSubnet extends ModalAction { }, ], hidden: ip_version !== 'ipv6', + allowClear: true, }, { name: 'cidr', diff --git a/src/stores/neutron/network.js b/src/stores/neutron/network.js index c460efba..11ee2f5e 100644 --- a/src/stores/neutron/network.js +++ b/src/stores/neutron/network.js @@ -306,6 +306,8 @@ export class NetworkStore extends Base { subnet_name, enable_dhcp, ip_version, + ipv6_address_mode, + ipv6_ra_mode, gateway_ip, cidr, disable_gateway, @@ -323,6 +325,10 @@ export class NetworkStore extends Base { gateway_ip: disable_gateway ? null : gateway_ip, cidr, }; + if (data.ip_version === 6) { + data.ipv6_address_mode = ipv6_address_mode; + data.ipv6_ra_mode = ipv6_ra_mode; + } return this.subnetClient.create({ subnet: data }); } }