Add test for reconfiguration of nova CPU allocation ratio
Change-Id: I294f7b0372c5edd5b6659236f7077c16dc76c08f Implements: blueprint test-openstack-config-change
This commit is contained in:
parent
44622a8494
commit
4a5fe75465
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
nova_config:
|
||||||
|
DEFAULT/cpu_allocation_ratio:
|
||||||
|
value: "1.0"
|
|
@ -149,13 +149,13 @@ class Common(object):
|
||||||
try:
|
try:
|
||||||
_verify_instance_state()
|
_verify_instance_state()
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
LOGGER.debug('Instance is not active, '
|
LOGGER.debug('Instance is not {0}, lets provide it the last '
|
||||||
'lets provide it the last chance and sleep 60 sec')
|
'chance and sleep 60 sec'.format(expected_state))
|
||||||
time.sleep(60)
|
time.sleep(60)
|
||||||
_verify_instance_state()
|
_verify_instance_state()
|
||||||
|
|
||||||
def delete_instance(self, server):
|
def delete_instance(self, server):
|
||||||
LOGGER.debug('Try to create instance')
|
LOGGER.debug('Try to delete instance')
|
||||||
self.nova.servers.delete(server)
|
self.nova.servers.delete(server)
|
||||||
|
|
||||||
def create_flavor(self, name, ram, vcpus, disk, flavorid="auto"):
|
def create_flavor(self, name, ram, vcpus, disk, flavorid="auto"):
|
||||||
|
|
|
@ -18,6 +18,8 @@ from proboscis import test
|
||||||
from fuelweb_test.helpers.decorators import log_snapshot_after_test
|
from fuelweb_test.helpers.decorators import log_snapshot_after_test
|
||||||
from fuelweb_test.helpers import os_actions
|
from fuelweb_test.helpers import os_actions
|
||||||
from fuelweb_test.helpers import utils
|
from fuelweb_test.helpers import utils
|
||||||
|
from fuelweb_test import settings
|
||||||
|
from fuelweb_test.tests.base_test_case import SetupEnvironment
|
||||||
from fuelweb_test.tests.base_test_case import TestBasic
|
from fuelweb_test.tests.base_test_case import TestBasic
|
||||||
from fuelweb_test.tests.test_neutron import NeutronVlanHa
|
from fuelweb_test.tests.test_neutron import NeutronVlanHa
|
||||||
|
|
||||||
|
@ -44,6 +46,8 @@ def get_structured_config_dict(config):
|
||||||
helper(key, '/etc/neutron/neutron.conf')
|
helper(key, '/etc/neutron/neutron.conf')
|
||||||
if key == 'neutron_plugin_ml2':
|
if key == 'neutron_plugin_ml2':
|
||||||
helper(key, '/etc/neutron/plugins/ml2/ml2_conf.ini')
|
helper(key, '/etc/neutron/plugins/ml2/ml2_conf.ini')
|
||||||
|
if key == 'nova_config':
|
||||||
|
helper(key, '/etc/nova/nova.conf')
|
||||||
return structured_conf
|
return structured_conf
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,3 +134,119 @@ class ServicesReconfiguration(TestBasic):
|
||||||
raise Exception("New configuration was not applied")
|
raise Exception("New configuration was not applied")
|
||||||
|
|
||||||
self.env.make_snapshot("reconfigure_ml2_vlan_range", is_make=True)
|
self.env.make_snapshot("reconfigure_ml2_vlan_range", is_make=True)
|
||||||
|
|
||||||
|
@test(depends_on=[SetupEnvironment.prepare_slaves_5],
|
||||||
|
groups=["services_reconfiguration", "reconfigure_overcommit_ratio"])
|
||||||
|
@log_snapshot_after_test
|
||||||
|
def reconfigure_overcommit_ratio(self):
|
||||||
|
"""Tests for reconfiguration nova CPU overcommit ratio.
|
||||||
|
|
||||||
|
Scenario:
|
||||||
|
1. Create cluster
|
||||||
|
2. Add 1 node with compute role
|
||||||
|
3. Add 3 nodes with controller role
|
||||||
|
4. Deploy the cluster
|
||||||
|
5. Verify network
|
||||||
|
6. Run OSTF
|
||||||
|
7. Verify configuration file on each controller
|
||||||
|
8. Apply new CPU overcommit ratio for each controller
|
||||||
|
9. Verify deployment task is finished
|
||||||
|
10. Verify nova-scheduler services uptime
|
||||||
|
11. Boot instances with flavor that occupy all CPU
|
||||||
|
12. Boot extra instance and catch the error
|
||||||
|
|
||||||
|
Snapshot: reconfigure_overcommit_ratio
|
||||||
|
|
||||||
|
"""
|
||||||
|
self.env.revert_snapshot("ready_with_5_slaves")
|
||||||
|
|
||||||
|
self.show_step(1)
|
||||||
|
cluster_id = self.fuel_web.create_cluster(
|
||||||
|
name=self.__class__.__name__,
|
||||||
|
mode=settings.DEPLOYMENT_MODE,
|
||||||
|
settings={
|
||||||
|
"net_provider": 'neutron',
|
||||||
|
"net_segment_type": settings.NEUTRON_SEGMENT_TYPE,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.show_step(2)
|
||||||
|
self.show_step(3)
|
||||||
|
|
||||||
|
self.fuel_web.update_nodes(
|
||||||
|
cluster_id,
|
||||||
|
{
|
||||||
|
'slave-01': ['compute'],
|
||||||
|
'slave-02': ['controller'],
|
||||||
|
'slave-03': ['controller'],
|
||||||
|
'slave-04': ['controller']
|
||||||
|
})
|
||||||
|
|
||||||
|
self.show_step(4)
|
||||||
|
self.fuel_web.deploy_cluster_wait(cluster_id, check_services=False)
|
||||||
|
|
||||||
|
self.show_step(5)
|
||||||
|
self.fuel_web.verify_network(cluster_id)
|
||||||
|
|
||||||
|
self.show_step(6)
|
||||||
|
self.fuel_web.run_ostf(cluster_id=cluster_id)
|
||||||
|
|
||||||
|
self.show_step(7)
|
||||||
|
cluster_id = self.fuel_web.get_last_created_cluster()
|
||||||
|
config = utils.get_config_template('nova_cpu')
|
||||||
|
structured_config = get_structured_config_dict(config)
|
||||||
|
self.fuel_web.client.upload_configuration(config, cluster_id)
|
||||||
|
|
||||||
|
service_name = "nova-scheduler"
|
||||||
|
|
||||||
|
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
|
||||||
|
cluster_id, ['controller'])
|
||||||
|
controllers = [x['ip'] for x in controllers]
|
||||||
|
uptimes = dict(zip(controllers, range(len(controllers))))
|
||||||
|
for controller in controllers:
|
||||||
|
with self.env.d_env.get_ssh_to_remote(controller) as remote:
|
||||||
|
uptimes[controller] = \
|
||||||
|
utils.get_process_uptime(remote, service_name)
|
||||||
|
task = self.fuel_web.client.apply_configuration(cluster_id)
|
||||||
|
|
||||||
|
self.show_step(8)
|
||||||
|
self.fuel_web.assert_task_success(task, timeout=300, interval=5)
|
||||||
|
|
||||||
|
self.show_step(9)
|
||||||
|
self.show_step(10)
|
||||||
|
|
||||||
|
for controller in controllers:
|
||||||
|
with self.env.d_env.get_ssh_to_remote(controller) as remote:
|
||||||
|
uptime = utils.get_process_uptime(remote, service_name)
|
||||||
|
asserts.assert_true(uptime <= uptimes[controller],
|
||||||
|
"Service {0} was not restarted "
|
||||||
|
"on {1}".format(controller, service_name))
|
||||||
|
for configpath, params in structured_config.items():
|
||||||
|
result = remote.open(configpath)
|
||||||
|
conf_for_check = utils.get_ini_config(result)
|
||||||
|
for param in params:
|
||||||
|
utils.check_config(conf_for_check,
|
||||||
|
configpath,
|
||||||
|
param['section'],
|
||||||
|
param['option'],
|
||||||
|
param['value'])
|
||||||
|
|
||||||
|
self.show_step(11)
|
||||||
|
os_conn = os_actions.OpenStackActions(
|
||||||
|
self.fuel_web.get_public_vip(cluster_id))
|
||||||
|
|
||||||
|
net_name = self.fuel_web.get_cluster_predefined_networks_name(
|
||||||
|
cluster_id)['private_net']
|
||||||
|
server = os_conn.create_instance(neutron_network=True,
|
||||||
|
label=net_name,
|
||||||
|
server_name="Test_reconfig",
|
||||||
|
vcpus=2)
|
||||||
|
os_conn.verify_instance_status(server, 'ACTIVE')
|
||||||
|
self.show_step(12)
|
||||||
|
excessive_server = os_conn.create_instance(neutron_network=True,
|
||||||
|
label=net_name,
|
||||||
|
server_name="excessive_VM",
|
||||||
|
flavor_name="overcommit")
|
||||||
|
os_conn.verify_instance_status(excessive_server, 'ERROR')
|
||||||
|
os_conn.delete_instance(excessive_server)
|
||||||
|
self.env.make_snapshot("reconfigure_overcommit_ratio",
|
||||||
|
is_make=True)
|
||||||
|
|
Loading…
Reference in New Issue