Add new tescase for pinning with other role and reboot
This testgroup should be run with this parameters:
export KVM_USE=True
export SLAVE_NODE_CPU=6
export DRIVER_ENABLE_ACPI=true
export NUMA_NODES=2
Change-Id: Ia9939f01f497c76e7b8149993d4fbe7ca979983d
Implements: blueprint test-numa-cpu-pinning
(cherry picked from commit 20d09b0698
)
This commit is contained in:
parent
62506fde4b
commit
9872689dfa
@ -222,6 +222,11 @@ class Common(object):
|
|||||||
aggregate.set_metadata(metadata)
|
aggregate.set_metadata(metadata)
|
||||||
return aggregate
|
return aggregate
|
||||||
|
|
||||||
|
def delete_aggregate(self, aggregate, hosts=None):
|
||||||
|
for host in hosts or []:
|
||||||
|
self.nova.aggregates.remove_host(aggregate, host)
|
||||||
|
return self.nova.aggregates.delete(aggregate)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_keystoneclient(username, password, tenant_name, auth_url,
|
def _get_keystoneclient(username, password, tenant_name, auth_url,
|
||||||
retries=3, ca_cert=None, insecure=False):
|
retries=3, ca_cert=None, insecure=False):
|
||||||
|
@ -88,7 +88,10 @@ class NumaCpuPinning(TestBasic):
|
|||||||
:param meta: a dict with metadata for aggregate
|
:param meta: a dict with metadata for aggregate
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
os_conn.create_aggregate(name, metadata=meta, hosts=[hostname])
|
aggregate_name = name + str(random.randint(0, 1000))
|
||||||
|
aggregate = os_conn.create_aggregate(aggregate_name,
|
||||||
|
metadata=meta,
|
||||||
|
hosts=[hostname])
|
||||||
|
|
||||||
extra_specs = {'aggregate_instance_extra_specs:pinned': 'true',
|
extra_specs = {'aggregate_instance_extra_specs:pinned': 'true',
|
||||||
'hw:cpu_policy': 'dedicated'}
|
'hw:cpu_policy': 'dedicated'}
|
||||||
@ -106,6 +109,7 @@ class NumaCpuPinning(TestBasic):
|
|||||||
os_conn.verify_instance_status(server, 'ACTIVE')
|
os_conn.verify_instance_status(server, 'ACTIVE')
|
||||||
os_conn.delete_instance(server)
|
os_conn.delete_instance(server)
|
||||||
os_conn.delete_flavor(flavor)
|
os_conn.delete_flavor(flavor)
|
||||||
|
os_conn.delete_aggregate(aggregate, hosts=[hostname])
|
||||||
|
|
||||||
@test(depends_on=[SetupEnvironment.prepare_slaves_5],
|
@test(depends_on=[SetupEnvironment.prepare_slaves_5],
|
||||||
groups=["numa_cpu_pinning",
|
groups=["numa_cpu_pinning",
|
||||||
@ -236,6 +240,9 @@ class NumaCpuPinning(TestBasic):
|
|||||||
|
|
||||||
Snapshot: cpu_pinning_on_two_compute
|
Snapshot: cpu_pinning_on_two_compute
|
||||||
"""
|
"""
|
||||||
|
snapshot_name = 'cpu_pinning_on_two_compute'
|
||||||
|
self.check_run(snapshot_name)
|
||||||
|
|
||||||
self.show_step(1)
|
self.show_step(1)
|
||||||
self.env.revert_snapshot("basic_env_for_numa_cpu_pinning")
|
self.env.revert_snapshot("basic_env_for_numa_cpu_pinning")
|
||||||
|
|
||||||
@ -290,9 +297,10 @@ class NumaCpuPinning(TestBasic):
|
|||||||
nova_conf_path = "/etc/nova/nova.conf"
|
nova_conf_path = "/etc/nova/nova.conf"
|
||||||
|
|
||||||
for controller in controllers:
|
for controller in controllers:
|
||||||
nova_conf = utils.get_ini_config(self.ssh_manager.open_on_remote(
|
with self.ssh_manager.open_on_remote(
|
||||||
ip=controller['ip'],
|
ip=controller['ip'],
|
||||||
path=nova_conf_path))
|
path=nova_conf_path) as f:
|
||||||
|
nova_conf = utils.get_ini_config(f)
|
||||||
|
|
||||||
self.assert_entry_in_config(nova_conf,
|
self.assert_entry_in_config(nova_conf,
|
||||||
nova_conf_path,
|
nova_conf_path,
|
||||||
@ -302,18 +310,22 @@ class NumaCpuPinning(TestBasic):
|
|||||||
|
|
||||||
self.show_step(7)
|
self.show_step(7)
|
||||||
|
|
||||||
nova_conf = utils.get_ini_config(self.ssh_manager.open_on_remote(
|
with self.ssh_manager.open_on_remote(
|
||||||
ip=first_compute['ip'],
|
ip=first_compute['ip'],
|
||||||
path=nova_conf_path))
|
path=nova_conf_path) as f:
|
||||||
|
nova_conf = utils.get_ini_config(f)
|
||||||
|
|
||||||
self.assert_quantity_in_config(nova_conf,
|
self.assert_quantity_in_config(nova_conf,
|
||||||
nova_conf_path,
|
nova_conf_path,
|
||||||
"DEFAULT",
|
"DEFAULT",
|
||||||
"vcpu_pin_set",
|
"vcpu_pin_set",
|
||||||
first_compute_cpu - 1)
|
first_compute_cpu - 1)
|
||||||
|
|
||||||
nova_conf = utils.get_ini_config(self.ssh_manager.open_on_remote(
|
with self.ssh_manager.open_on_remote(
|
||||||
ip=second_compute['ip'],
|
ip=second_compute['ip'],
|
||||||
path=nova_conf_path))
|
path=nova_conf_path) as f:
|
||||||
|
nova_conf = utils.get_ini_config(f)
|
||||||
|
|
||||||
self.assert_quantity_in_config(nova_conf,
|
self.assert_quantity_in_config(nova_conf,
|
||||||
nova_conf_path,
|
nova_conf_path,
|
||||||
"DEFAULT",
|
"DEFAULT",
|
||||||
@ -331,16 +343,184 @@ class NumaCpuPinning(TestBasic):
|
|||||||
|
|
||||||
self.create_pinned_instance(os_conn=os_conn,
|
self.create_pinned_instance(os_conn=os_conn,
|
||||||
cluster_id=cluster_id,
|
cluster_id=cluster_id,
|
||||||
name='cpu_3',
|
name='cpu_3_',
|
||||||
vcpus=3,
|
vcpus=3,
|
||||||
hostname=first_compute['fqdn'],
|
hostname=first_compute['fqdn'],
|
||||||
meta=meta)
|
meta=meta)
|
||||||
self.show_step(10)
|
self.show_step(10)
|
||||||
self.create_pinned_instance(os_conn=os_conn,
|
self.create_pinned_instance(os_conn=os_conn,
|
||||||
cluster_id=cluster_id,
|
cluster_id=cluster_id,
|
||||||
name='cpu_1',
|
name='cpu_1_',
|
||||||
vcpus=1,
|
vcpus=1,
|
||||||
hostname=second_compute['fqdn'],
|
hostname=second_compute['fqdn'],
|
||||||
meta=meta)
|
meta=meta)
|
||||||
|
|
||||||
self.env.make_snapshot("cpu_pinning_on_two_compute")
|
self.env.make_snapshot(snapshot_name, is_make=True)
|
||||||
|
|
||||||
|
@test(depends_on_groups=['basic_env_for_numa_cpu_pinning'],
|
||||||
|
groups=["cpu_pinning_with_other_role"])
|
||||||
|
@log_snapshot_after_test
|
||||||
|
def cpu_pinning_with_other_role(self):
|
||||||
|
"""Check pinned CPU on compute,cinder node
|
||||||
|
|
||||||
|
Scenario:
|
||||||
|
1. Revert snapshot "basic_env_for_numa_cpu_pinning"
|
||||||
|
2. Add cinder role for compute nodes
|
||||||
|
3. Pin maximum CPU for the nova on the computes
|
||||||
|
4. Verify setting was successfully applied
|
||||||
|
5. Deploy cluster
|
||||||
|
6. Check new filters are enabled in nova.conf at controller
|
||||||
|
7. Check nova.conf contains pinned CPU at computes
|
||||||
|
8. Run OSTF
|
||||||
|
9. Boot VMs with pinned CPU on each compute, cinder node
|
||||||
|
|
||||||
|
Snapshot: cpu_pinning_with_other_role
|
||||||
|
"""
|
||||||
|
self.show_step(1)
|
||||||
|
self.env.revert_snapshot("basic_env_for_numa_cpu_pinning")
|
||||||
|
|
||||||
|
self.show_step(2)
|
||||||
|
cluster_id = self.fuel_web.get_last_created_cluster()
|
||||||
|
|
||||||
|
nodes = {'slave-01': ['compute', 'cinder'],
|
||||||
|
'slave-02': ['compute', 'cinder']}
|
||||||
|
|
||||||
|
self.fuel_web.update_nodes(cluster_id, nodes)
|
||||||
|
|
||||||
|
self.show_step(3)
|
||||||
|
target_nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
|
||||||
|
cluster_id, ['compute', 'cinder'], role_status='pending_roles')
|
||||||
|
for compute in target_nodes:
|
||||||
|
compute_cpu = compute['meta']['cpu']['total']
|
||||||
|
compute_config = self.fuel_web.client.get_node_attributes(
|
||||||
|
compute['id'])
|
||||||
|
compute_config['cpu_pinning']['nova']['value'] = compute_cpu - 1
|
||||||
|
self.fuel_web.client.upload_node_attributes(
|
||||||
|
compute_config, compute['id'])
|
||||||
|
|
||||||
|
self.show_step(4)
|
||||||
|
for compute in target_nodes:
|
||||||
|
compute_cpu = compute['meta']['cpu']['total']
|
||||||
|
compute_config = self.fuel_web.client.get_node_attributes(
|
||||||
|
compute['id'])
|
||||||
|
asserts.assert_equal(
|
||||||
|
compute_config['cpu_pinning']['nova']['value'],
|
||||||
|
compute_cpu - 1,
|
||||||
|
"CPU pinning wasn't applied on '{0}': "
|
||||||
|
"Expected value '{1}', actual '{2}'"
|
||||||
|
.format(compute['ip'], compute_cpu - 1,
|
||||||
|
compute_config['cpu_pinning']['nova']['value']))
|
||||||
|
|
||||||
|
self.show_step(5)
|
||||||
|
self.fuel_web.deploy_cluster_wait(cluster_id)
|
||||||
|
|
||||||
|
self.show_step(6)
|
||||||
|
controllers = self.fuel_web.get_nailgun_cluster_nodes_by_roles(
|
||||||
|
cluster_id,
|
||||||
|
roles=['controller'])
|
||||||
|
|
||||||
|
nova_conf_path = "/etc/nova/nova.conf"
|
||||||
|
|
||||||
|
for controller in controllers:
|
||||||
|
with self.ssh_manager.open_on_remote(
|
||||||
|
ip=controller['ip'],
|
||||||
|
path=nova_conf_path) as f:
|
||||||
|
nova_conf = utils.get_ini_config(f)
|
||||||
|
|
||||||
|
self.assert_entry_in_config(nova_conf,
|
||||||
|
nova_conf_path,
|
||||||
|
"DEFAULT",
|
||||||
|
"scheduler_default_filters",
|
||||||
|
"NUMATopologyFilter")
|
||||||
|
|
||||||
|
self.show_step(7)
|
||||||
|
for compute in target_nodes:
|
||||||
|
with self.ssh_manager.open_on_remote(
|
||||||
|
ip=compute['ip'],
|
||||||
|
path=nova_conf_path) as f:
|
||||||
|
nova_conf = utils.get_ini_config(f)
|
||||||
|
|
||||||
|
compute_cpu = compute['meta']['cpu']['total']
|
||||||
|
self.assert_quantity_in_config(nova_conf,
|
||||||
|
nova_conf_path,
|
||||||
|
"DEFAULT",
|
||||||
|
"vcpu_pin_set",
|
||||||
|
compute_cpu - 1)
|
||||||
|
|
||||||
|
self.show_step(8)
|
||||||
|
self.fuel_web.run_ostf(cluster_id=cluster_id)
|
||||||
|
|
||||||
|
self.show_step(9)
|
||||||
|
os_conn = os_actions.OpenStackActions(
|
||||||
|
self.fuel_web.get_public_vip(cluster_id))
|
||||||
|
|
||||||
|
meta = {'pinned': 'true'}
|
||||||
|
|
||||||
|
for compute in target_nodes:
|
||||||
|
self.create_pinned_instance(os_conn=os_conn,
|
||||||
|
cluster_id=cluster_id,
|
||||||
|
name='cpu_role_',
|
||||||
|
vcpus=2,
|
||||||
|
hostname=compute['fqdn'],
|
||||||
|
meta=meta)
|
||||||
|
|
||||||
|
self.env.make_snapshot("cpu_pinning_with_other_role")
|
||||||
|
|
||||||
|
@test(depends_on_groups=['cpu_pinning_on_two_compute'],
|
||||||
|
groups=["reboot_cpu_pinning_compute"])
|
||||||
|
@log_snapshot_after_test
|
||||||
|
def reboot_cpu_pinning_compute(self):
|
||||||
|
"""Check compute with pinned CPU after reboot
|
||||||
|
|
||||||
|
Scenario:
|
||||||
|
1. Revert snapshot "cpu_pinning_on_two_compute"
|
||||||
|
2. Reboot the first compute with CPU pinning
|
||||||
|
3. Run OSTF
|
||||||
|
4. Boot VM with pinned CPU on the first compute
|
||||||
|
5. Reboot the second compute with CPU pinning
|
||||||
|
6. Run OSTF
|
||||||
|
7. Boot VM with pinned CPU on the second compute
|
||||||
|
|
||||||
|
Snapshot: reboot_cpu_pinning_compute
|
||||||
|
"""
|
||||||
|
self.show_step(1)
|
||||||
|
self.env.revert_snapshot("cpu_pinning_on_two_compute")
|
||||||
|
cluster_id = self.fuel_web.get_last_created_cluster()
|
||||||
|
|
||||||
|
self.show_step(2)
|
||||||
|
first_compute = self.fuel_web.get_nailgun_node_by_name('slave-01')
|
||||||
|
second_compute = self.fuel_web.get_nailgun_node_by_name('slave-02')
|
||||||
|
self.fuel_web.warm_restart_nodes(
|
||||||
|
self.fuel_web.get_devops_nodes_by_nailgun_nodes([first_compute]))
|
||||||
|
|
||||||
|
self.show_step(3)
|
||||||
|
self.fuel_web.run_ostf(cluster_id=cluster_id)
|
||||||
|
|
||||||
|
self.show_step(4)
|
||||||
|
os_conn = os_actions.OpenStackActions(
|
||||||
|
self.fuel_web.get_public_vip(cluster_id))
|
||||||
|
|
||||||
|
meta = {'pinned': 'true'}
|
||||||
|
|
||||||
|
self.create_pinned_instance(os_conn=os_conn,
|
||||||
|
cluster_id=cluster_id,
|
||||||
|
name='cpu_3_',
|
||||||
|
vcpus=3,
|
||||||
|
hostname=first_compute['fqdn'],
|
||||||
|
meta=meta)
|
||||||
|
self.show_step(5)
|
||||||
|
self.fuel_web.warm_restart_nodes(
|
||||||
|
self.fuel_web.get_devops_nodes_by_nailgun_nodes([second_compute]))
|
||||||
|
|
||||||
|
self.show_step(6)
|
||||||
|
self.fuel_web.run_ostf(cluster_id=cluster_id)
|
||||||
|
|
||||||
|
self.show_step(7)
|
||||||
|
self.create_pinned_instance(os_conn=os_conn,
|
||||||
|
cluster_id=cluster_id,
|
||||||
|
name='cpu_1_',
|
||||||
|
vcpus=1,
|
||||||
|
hostname=second_compute['fqdn'],
|
||||||
|
meta=meta)
|
||||||
|
|
||||||
|
self.env.make_snapshot('reboot_cpu_pinning_compute')
|
||||||
|
Loading…
Reference in New Issue
Block a user