diff --git a/static/plugins/vmware/icons.png b/static/plugins/vmware/icons.png deleted file mode 100644 index 21a5f3508..000000000 Binary files a/static/plugins/vmware/icons.png and /dev/null differ diff --git a/static/plugins/vmware/styles.less b/static/plugins/vmware/styles.less deleted file mode 100644 index 68865905c..000000000 --- a/static/plugins/vmware/styles.less +++ /dev/null @@ -1,23 +0,0 @@ -.vmware-tab { - .nova-compute { - h4 .btn-group { - margin-right: 10px; - .btn-link { - padding: 0; - } - } - } - .glyphicon { - margin-left: 3px; - } - .alert { - margin-left: 10px; - margin-right: 10px; - .unassigned-node-list { - list-style: none; - } - .unassigned-node-name { - font-weight: bold; - } - } -} diff --git a/static/plugins/vmware/translations.json b/static/plugins/vmware/translations.json deleted file mode 100644 index 16431a923..000000000 --- a/static/plugins/vmware/translations.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "en-US": { - "translation": { - "cluster_page": { - "tabs": { - "vmware": "VMware" - } - }, - "vmware": { - "title": "VMware vCenter Settings", - "availability_zones": "vCenter", - "network": "Network", - "glance": "Glance", - "cinder": "Cinder", - "reset_to_defaults": "Load Defaults", - "cancel": "Cancel Changes", - "apply": "Save Changes", - "nova_computes": "Nova Computes", - "nova_compute": "Nova Compute Instance", - "has_errors": "VMware settings are invalid. For more information please visit the", - "tab_name": "VMware tab", - "duplicate_value": "Duplicate values are not allowed", - "unassigned_nodes": "The following compute-vmware nodes are not assigned to any vCenter cluster:", - "invalid_target_node" : "Invalid target node" - } - } - } -} diff --git a/static/plugins/vmware/vmware.js b/static/plugins/vmware/vmware.js deleted file mode 100644 index a8a15ce18..000000000 --- a/static/plugins/vmware/vmware.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2015 Mirantis, Inc. - * - * Licensed 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. - **/ -import VmWareTab from 'plugins/vmware/vmware_tab'; -import VmWareModels from 'plugins/vmware/vmware_models'; -import translations from 'plugins/vmware/translations.json'; -import i18n from 'i18n'; -import './styles.less'; - -i18n.addTranslations(translations); - -export {VmWareTab, VmWareModels}; diff --git a/static/plugins/vmware/vmware_models.js b/static/plugins/vmware/vmware_models.js deleted file mode 100644 index 0347f15d6..000000000 --- a/static/plugins/vmware/vmware_models.js +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Copyright 2015 Mirantis, Inc. - * - * Licensed 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. - **/ -import _ from 'underscore'; -import i18n from 'i18n'; -import Backbone from 'backbone'; -import models from 'models'; - -var VmWareModels = {}; - -VmWareModels.isRegularField = (field) => { - return _.includes(['text', 'password', 'checkbox', 'select', 'file'], field.type); -}; - -// models for testing restrictions -var restrictionModels = {}; - -// Test regex using regex cache -var regexCache = {}; -function testRegex(regexText, value) { - if (!regexCache[regexText]) { - regexCache[regexText] = new RegExp(regexText); - } - return regexCache[regexText].test(value); -} - -var BaseModel = Backbone.Model - .extend(models.superMixin) - .extend(models.cacheMixin) - .extend(models.restrictionMixin) - .extend({ - constructorName: 'BaseModel', - cacheFor: 60 * 1000, - toJSON() { - return _.omit(this.attributes, 'metadata'); - }, - validate() { - var result = {}; - _.each(this.attributes.metadata, (field) => { - if (!VmWareModels.isRegularField(field) || field.type === 'checkbox') { - return; - } - var isDisabled = this.checkRestrictions(restrictionModels, undefined, field); - if (isDisabled.result) { - return; - } - var value = this.get(field.name); - if (field.regex) { - if (!testRegex(field.regex.source, value)) { - result[field.name] = field.regex.error; - } - } - }); - return _.isEmpty(result) ? null : result; - }, - testRestrictions() { - var results = { - hide: {}, - disable: {} - }; - var metadata = this.get('metadata'); - _.each(metadata, (field) => { - var disableResult = this.checkRestrictions(restrictionModels, undefined, field); - results.disable[field.name] = disableResult; - - var hideResult = this.checkRestrictions(restrictionModels, 'hide', field); - results.hide[field.name] = hideResult; - }); - return results; - } - }); - -var BaseCollection = Backbone.Collection - .extend(models.superMixin) - .extend(models.cacheMixin) - .extend({ - constructorName: 'BaseCollection', - model: BaseModel, - cacheFor: 60 * 1000, - isValid() { - this.validationError = this.validate(); - return this.validationError; - }, - validate() { - var errors = _.compact(this.models.map((model) => { - model.isValid(); - return model.validationError; - })); - return _.isEmpty(errors) ? null : errors; - }, - testRestrictions() { - _.invokeMap(this.models, 'testRestrictions', restrictionModels); - }, - invokeMap(path, ...args) { - _.invokeMap(this.models, path, ...args); - } - }); - -VmWareModels.NovaCompute = BaseModel.extend({ - constructorName: 'NovaCompute', - checkEmptyTargetNode() { - var targetNode = this.get('target_node'); - if (targetNode.current && targetNode.current.id === 'invalid') { - this.validationError = this.validationError || {}; - this.validationError.target_node = i18n('vmware.invalid_target_node'); - } - }, - checkDuplicateField(keys, fieldName) { - /*jshint validthis:true */ - var fieldValue = this.get(fieldName); - if (fieldValue.length > 0 && keys[fieldName] && keys[fieldName][fieldValue]) { - this.validationError = this.validationError || {}; - this.validationError[fieldName] = i18n('vmware.duplicate_value'); - } - keys[fieldName] = keys[fieldName] || {}; - keys[fieldName][fieldValue] = true; - }, - checkDuplicates(keys) { - this.checkDuplicateField(keys, 'vsphere_cluster'); - this.checkDuplicateField(keys, 'service_name'); - - var targetNode = this.get('target_node') || {}; - if (targetNode.current) { - if (targetNode.current.id && targetNode.current.id !== 'controllers' && - keys.target_node && keys.target_node[targetNode.current.id]) { - this.validationError = this.validationError || {}; - this.validationError.target_node = i18n('vmware.duplicate_value'); - } - keys.target_node = keys.target_node || {}; - keys.target_node[targetNode.current.id] = true; - } - } -}); - -var NovaComputes = BaseCollection.extend({ - constructorName: 'NovaComputes', - model: VmWareModels.NovaCompute, - validate() { - this._super('validate', arguments); - - var keys = {vsphere_clusters: {}, service_names: {}}; - this.invokeMap('checkDuplicates', keys); - this.invokeMap('checkEmptyTargetNode'); - - var errors = _.compact(this.map('validationError')); - return _.isEmpty(errors) ? null : errors; - } -}); - -var AvailabilityZone = BaseModel.extend({ - constructorName: 'AvailabilityZone', - constructor(data) { - Backbone.Model.apply(this, arguments); - if (data) { - this.set(this.parse(data)); - } - }, - parse(response) { - var result = {}; - var metadata = response.metadata; - result.metadata = metadata; - - // regular fields - _.each(metadata, (field) => { - if (VmWareModels.isRegularField(field)) { - result[field.name] = response[field.name]; - } - }); - - // nova_computes - var novaMetadata = _.find(metadata, {name: 'nova_computes'}); - var novaValues = _.clone(response.nova_computes); - novaValues = _.map(novaValues, (value) => { - value.metadata = novaMetadata.fields; - return new VmWareModels.NovaCompute(value); - }); - result.nova_computes = new NovaComputes(novaValues); - - return result; - }, - toJSON() { - var result = _.omit(this.attributes, 'metadata', 'nova_computes'); - result.nova_computes = this.get('nova_computes').toJSON(); - return result; - }, - validate() { - var errors = _.merge({}, BaseModel.prototype.validate.call(this)); - - var novaComputes = this.get('nova_computes'); - novaComputes.isValid(); - if (novaComputes.validationError) { - errors.nova_computes = novaComputes.validationError; - } - - return _.isEmpty(errors) ? null : errors; - } -}); - -var AvailabilityZones = BaseCollection.extend({ - constructorName: 'AvailabilityZones', - model: AvailabilityZone -}); - -VmWareModels.Glance = BaseModel.extend({constructorName: 'Glance'}); - -VmWareModels.VCenter = BaseModel.extend({ - constructorName: 'VCenter', - url() { - return '/api/v1/clusters/' + this.id + '/vmware_attributes' + - (this.loadDefaults ? '/defaults' : ''); - }, - parse(response) { - if (!response.editable || !response.editable.metadata || !response.editable.value) { - return null; - } - var metadata = response.editable.metadata || []; - var value = response.editable.value || {}; - - // Availability Zone(s) - var azMetadata = _.find(metadata, {name: 'availability_zones'}); - var azValues = _.clone(value.availability_zones); - azValues = _.map(azValues, (value) => { - value.metadata = azMetadata.fields; - return value; - }); - - // Glance - var glanceMetadata = _.find(metadata, {name: 'glance'}); - var glanceValue = _.extend(_.clone(value.glance), {metadata: glanceMetadata.fields}); - - return { - metadata: metadata, - availability_zones: new AvailabilityZones(azValues), - glance: new VmWareModels.Glance(glanceValue) - }; - }, - beforeSave() { - this.get('availability_zones').each((availabilityZone) => { - availabilityZone.get('nova_computes').each((novaCompute) => { - novaCompute.set({vsphere_cluster: novaCompute.get('vsphere_cluster').trim()}); - }); - }); - }, - isFilled() { - var result = this.get('availability_zones') && this.get('glance'); - return !!result; - }, - toJSON() { - if (!this.isFilled()) { - return {}; - } - return { - editable: { - value: { - availability_zones: this.get('availability_zones').toJSON(), - glance: this.get('glance').toJSON() - } - } - }; - }, - validate() { - if (!this.isFilled()) { - return null; - } - - var errors = {}; - _.each(this.get('metadata'), (field) => { - var model = this.get(field.name); - // do not validate disabled restrictions - var isDisabled = this.checkRestrictions(restrictionModels, undefined, field); - if (isDisabled.result) { - return; - } - model.isValid(); - if (model.validationError) { - errors[field.name] = model.validationError; - } - }); - - // check unassigned nodes exist - var assignedNodes = {}; - var availabilityZones = this.get('availability_zones') || []; - availabilityZones.each((zone) => { - var novaComputes = zone.get('nova_computes') || []; - novaComputes.each((compute) => { - var targetNode = compute.get('target_node'); - assignedNodes[targetNode.current.id] = targetNode.current.label; - }); - }); - var unassignedNodes = restrictionModels.cluster.get('nodes').filter((node) => { - return _.includes(node.get('pending_roles'), 'compute-vmware') && - !assignedNodes[node.get('hostname')]; - }); - if (unassignedNodes.length > 0) { - errors.unassigned_nodes = unassignedNodes; - } - - return _.isEmpty(errors) ? null : errors; - }, - setModels(models) { - restrictionModels = models; - return this; - } -}); - -export default VmWareModels; diff --git a/static/plugins/vmware/vmware_tab.js b/static/plugins/vmware/vmware_tab.js deleted file mode 100644 index 099754ba2..000000000 --- a/static/plugins/vmware/vmware_tab.js +++ /dev/null @@ -1,479 +0,0 @@ -/* - * Copyright 2015 Mirantis, Inc. - * - * Licensed 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. - **/ -import React from 'react'; -import i18n from 'i18n'; -import _ from 'underscore'; -import dispatcher from 'dispatcher'; -import {Input, Tooltip} from 'views/controls'; -import {unsavedChangesMixin} from 'component_mixins'; -import VmWareModels from 'plugins/vmware/vmware_models'; - -var Field = React.createClass({ - onChange(name, value) { - var currentValue = this.props.model.get(name); - if (currentValue.current) { - currentValue.current.id = value; - currentValue.current.label = value; - } else { - currentValue = value; - } - this.props.model.set(name, currentValue); - this.setState({model: this.props.model}); - _.defer(() => dispatcher.trigger('vcenter_model_update')); - }, - render() { - var metadata = this.props.metadata; - var value = this.props.model.get(metadata.name); - var children = null; - var props = _.extend({ - onChange: this.onChange, - disabled: this.props.disabled, - tooltipText: this.props.tooltipText, - error: (this.props.model.validationError || {})[metadata.name] - }, _.pick(metadata, 'name', 'type', 'label', 'description')); - switch (metadata.type) { - case 'password': - props.value = value; - props.toggleable = true; - break; - case 'radio': - case 'checkbox': - props.checked = value; - break; - case 'select': - props.value = value.current.id; - children = value.options.map((value) => { - return ; - }); - break; - case 'file': - props.key = value && value.name; - props.defaultValue = value; - break; - default: - props.value = value; - break; - } - return ( - {children} - ); - } -}); - -var FieldGroup = React.createClass({ - render() { - var restrictions = this.props.model.testRestrictions(); - var metadata = _.filter(this.props.model.get('metadata'), VmWareModels.isRegularField); - var fields = metadata.map((meta) => { - if (restrictions.hide[meta.name] && restrictions.hide[meta.name].result) { - return null; - } - return ( - - ); - }); - return ( -
- {fields} -
- ); - } -}); - -var GenericSection = React.createClass({ - render() { - if (!this.props.model) return null; - return ( -
-

- {this.props.title} - {this.props.tooltipText && - - - - } -

- -
- ); - } -}); - -var NovaCompute = React.createClass({ - render() { - if (!this.props.model) return null; - - // add nodes of 'compute-vmware' type to targetNode select - var targetNode = this.props.model.get('target_node') || {}; - var nodes = this.props.cluster.get('nodes').filter((node) => node.hasRole('compute-vmware')); - - targetNode.options = []; - if (targetNode.current.id === 'controllers' || !this.props.isLocked) { - targetNode.options.push({id: 'controllers', label: 'controllers'}); - } else { - targetNode.options.push({id: 'invalid', label: 'Select node'}); - } - nodes.forEach((node) => { - targetNode.options.push({ - id: node.get('hostname'), - label: node.get('name') + ' (' + node.get('mac').substr(9) + ')' - }); - }); - - this.props.model.set('target_node', targetNode); - - return ( -
-

-
- - {!this.props.isRemovable && - - } -
- {i18n('vmware.nova_compute')} -

- -
- ); - } -}); - -var AvailabilityZone = React.createClass({ - addNovaCompute(current) { - var collection = this.props.model.get('nova_computes'); - var index = collection.indexOf(current); - var newItem = current.clone(); - var targetNode = _.cloneDeep(newItem.get('target_node')); - if (this.props.isLocked) { - targetNode.current = {id: 'invalid'}; - } - newItem.set('target_node', targetNode); - collection.add(newItem, {at: index + 1}); - this.setState({model: this.props.model}); - _.defer(() => dispatcher.trigger('vcenter_model_update')); - }, - removeNovaCompute(current) { - var collection = this.props.model.get('nova_computes'); - collection.remove(current); - this.setState({model: this.props.model}); - _.defer(() => dispatcher.trigger('vcenter_model_update')); - }, - renderFields() { - var model = this.props.model; - var meta = model.get('metadata'); - meta = _.filter(meta, VmWareModels.isRegularField); - return ( - - ); - }, - renderComputes(actions) { - var novaComputes = this.props.model.get('nova_computes'); - var isSingleInstance = novaComputes.length === 1; - var disabled = actions.disable.nova_computes; - var cluster = this.props.cluster; - - return ( -
-

- {i18n('vmware.nova_computes')} -

- {novaComputes.map((compute) => { - return ( - - ); - })} -
- ); - }, - render() { - var restrictActions = this.props.model.testRestrictions(); - - return ( -
- {this.renderFields(restrictActions)} - {this.renderComputes(restrictActions)} -
- ); - } -}); - -var AvailabilityZones = React.createClass({ - render() { - if (!this.props.collection) return null; - return ( -
-

- {i18n('vmware.availability_zones')} - {this.props.tooltipText && - - - - } -

- {this.props.collection.map((model) => { - return ; - })} -
- ); - } -}); - -var UnassignedNodesWarning = React.createClass({ - render() { - if (!this.props.errors || !this.props.errors.unassigned_nodes) return null; - return ( -
-
- {i18n('vmware.unassigned_nodes')} -
-
    - { - this.props.errors.unassigned_nodes.map((node) => { - return ( -
  • - {node.get('name')} -   - ({node.get('mac')}) -
  • - ); - }) - } -
-
- ); - } -}); - -var VmWareTab = React.createClass({ - mixins: [ - unsavedChangesMixin - ], - statics: { - breadcrumbsPath() { - return [ - [i18n('vmware.title'), null, {active: true}] - ]; - }, - isVisible(cluster) { - return cluster.get('settings').get('common.use_vcenter').value; - }, - fetchData(options) { - if (!options.cluster.get('vcenter_defaults')) { - var defaultModel = new VmWareModels.VCenter({id: options.cluster.id}); - defaultModel.loadDefaults = true; - options.cluster.set({vcenter_defaults: defaultModel}); - } - return Promise.all([ - options.cluster.get('vcenter').fetch({cache: true}), - options.cluster.get('vcenter_defaults').fetch({cache: true}) - ]); - } - }, - onModelSync() { - this.actions = this.model.testRestrictions(); - if (!this.model.loadDefaults) { - this.json = JSON.stringify(this.model.toJSON()); - } - this.model.loadDefaults = false; - this.setState({model: this.model}); - }, - componentDidMount() { - this.clusterId = this.props.cluster.id; - this.model = this.props.cluster.get('vcenter'); - this.model.on('sync', this.onModelSync, this); // eslint-disable-line no-sync - this.defaultModel = this.props.cluster.get('vcenter_defaults'); - this.defaultsJson = JSON.stringify(this.defaultModel.toJSON()); - this.setState({model: this.model, defaultModel: this.defaultModel}); - - this.model.setModels({ - cluster: this.props.cluster, - settings: this.props.cluster.get('settings'), - networking_parameters: this.props.cluster.get('networkConfiguration') - .get('networking_parameters'), - current_vcenter: this.model.get('availability_zones').at(0), - glance: this.model.get('glance') - }); - - this.onModelSync(); // eslint-disable-line no-sync - dispatcher.on('vcenter_model_update', () => { - if (this.isMounted()) { - this.forceUpdate(); - } - }); - }, - componentWillUnmount() { - this.model.off('sync', null, this); - dispatcher.off('vcenter_model_update'); - }, - getInitialState() { - return {model: null}; - }, - readData() { - return this.model.fetch(); - }, - onLoadDefaults() { - this.model.loadDefaults = true; - this.model.fetch().then(() => { - this.model.loadDefaults = false; - }); - }, - applyChanges() { - this.model.beforeSave(); - return this.model.save(); - }, - revertChanges() { - return this.readData(); - }, - hasChanges() { - return this.detectChanges(this.json, JSON.stringify(this.model.toJSON())); - }, - detectChanges(oldJson, currentJson) { - var old, current; - try { - old = JSON.parse(oldJson); - current = JSON.parse(currentJson); - } catch (error) { - return false; - } - var oldData = JSON.stringify(old, (key, data) => { - if (key === 'target_node') { - delete data.options; - } - return data; - }); - var currentData = JSON.stringify(current, (key, data) => { - if (key === 'target_node') { - delete data.options; - } - return data; - }); - return oldData !== currentData; - }, - isSavingPossible() { - return !this.state.model.validationError; - }, - render() { - if (!this.state.model || !this.actions) { - return null; - } - - var model = this.state.model; - var currentJson = JSON.stringify(this.model.toJSON()); - var editable = this.props.cluster.isAvailableForSettingsChanges(); - this.actions = this.model.testRestrictions(); - var hide = this.actions.hide || {}; - var disable = this.actions.disable || {}; - - model.isValid(); - var hasChanges = this.detectChanges(this.json, currentJson); - var hasDefaultsChanges = this.detectChanges(this.defaultsJson, currentJson); - var saveDisabled = !hasChanges || !this.isSavingPossible(); - var defaultsDisabled = !hasDefaultsChanges; - - return ( -
-
{i18n('vmware.title')}
- - {!hide.availability_zones.result && - - } - {!hide.glance.result && - - } -
-
-
- - - -
-
-
-
- ); - } -}); - -export default VmWareTab; diff --git a/static/styles/main.less b/static/styles/main.less index d08ea40f5..1209b7ced 100644 --- a/static/styles/main.less +++ b/static/styles/main.less @@ -1814,9 +1814,6 @@ input[type=range] { &.actions { .tab-icon-sprite-index(5); } - &.vmware { - .tab-icon-sprite-index(6); - } &.dashboard { .tab-icon-sprite-index(8); } @@ -2775,7 +2772,6 @@ input[type=range] { } &.cisco {.node-logo(cisco);} &.vbox {.node-logo(vbox);} - &.vmware {.node-logo(vmware);} &.hp {.node-logo(hp);} &.xen {.node-logo(xen);} &.openvz {.node-logo(openvz);} diff --git a/static/translations/core.json b/static/translations/core.json index ed03f08ac..fb593c9b3 100644 --- a/static/translations/core.json +++ b/static/translations/core.json @@ -767,7 +767,6 @@ "locked_settings_alert": "Before proceeding with deployment please verify that the nodes have disk partitioning and network interfaces configured properly. You will not be able to change these via UI after the cloud is deployed.", "redeployment_alert": "You have made configuration changes which will now be applied to nodes in this environment. Please note that during settings change some services on OpenStack nodes may be restarted, availability of some APIs and resources may be interrupted. For Production clouds, please make sure that the cloud is properly set into maintenance mode prior to performing configuration changes.", "package_information": "Packages and updates are fetched from the repositories defined in the Settings tab. If your environment uses the default external repositories, verify that the Fuel Master node can access the Internet. If the Fuel Master node is not connected to the Internet, you must set up a local mirror and configure Fuel to upload packages from the local mirror. Fuel must have network access to the local mirror. You may also configure alternate repositories for installation.", - "and_vcenter": "and VCenter", "neutron_with": "Neutron with", "horizon": "Horizon", "horizon_description": "The OpenStack dashboard Horizon is now available.", @@ -1079,14 +1078,8 @@ "compute": { "title": "Compute", "qemu": "QEMU-KVM", - "vcenter": "vCenter", "qemu_description": "Select this option if you want to use QEMU as a hypervisor with capability of KVM acceleration.", - "vcenter_description": "Select this option if you run OpenStack on VMware vCenter.", - "vcenter_warning": "vCenter can't be deployed without QEMU-KVM option selected.", "qemu_requires_network_backend": "QEMU requires VLAN segmentation or tunneling segmentation network backend enabled", - "vcenter_requires_network_plugins": "Plugin for DVS/NSX is required to create an environment with vCenter and Neutron.", - "vcenter_requires_network_backend": "vCenter requires DVS or NSX network plugins", - "vcenter_plugins_page": "Please visit Fuel plugins page for details.", "empty_choice": "Please select at least one hypervisor type" }, "network": { @@ -1094,7 +1087,6 @@ "description": "Choose the private (guest) network configuration. You cannot modify this setting after you complete the wizard. For more information, see the ", "description_link": "Mirantis OpenStack Planning Guide for Network Topology", "release_alert": "Neutron is not supported in __NameAndRelease.release_name__", - "hypervisor_alert": "Neutron is not available with vCenter as a selected compute option.", "neutron_gre_description": "Your network hardware must support GRE segmentation. This option supports up to 65535 networks.", "neutron_vlan": "Neutron with VLAN segmentation (default)", "neutron_vlan_description": "Your network hardware must be configured for VLAN segmentation. This option supports up to 4095 networks.", @@ -1963,7 +1955,6 @@ "no_nodes_instruction": "You must add at least one node to your environment in order to deploy. See the ", "locked_settings_alert": "在继续前,请重新检查环境配置包括节点磁盘分区和网络配置,在Fuel部署完该OpenStack环境后这些设置均无法更改", "package_information": "Packages and updates are fetched from the repositories defined in the Settings tab. If your environment uses the default external repositories, verify that the Fuel Master node can access the Internet. If the Fuel Master node is not connected to the Internet, you must set up a local mirror and configure Fuel to upload packages from the local mirror. Fuel must have network access to the local mirror. You may also configure alternate repositories for installation. For more information, see ", - "and_vcenter": "和VCenter", "neutron_with": "Neutron with", "horizon": "Horizon", "horizon_description": "The OpenStack dashboard Horizon现在可用", @@ -2180,12 +2171,7 @@ "compute": { "title": "计算", "qemu": "QEMU-KVM", - "vcenter": "vCenter", "qemu_description": "如果要使用 QUME 虚拟化和相应的 KVM 加速,请选择此项。", - "vcenter_description": "如果要在 VMware vCenter 上运行 OpenStack,请选择此项。", - "vcenter_warning": "vCenter 不能和 QUME-KVM 一起部署。", - "vcenter_requires_network_backend": "需要 DVS/NSX 插件来创建 vCenter 和 Neutron 网络环境", - "vcenter_plugins_page": "详细信息请访问 Fuel 插件页面", "empty_choice": "请至少选择一种虚拟化类型" }, "network": { @@ -2193,7 +2179,6 @@ "description": "请选择虚拟机内网的方案。一旦完成设置,你将不能更改这个选项。更多信息,请看", "description_link": "Mirantis OpenStack 的网络拓扑计划指南", "release_alert": "__NameAndRelease.release_name__ 不支持 Neutron。", - "hypervisor_alert": "你已经选择了 vCenter 作为虚拟化方案,不能再选择 Neutron", "neutron_gre_description": "你的网络硬件必须支持 GRE。这个选项支持 65535 个网络。", "neutron_vlan": "Neutron 并使用 VLAN(默认)", "neutron_vlan_description": "你的网络硬件必须支持 VLAN。这个选项支持 4095 个网络。", @@ -2919,29 +2904,14 @@ "title": "コンピュート", "kvm": "KVM", "qemu": "QEMU", - "vcenter": "vCenter", "kvm_description": "ハードウェア上でOpenStackを実行する場合、ハイパーバイザーはこのタイプを選択してください", - "qemu_description": "仮想ホスト上でOpenStackを実行する場合、ハイパーバイザーはこのタイプを選択してください", - "vcenter_description": "ESXiサーバとともにvCenter環境をハイパーバイザーとして使用する場合、このタイプを選択してください", - "vcenter_ip": "ホスト名", - "vcenter_ip_description": "vCenterのホスト名またはIPアドレス", - "vcenter_username": "ユーザー名", - "vcenter_username_description": "vCenterの管理者ユーザー名", - "vcenter_password": "パスワード", - "vcenter_password_description": "vCenterの管理者パスワード", - "vcenter_cluster": "クラスタ", - "vcenter_cluster_description": "vCenterのクラスタ名。複数のクラスタがある場合はカンマでクラスタ名を区切ってください。", - "vcenter_ip_warning": "ホスト名またはIPv4アドレスが不正です", - "vcenter_user_warning": "ユーザー名は空白にはできません", - "vcenter_password_warning": "パスワードは空白にはできません", - "vcenter_cluster_warning": "クラスターリストが不正です" + "qemu_description": "仮想ホスト上でOpenStackを実行する場合、ハイパーバイザーはこのタイプを選択してください" }, "network": { "title": "ネットワーク設定", "description": "プライベート(ゲスト)ネットワーク構成を選択します。ここで選択したものはウィザード終了後に変更することはできません。詳細については次を参照してください", "description_link": "Mirantis OpenStackプランニングガイド ネットワークトポロジー編", "release_alert": "__NameAndRelease.release_name__ ではNeutronがサポートされません", - "hypervisor_alert": "VLANまたはGREセグメンテーションとNeutronはコンピュートオプションとして __Compute.vcenter__ では使用できません。", "neutron_gre_description": "ネットワーク機器がGREセグメンテーションをサポートしている必要があります。このオプションは、65535までのネットワークをサポートします。", "neutron_vlan_description": "ネットワーク機器がVLANセグメンテーション用に設定されている必要があります。このオプションは、4095までのネットワークをサポートします。" }, diff --git a/static/views/cluster_page.js b/static/views/cluster_page.js index c5ecc3b14..b46769c90 100644 --- a/static/views/cluster_page.js +++ b/static/views/cluster_page.js @@ -28,7 +28,6 @@ import NetworkTab from 'views/cluster_page_tabs/network_tab'; import SettingsTab from 'views/cluster_page_tabs/settings_tab'; import LogsTab from 'views/cluster_page_tabs/logs_tab'; import HealthCheckTab from 'views/cluster_page_tabs/healthcheck_tab'; -import {VmWareTab, VmWareModels} from 'plugins/vmware/vmware'; import {Link} from 'views/controls'; var ClusterPage = React.createClass({ @@ -83,7 +82,6 @@ var ClusterPage = React.createClass({ {url: 'nodes', tab: NodesTab}, {url: 'network', tab: NetworkTab}, {url: 'settings', tab: SettingsTab}, - {url: 'vmware', tab: VmWareTab}, {url: 'logs', tab: LogsTab}, {url: 'history', tab: HistoryTab}, {url: 'workflows', tab: WorkflowsTab}, @@ -151,13 +149,6 @@ var ClusterPage = React.createClass({ cluster.get('release').fetch() ]); }) - .then(() => { - if (!cluster.get('settings').get('common.use_vcenter.value')) return true; - - var vcenter = new VmWareModels.VCenter({id: id}); - cluster.set({vcenter}); - return vcenter.fetch(); - }) .then(() => { var deployedSettings = new models.Settings(); deployedSettings.url = baseUrl + '/attributes/deployed'; diff --git a/static/views/cluster_page_tabs/dashboard_tab.js b/static/views/cluster_page_tabs/dashboard_tab.js index 6347c32cb..15ce83dab 100644 --- a/static/views/cluster_page_tabs/dashboard_tab.js +++ b/static/views/cluster_page_tabs/dashboard_tab.js @@ -557,24 +557,6 @@ var ClusterActionsPanel = React.createClass({ ] }, - // check VCenter settings - (cluster) => { - if (!cluster.get('settings').get('common.use_vcenter.value')) return false; - var vcenter = cluster.get('vcenter'); - vcenter.setModels(_.extend({ - current_vcenter: vcenter.get('availability_zones').at(0), - glance: vcenter.get('glance') - }, configModels)); - return !vcenter.isValid() && { - blocker: [ - {i18n('vmware.has_errors') + ' '} - - {i18n('vmware.tab_name')} - - - ] - }; - }, // check cluster settings (cluster) => { var settings = cluster.get('settings'); @@ -1083,11 +1065,7 @@ var ClusterInfo = React.createClass({ return cluster.get('release').get('name'); case 'compute': var libvirtSettings = settings.get('common').libvirt_type; - var computeLabel = _.find(libvirtSettings.values, {data: libvirtSettings.value}).label; - if (settings.get('common').use_vcenter.value) { - return computeLabel + ' ' + i18n(ns + 'and_vcenter'); - } - return computeLabel; + return _.find(libvirtSettings.values, {data: libvirtSettings.value}).label; case 'network': var networkingParameters = cluster.get('networkConfiguration').get('networking_parameters'); return (i18n('common.network.neutron_' + networkingParameters.get('segmentation_type'))); diff --git a/static/views/wizard.js b/static/views/wizard.js index 55df08e81..30e883d9d 100644 --- a/static/views/wizard.js +++ b/static/views/wizard.js @@ -334,7 +334,6 @@ var Compute = React.createClass({ this.processRestrictions(this.components, ['hypervisor']); }, render() { - var vcenter = this.props.allComponents.get('hypervisor:vmware'); return (
- {vcenter && vcenter.get('invalid') && -
-
- {i18n('dialog.create_cluster_wizard.compute.vcenter_requires_network_backend')} -
- - {i18n('dialog.create_cluster_wizard.compute.vcenter_plugins_page')} - -
- } {this.constructor.hasErrors(this.props.wizard) &&
{i18n('dialog.create_cluster_wizard.compute.empty_choice')}