blob: 4c919af94ed521cac039f0a1835cce5b71ce2b39 [file] [log] [blame]
// 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>
<div style="width: auto;">
<a-steps
v-if="steps.length > 1"
ref="resourceStep"
progressDot
:current="currentStep"
size="small"
style="margin-left: 0; margin-top: 16px;">
<a-step
v-for="(step, index) in steps"
:ref="`resourceStep${index}`"
:key="step.formKey"
:title="$t(step.title)"></a-step>
</a-steps>
<static-inputs-form
v-if="checkVisibleResource('clusterResource')"
@nextPressed="nextPressed"
@backPressed="handleBack"
@fieldsChanged="fieldsChanged"
@submitLaunchZone="submitLaunchZone"
:fields="clusterFields"
:prefillContent="prefillContent"
:description="steps[currentStep].description"
:isFixError="isFixError"
/>
<div v-if="hypervisor !== 'VMware'">
<static-inputs-form
v-if="checkVisibleResource('hostResource')"
@nextPressed="nextPressed"
@backPressed="handleBack"
@fieldsChanged="fieldsChanged"
@submitLaunchZone="submitLaunchZone"
:fields="hostFields"
:prefillContent="prefillContent"
:description="steps[currentStep].description"
:isFixError="isFixError"
/>
<static-inputs-form
v-if="!isEdgeZone && (!localstorageenabled || !localstorageenabledforsystemvm) && checkVisibleResource('primaryResource')"
@nextPressed="nextPressed"
@backPressed="handleBack"
@fieldsChanged="fieldsChanged"
@submitLaunchZone="submitLaunchZone"
:fields="primaryStorageFields"
:prefillContent="prefillContent"
:description="steps[currentStep].description"
:isFixError="isFixError"
/>
<static-inputs-form
v-if="!isEdgeZone && checkVisibleResource('secondaryResource')"
@nextPressed="nextPressed"
@backPressed="handleBack"
@fieldsChanged="fieldsChanged"
@submitLaunchZone="submitLaunchZone"
:fields="secondaryStorageFields"
:prefillContent="prefillContent"
:description="steps[currentStep].description"
:isFixError="isFixError"
/>
</div>
<div v-else-if="!isEdgeZone">
<static-inputs-form
v-if="checkVisibleResource('primaryResource')"
@nextPressed="nextPressed"
@backPressed="handleBack"
@fieldsChanged="fieldsChanged"
@submitLaunchZone="submitLaunchZone"
:fields="primaryStorageFields"
:prefillContent="prefillContent"
:description="steps[currentStep].description"
:isFixError="isFixError"
/>
<static-inputs-form
v-if="checkVisibleResource('secondaryResource')"
@nextPressed="nextPressed"
@backPressed="handleBack"
@fieldsChanged="fieldsChanged"
@submitLaunchZone="submitLaunchZone"
:fields="secondaryStorageFields"
:prefillContent="prefillContent"
:description="steps[currentStep].description"
:isFixError="isFixError"
/>
</div>
</div>
</template>
<script>
import { nextTick } from 'vue'
import { api } from '@/api'
import { mixinDevice } from '@/utils/mixin.js'
import StaticInputsForm from '@views/infra/zone/StaticInputsForm'
export default {
components: {
StaticInputsForm
},
mixins: [mixinDevice],
props: {
prefillContent: {
type: Object,
default: function () {
return {}
}
},
stepChild: {
type: String,
default: ''
},
isFixError: {
type: Boolean,
default: false
}
},
computed: {
zoneType () {
return this.prefillContent?.zoneType || null
},
isAdvancedZone () {
return this.zoneType === 'Advanced'
},
hypervisor () {
return this.prefillContent?.hypervisor || null
},
localstorageenabled () {
return this.prefillContent?.localstorageenabled || false
},
localstorageenabledforsystemvm () {
return this.prefillContent?.localstorageenabledforsystemvm || false
},
isEdgeZone () {
return this.prefillContent?.zoneSuperType === 'Edge' || false
},
steps () {
const steps = []
const hypervisor = this.prefillContent.hypervisor ? this.prefillContent.hypervisor : null
if (!this.isEdgeZone) {
steps.push({
title: 'label.cluster',
fromKey: 'clusterResource',
description: 'message.desc.cluster'
})
}
if (hypervisor !== 'VMware') {
steps.push({
title: 'label.host',
fromKey: 'hostResource',
description: 'message.desc.host'
})
}
if (!this.isEdgeZone) {
if (!this.localstorageenabled || !this.localstorageenabledforsystemvm) {
steps.push({
title: 'label.primary.storage',
fromKey: 'primaryResource',
description: 'message.desc.primary.storage'
})
}
steps.push({
title: 'label.secondary.storage',
fromKey: 'secondaryResource',
description: 'message.desc.secondary.storage'
})
}
return steps
},
clusterFields () {
return [
{
title: 'label.cluster.name',
key: 'clusterName',
placeHolder: 'message.error.cluster.name',
required: true
},
{
title: 'label.vcenter.host',
key: 'vCenterHost',
placeHolder: 'message.error.vcenter.host',
required: true,
display: {
hypervisor: ['VMware', 'Ovm3']
}
},
{
title: 'label.vcenter.username',
key: 'vCenterUsername',
placeHolder: 'message.error.vcenter.username',
required: true,
display: {
hypervisor: ['VMware', 'Ovm3']
}
},
{
title: 'label.vcenter.password',
key: 'vCenterPassword',
placeHolder: 'message.error.vcenter.password',
required: true,
password: true,
display: {
hypervisor: ['VMware', 'Ovm3']
}
},
{
title: 'label.vcenter.datacenter',
key: 'vCenterDatacenter',
placeHolder: 'message.error.vcenter.datacenter',
required: true,
display: {
hypervisor: ['VMware', 'Ovm3']
}
},
{
title: 'label.override.public.traffic',
key: 'overridepublictraffic',
required: false,
switch: true,
display: {
dvSwitchEnabled: true
}
},
{
title: 'label.override.guest.traffic',
key: 'overrideguesttraffic',
required: false,
switch: true,
display: {
dvSwitchEnabled: true
}
},
{
title: 'label.cisco.nexus1000v.ip.address',
key: 'vsmipaddress',
placeHolder: 'message.error.nexus1000v.ipaddress',
required: false,
display: {
vSwitchEnabled: true
}
},
{
title: 'label.cisco.nexus1000v.username',
key: 'vsmusername',
placeHolder: 'message.error.nexus1000v.username',
required: false,
display: {
vSwitchEnabled: true
}
},
{
title: 'label.cisco.nexus1000v.password',
key: 'vsmpassword',
placeHolder: 'message.error.nexus1000v.password',
required: false,
display: {
vSwitchEnabled: true
}
}
]
},
hostFields () {
return [
{
title: 'label.host.name',
key: 'hostName',
placeHolder: 'message.error.host.name',
required: true,
display: {
hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
}
},
{
title: 'label.username',
key: 'hostUserName',
placeHolder: 'message.error.host.username',
required: true,
display: {
hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
}
},
{
title: 'label.authentication.method',
key: 'authmethod',
placeHolder: 'message.error.authmethod',
required: false,
radioGroup: true,
defaultValue: 'password',
radioOption: [{
label: 'label.password',
value: 'password'
}, {
label: 'label.authentication.sshkey',
value: 'sshkey',
condition: {
hypervisor: ['KVM']
}
}],
display: {
hypervisor: ['BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator']
},
alert: {
message: 'message.add.host.sshkey',
display: {
authmethod: 'sshkey'
}
}
},
{
title: 'label.password',
key: 'hostPassword',
placeHolder: 'message.error.host.password',
required: true,
password: true,
display: {
hypervisor: ['VMware', 'BareMetal', 'Ovm', 'Hyperv', 'KVM', 'XenServer', 'LXC', 'Simulator'],
authmethod: 'password'
}
},
{
title: 'label.agent.username',
key: 'agentUserName',
placeHolder: 'message.error.agent.username',
required: false,
defaultValue: 'Oracle',
display: {
hypervisor: 'Ovm'
}
},
{
title: 'label.agent.password',
key: 'agentPassword',
placeHolder: 'message.error.agent.password',
required: true,
password: true,
display: {
hypervisor: 'Ovm'
}
},
{
title: 'label.tags',
key: 'hostTags',
placeHolder: 'message.error.host.tags',
required: false
}
]
},
primaryStorageFields () {
return [
{
title: 'label.name',
key: 'primaryStorageName',
placeHolder: 'message.error.name',
required: true
},
{
title: 'label.scope',
key: 'primaryStorageScope',
required: false,
select: true,
options: this.primaryStorageScopes
},
{
title: 'label.protocol',
key: 'primaryStorageProtocol',
placeHolder: 'message.error.select',
required: true,
select: true,
options: this.primaryStorageProtocols
},
{
title: 'label.server',
key: 'primaryStorageServer',
placeHolder: 'message.error.server',
required: true,
display: {
primaryStorageProtocol: ['nfs', 'iscsi', 'gluster', 'SMB', 'Linstor']
}
},
{
title: 'label.path',
key: 'primaryStoragePath',
placeHolder: 'message.error.path',
required: true,
display: {
primaryStorageProtocol: ['nfs', 'SMB', 'SharedMountPoint', 'ocfs2']
}
},
{
title: 'label.sr.name',
key: 'primaryStorageSRLabel',
placeHolder: 'message.error.sr.namelabel',
required: true,
display: {
primaryStorageProtocol: 'PreSetup'
}
},
{
title: 'label.target.iqn',
key: 'primaryStorageTargetIQN',
placeHolder: 'message.error.target.iqn',
required: true,
display: {
primaryStorageProtocol: 'iscsi'
}
},
{
title: 'label.lun.number',
key: 'primaryStorageLUN',
placeHolder: 'message.error.lun',
required: true,
display: {
primaryStorageProtocol: 'iscsi'
}
},
{
title: 'label.smb.domain',
key: 'primaryStorageSMBDomain',
placeHolder: 'message.error.sbdomain',
required: true,
display: {
primaryStorageProtocol: 'SMB'
}
},
{
title: 'label.smb.username',
key: 'primaryStorageSMBUsername',
placeHolder: 'message.error.sbdomain.username',
required: true,
display: {
primaryStorageProtocol: 'SMB'
}
},
{
title: 'label.smb.password',
key: 'primaryStorageSMBPassword',
placeHolder: 'message.error.sbdomain.password',
required: true,
password: true,
display: {
primaryStorageProtocol: 'SMB'
}
},
{
title: 'label.rados.monitor',
key: 'primaryStorageRADOSMonitor',
placeHolder: 'message.error.rados.monitor',
required: false,
display: {
primaryStorageProtocol: ['rbd']
}
},
{
title: 'label.rados.pool',
key: 'primaryStorageRADOSPool',
placeHolder: 'message.error.rados.pool',
required: false,
display: {
primaryStorageProtocol: ['rbd']
}
},
{
title: 'label.rados.user',
key: 'primaryStorageRADOSUser',
placeHolder: 'message.error.rados.user',
required: false,
display: {
primaryStorageProtocol: ['rbd']
}
},
{
title: 'label.rados.secret',
key: 'primaryStorageRADOSSecret',
placeHolder: 'message.error.rados.secret',
required: false,
display: {
primaryStorageProtocol: ['rbd']
}
},
{
title: 'label.volgroup',
key: 'primaryStorageVolumeGroup',
placeHolder: 'message.error.volume.group',
required: true,
display: {
primaryStorageProtocol: 'clvm'
}
},
{
title: 'label.volume',
key: 'primaryStorageVolume',
placeHolder: 'message.error.volume',
required: true,
display: {
primaryStorageProtocol: 'gluster'
}
},
{
title: 'label.vcenter.datacenter',
key: 'primaryStorageVmfsDatacenter',
placeHolder: 'message.error.vcenter.datacenter',
required: true,
display: {
primaryStorageProtocol: ['vmfs', 'datastorecluster']
}
},
{
title: 'label.vcenter.datastore',
key: 'primaryStorageVmfsDatastore',
placeHolder: 'message.error.vcenter.datastore',
required: true,
display: {
primaryStorageProtocol: ['vmfs', 'datastorecluster']
}
},
{
title: 'label.resourcegroup',
key: 'primaryStorageLinstorResourceGroup',
placeHolder: 'message.error.linstor.resourcegroup',
required: true,
display: {
primaryStorageProtocol: 'Linstor'
}
},
{
title: 'label.provider',
key: 'provider',
placeHolder: 'message.error.select',
value: 'DefaultPrimary',
select: true,
required: true,
options: this.primaryStorageProviders
},
{
title: 'label.ismanaged',
key: 'managed',
checkbox: true,
hidden: {
provider: ['DefaultPrimary', 'PowerFlex', 'Linstor']
}
},
{
title: 'label.capacitybytes',
key: 'capacityBytes',
hidden: {
provider: ['DefaultPrimary', 'PowerFlex', 'Linstor']
}
},
{
title: 'label.capacityiops',
key: 'capacityIops',
hidden: {
provider: ['DefaultPrimary', 'PowerFlex', 'Linstor']
}
},
{
title: 'label.url',
key: 'url',
hidden: {
provider: ['DefaultPrimary', 'PowerFlex', 'Linstor']
}
},
{
title: 'label.powerflex.gateway',
key: 'powerflexGateway',
required: true,
placeHolder: 'message.error.input.value',
display: {
provider: 'PowerFlex'
}
},
{
title: 'label.powerflex.gateway.username',
key: 'powerflexGatewayUsername',
required: true,
placeHolder: 'message.error.input.value',
display: {
provider: 'PowerFlex'
}
},
{
title: 'label.powerflex.gateway.password',
key: 'powerflexGatewayPassword',
required: true,
placeHolder: 'message.error.input.value',
password: true,
display: {
provider: 'PowerFlex'
}
},
{
title: 'label.powerflex.storage.pool',
key: 'powerflexStoragePool',
required: true,
placeHolder: 'message.error.input.value',
display: {
provider: 'PowerFlex'
}
},
{
title: 'label.storage.tags',
key: 'primaryStorageTags',
placeHolder: 'message.error.storage.tags',
required: false
}
]
},
secondaryStorageFields () {
return [
{
title: 'label.provider',
key: 'secondaryStorageProvider',
required: false,
select: true,
options: this.storageProviders
},
{
title: 'label.name',
key: 'secondaryStorageName',
required: false,
display: {
secondaryStorageProvider: ['NFS', 'SMB', 'S3', 'Swift']
}
},
{
title: 'label.server',
key: 'secondaryStorageServer',
required: true,
placeHolder: 'message.error.server',
display: {
secondaryStorageProvider: ['NFS', 'SMB']
}
},
{
title: 'label.path',
key: 'secondaryStoragePath',
required: true,
placeHolder: 'message.error.path',
display: {
secondaryStorageProvider: ['NFS', 'SMB']
}
},
{
title: 'label.smb.domain',
key: 'secondaryStorageSMBDomain',
required: true,
placeHolder: 'message.error.sbdomain',
display: {
secondaryStorageProvider: ['SMB']
}
},
{
title: 'label.smb.username',
key: 'secondaryStorageSMBUsername',
required: true,
placeHolder: 'message.error.smb.username',
display: {
secondaryStorageProvider: ['SMB']
}
},
{
title: 'label.smb.password',
key: 'secondaryStorageSMBPassword',
required: true,
password: true,
placeHolder: 'message.error.smb.password',
display: {
secondaryStorageProvider: ['SMB']
}
},
{
title: 'label.s3.access.key',
key: 'secondaryStorageAccessKey',
required: true,
placeHolder: 'message.error.access.key',
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.secret.key',
key: 'secondaryStorageSecretKey',
required: true,
placeHolder: 'message.error.secret.key',
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.bucket',
key: 'secondaryStorageBucket',
required: true,
placeHolder: 'message.error.bucket',
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.endpoint',
key: 'secondaryStorageEndpoint',
required: false,
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.use.https',
key: 'secondaryStorageHttps',
required: false,
switch: true,
checked: true,
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.connection.timeout',
key: 'secondaryStorageConnectionTimeout',
required: false,
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.max.error.retry',
key: 'secondaryStorageMaxError',
required: false,
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.socket.timeout',
key: 'secondaryStorageSocketTimeout',
required: false,
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.create.nfs.secondary.staging.storage',
key: 'secondaryStorageNFSStaging',
required: false,
switch: true,
display: {
secondaryStorageProvider: ['S3']
}
},
{
title: 'label.s3.nfs.server',
key: 'secondaryStorageNFSServer',
required: true,
placeHolder: 'message.error.s3nfs.server',
display: {
secondaryStorageProvider: ['S3'],
secondaryStorageNFSStaging: true
}
},
{
title: 'label.s3.nfs.path',
key: 'secondaryStorageNFSPath',
required: true,
placeHolder: 'message.error.s3nfs.path',
display: {
secondaryStorageProvider: ['S3'],
secondaryStorageNFSStaging: true
}
},
{
title: 'label.url',
key: 'secondaryStorageURL',
required: true,
placeHolder: 'message.error.url',
display: {
secondaryStorageProvider: ['Swift']
}
},
{
title: 'label.account',
key: 'secondaryStorageAccount',
required: true,
placeHolder: 'message.error.swift.account',
display: {
secondaryStorageProvider: ['Swift']
}
},
{
title: 'label.username',
key: 'secondaryStorageUsername',
required: true,
placeHolder: 'message.error.swift.username',
display: {
secondaryStorageProvider: ['Swift']
}
},
{
title: 'label.key',
key: 'secondaryStorageKey',
required: true,
placeHolder: 'message.error.swift.key',
display: {
secondaryStorageProvider: ['Swift']
}
},
{
title: 'label.storagepolicy',
key: 'secondaryStoragePolicy',
required: false,
display: {
secondaryStorageProvider: ['Swift']
}
}
]
}
},
data () {
return {
physicalNetworks: null,
currentHypervisor: null,
primaryStorageScopes: [],
primaryStorageProtocols: [],
primaryStorageProviders: [],
storageProviders: [],
currentStep: null,
options: ['primaryStorageScope', 'primaryStorageProtocol', 'provider', 'primaryStorageProvider']
}
},
created () {
this.currentStep = this.prefillContent?.resourceStep || 0
if (this.stepChild && this.stepChild !== '') {
this.currentStep = this.steps.findIndex(item => item.fromKey === this.stepChild)
}
this.scrollToStepActive()
if (this.prefillContent.hypervisor === 'BareMetal') {
this.$emit('nextPressed')
} else {
this.fetchConfigurationSwitch()
this.options.forEach(this.fetchOptions)
if (!this.prefillContent.lastHypervisor) {
this.$emit('fieldsChanged', {
lastHypervisor: this.prefillContent.hypervisor
})
} else if (this.prefillContent.lastHypervisor !== this.prefillContent.hypervisor) {
this.$emit('fieldsChanged', {
lastHypervisor: this.prefillContent.hypervisor,
primaryStorageProtocol: null,
primaryStorageScope: null
})
}
}
},
watch: {
'prefillContent.provider' (newVal, oldVal) {
if (['SolidFire', 'PowerFlex'].includes(newVal) && !['SolidFire', 'PowerFlex'].includes(oldVal)) {
this.$emit('fieldsChanged', { primaryStorageProtocol: undefined })
} else if (!['SolidFire', 'PowerFlex'].includes(newVal) && ['SolidFire', 'PowerFlex'].includes(oldVal)) {
this.$emit('fieldsChanged', { primaryStorageProtocol: undefined })
}
this.fetchProtocol()
}
},
methods: {
nextPressed () {
if (this.currentStep === this.steps.length - 1) {
this.$emit('nextPressed')
} else {
this.currentStep++
this.$emit('fieldsChanged', { resourceStep: this.currentStep })
}
this.scrollToStepActive()
},
handleBack () {
if (this.currentStep === 0) {
this.$emit('backPressed')
} else {
this.currentStep--
this.$emit('fieldsChanged', { resourceStep: this.currentStep })
}
this.scrollToStepActive()
},
scrollToStepActive () {
if (!this.isMobile()) {
return
}
nextTick().then(() => {
if (!this.$refs.resourceStep) {
return
}
if (this.currentStep === 0) {
this.$refs.resourceStep.$el.scrollLeft = 0
return
}
this.$refs.resourceStep.$el.scrollLeft = this.$refs['resourceStep' + (this.currentStep - 1)][0].$el.offsetLeft
})
},
fieldsChanged (changed) {
this.$emit('fieldsChanged', changed)
},
fetchOptions (name) {
switch (name) {
case 'primaryStorageScope':
this.fetchScope()
break
case 'primaryStorageProtocol':
this.fetchProtocol()
break
case 'provider':
this.fetchProvider()
break
case 'primaryStorageProvider':
this.fetchPrimaryStorageProvider()
break
default:
break
}
},
fetchScope () {
const hypervisor = this.prefillContent?.hypervisor || null
const scope = []
if (['KVM', 'VMware', 'Hyperv'].includes(hypervisor)) {
scope.push({
id: 'zone',
description: this.$t('label.zone')
})
scope.push({
id: 'cluster',
description: this.$t('label.cluster')
})
} else {
scope.push({
id: 'cluster',
description: this.$t('label.cluster')
})
}
this.primaryStorageScopes = scope
},
fetchProtocol () {
const hypervisor = this.prefillContent?.hypervisor || null
const protocols = []
if (hypervisor === 'KVM') {
protocols.push({
id: 'nfs',
description: 'nfs'
})
protocols.push({
id: 'SharedMountPoint',
description: 'SharedMountPoint'
})
protocols.push({
id: 'rbd',
description: 'RBD'
})
protocols.push({
id: 'clvm',
description: 'CLVM'
})
protocols.push({
id: 'gluster',
description: 'Gluster'
})
protocols.push({
id: 'Linstor',
description: 'Linstor'
})
} else if (hypervisor === 'XenServer') {
protocols.push({
id: 'nfs',
description: 'nfs'
})
protocols.push({
id: 'PreSetup',
description: 'PreSetup'
})
protocols.push({
id: 'iscsi',
description: 'iscsi'
})
} else if (hypervisor === 'VMware') {
protocols.push({
id: 'nfs',
description: 'nfs'
})
protocols.push({
id: 'vmfs',
description: 'vmfs'
})
protocols.push({
id: 'datastorecluster',
description: 'datastorecluster'
})
} else if (hypervisor === 'Hyperv') {
protocols.push({
id: 'SMB',
description: 'SMB/CIFS'
})
} else if (hypervisor === 'Ovm') {
protocols.push({
id: 'nfs',
description: 'nfs'
})
protocols.push({
id: 'ocfs2',
description: 'ocfs2'
})
} else if (hypervisor === 'LXC') {
protocols.push({
id: 'nfs',
description: 'nfs'
})
protocols.push({
id: 'SharedMountPoint',
description: 'SharedMountPoint'
})
protocols.push({
id: 'rbd',
description: 'RBD'
})
} else {
protocols.push({
id: 'nfs',
description: 'nfs'
})
}
protocols.push({ id: 'custom', description: 'custom' })
this.primaryStorageProtocols = protocols
},
async fetchConfigurationSwitch () {
const hypervisor = this.prefillContent?.hypervisor || null
this.$emit('fieldsChanged', { dvSwitchEnabled: false })
this.$emit('fieldsChanged', { vSwitchEnabled: false })
if (hypervisor && hypervisor === 'VMware') {
await this.fetchNexusSwitchConfig()
await this.fetchDvSwitchConfig()
}
},
fetchNexusSwitchConfig () {
api('listConfigurations', { name: 'vmware.use.nexus.vswitch' }).then(json => {
let vSwitchEnabled = false
if (json.listconfigurationsresponse.configuration[0].value) {
vSwitchEnabled = true
}
this.$emit('fieldsChanged', { vSwitchEnabled: vSwitchEnabled })
})
},
fetchDvSwitchConfig () {
let dvSwitchEnabled = false
api('listConfigurations', { name: 'vmware.use.dvswitch' }).then(json => {
if (json.listconfigurationsresponse.configuration[0].value) {
dvSwitchEnabled = true
}
this.$emit('fieldsChanged', { dvSwitchEnabled: dvSwitchEnabled })
})
},
fetchProvider () {
const storageProviders = []
api('listImageStores', { provider: 'S3' }).then(json => {
const s3stores = json.listimagestoresresponse.imagestore
if (s3stores != null && s3stores.length > 0) {
storageProviders.push({ id: 'S3', description: 'S3' })
} else {
storageProviders.push({ id: 'NFS', description: 'NFS' })
storageProviders.push({ id: 'SMB', description: 'SMB/CIFS' })
storageProviders.push({ id: 'S3', description: 'S3' })
storageProviders.push({ id: 'Swift', description: 'Swift' })
}
this.storageProviders = storageProviders
})
},
fetchPrimaryStorageProvider () {
this.primaryStorageProviders = []
api('listStorageProviders', { type: 'primary' }).then(json => {
this.primaryStorageProviders = json.liststorageprovidersresponse.dataStoreProvider || []
this.primaryStorageProviders.map((item, idx) => { this.primaryStorageProviders[idx].id = item.name })
})
},
submitLaunchZone () {
this.$emit('submitLaunchZone')
},
checkVisibleResource (key) {
const formKey = this.steps[this.currentStep]?.fromKey || ''
return formKey === key
}
}
}
</script>