This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-primate.git


The following commit(s) were added to refs/heads/master by this push:
     new b99e69a  Adding guest networks in guest physical network tab (#764)
b99e69a is described below

commit b99e69ad1085d62fb1a150f78f3ad96120aeadef
Author: davidjumani <[email protected]>
AuthorDate: Tue Sep 29 20:32:11 2020 +0530

    Adding guest networks in guest physical network tab (#764)
---
 src/views/compute/wizard/NetworkSelection.vue     |   2 +-
 src/views/infra/network/IpRangesTabGuest.vue      | 174 ++++++++++++++++++++++
 src/views/infra/network/IpRangesTabManagement.vue |   4 +-
 src/views/infra/network/IpRangesTabPublic.vue     |   4 +-
 src/views/infra/network/IpRangesTabStorage.vue    |   6 +-
 src/views/infra/network/TrafficTypesTab.vue       |   8 +-
 src/views/network/CreateIsolatedNetworkForm.vue   |  13 ++
 src/views/network/CreateL2NetworkForm.vue         |  13 ++
 src/views/network/CreateNetwork.vue               |  11 ++
 src/views/network/CreateSharedNetworkForm.vue     |  13 ++
 10 files changed, 242 insertions(+), 6 deletions(-)

diff --git a/src/views/compute/wizard/NetworkSelection.vue 
b/src/views/compute/wizard/NetworkSelection.vue
index e3ea0be..ea04cbe 100644
--- a/src/views/compute/wizard/NetworkSelection.vue
+++ b/src/views/compute/wizard/NetworkSelection.vue
@@ -78,7 +78,7 @@
       centered
       width="auto">
       <create-network
-        :resource="{}"
+        :resource="{ zoneid: zoneId }"
         @refresh-data="handleSearch"
         @close-action="showCreateForm = false"
       />
diff --git a/src/views/infra/network/IpRangesTabGuest.vue 
b/src/views/infra/network/IpRangesTabGuest.vue
new file mode 100644
index 0000000..6daeb03
--- /dev/null
+++ b/src/views/infra/network/IpRangesTabGuest.vue
@@ -0,0 +1,174 @@
+// 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.
+
+<template>
+  <a-spin :spinning="componentLoading">
+    <a-button
+      :disabled="!('createNetwork' in this.$store.getters.apis)"
+      type="dashed"
+      icon="plus"
+      style="margin-bottom: 20px; width: 100%"
+      @click="handleOpenShowCreateForm">
+      {{ $t('label.add.guest.network') }}
+    </a-button>
+
+    <a-table
+      size="small"
+      style="overflow-y: auto"
+      :columns="columns"
+      :dataSource="items"
+      :rowKey="record => record.id"
+      :pagination="false"
+    >
+    </a-table>
+    <a-pagination
+      class="row-element pagination"
+      size="small"
+      style="overflow-y: auto"
+      :current="page"
+      :pageSize="pageSize"
+      :total="total"
+      :showTotal="total => `${$t('label.total')} ${total} 
${$t('label.items')}`"
+      :pageSizeOptions="['10', '20', '40', '80', '100']"
+      @change="changePage"
+      @showSizeChange="changePageSize"
+      showSizeChanger>
+      <template slot="buildOptionText" slot-scope="props">
+        <span>{{ props.value }} / {{ $t('label.page') }}</span>
+      </template>
+    </a-pagination>
+
+    <a-modal
+      v-model="showCreateForm"
+      :title="$t('label.add.guest.network')"
+      :closable="true"
+      :maskClosable="false"
+      :footer="null"
+      @cancel="showCreateForm = false"
+      centered
+      width="auto">
+      <CreateNetwork :resource="{ zoneid: resource.zoneid }"/>
+    </a-modal>
+
+  </a-spin>
+</template>
+
+<script>
+import { api } from '@/api'
+import CreateNetwork from '@/views/network/CreateNetwork'
+
+export default {
+  name: 'IpRangesTabGuest',
+  components: {
+    CreateNetwork
+  },
+  props: {
+    resource: {
+      type: Object,
+      required: true
+    },
+    loading: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      componentLoading: false,
+      items: [],
+      total: 0,
+      showCreateForm: false,
+      page: 1,
+      pageSize: 10,
+      columns: [
+        {
+          title: this.$t('label.name'),
+          dataIndex: 'name'
+        },
+        {
+          title: this.$t('label.type'),
+          dataIndex: 'type'
+        },
+        {
+          title: this.$t('label.vlan'),
+          dataIndex: 'vlan'
+        },
+        {
+          title: this.$t('label.broadcasturi'),
+          dataIndex: 'broadcasturi'
+        },
+        {
+          title: this.$t('label.cidr'),
+          dataIndex: 'cidr'
+        },
+        {
+          title: this.$t('label.ip6cidr'),
+          dataIndex: 'ip6cidr'
+        }
+      ]
+    }
+  },
+  mounted () {
+    this.fetchData()
+  },
+  watch: {
+    network (newItem, oldItem) {
+      if (!newItem || !newItem.id) {
+        return
+      }
+      this.fetchData()
+    }
+  },
+  methods: {
+    fetchData () {
+      this.componentLoading = true
+      api('listNetworks', {
+        zoneid: this.resource.zoneid,
+        page: this.page,
+        pagesize: this.pageSize
+      }).then(response => {
+        console.log(response)
+        this.items = response.listnetworksresponse.network ? 
response.listnetworksresponse.network : []
+        this.total = response.listnetworksresponse.count || 0
+      }).catch(error => {
+        this.$notifyError(error)
+      }).finally(() => {
+        this.componentLoading = false
+      })
+    },
+    handleOpenShowCreateForm () {
+      this.showCreateForm = true
+    },
+    changePage (page, pageSize) {
+      this.page = page
+      this.pageSize = pageSize
+      this.fetchData()
+    },
+    changePageSize (currentPage, pageSize) {
+      this.page = currentPage
+      this.pageSize = pageSize
+      this.fetchData()
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .pagination {
+    margin-top: 20px;
+  }
+</style>
diff --git a/src/views/infra/network/IpRangesTabManagement.vue 
b/src/views/infra/network/IpRangesTabManagement.vue
index 748bff2..27a1b0c 100644
--- a/src/views/infra/network/IpRangesTabManagement.vue
+++ b/src/views/infra/network/IpRangesTabManagement.vue
@@ -57,7 +57,7 @@
       style="overflow-y: auto"
       :current="page"
       :pageSize="pageSize"
-      :total="items.length"
+      :total="total"
       :showTotal="total => `${$t('label.total')} ${total} 
${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
@@ -141,6 +141,7 @@ export default {
     return {
       componentLoading: false,
       items: [],
+      total: 0,
       domains: [],
       domainsLoading: false,
       addIpRangeModal: false,
@@ -210,6 +211,7 @@ export default {
         pagesize: this.pageSize
       }).then(response => {
         this.items = []
+        this.total = response.listpodsresponse.count || 0
         const pods = response.listpodsresponse.pod ? 
response.listpodsresponse.pod : []
         for (const pod of pods) {
           if (pod && pod.startip && pod.startip.length > 0) {
diff --git a/src/views/infra/network/IpRangesTabPublic.vue 
b/src/views/infra/network/IpRangesTabPublic.vue
index 2d6bad9..73fc228 100644
--- a/src/views/infra/network/IpRangesTabPublic.vue
+++ b/src/views/infra/network/IpRangesTabPublic.vue
@@ -76,7 +76,7 @@
       style="overflow-y: auto"
       :current="page"
       :pageSize="pageSize"
-      :total="items.length"
+      :total="total"
       :showTotal="total => `${$t('label.total')} ${total} 
${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
@@ -221,6 +221,7 @@ export default {
     return {
       componentLoading: false,
       items: [],
+      total: 0,
       selectedItem: null,
       accountModal: false,
       addAccountModal: false,
@@ -290,6 +291,7 @@ export default {
         pagesize: this.pageSize
       }).then(response => {
         this.items = response.listvlaniprangesresponse.vlaniprange ? 
response.listvlaniprangesresponse.vlaniprange : []
+        this.total = response.listvlaniprangesresponse.count || 0
       }).catch(error => {
         this.$notifyError(error)
       }).finally(() => {
diff --git a/src/views/infra/network/IpRangesTabStorage.vue 
b/src/views/infra/network/IpRangesTabStorage.vue
index c8bc311..8b38134 100644
--- a/src/views/infra/network/IpRangesTabStorage.vue
+++ b/src/views/infra/network/IpRangesTabStorage.vue
@@ -55,7 +55,7 @@
       style="overflow-y: auto"
       :current="page"
       :pageSize="pageSize"
-      :total="items.length"
+      :total="total"
       :showTotal="total => `${$t('label.total')} ${total} 
${$t('label.items')}`"
       :pageSizeOptions="['10', '20', '40', '80', '100']"
       @change="changePage"
@@ -136,6 +136,7 @@ export default {
     return {
       componentLoading: false,
       items: [],
+      total: 0,
       pods: [],
       domains: [],
       domainsLoading: false,
@@ -198,7 +199,8 @@ export default {
         page: this.page,
         pageSize: this.pageSize
       }).then(response => {
-        this.items = 
response.liststoragenetworkiprangeresponse.storagenetworkiprange ? 
response.liststoragenetworkiprangeresponse.storagenetworkiprange : []
+        this.items = 
response.liststoragenetworkiprangeresponse.storagenetworkiprange || []
+        this.total = response.liststoragenetworkiprangeresponse.count || 0
       }).catch(error => {
         this.$notifyError(error)
       }).finally(() => {
diff --git a/src/views/infra/network/TrafficTypesTab.vue 
b/src/views/infra/network/TrafficTypesTab.vue
index 300511c..d7f6e93 100644
--- a/src/views/infra/network/TrafficTypesTab.vue
+++ b/src/views/infra/network/TrafficTypesTab.vue
@@ -26,6 +26,10 @@
           <div><strong>{{ $t(type) }}</strong></div>
           <div>{{ item[type] || 
$t('label.network.label.display.for.blank.value') }}</div>
         </div>
+        <div v-if="item.traffictype === 'Guest'">
+          <a-divider />
+          <IpRangesTabGuest :resource="resource" :loading="loading" />
+        </div>
         <div v-if="item.traffictype === 'Public'">
           <div style="margin-bottom: 10px;">
             <div><strong>{{ $t('label.traffictype') }}</strong></div>
@@ -57,13 +61,15 @@ import { mixinDevice } from '@/utils/mixin.js'
 import IpRangesTabPublic from './IpRangesTabPublic'
 import IpRangesTabManagement from './IpRangesTabManagement'
 import IpRangesTabStorage from './IpRangesTabStorage'
+import IpRangesTabGuest from './IpRangesTabGuest'
 
 export default {
   name: 'TrafficTypesTab',
   components: {
     IpRangesTabPublic,
     IpRangesTabManagement,
-    IpRangesTabStorage
+    IpRangesTabStorage,
+    IpRangesTabGuest
   },
   mixins: [mixinDevice],
   props: {
diff --git a/src/views/network/CreateIsolatedNetworkForm.vue 
b/src/views/network/CreateIsolatedNetworkForm.vue
index dd29272..8c71469 100644
--- a/src/views/network/CreateIsolatedNetworkForm.vue
+++ b/src/views/network/CreateIsolatedNetworkForm.vue
@@ -262,6 +262,10 @@ export default {
     vpc: {
       type: Object,
       default: null
+    },
+    resource: {
+      type: Object,
+      default: () => { return {} }
     }
   },
   data () {
@@ -282,6 +286,11 @@ export default {
       accountVisible: this.isAdminOrDomainAdmin()
     }
   },
+  watch: {
+    resource (newItem, oldItem) {
+      this.fetchData()
+    }
+  },
   beforeCreate () {
     this.form = this.$form.createForm(this)
     this.apiConfig = this.$store.getters.apis.createNetwork || {}
@@ -322,7 +331,11 @@ export default {
       return key in obj && obj[key] != null && obj[key].length > 0
     },
     fetchZoneData () {
+      this.zones = []
       const params = {}
+      if (this.resource.zoneid) {
+        params.id = this.resource.zoneid
+      }
       params.listAll = true
       this.zoneLoading = true
       api('listZones', params).then(json => {
diff --git a/src/views/network/CreateL2NetworkForm.vue 
b/src/views/network/CreateL2NetworkForm.vue
index e97c0d6..3146471 100644
--- a/src/views/network/CreateL2NetworkForm.vue
+++ b/src/views/network/CreateL2NetworkForm.vue
@@ -236,6 +236,10 @@ export default {
     vpc: {
       type: Object,
       default: null
+    },
+    resource: {
+      type: Object,
+      default: () => { return {} }
     }
   },
   data () {
@@ -254,6 +258,11 @@ export default {
       isolatePvlanType: 'none'
     }
   },
+  watch: {
+    resource (newItem, oldItem) {
+      this.fetchData()
+    }
+  },
   beforeCreate () {
     this.form = this.$form.createForm(this)
     this.apiConfig = this.$store.getters.apis.createNetwork || {}
@@ -297,7 +306,11 @@ export default {
       return this.isValidValueForKey(obj, key) && obj[key].length > 0
     },
     fetchZoneData () {
+      this.zones = []
       const params = {}
+      if (this.resource.zoneid) {
+        params.id = this.resource.zoneid
+      }
       params.listAll = true
       this.zoneLoading = true
       api('listZones', params).then(json => {
diff --git a/src/views/network/CreateNetwork.vue 
b/src/views/network/CreateNetwork.vue
index d350919..ed296ff 100644
--- a/src/views/network/CreateNetwork.vue
+++ b/src/views/network/CreateNetwork.vue
@@ -21,6 +21,7 @@
       <a-tab-pane :tab="$t('label.isolated')" key="1" 
v-if="this.isAdvancedZoneWithoutSGAvailable()">
         <CreateIsolatedNetworkForm
           :loading="loading"
+          :resource="resource"
           @close-action="closeAction"
           @refresh-data="refreshParent"
           @refresh="handleRefresh"/>
@@ -28,6 +29,7 @@
       <a-tab-pane :tab="$t('label.l2')" key="2">
         <CreateL2NetworkForm
           :loading="loading"
+          :resource="resource"
           @close-action="closeAction"
           @refresh-data="refreshParent"
           @refresh="handleRefresh"/>
@@ -35,6 +37,7 @@
       <a-tab-pane :tab="$t('label.shared')" key="3" v-if="this.isAdmin()">
         <CreateSharedNetworkForm
           :loading="loading"
+          :resource="resource"
           @close-action="closeAction"
           @refresh-data="refreshParent"
           @refresh="handleRefresh"/>
@@ -70,6 +73,11 @@ export default {
       actionZoneLoading: false
     }
   },
+  watch: {
+    resource (newItem, oldItem) {
+      this.fetchData()
+    }
+  },
   mounted () {
     this.fetchData()
   },
@@ -83,6 +91,9 @@ export default {
     },
     fetchActionZoneData () {
       const params = {}
+      if (this.resource && this.resource.zoneid) {
+        params.id = this.resource.zoneid
+      }
       params.listAll = true
       this.actionZonesLoading = true
       api('listZones', params).then(json => {
diff --git a/src/views/network/CreateSharedNetworkForm.vue 
b/src/views/network/CreateSharedNetworkForm.vue
index c698f49..20f5f02 100644
--- a/src/views/network/CreateSharedNetworkForm.vue
+++ b/src/views/network/CreateSharedNetworkForm.vue
@@ -432,6 +432,10 @@ export default {
     physicalNetworks: {
       type: Array,
       default: null
+    },
+    resource: {
+      type: Object,
+      default: () => { return {} }
     }
   },
   data () {
@@ -456,6 +460,11 @@ export default {
       selectedProject: {}
     }
   },
+  watch: {
+    resource (newItem, oldItem) {
+      this.fetchData()
+    }
+  },
   beforeCreate () {
     this.form = this.$form.createForm(this)
     this.apiConfig = this.$store.getters.apis.createNetwork || {}
@@ -499,6 +508,7 @@ export default {
       return this.isValidValueForKey(obj, key) && obj[key].length > 0
     },
     fetchZoneData () {
+      this.zones = []
       if (this.zone !== null) {
         this.zones.push(this.zone)
         if (this.arrayHasItems(this.zones)) {
@@ -509,6 +519,9 @@ export default {
         }
       } else {
         const params = {}
+        if (this.resource.zoneid) {
+          params.id = this.resource.zoneid
+        }
         params.listAll = true
         this.zoneLoading = true
         api('listZones', params).then(json => {

Reply via email to