Remove nova network support from 8.0
Remove UI parts and components for nova network. Remove NovaNetworkManager for 8.0. Change-Id: I81b8aee4615fa1da40724a92c781e955c8bf4ecb Closes-Bug: #1528407
This commit is contained in:
parent
f81311bbd6
commit
ae94990514
|
@ -88,8 +88,10 @@ default_messages = {
|
||||||
"DuplicatedVIPNames": ("Cannot assign VIPs for the cluster due to "
|
"DuplicatedVIPNames": ("Cannot assign VIPs for the cluster due to "
|
||||||
"overlapping of names of the VIPs"),
|
"overlapping of names of the VIPs"),
|
||||||
"UpdateDnsmasqTaskIsRunning": ("update_dnsmasq task is not finished "
|
"UpdateDnsmasqTaskIsRunning": ("update_dnsmasq task is not finished "
|
||||||
"after the previous configuration change. "
|
"after the previous configuration change. "
|
||||||
"Please try again after a few seconds."),
|
"Please try again after a few seconds."),
|
||||||
|
"NovaNetworkNotSupported": ("Nova network is not supported in current "
|
||||||
|
"release"),
|
||||||
|
|
||||||
# RPC errors
|
# RPC errors
|
||||||
"CannotFindTask": "Cannot find task",
|
"CannotFindTask": "Cannot find task",
|
||||||
|
@ -114,13 +116,9 @@ default_messages = {
|
||||||
|
|
||||||
# unknown
|
# unknown
|
||||||
"UnknownError": "Unknown error",
|
"UnknownError": "Unknown error",
|
||||||
|
|
||||||
"UnresolvableConflict": "Unresolvable conflict",
|
"UnresolvableConflict": "Unresolvable conflict",
|
||||||
|
|
||||||
"NodeNotBelongToCluster": "The Node doesn't belong to the Cluster",
|
"NodeNotBelongToCluster": "The Node doesn't belong to the Cluster",
|
||||||
|
"TaskBaseDeploymentNotAllowed": "The task-based deployment is not allowed"
|
||||||
"TaskBaseDeploymentNotAllowed":
|
|
||||||
"The task-based deployment is not allowed"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -954,8 +954,6 @@
|
||||||
value: false
|
value: false
|
||||||
weight: 30
|
weight: 30
|
||||||
type: "hidden"
|
type: "hidden"
|
||||||
restrictions:
|
|
||||||
- condition: "cluster:net_provider == 'nova_network'"
|
|
||||||
libvirt_type:
|
libvirt_type:
|
||||||
value: "qemu"
|
value: "qemu"
|
||||||
values:
|
values:
|
||||||
|
@ -1597,7 +1595,7 @@
|
||||||
name: "network"
|
name: "network"
|
||||||
type: "object"
|
type: "object"
|
||||||
restrictions:
|
restrictions:
|
||||||
- condition: "cluster:net_provider != 'nova_network' or networking_parameters:net_manager != 'VlanManager' or settings:common.use_vcenter.value == false"
|
- condition: "settings:common.use_vcenter.value == false"
|
||||||
action: "hide"
|
action: "hide"
|
||||||
fields:
|
fields:
|
||||||
-
|
-
|
||||||
|
@ -1743,20 +1741,6 @@
|
||||||
message: "dialog.create_cluster_wizard.additional.ironic_network_mode_alert"
|
message: "dialog.create_cluster_wizard.additional.ironic_network_mode_alert"
|
||||||
requires:
|
requires:
|
||||||
- name: network:neutron:core:ml2
|
- name: network:neutron:core:ml2
|
||||||
- name: network:nova_network
|
|
||||||
bind: !!pairs
|
|
||||||
- "cluster:net_provider": "nova_network"
|
|
||||||
weight: 15
|
|
||||||
label: "dialog.create_cluster_wizard.network.nova_network"
|
|
||||||
description: "dialog.create_cluster_wizard.network.nova_network_description"
|
|
||||||
compatible:
|
|
||||||
- name: hypervisor:vmware
|
|
||||||
requires:
|
|
||||||
- name: 'hypervisor:vmware'
|
|
||||||
message: "dialog.create_cluster_wizard.network.nova_network_vcenter_alert"
|
|
||||||
incompatible:
|
|
||||||
- name: additional_service:ironic
|
|
||||||
message: "dialog.create_cluster_wizard.additional.ironic_network_mode_alert"
|
|
||||||
- name: storage:block:lvm
|
- name: storage:block:lvm
|
||||||
label: "dialog.create_cluster_wizard.storage.lvm"
|
label: "dialog.create_cluster_wizard.storage.lvm"
|
||||||
description: "dialog.create_cluster_wizard.storage.default_provider"
|
description: "dialog.create_cluster_wizard.storage.default_provider"
|
||||||
|
@ -1769,7 +1753,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
incompatible:
|
incompatible:
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
message: "LVM not compatible with Ceph"
|
message: "LVM not compatible with Ceph"
|
||||||
|
@ -1785,7 +1768,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:object:ceph
|
- name: storage:object:ceph
|
||||||
- name: storage:ephemeral:ceph
|
- name: storage:ephemeral:ceph
|
||||||
- name: storage:image:ceph
|
- name: storage:image:ceph
|
||||||
|
@ -1803,7 +1785,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
- name: storage:ephemeral:ceph
|
- name: storage:ephemeral:ceph
|
||||||
- name: storage:image:ceph
|
- name: storage:image:ceph
|
||||||
|
@ -1818,7 +1799,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
- name: storage:object:ceph
|
- name: storage:object:ceph
|
||||||
- name: storage:image:ceph
|
- name: storage:image:ceph
|
||||||
|
@ -1833,7 +1813,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
- name: storage:object:ceph
|
- name: storage:object:ceph
|
||||||
- name: storage:ephemeral:ceph
|
- name: storage:ephemeral:ceph
|
||||||
|
@ -1848,7 +1827,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:block:lvm
|
- name: storage:block:lvm
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
- name: storage:object:ceph
|
- name: storage:object:ceph
|
||||||
|
@ -1869,7 +1847,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:block:lvm
|
- name: storage:block:lvm
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
- name: storage:object:ceph
|
- name: storage:object:ceph
|
||||||
|
@ -1889,7 +1866,6 @@
|
||||||
- name: hypervisor:vmware
|
- name: hypervisor:vmware
|
||||||
- name: network:neutron:ml2:vlan
|
- name: network:neutron:ml2:vlan
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
- name: network:nova_network
|
|
||||||
- name: storage:block:lvm
|
- name: storage:block:lvm
|
||||||
- name: storage:block:ceph
|
- name: storage:block:ceph
|
||||||
- name: storage:object:ceph
|
- name: storage:object:ceph
|
||||||
|
@ -1916,8 +1892,6 @@
|
||||||
- name: additional_service:murano
|
- name: additional_service:murano
|
||||||
- name: additional_service:ceilometer
|
- name: additional_service:ceilometer
|
||||||
incompatible:
|
incompatible:
|
||||||
- name: network:nova_network
|
|
||||||
message: "dialog.create_cluster_wizard.additional.ironic_network_mode_alert"
|
|
||||||
- name: network:neutron:ml2:tun
|
- name: network:neutron:ml2:tun
|
||||||
message: "dialog.create_cluster_wizard.additional.ironic_network_mode_alert"
|
message: "dialog.create_cluster_wizard.additional.ironic_network_mode_alert"
|
||||||
modes: ['ha_compact']
|
modes: ['ha_compact']
|
||||||
|
|
|
@ -18,7 +18,6 @@ from nailgun.db import db
|
||||||
from nailgun.db.sqlalchemy.models import NovaNetworkConfig
|
from nailgun.db.sqlalchemy.models import NovaNetworkConfig
|
||||||
|
|
||||||
from nailgun.network.manager import AllocateVIPs70Mixin
|
from nailgun.network.manager import AllocateVIPs70Mixin
|
||||||
from nailgun.network.manager import AllocateVIPs80Mixin
|
|
||||||
from nailgun.network.manager import AssignIPs61Mixin
|
from nailgun.network.manager import AssignIPs61Mixin
|
||||||
from nailgun.network.manager import AssignIPs70Mixin
|
from nailgun.network.manager import AssignIPs70Mixin
|
||||||
from nailgun.network.manager import AssignIPsLegacyMixin
|
from nailgun.network.manager import AssignIPsLegacyMixin
|
||||||
|
@ -86,7 +85,3 @@ class NovaNetworkManager70(
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
return network_role['default_mapping']
|
return network_role['default_mapping']
|
||||||
|
|
||||||
|
|
||||||
class NovaNetworkManager80(AllocateVIPs80Mixin, NovaNetworkManager70):
|
|
||||||
pass
|
|
||||||
|
|
|
@ -433,7 +433,8 @@ class Cluster(NailgunObject):
|
||||||
return nova_network.NovaNetworkManager70
|
return nova_network.NovaNetworkManager70
|
||||||
|
|
||||||
if StrictVersion(ver) >= StrictVersion('8.0'):
|
if StrictVersion(ver) >= StrictVersion('8.0'):
|
||||||
return nova_network.NovaNetworkManager80
|
raise errors.NovaNetworkNotSupported()
|
||||||
|
|
||||||
return nova_network.NovaNetworkManager
|
return nova_network.NovaNetworkManager
|
||||||
|
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
|
|
|
@ -45,7 +45,6 @@ from nailgun.network.neutron import NeutronManager70
|
||||||
from nailgun.network.neutron import NeutronManager80
|
from nailgun.network.neutron import NeutronManager80
|
||||||
from nailgun.network.nova_network import NovaNetworkManager
|
from nailgun.network.nova_network import NovaNetworkManager
|
||||||
from nailgun.network.nova_network import NovaNetworkManager70
|
from nailgun.network.nova_network import NovaNetworkManager70
|
||||||
from nailgun.network.nova_network import NovaNetworkManager80
|
|
||||||
from nailgun.test.base import BaseIntegrationTest
|
from nailgun.test.base import BaseIntegrationTest
|
||||||
from nailgun.test.base import fake_tasks
|
from nailgun.test.base import fake_tasks
|
||||||
|
|
||||||
|
@ -1291,20 +1290,6 @@ class TestNovaNetworkManager70(TestNeutronManager70):
|
||||||
self.assertEqual(endpoint_ip, vip)
|
self.assertEqual(endpoint_ip, vip)
|
||||||
|
|
||||||
|
|
||||||
class TestNovaNetworkManager80(TestNovaNetworkManager70):
|
|
||||||
def _create_env(self):
|
|
||||||
return self.env.create(
|
|
||||||
release_kwargs={'version': '1111-8.0'},
|
|
||||||
cluster_kwargs={
|
|
||||||
'api': False,
|
|
||||||
'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_get_network_manager(self):
|
|
||||||
self.assertIs(self.net_manager, NovaNetworkManager80)
|
|
||||||
|
|
||||||
|
|
||||||
class TestTemplateManager70(BaseNetworkManagerTest):
|
class TestTemplateManager70(BaseNetworkManagerTest):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestTemplateManager70, self).setUp()
|
super(TestTemplateManager70, self).setUp()
|
||||||
|
|
|
@ -114,7 +114,7 @@ class TestInstallationInfo(BaseTestCase):
|
||||||
cluster_kwargs={
|
cluster_kwargs={
|
||||||
'release_id': release[0].id,
|
'release_id': release[0].id,
|
||||||
'mode': consts.CLUSTER_MODES.ha_compact,
|
'mode': consts.CLUSTER_MODES.ha_compact,
|
||||||
'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network},
|
'net_provider': consts.CLUSTER_NET_PROVIDERS.neutron},
|
||||||
nodes_kwargs=nodes_params
|
nodes_kwargs=nodes_params
|
||||||
)
|
)
|
||||||
self.env.create_node({'status': consts.NODE_STATUSES.discover})
|
self.env.create_node({'status': consts.NODE_STATUSES.discover})
|
||||||
|
@ -137,7 +137,7 @@ class TestInstallationInfo(BaseTestCase):
|
||||||
cluster_kwargs={
|
cluster_kwargs={
|
||||||
'release_id': release[0].id,
|
'release_id': release[0].id,
|
||||||
'mode': consts.CLUSTER_MODES.ha_compact,
|
'mode': consts.CLUSTER_MODES.ha_compact,
|
||||||
'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network},
|
'net_provider': consts.CLUSTER_NET_PROVIDERS.neutron},
|
||||||
nodes_kwargs=nodes_params
|
nodes_kwargs=nodes_params
|
||||||
)
|
)
|
||||||
self.env.create_node({'status': consts.NODE_STATUSES.discover})
|
self.env.create_node({'status': consts.NODE_STATUSES.discover})
|
||||||
|
@ -151,7 +151,7 @@ class TestInstallationInfo(BaseTestCase):
|
||||||
|
|
||||||
self.assertEquals(consts.CLUSTER_MODES.ha_compact,
|
self.assertEquals(consts.CLUSTER_MODES.ha_compact,
|
||||||
cluster_info['mode'])
|
cluster_info['mode'])
|
||||||
self.assertEquals(consts.CLUSTER_NET_PROVIDERS.nova_network,
|
self.assertEquals(consts.CLUSTER_NET_PROVIDERS.neutron,
|
||||||
cluster_info['net_provider'])
|
cluster_info['net_provider'])
|
||||||
self.assertEquals(consts.CLUSTER_STATUSES.new,
|
self.assertEquals(consts.CLUSTER_STATUSES.new,
|
||||||
cluster_info['status'])
|
cluster_info['status'])
|
||||||
|
|
|
@ -52,7 +52,6 @@ from nailgun.network.neutron import NeutronManager80
|
||||||
from nailgun.network.neutron import NeutronManagerLegacy
|
from nailgun.network.neutron import NeutronManagerLegacy
|
||||||
from nailgun.network.nova_network import NovaNetworkManager61
|
from nailgun.network.nova_network import NovaNetworkManager61
|
||||||
from nailgun.network.nova_network import NovaNetworkManager70
|
from nailgun.network.nova_network import NovaNetworkManager70
|
||||||
from nailgun.network.nova_network import NovaNetworkManager80
|
|
||||||
from nailgun.network.nova_network import NovaNetworkManagerLegacy
|
from nailgun.network.nova_network import NovaNetworkManagerLegacy
|
||||||
|
|
||||||
|
|
||||||
|
@ -1329,9 +1328,6 @@ class TestClusterObject(BaseTestCase):
|
||||||
'name': 'network:neutron:tun',
|
'name': 'network:neutron:tun',
|
||||||
'bind': [['cluster:net_provider', 'neutron'],
|
'bind': [['cluster:net_provider', 'neutron'],
|
||||||
['cluster:net_segment_type', 'tun']]
|
['cluster:net_segment_type', 'tun']]
|
||||||
}, {
|
|
||||||
'name': 'network:nova_network',
|
|
||||||
'bind': [['cluster:net_provider', 'nova_network']]
|
|
||||||
}, {
|
}, {
|
||||||
'name': 'hypervisor:libvirt:kvm',
|
'name': 'hypervisor:libvirt:kvm',
|
||||||
'bind': [['settings:common.libvirt_type.value', 'kvm']]
|
'bind': [['settings:common.libvirt_type.value', 'kvm']]
|
||||||
|
@ -1366,14 +1362,6 @@ class TestClusterObject(BaseTestCase):
|
||||||
'net_provider': consts.CLUSTER_NET_PROVIDERS.neutron,
|
'net_provider': consts.CLUSTER_NET_PROVIDERS.neutron,
|
||||||
'segmentation_type': consts.NEUTRON_SEGMENT_TYPES.tun
|
'segmentation_type': consts.NEUTRON_SEGMENT_TYPES.tun
|
||||||
}
|
}
|
||||||
}, {
|
|
||||||
'selected_components': ['network:nova_network',
|
|
||||||
'hypervisor:libvirt:kvm',
|
|
||||||
'additional_service:sahara'],
|
|
||||||
'expected_values': {
|
|
||||||
'net_provider': consts.CLUSTER_NET_PROVIDERS.nova_network,
|
|
||||||
'segmentation_type': None
|
|
||||||
}
|
|
||||||
}, {
|
}, {
|
||||||
'selected_components': ['network:neutron:test_network',
|
'selected_components': ['network:neutron:test_network',
|
||||||
'hypervisor:libvirt:kvm',
|
'hypervisor:libvirt:kvm',
|
||||||
|
@ -1597,7 +1585,6 @@ class TestClusterObjectGetNetworkManager(BaseTestCase):
|
||||||
('2014.2.2-6.0', NovaNetworkManagerLegacy),
|
('2014.2.2-6.0', NovaNetworkManagerLegacy),
|
||||||
('2014.2.2-6.1', NovaNetworkManager61),
|
('2014.2.2-6.1', NovaNetworkManager61),
|
||||||
('2015.6.7-7.0', NovaNetworkManager70),
|
('2015.6.7-7.0', NovaNetworkManager70),
|
||||||
('2016.1.1-8.0', NovaNetworkManager80),
|
|
||||||
):
|
):
|
||||||
self.check_neutron_network_manager(
|
self.check_neutron_network_manager(
|
||||||
consts.CLUSTER_NET_PROVIDERS.nova_network,
|
consts.CLUSTER_NET_PROVIDERS.nova_network,
|
||||||
|
|
|
@ -242,36 +242,6 @@ define([
|
||||||
.then(function() {
|
.then(function() {
|
||||||
return dashboardPage.discardChanges();
|
return dashboardPage.discardChanges();
|
||||||
});
|
});
|
||||||
},
|
|
||||||
'VCenter warning appears': function() {
|
|
||||||
var vCenterClusterName = clusterName + 'VCenter test';
|
|
||||||
return this.remote
|
|
||||||
.clickLinkByText('Environments')
|
|
||||||
.assertElementsAppear('a.clusterbox', 2000, 'The list of clusters is shown when navigating to Environments link')
|
|
||||||
.then(function() {
|
|
||||||
return common.createCluster(
|
|
||||||
vCenterClusterName,
|
|
||||||
{
|
|
||||||
Compute: function() {
|
|
||||||
// Selecting VCenter
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.custom-tumbler input[name=hypervisor\\:vmware]');
|
|
||||||
},
|
|
||||||
'Networking Setup': function() {
|
|
||||||
// Selecting Nova Network
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.custom-tumbler input[value=network\\:nova_network]');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return common.addNodesToCluster(1, ['Controller']);
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return clusterPage.goToTab('Dashboard');
|
|
||||||
})
|
|
||||||
.assertElementContainsText('.warnings-block', 'VMware settings are invalid', 'VMware warning is shown');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -26,208 +26,6 @@ define([
|
||||||
], function(_, registerSuite, assert, Common, NetworksPage, ClusterPage, ModalWindow, DashboardPage) {
|
], function(_, registerSuite, assert, Common, NetworksPage, ClusterPage, ModalWindow, DashboardPage) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
registerSuite(function() {
|
|
||||||
var common,
|
|
||||||
networksPage,
|
|
||||||
clusterPage,
|
|
||||||
clusterName,
|
|
||||||
dashboardPage;
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: 'Networks page Nova Network tests',
|
|
||||||
setup: function() {
|
|
||||||
common = new Common(this.remote);
|
|
||||||
networksPage = new NetworksPage(this.remote);
|
|
||||||
clusterPage = new ClusterPage(this.remote);
|
|
||||||
clusterName = common.pickRandomName('Test Cluster');
|
|
||||||
dashboardPage = new DashboardPage(this.remote);
|
|
||||||
|
|
||||||
return this.remote
|
|
||||||
.then(function() {
|
|
||||||
return common.getIn();
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return common.createCluster(
|
|
||||||
clusterName,
|
|
||||||
{
|
|
||||||
Compute: function() {
|
|
||||||
// select VCenter to enable Nova networking
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('input[name=hypervisor\\:vmware]');
|
|
||||||
},
|
|
||||||
'Networking Setup': function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('input[value=network\\:nova_network]');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return clusterPage.goToTab('Networks');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
afterEach: function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.btn-revert-changes');
|
|
||||||
},
|
|
||||||
'Network Tab is rendered correctly': function() {
|
|
||||||
return this.remote
|
|
||||||
.assertElementExists('.nova-managers .radio-group', 'Nova Network manager radiogroup is present')
|
|
||||||
.assertElementsExist('.checkbox-group input[name=net_provider]', 2, 'Network manager options are present')
|
|
||||||
.assertElementSelected('input[value=FlatDHCPManager]', 'Flat DHCP manager is chosen')
|
|
||||||
.assertElementsExist('.network-tab h3', 3, 'All networks are present');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: Save button interactions': function() {
|
|
||||||
var self = this,
|
|
||||||
cidrInitialValue,
|
|
||||||
cidrElementSelector = '.storage input[name=cidr]';
|
|
||||||
return this.remote
|
|
||||||
.findByCssSelector(cidrElementSelector)
|
|
||||||
.then(function(element) {
|
|
||||||
return element.getAttribute('value')
|
|
||||||
.then(function(value) {
|
|
||||||
cidrInitialValue = value;
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.end()
|
|
||||||
.setInputValue(cidrElementSelector, '240.0.1.0/25')
|
|
||||||
.assertElementAppears(networksPage.applyButtonSelector + ':not(:disabled)', 200,
|
|
||||||
'Save changes button is enabled if there are changes')
|
|
||||||
.then(function() {
|
|
||||||
return self.remote.setInputValue(cidrElementSelector, cidrInitialValue);
|
|
||||||
})
|
|
||||||
.assertElementAppears(networksPage.applyButtonSelector + ':disabled', 200,
|
|
||||||
'Save changes button is disabled again if there are no changes');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: change network manager': function() {
|
|
||||||
var amountSelector = 'input[name=fixed_networks_amount]',
|
|
||||||
sizeSelector = 'select[name=fixed_network_size]';
|
|
||||||
return this.remote
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.clickByCssSelector('.subtab-link-nova_configuration')
|
|
||||||
.assertElementExists(amountSelector, 'Amount field for a fixed network is present in VLAN mode')
|
|
||||||
.assertElementExists(sizeSelector, 'Size field for a fixed network is present in VLAN mode')
|
|
||||||
.assertElementEnabled(networksPage.applyButtonSelector, 'Save changes button is enabled after manager was changed')
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.assertElementNotExists(amountSelector, 'Amount field was hidden after revert to FlatDHCP')
|
|
||||||
.assertElementNotExists(sizeSelector, 'Size field was hidden after revert to FlatDHCP')
|
|
||||||
.assertElementDisabled(networksPage.applyButtonSelector, 'Save changes button is disabled again after revert to FlatDHCP');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: network notation change': function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.subtab-link-default')
|
|
||||||
.assertElementAppears('.storage', 2000, 'Storage network is shown')
|
|
||||||
.assertElementSelected('.storage .cidr input[type=checkbox]', 'Storage network has "cidr" notation by default')
|
|
||||||
.assertElementNotExists('.storage .ip_ranges input[type=text]:not(:disabled)', 'It is impossible to configure IP ranges for network with "cidr" notation')
|
|
||||||
.clickByCssSelector('.storage .cidr input[type=checkbox]')
|
|
||||||
.assertElementNotExists('.storage .ip_ranges input[type=text]:disabled', 'Network notation was changed to "ip_ranges"');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: VLAN range fields': function() {
|
|
||||||
return this.remote
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.clickByCssSelector('.subtab-link-nova_configuration')
|
|
||||||
.assertElementAppears('input[name=range-end_fixed_networks_vlan_start]', 2000, 'VLAN range is displayed');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: save network changes': function() {
|
|
||||||
return this.remote
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.clickByCssSelector(networksPage.applyButtonSelector)
|
|
||||||
.assertElementsAppear('input:not(:disabled)', 2000, 'Inputs are not disabled')
|
|
||||||
.assertElementNotExists('.alert-error', 'Correct settings were saved successfully');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: save settings with group: network': function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.subtab-link-network_settings')
|
|
||||||
.clickByCssSelector('input[name=auto_assign_floating_ip][type=checkbox]')
|
|
||||||
.clickByCssSelector(networksPage.applyButtonSelector)
|
|
||||||
.assertElementsAppear('input:not(:disabled)', 2000, 'Inputs are not disabled')
|
|
||||||
.assertElementDisabled(networksPage.applyButtonSelector, 'Save changes button is disabled again after successfull settings saving');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: verification': function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.subtab-link-network_verification')
|
|
||||||
.assertElementDisabled('.verify-networks-btn', 'Verification button is disabled in case of no nodes')
|
|
||||||
.assertElementTextEquals('.alert-warning',
|
|
||||||
'At least two online nodes are required to verify environment network configuration',
|
|
||||||
'Not enough nodes warning is shown')
|
|
||||||
.clickByCssSelector('.subtab-link-default')
|
|
||||||
.then(function() {
|
|
||||||
// Adding 2 controllers
|
|
||||||
return common.addNodesToCluster(2, ['Controller']);
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return clusterPage.goToTab('Networks');
|
|
||||||
})
|
|
||||||
.setInputValue('.public input[name=gateway]', '172.16.0.2')
|
|
||||||
.clickByCssSelector('.subtab-link-network_verification')
|
|
||||||
.clickByCssSelector('.verify-networks-btn')
|
|
||||||
.assertElementAppears('.alert-danger.network-alert', 4000, 'Verification error is shown')
|
|
||||||
.assertElementAppears('.alert-danger.network-alert', 'Address intersection', 'Verification result is shown in case of address intersection')
|
|
||||||
// Testing cluster networks: verification task deletion
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.clickByCssSelector('.subtab-link-network_verification')
|
|
||||||
.assertElementNotExists('.page-control-box .alert', 'Verification task was removed after settings has been changed')
|
|
||||||
.clickByCssSelector('.btn-revert-changes')
|
|
||||||
.then(function() {
|
|
||||||
return clusterPage.goToTab('Dashboard');
|
|
||||||
})
|
|
||||||
.then(function() {
|
|
||||||
return dashboardPage.discardChanges();
|
|
||||||
}) .then(function() {
|
|
||||||
return clusterPage.goToTab('Networks');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
'Check VlanID field validation': function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.subtab-link-default')
|
|
||||||
.assertElementAppears('.management', 2000, 'Management network appears')
|
|
||||||
.clickByCssSelector('.management .vlan-tagging input[type=checkbox]')
|
|
||||||
.clickByCssSelector('.management .vlan-tagging input[type=checkbox]')
|
|
||||||
.assertElementExists('.management .has-error input[name=vlan_start]',
|
|
||||||
'Field validation has worked properly in case of empty value');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: data validation on manager change': function() {
|
|
||||||
return this.remote
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.clickByCssSelector('.subtab-link-nova_configuration')
|
|
||||||
.assertElementAppears('input[name=fixed_networks_vlan_start][type=checkbox]', 2000, 'Vlan range appearsse')
|
|
||||||
.clickByCssSelector('input[name=fixed_networks_vlan_start][type=checkbox]')
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.assertElementExists('.has-error input[name=range-start_fixed_networks_vlan_start][type=text]',
|
|
||||||
'Field validation has worked')
|
|
||||||
.assertElementDisabled(networksPage.applyButtonSelector,
|
|
||||||
'Save changes button is disabled if there is validation error')
|
|
||||||
.then(function() {
|
|
||||||
return networksPage.switchNetworkManager();
|
|
||||||
})
|
|
||||||
.clickByCssSelector('input[name=fixed_networks_vlan_start][type=checkbox]')
|
|
||||||
.assertElementNotExists('.has-error input[name=range-start_fixed_networks_vlan_start][type=text]',
|
|
||||||
'Field validation works properly');
|
|
||||||
},
|
|
||||||
'Testing cluster networks: data validation on invalid settings': function() {
|
|
||||||
return this.remote
|
|
||||||
.clickByCssSelector('.subtab-link-default')
|
|
||||||
.setInputValue('input[name=range-end_ip_ranges]', '172.16.0.2')
|
|
||||||
.clickByCssSelector(networksPage.applyButtonSelector)
|
|
||||||
.assertElementAppears('.alert-danger.network-alert', 2000, 'Validation error appears');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
registerSuite(function() {
|
registerSuite(function() {
|
||||||
var common,
|
var common,
|
||||||
networksPage,
|
networksPage,
|
||||||
|
|
|
@ -65,7 +65,7 @@ define([
|
||||||
.pressKeys('\uE007')
|
.pressKeys('\uE007')
|
||||||
.assertElementsExist('.wizard-step.available', 5, 'All steps are available at the end')
|
.assertElementsExist('.wizard-step.available', 5, 'All steps are available at the end')
|
||||||
.clickLinkByText('Compute')
|
.clickLinkByText('Compute')
|
||||||
.clickByCssSelector('input[name=hypervisor\\:vmware]')
|
.clickByCssSelector('input[name=hypervisor\\:qemu]')
|
||||||
.assertElementExists('.wizard-step.available', 1,
|
.assertElementExists('.wizard-step.available', 1,
|
||||||
'Only one step is available after changing hypervisor');
|
'Only one step is available after changing hypervisor');
|
||||||
}
|
}
|
||||||
|
|
|
@ -861,6 +861,7 @@
|
||||||
"qemu_description": "Select this option if you want to use QEMU as a hypervisor with capability of KVM acceleration.",
|
"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_description": "Select this option if you run OpenStack on VMware vCenter.",
|
||||||
"vcenter_warning": "vCenter can't be deployed without QEMU-KVM option selected.",
|
"vcenter_warning": "vCenter can't be deployed without QEMU-KVM option selected.",
|
||||||
|
"vcenter_requires_network_backend": "vCenter requires DVS or NSX network backend",
|
||||||
"empty_choice": "Please select at least one hypervisor type"
|
"empty_choice": "Please select at least one hypervisor type"
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
|
@ -869,9 +870,6 @@
|
||||||
"description_link": "Mirantis OpenStack Planning Guide for Network Topology",
|
"description_link": "Mirantis OpenStack Planning Guide for Network Topology",
|
||||||
"release_alert": "Neutron is not supported in __NameAndRelease.release_name__",
|
"release_alert": "Neutron is not supported in __NameAndRelease.release_name__",
|
||||||
"hypervisor_alert": "Neutron is not available with vCenter as a selected compute option.",
|
"hypervisor_alert": "Neutron is not available with vCenter as a selected compute option.",
|
||||||
"nova_network_vcenter_alert": "Legacy Networking (nova-network) requires vCenter to be a selected compute option.",
|
|
||||||
"nova_network": "(DEPRECATED) Legacy Networking (nova-network)",
|
|
||||||
"nova_network_description": "This option is only available if you use VMware vCenter. OpenStack is deprecating nova-network in upcoming releases.",
|
|
||||||
"neutron_gre_description": "Your network hardware must support GRE segmentation. This option supports up to 65535 networks.",
|
"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": "Neutron with VLAN segmentation (default)",
|
||||||
"neutron_vlan_description": "Your network hardware must be configured for VLAN segmentation. This option supports up to 4095 networks.",
|
"neutron_vlan_description": "Your network hardware must be configured for VLAN segmentation. This option supports up to 4095 networks.",
|
||||||
|
|
|
@ -336,14 +336,30 @@ function($, _, i18n, React, Backbone, utils, models, componentMixins, dialogs, c
|
||||||
paneName: 'Compute',
|
paneName: 'Compute',
|
||||||
componentType: 'hypervisor',
|
componentType: 'hypervisor',
|
||||||
title: i18n('dialog.create_cluster_wizard.compute.title'),
|
title: i18n('dialog.create_cluster_wizard.compute.title'),
|
||||||
|
vCenterPath: 'hypervisor:vmware',
|
||||||
|
vCenterNetworkBackends: ['network:neutron:ml2:nsx', 'network:neutron:ml2:dvs'],
|
||||||
hasErrors: function(wizard) {
|
hasErrors: function(wizard) {
|
||||||
var allComponents = wizard.get('components'),
|
var allComponents = wizard.get('components'),
|
||||||
components = allComponents.getComponentsByType(this.componentType, {sorted: true});
|
components = allComponents.getComponentsByType(this.componentType, {sorted: true});
|
||||||
return !_.any(components, (component) => component.get('enabled'));
|
return !_.any(components, (component) => component.get('enabled'));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
checkVCenter(allComponents) {
|
||||||
|
// TODO remove this hack in 9.0
|
||||||
|
var hasCompatibleBackends = _.any(allComponents.models, (component) => {
|
||||||
|
return _.contains(this.constructor.vCenterNetworkBackends, component.id);
|
||||||
|
});
|
||||||
|
if (!hasCompatibleBackends) {
|
||||||
|
var vCenter = _.find(allComponents.models, (component) => component.id == this.constructor.vCenterPath);
|
||||||
|
vCenter.set({
|
||||||
|
disabled: true,
|
||||||
|
warnings: i18n('dialog.create_cluster_wizard.compute.vcenter_requires_network_backend')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
render: function() {
|
render: function() {
|
||||||
this.processRestrictions(this.components, ['hypervisor']);
|
this.processRestrictions(this.components, ['hypervisor']);
|
||||||
|
this.checkVCenter(this.props.allComponents);
|
||||||
return (
|
return (
|
||||||
<div className='wizard-compute-pane'>
|
<div className='wizard-compute-pane'>
|
||||||
<ComponentCheckboxGroup
|
<ComponentCheckboxGroup
|
||||||
|
|
Loading…
Reference in New Issue