diff --git a/ui/src/locales/en.json b/ui/src/locales/en.json
index 0f0b6781d51..7bfecb71372 100644
--- a/ui/src/locales/en.json
+++ b/ui/src/locales/en.json
@@ -563,6 +563,7 @@
"label.enable.vnmc.provider": "Enable VNMC provider",
"label.enable.vpc.offering": "Enable VPC offering",
"label.enable.vpn": "Enable Remote Access VPN",
+"label.enable.zone": "Enable Zone",
"label.enter.token": "Enter token",
"label.error.volume.upload": "Please choose a file",
"label.error.zone.combined": "All Zones cannot be combined with any other zone",
@@ -1085,5 +1086,164 @@
"addNewNetworks": "Add new networks",
"existingNetworks": "Existing networks",
"sshKeyPairs": "SSH keypairs",
-"wednesday": "Wednesday"
+"wednesday": "Wednesday",
+"noselect": "No thanks",
+"groupname": "Add to group",
+"keyboard": "Keyboard language",
+"userdata": "Userdata",
+"label.back": "Back",
+"label.basic": "Basic",
+"label.advanced": "Advanced",
+"message.desc.zone": "A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone.",
+"message.desc.basic.zone": "Provide a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering).",
+"message.desc.advanced.zone": "For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or load balancer support.",
+"message.advanced.security.group": "Choose this if you wish to use security groups to provide guest VM isolation.",
+"message.setup.physical.network.during.zone.creation.basic": "When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.
You may also add other traffic types onto the physical network.",
+"message.setup.physical.network.during.zone.creation": "When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined. Add or remove one or more traffic types onto each physical network.",
+"message.public.traffic.in.advanced.zone": "Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.
Provide at least one range of IP addresses for internet traffic.",
+"message.public.traffic.in.basic.zone": "Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire additional IPs to implement static NAT between their instances and the public IP.",
+"message.guest.traffic.in.advanced.zone": "Guest network traffic is communication between end-user virtual machines. Specify a range of VLAN IDs to carry guest traffic for each physical network.",
+"message.guest.traffic.in.basic.zone": "Guest network traffic is communication between end-user virtual machines. Specify a range of IP addresses that CloudStack can assign to guest VMs. Make sure this range does not overlap the reserved system IP range.",
+"message.add.pod.during.zone.creation": "Each zone must contain in one or more pods, and we will add the first pod now. A pod contains hosts and primary storage servers, which you will add in a later step. First, configure a range of reserved IP addresses for CloudStack's internal management traffic. The reserved IP range must be unique for each zone in the cloud.",
+"message.desc.cluster": "Each pod must contain one or more clusters, and we will add the first cluster now. A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Each cluster consists of one or more hosts and one or more primary storage servers.",
+"message.desc.host": "Each cluster must contain at least one host (computer) for guest VMs to run on, and we will add the first host now. For a host to function in CloudStack, you must install hypervisor software on the host, assign an IP address to the host, and ensure the host is connected to the CloudStack management server.
Give the host's DNS or IP address, the user name (usually root) and password, and any labels you use to categorize hosts.",
+"message.creating.zone": "Creating zone",
+"message.dedicate.zone": "Dedicating zone",
+"message.creating.physical.networks": "Creating physical networks",
+"message.configuring.physical.networks": "Configuring physical networks",
+"message.adding.Netscaler.provider": "Adding Netscaler provider",
+"message.adding.Netscaler.device": "Adding Netscaler device",
+"message.creating.pod": "Creating pod",
+"message.creating.guest.network": "Creating guest network",
+"message.configuring.public.traffic": "Configuring public traffic",
+"message.configuring.storage.traffic": "Configuring storage traffic",
+"message.configuring.guest.traffic": "Configuring guest traffic",
+"message.creating.cluster": "Creating cluster",
+"message.adding.host": "Adding host",
+"message.creating.primary.storage": "Creating primary storage",
+"message.creating.secondary.storage": "Creating secondary storage",
+"message.enabling.security.group.provider": "Enabling Security Group provider",
+"message.Zone.creation.complete": "Zone creation complete",
+"message.launch.zone": "Zone is ready to launch; please proceed to the next step.",
+"message.please.wait.while.zone.is.being.created": "Please wait while your zone is being created; this may take a while...",
+"message.required.add.least.IP": "Please add at least 1 IP Range",
+"message.required.traffic.type": "Error in configuration! All required traffic types should be added and with multiple physical networks each network should have a label.",
+"message.desc.primary.storage": "Each cluster must contain one or more primary storage servers, and we will add the first one now. Primary storage contains the disk volumes for all the VMs running on hosts in the cluster. Use any standards-compliant protocol that is supported by the underlying hypervisor.",
+"message.desc.secondary.storage": "Each zone must have at least one NFS or secondary storage server, and we will add the first one now. Secondary storage stores VM templates, ISO images, and VM disk volume snapshots. This server must be available to all hosts in the zone.
Provide the IP address and exported path.",
+"label.name": "Name",
+"label.ipv4.dns1": "IPv4 DNS1",
+"label.ipv4.dns2": "IPv4 DNS2",
+"label.ipv6.dns1": "IPv6 DNS1",
+"label.ipv6.dns2": "IPv6 DNS2",
+"label.internal.dns.1": "Internal DNS 1",
+"label.internal.dns.2": "Internal DNS 2",
+"label.hypervisor": "Hypervisor",
+"label.network.offering": "Network Offering",
+"label.network.domain": "Network Domain",
+"label.guest.cidr": "Guest CIDR",
+"label.dedicated": "Dedicated",
+"label.domains": "Domains",
+"label.account": "Account",
+"label.local.storage.enabled": "Enable local storage for User VMs",
+"label.local.storage.enabled.system.vms": "Enable local storage for System VMs",
+"label.menu.security.groups": "Security Groups",
+"label.network.name": "Network Name",
+"label.isolation.method": "Isolation method",
+"label.traffic.types": "Traffic Types",
+"label.previous": "Previous",
+"label.next": "Next",
+"label.zone.type": "Zone Type",
+"label.zone.details": "Zone details",
+"label.network": "Network",
+"label.add.resources": "Add Resources",
+"label.launch": "Launch",
+"label.physical.network": "Physical Network",
+"label.netScaler": "NetScaler",
+"label.public.traffic": "Public traffic",
+"label.pod": "Pod",
+"label.guest.traffic": "Guest Traffic",
+"label.storage.traffic": "Storage Traffic",
+"label.guest.ip": "Guest IP Address",
+"label.username": "Username",
+"label.password": "Password",
+"label.type": "Type",
+"label.public.interface": "Public Interface",
+"label.private.interface": "Private Interface",
+"label.gslb.service": "GSLB service",
+"label.gslb.service.public.ip": "GSLB service Public IP",
+"label.gslb.service.private.ip": "GSLB service Private IP",
+"label.numretries": "Number of Retries",
+"label.capacity": "Capacity",
+"label.please.specify.netscaler.info": "Please specify Netscaler info",
+"label.zoneWizard.trafficType.management": "Management: Traffic between CloudStack's internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs",
+"label.pod.name": "Pod name",
+"label.reserved.system.gateway": "Reserved system gateway",
+"label.reserved.system.netmask": "Reserved system netmask",
+"label.start.reserved.system.IP": "Start Reserved system IP",
+"label.end.reserved.system.IP": "End Reserved system IP",
+"label.guest.gateway": "Guest Gateway",
+"label.guest.netmask": "Guest Netmask",
+"label.guest.start.ip": "Guest start IP",
+"label.guest.end.ip": "Guest end IP",
+"label.cluster": "Cluster",
+"label.host": "Host",
+"label.cluster.name": "Cluster Name",
+"label.vcenter.host": "vCenter Host",
+"label.vcenter.password": "vCenter Password",
+"label.vcenter.username": "vCenter Username",
+"label.vcenter.datacenter": "vCenter Datacenter",
+"label.vcenter.datastore": "vCenter Datastore",
+"label.override.public.traffic": "Override Public-Traffic",
+"label.override.guest.traffic": "Override Guest-Traffic",
+"label.cisco.nexus1000v.ip.address": "Nexus 1000v IP Address",
+"label.cisco.nexus1000v.password": "Nexus 1000v Password",
+"label.cisco.nexus1000v.username": "Nexus 1000v Username",
+"label.host.name": "Host Name",
+"label.agent.username": "Agent Username",
+"label.agent.password": "Agent Password",
+"label.tags": "Tags",
+"label.scope": "Scope",
+"label.protocol": "Protocol",
+"label.server": "Server",
+"label.path": "Path",
+"label.SR.name": "SR Name-Label",
+"label.target.iqn": "Target IQN",
+"label.LUN.number": "LUN #",
+"label.smb.domain": "SMB Domain",
+"label.smb.username": "SMB Username",
+"label.smb.password": "SMB Password",
+"label.rados.monitor": "RADOS Monitor",
+"label.rados.pool": "RADOS Pool",
+"label.rados.user": "RADOS User",
+"label.rados.secret": "RADOS Secret",
+"label.volgroup": "Volume Group",
+"label.volume": "Volume",
+"label.storage.tags": "Storage Tags",
+"label.provider": "Provider",
+"label.s3.access_key": "Access Key",
+"label.s3.bucket": "Bucket",
+"label.s3.connection_timeout": "Connection Timeout",
+"label.s3.endpoint": "Endpoint",
+"label.s3.max_error_retry": "Max Error Retry",
+"label.s3.nfs.path": "S3 NFS Path",
+"label.s3.nfs.server": "S3 NFS Server",
+"label.s3.secret_key": "Secret Key",
+"label.s3.socket_timeout": "Socket Timeout",
+"label.s3.use_https": "Use HTTPS",
+"label.create.nfs.secondary.staging.storage": "Create NFS Secondary Staging Store",
+"label.create.nfs.secondary.staging.store": "Create NFS secondary staging store",
+"label.url": "URL",
+"label.key": "Key",
+"label.add.physical.network": "Add Physical Network",
+"label.delete.confirm": "Delete?",
+"label.gateway": "Gateway",
+"label.netmask": "Netmask",
+"label.start.IP": "Start IP",
+"label.end.IP": "End IP",
+"label.add.traffic": "Add Traffic",
+"label.vlan.range": "VLAN/VNI Range",
+"label.launch.zone": "Launch Zone",
+"label.done": "Done",
+"label.fix.errors": "Fix errors",
+"error.something.went.wrong.please.correct.the.following": "Something went wrong; please correct the following"
}
diff --git a/ui/src/utils/request.js b/ui/src/utils/request.js
index f28958fcef1..2abad07d6b6 100644
--- a/ui/src/utils/request.js
+++ b/ui/src/utils/request.js
@@ -25,7 +25,7 @@ import { ACCESS_TOKEN, CURRENT_PROJECT } from '@/store/mutation-types'
const service = axios.create({
baseURL: config.apiBase,
- timeout: 60000
+ timeout: 600000
})
const err = (error) => {
diff --git a/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue b/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
new file mode 100644
index 00000000000..97a97fea0d3
--- /dev/null
+++ b/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
@@ -0,0 +1,216 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/IpAddressRangeForm.vue b/ui/src/views/infra/zone/IpAddressRangeForm.vue
new file mode 100644
index 00000000000..da34265a8db
--- /dev/null
+++ b/ui/src/views/infra/zone/IpAddressRangeForm.vue
@@ -0,0 +1,258 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/StaticInputsForm.vue b/ui/src/views/infra/zone/StaticInputsForm.vue
new file mode 100644
index 00000000000..7d50da7e715
--- /dev/null
+++ b/ui/src/views/infra/zone/StaticInputsForm.vue
@@ -0,0 +1,277 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/ZoneWizard.vue b/ui/src/views/infra/zone/ZoneWizard.vue
index e4ec8e1bc07..25cbfbb52dc 100644
--- a/ui/src/views/infra/zone/ZoneWizard.vue
+++ b/ui/src/views/infra/zone/ZoneWizard.vue
@@ -16,29 +16,205 @@
// under the License.
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
diff --git a/ui/src/views/infra/zone/ZoneWizardAddResources.vue b/ui/src/views/infra/zone/ZoneWizardAddResources.vue
new file mode 100644
index 00000000000..5c535dbbaa7
--- /dev/null
+++ b/ui/src/views/infra/zone/ZoneWizardAddResources.vue
@@ -0,0 +1,898 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
new file mode 100644
index 00000000000..70052924550
--- /dev/null
+++ b/ui/src/views/infra/zone/ZoneWizardLaunchZone.vue
@@ -0,0 +1,2168 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue b/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue
new file mode 100644
index 00000000000..56988d3a8cb
--- /dev/null
+++ b/ui/src/views/infra/zone/ZoneWizardNetworkSetupStep.vue
@@ -0,0 +1,444 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue b/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
new file mode 100644
index 00000000000..91510c78269
--- /dev/null
+++ b/ui/src/views/infra/zone/ZoneWizardPhysicalNetworkSetupStep.vue
@@ -0,0 +1,501 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue b/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
new file mode 100644
index 00000000000..440ec4653db
--- /dev/null
+++ b/ui/src/views/infra/zone/ZoneWizardZoneDetailsStep.vue
@@ -0,0 +1,599 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+
+
+
+
+
diff --git a/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue b/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
new file mode 100644
index 00000000000..80e9ddc47b2
--- /dev/null
+++ b/ui/src/views/infra/zone/ZoneWizardZoneTypeStep.vue
@@ -0,0 +1,153 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+
+