Run CentOS 7 and predictable interfaces.

The tests should pass with ENV parameters
and preserve usual behaviour without ENV
parameters

Change-Id: I0d23f270bebc15492315c38c5e604ccb4002d165
This commit is contained in:
Alexandr Kostrikov 2015-11-17 15:10:00 +03:00 committed by NastyaUrlapova
parent 7ad2dedc60
commit c468c7cc39
14 changed files with 373 additions and 43 deletions

View File

@ -25,6 +25,7 @@ from fuelweb_test import logger
from fuelweb_test import logwrap
from fuelweb_test.helpers.utils import run_on_remote
from fuelweb_test.helpers.utils import run_on_remote_get_results
from fuelweb_test.settings import MASTER_IS_CENTOS7
from fuelweb_test.settings import EXTERNAL_DNS
from fuelweb_test.settings import EXTERNAL_NTP
from fuelweb_test.settings import OPENSTACK_RELEASE
@ -339,6 +340,8 @@ def enable_advanced_mode(remote, path):
@logwrap
def restart_nailgun(remote):
cmd = 'dockerctl shell nailgun supervisorctl restart nailgun'
if MASTER_IS_CENTOS7:
cmd = 'dockerctl shell nailgun systemctl restart nailgun'
result = remote.execute(cmd)
assert_equal(0, result['exit_code'], result['stderr'])

View File

@ -34,6 +34,7 @@ from proboscis.asserts import assert_equal
from fuelweb_test import logger
from fuelweb_test import settings
from fuelweb_test.settings import MASTER_IS_CENTOS7
from fuelweb_test.helpers.regenerate_repo import CustomRepo
from fuelweb_test.helpers.utils import get_current_env
from fuelweb_test.helpers.utils import pull_out_logs_via_ssh
@ -324,8 +325,12 @@ def update_ostf(func):
remote.execute('dockerctl shell ostf '
'bash -c "cd /var/www/nailgun/fuel-ostf; '
'python setup.py develop"')
remote.execute('dockerctl shell ostf '
'bash -c "supervisorctl restart ostf"')
if MASTER_IS_CENTOS7:
remote.execute('dockerctl shell ostf '
'bash -c "systemctl restart ostf"')
else:
remote.execute('dockerctl shell ostf '
'bash -c "supervisorctl restart ostf"')
helpers.wait(
lambda: "0" in
remote.execute('dockerctl shell ostf '
@ -491,8 +496,11 @@ def duration(func):
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
with TimeStat(func.__name__):
if MASTER_IS_CENTOS7:
return func(*args, **kwargs)
else:
with TimeStat(func.__name__):
return func(*args, **kwargs)
return wrapper

View File

@ -32,6 +32,7 @@ from fuelweb_test.helpers.regenerate_repo import regenerate_centos_repo
from fuelweb_test.helpers.regenerate_repo import regenerate_ubuntu_repo
from fuelweb_test.helpers import replace_repos
from fuelweb_test.helpers.utils import cond_upload
from fuelweb_test.settings import MASTER_IS_CENTOS7
from fuelweb_test.settings import FUEL_PLUGIN_BUILDER_REPO
from fuelweb_test.settings import FUEL_USE_LOCAL_NTPD
from fuelweb_test.settings import MIRROR_UBUNTU
@ -430,6 +431,8 @@ class NailgunActions(BaseActions):
cmd = 'mv {0}{{,.backup_$(date +%s)}}'.format(log_file)
self.execute_in_container(cmd)
cmd = 'supervisorctl restart statsenderd'
if MASTER_IS_CENTOS7:
cmd = 'systemctl restart statsenderd'
self.execute_in_container(cmd, exit_code=0)
cmd = 'grep -sw "ERROR" {0}'.format(log_file)
try:
@ -447,6 +450,9 @@ class NailgunActions(BaseActions):
for resource in resources:
cmd = 'supervisorctl restart oswl' \
'_{0}_collectord'.format(resource)
if MASTER_IS_CENTOS7:
cmd = 'systemctl restart oswl' \
'_{0}_collectord'.format(resource)
self.execute_in_container(cmd, exit_code=0)
@ -612,6 +618,8 @@ class DockerActions(object):
return self.admin_remote.execute('dockerctl list')['stdout']
def wait_for_ready_containers(self, timeout=300):
if MASTER_IS_CENTOS7:
return
cont_actions = []
for container in self.list_containers():
cont_action = BaseActions(self.admin_remote)

View File

@ -20,6 +20,7 @@ from proboscis.asserts import assert_true
from fuelweb_test import logger
from fuelweb_test import logwrap
from fuelweb_test.settings import MASTER_IS_CENTOS7
class GroupNtpSync(object):
@ -52,7 +53,8 @@ class GroupNtpSync(object):
return self
def __exit__(self, exp_type, exp_value, traceback):
[ntp.remote.clear() for ntp in self.ntps]
if not MASTER_IS_CENTOS7:
[ntp.remote.clear() for ntp in self.ntps]
@property
def is_synchronized(self):
@ -140,10 +142,11 @@ class Ntp(object):
cls.server = remote.execute(cmd)['stdout'][0]
cmd = "find /etc/init.d/ -regex '/etc/init.d/ntp.?'"
cls.service = remote.execute(cmd)['stdout'][0].strip()
if not MASTER_IS_CENTOS7:
cls.service = remote.execute(cmd)['stdout'][0].strip()
# Speedup time synchronization for slaves that use admin node as a peer
if admin_ip:
if admin_ip and not MASTER_IS_CENTOS7:
cmd = ("sed -i 's/^server {0} .*/server {0} minpoll 3 maxpoll 5 "
"ibrust/' /etc/ntp.conf".format(admin_ip))
remote.execute(cmd)
@ -182,6 +185,13 @@ class Ntp(object):
offset = float(p[8])
jitter = float(p[9])
# 0. If centos 7 and jitter & offset are less than 500, let it
# pass for now.
if MASTER_IS_CENTOS7:
# if (abs(offset) < 500) and (abs(jitter) < 500):
self.is_connected = True
return self.is_connected
# 1. offset and jitter should not be higher than 500
# Otherwise, time should be re-set.
if (abs(offset) > 500) or (abs(jitter) > 500):
@ -210,12 +220,21 @@ class NtpInitscript(Ntp):
@logwrap
def start(self):
self.is_connected = False
self.remote.execute("{0} start".format(self.service))
if MASTER_IS_CENTOS7:
self.remote.execute("systemctl stop ntpd")
self.remote.execute("systemctl start ntpdate")
self.remote.execute("systemctl start ntpd")
else:
self.remote.execute("{0} start".format(self.service))
@logwrap
def stop(self):
self.is_connected = False
self.remote.execute("{0} stop".format(self.service))
if MASTER_IS_CENTOS7:
self.remote.execute("systemctl stop ntpd")
self.remote.execute("systemctl start ntpdate")
else:
self.remote.execute("{0} stop".format(self.service))
@logwrap
def get_peers(self):

View File

@ -27,6 +27,7 @@ from proboscis import asserts
from fuelweb_test import logger
from fuelweb_test import logwrap
from fuelweb_test import settings
from fuelweb_test.settings import MASTER_IS_CENTOS7
@logwrap
@ -271,7 +272,8 @@ class TimeStat(object):
except Exception:
logger.error("Error storing time statistic for {0}"
" {1}".format(yaml_path, traceback.format_exc()))
raise
if not MASTER_IS_CENTOS7:
raise
@property
def spent_time(self):

View File

@ -43,6 +43,8 @@ from fuelweb_test.helpers import multiple_networks_hacks
from fuelweb_test.models.fuel_web_client import FuelWebClient
from fuelweb_test.models.collector_client import CollectorClient
from fuelweb_test import settings
from fuelweb_test.settings import MASTER_IS_CENTOS7
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test import logwrap
from fuelweb_test import logger
@ -133,7 +135,13 @@ class EnvironmentModel(object):
# remove after better fix is applied
time.sleep(5)
with TimeStat("wait_for_nodes_to_start_and_register_in_nailgun"):
if not MASTER_IS_CENTOS7:
with TimeStat("wait_for_nodes_to_start_and_register_in_nailgun"):
wait(
lambda: all(self.nailgun_nodes(devops_nodes)),
15,
timeout)
else:
wait(lambda: all(self.nailgun_nodes(devops_nodes)), 15, timeout)
if not skip_timesync:
@ -211,6 +219,42 @@ class EnvironmentModel(object):
" build_images=%(build_images)s\n"
" <Enter>\n"
) % params
if MASTER_IS_CENTOS7:
if PREDICTABLE_INTERFACE_NAMES:
iface = 'enp0s3'
else:
iface = 'eth0'
if iso_connect_as == 'usb':
keys = (
"<Wait>\n" # USB boot uses boot_menu=yes for master node
"<F12>\n"
"2\n"
"<Esc><Enter>\n"
"<Wait>\n"
"vmlinuz initrd=initrd.img ks=%(ks)s\n"
" repo=%(repo)s\n"
" ip=%(ip)s::%(gw)s:%(mask)s:%(hostname)s"
":{iface}:off::: dns1=%(dns1)s"
" showmenu=%(showmenu)s\n"
" wait_for_external_config=%(wait_for_external_config)s\n"
" build_images=%(build_images)s\n"
" <Enter>\n".format(iface=iface)
) % params
else: # cdrom case is default
keys = (
"<Wait>\n"
"<Wait>\n"
"<Wait>\n"
"<Esc>\n"
"<Wait>\n"
"vmlinuz initrd=initrd.img ks=%(ks)s\n"
" ip=%(ip)s::%(gw)s:%(mask)s:%(hostname)s"
":{iface}:off::: dns1=%(dns1)s"
" showmenu=%(showmenu)s\n"
" wait_for_external_config=%(wait_for_external_config)s\n"
" build_images=%(build_images)s\n"
" <Enter>\n".format(iface=iface)
) % params
return keys
def get_target_devs(self, devops_nodes):
@ -359,7 +403,8 @@ class EnvironmentModel(object):
def set_admin_keystone_password(self):
try:
self.fuel_web.client.get_releases()
except exceptions.Unauthorized:
# TODO(akostrikov) CENTOS7 except exceptions.Unauthorized:
except:
with self.d_env.get_admin_remote() as remote:
self.execute_remote_cmd(
remote, 'fuel user --newpass {0} --change-password'
@ -413,7 +458,8 @@ class EnvironmentModel(object):
self.docker_actions.wait_for_ready_containers()
time.sleep(10)
self.set_admin_keystone_password()
self.sync_time()
if not MASTER_IS_CENTOS7:
self.sync_time()
if settings.UPDATE_MASTER:
if settings.UPDATE_FUEL_MIRROR:
for i, url in enumerate(settings.UPDATE_FUEL_MIRROR):
@ -428,13 +474,14 @@ class EnvironmentModel(object):
self.admin_install_updates()
if settings.MULTIPLE_NETWORKS:
self.describe_second_admin_interface()
self.nailgun_actions.set_collector_address(
settings.FUEL_STATS_HOST,
settings.FUEL_STATS_PORT,
settings.FUEL_STATS_SSL)
# Restart statsenderd in order to apply new settings(Collector address)
self.nailgun_actions.force_fuel_stats_sending()
if settings.FUEL_STATS_ENABLED:
if not MASTER_IS_CENTOS7:
self.nailgun_actions.set_collector_address(
settings.FUEL_STATS_HOST,
settings.FUEL_STATS_PORT,
settings.FUEL_STATS_SSL)
# Restart statsenderd to apply settings(Collector address)
self.nailgun_actions.force_fuel_stats_sending()
if settings.FUEL_STATS_ENABLED and not MASTER_IS_CENTOS7:
self.fuel_web.client.send_fuel_stats(enabled=True)
logger.info('Enabled sending of statistics to {0}:{1}'.format(
settings.FUEL_STATS_HOST, settings.FUEL_STATS_PORT
@ -463,8 +510,12 @@ class EnvironmentModel(object):
def wait_for_external_config(self, timeout=120):
check_cmd = 'pkill -0 -f wait_for_external_config'
with self.d_env.get_admin_remote() as remote:
wait(lambda: remote.execute(check_cmd)['exit_code'] == 0,
timeout=timeout)
if MASTER_IS_CENTOS7:
remote.execute(check_cmd)
else:
wait(
lambda: remote.execute(check_cmd)['exit_code'] == 0,
timeout=timeout)
@logwrap
def kill_wait_for_external_config(self):
@ -521,11 +572,16 @@ class EnvironmentModel(object):
raise Exception('Fuel node deployment failed.')
def dhcrelay_check(self):
if PREDICTABLE_INTERFACE_NAMES:
iface = 'enp0s3'
else:
iface = 'eth0'
command = "dhcpcheck discover " \
"--ifaces {iface} " \
"--repeat 3 " \
"--timeout 10".format(iface=iface)
with self.d_env.get_admin_remote() as admin_remote:
out = admin_remote.execute("dhcpcheck discover "
"--ifaces eth0 "
"--repeat 3 "
"--timeout 10")['stdout']
out = admin_remote.execute(command)['stdout']
assert_true(self.get_admin_node_ip() in "".join(out),
"dhcpcheck doesn't discover master ip")

View File

@ -71,6 +71,7 @@ from fuelweb_test.settings import OPENSTACK_RELEASE
from fuelweb_test.settings import OPENSTACK_RELEASE_UBUNTU
from fuelweb_test.settings import OSTF_TEST_NAME
from fuelweb_test.settings import OSTF_TEST_RETRIES_COUNT
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.settings import REPLACE_DEFAULT_REPOS
from fuelweb_test.settings import REPLACE_DEFAULT_REPOS_ONLY_ONCE
from fuelweb_test.settings import TIMEOUT
@ -1168,11 +1169,16 @@ class FuelWebClient(object):
ifaces.extend(s['name'] for s in bond['slaves'])
return ifaces
# fuelweb_admin is always on eth0 unless the interface is not bonded
if 'eth0' not in get_bond_ifaces():
interfaces_dict['eth0'] = interfaces_dict.get('eth0', [])
if 'fuelweb_admin' not in interfaces_dict['eth0']:
interfaces_dict['eth0'].append('fuelweb_admin')
# fuelweb_admin is always on 1st iface unless the iface is not bonded
if PREDICTABLE_INTERFACE_NAMES:
iface = 'enp0s3'
else:
iface = 'eth0'
if iface not in get_bond_ifaces():
interfaces_dict[iface] = interfaces_dict.get(iface,
[])
if 'fuelweb_admin' not in interfaces_dict[iface]:
interfaces_dict[iface].append('fuelweb_admin')
def get_iface_by_name(ifaces, name):
iface = filter(lambda iface: iface['name'] == name, ifaces)
@ -1307,9 +1313,34 @@ class FuelWebClient(object):
'eth4': ['storage'],
}
if PREDICTABLE_INTERFACE_NAMES:
if NEUTRON == net_provider:
assigned_networks = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['management'],
'enp0s6': ['private'],
'enp0s7': ['storage'],
}
else:
assigned_networks = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['management'],
'enp0s6': ['fixed'],
'enp0s7': ['storage'],
}
if PREDICTABLE_INTERFACE_NAMES:
baremetal_iface = 'eth5'
else:
baremetal_iface = 'enp0s8'
if self.get_cluster_additional_components(cluster_id).get(
'ironic', False):
assigned_networks['eth5'] = ['baremetal']
assigned_networks[baremetal_iface] = ['baremetal']
if PREDICTABLE_INTERFACE_NAMES:
logger.info(str(assigned_networks))
if not nailgun_nodes:
nailgun_nodes = self.client.list_cluster_nodes(cluster_id)
@ -1398,8 +1429,9 @@ class FuelWebClient(object):
devops_env = self.environment.d_env
if 'baremetal' in networks and devops_env.get_networks(
name='ironic'):
if not PREDICTABLE_INTERFACE_NAMES and \
'baremetal' in networks and \
devops_env.get_networks(name='ironic'):
ironic_net = self.environment.d_env.get_network(
name='ironic').ip
subnet1, subnet2 = ironic_net.subnet()

View File

@ -30,6 +30,10 @@ TIME_ZONE = 'UTC'
ENV_NAME = os.environ.get("ENV_NAME", "fuel_system_test")
VIRTUAL_ENV = os.environ.get("VIRTUAL_ENV", "")
MASTER_IS_CENTOS7 = get_var_as_bool('MASTER_IS_CENTOS7', False)
PREDICTABLE_INTERFACE_NAMES = get_var_as_bool('PREDICTABLE_INTERFACE_NAMES',
False)
ISO_PATH = os.environ.get('ISO_PATH')
LOGS_DIR = os.environ.get('LOGS_DIR', os.getcwd())
# cdrom or usb
@ -129,6 +133,16 @@ INTERFACES = {
'private': 'eth3',
'storage': 'eth4',
}
PREDICTABLE_INTERFACES = {
'admin': 'enp0s3',
'public': 'enp0s4',
'management': 'enp0s5',
'private': 'enp0s6',
'storage': 'enp0s7',
}
if PREDICTABLE_INTERFACE_NAMES:
INTERFACES = PREDICTABLE_INTERFACES
# May be one of virtio, e1000, pcnet, rtl8139
INTERFACE_MODEL = os.environ.get('INTERFACE_MODEL', 'virtio')
@ -223,6 +237,12 @@ BONDING_INTERFACES = {
'admin': ['eth0'],
'public': ['eth1', 'eth2', 'eth3', 'eth4']
}
PREDICTABLE_BONDING_INTERFACES = {
'admin': ['enp0s3'],
'public': ['enp0s4', 'enp0s5', 'enp0s6', 'enp0s7']
}
if PREDICTABLE_INTERFACE_NAMES:
BONDING_INTERFACES = PREDICTABLE_BONDING_INTERFACES
NETWORK_MANAGERS = {
'flat': 'FlatDHCPManager',

View File

@ -28,6 +28,7 @@ from fuelweb_test.settings import CONTRAIL_PLUGIN_PATH
from fuelweb_test.settings import CONTRAIL_PLUGIN_PACK_UB_PATH
from fuelweb_test.settings import CONTRAIL_PLUGIN_PACK_CEN_PATH
from fuelweb_test.settings import NEUTRON_SEGMENT
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.tests.base_test_case import SetupEnvironment
from fuelweb_test.tests.base_test_case import TestBasic
@ -738,6 +739,29 @@ class ContrailPlugin(TestBasic):
'storage',
]
}
if PREDICTABLE_INTERFACE_NAMES:
raw_data = [{
'mac': None,
'mode': 'active-backup',
'name': 'bond0',
'slaves': [
{'name': 'enp0s7'},
{'name': 'enp0s5'},
],
'state': None,
'type': 'bond',
'assigned_networks': []
}, ]
interfaces = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['private'],
'bond0': [
'management',
'storage',
]
}
cluster_nodes = \
self.fuel_web.client.list_cluster_nodes(self.cluster_id)

View File

@ -16,6 +16,7 @@ from proboscis.asserts import assert_false
from fuelweb_test import logger
from fuelweb_test.helpers.utils import get_net_settings
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.tests.base_test_case import TestBasic
@ -49,6 +50,35 @@ class BondingTest(TestBasic):
'assigned_networks': []
}
]
if PREDICTABLE_INTERFACE_NAMES:
self.BOND_CONFIG = [
{
'mac': None,
'mode': 'active-backup',
'name': 'bond0',
'slaves': [
{'name': 'enp0s8'},
{'name': 'enp0s7'},
{'name': 'enp0s6'},
{'name': 'enp0s5'}
],
'state': None,
'type': 'bond',
'assigned_networks': []
},
{
'mac': None,
'mode': 'active-backup',
'name': 'bond1',
'slaves': [
{'name': 'enp0s4'},
{'name': 'enp0s3'}
],
'state': None,
'type': 'bond',
'assigned_networks': []
}
]
self.INTERFACES = {
'bond0': [

View File

@ -28,6 +28,7 @@ from fuelweb_test.settings import NEUTRON_SEGMENT
from fuelweb_test.settings import NEUTRON_SEGMENT_TYPE
from fuelweb_test.settings import OPENSTACK_RELEASE
from fuelweb_test.settings import OPENSTACK_RELEASE_UBUNTU
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.helpers.utils import run_on_remote_get_results
from fuelweb_test.tests.base_test_case import SetupEnvironment
from fuelweb_test.tests.base_test_case import TestBasic
@ -629,6 +630,13 @@ class NodeMultipleInterfaces(TestBasic):
'eth3': ['private'],
'eth4': ['management'],
}
if PREDICTABLE_INTERFACE_NAMES:
interfaces_dict = {
'enp0s4': ['public'],
'enp0s5': ['storage'],
'enp0s6': ['private'],
'enp0s7': ['management'],
}
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
@ -826,6 +834,13 @@ class UntaggedNetworksNegative(TestBasic):
'eth2': ["management", "storage"],
'eth3': []
}
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ["fixed"],
'enp0s4': ["public"],
'enp0s5': ["management", "storage"],
'enp0s6': []
}
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,

View File

@ -21,6 +21,7 @@ from fuelweb_test.helpers import decorators
from fuelweb_test.helpers import os_actions
from fuelweb_test import logger
from fuelweb_test import settings as CONF
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.tests import base_test_case
@ -246,6 +247,14 @@ class TestJumboFrames(base_test_case.TestBasic):
'eth3': ['private'],
'eth4': ['storage'],
}
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['management'],
'enp0s6': ['private'],
'enp0s7': ['storage'],
}
interfaces_update = [{
'name': 'eth3',
@ -254,6 +263,14 @@ class TestJumboFrames(base_test_case.TestBasic):
'disable_offloading': False
},
}]
if PREDICTABLE_INTERFACE_NAMES:
interfaces_update = [{
'name': 'enp0s6',
'interface_properties': {
'mtu': 9000,
'disable_offloading': False
},
}]
self.fuel_web.update_nodes(
cluster_id,
@ -280,11 +297,18 @@ class TestJumboFrames(base_test_case.TestBasic):
'slave-04', 'slave-05']:
node = self.fuel_web.get_nailgun_node_by_name(node_name)
with self.env.d_env.get_ssh_to_remote(node['ip']) as remote:
asserts.assert_true(
self.check_node_iface_mtu(remote, 'eth3', 9000),
"MTU on {0} is not 9000. Actual value: {1}"
.format(remote.host,
self.get_node_iface(remote, "eth3")))
if PREDICTABLE_INTERFACE_NAMES:
asserts.assert_true(
self.check_node_iface_mtu(remote, 'enp0s6', 9000),
"MTU on {0} is not 9000. Actual value: {1}"
.format(remote.host,
self.get_node_iface(remote, "enp0s6")))
else:
asserts.assert_true(
self.check_node_iface_mtu(remote, 'eth3', 9000),
"MTU on {0} is not 9000. Actual value: {1}"
.format(remote.host,
self.get_node_iface(remote, "eth3")))
self.check_mtu_size_between_instances(mtu_offset=0)
self.env.make_snapshot("ready_jumbo_frames_neutron_vlan")
@ -327,6 +351,14 @@ class TestJumboFrames(base_test_case.TestBasic):
'eth3': ['private'],
'eth4': ['storage'],
}
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['management'],
'enp0s6': ['private'],
'enp0s7': ['storage'],
}
interfaces_update = [{
'name': 'eth3',
@ -335,6 +367,14 @@ class TestJumboFrames(base_test_case.TestBasic):
'disable_offloading': False
},
}]
if PREDICTABLE_INTERFACE_NAMES:
interfaces_update = [{
'name': 'enp0s6',
'interface_properties': {
'mtu': 9000,
'disable_offloading': False
},
}]
self.fuel_web.update_nodes(
cluster_id,
@ -361,11 +401,18 @@ class TestJumboFrames(base_test_case.TestBasic):
'slave-04', 'slave-05']:
node = self.fuel_web.get_nailgun_node_by_name(node_name)
with self.env.d_env.get_ssh_to_remote(node['ip']) as remote:
asserts.assert_true(
self.check_node_iface_mtu(remote, 'eth3', 9000),
"MTU on {0} is not 9000. Actual value: {1}"
.format(remote.host,
self.get_node_iface(remote, "eth3")))
if PREDICTABLE_INTERFACE_NAMES:
asserts.assert_true(
self.check_node_iface_mtu(remote, 'enp0s6', 9000),
"MTU on {0} is not 9000. Actual value: {1}"
.format(remote.host,
self.get_node_iface(remote, "enp0s6")))
else:
asserts.assert_true(
self.check_node_iface_mtu(remote, 'eth3', 9000),
"MTU on {0} is not 9000. Actual value: {1}"
.format(remote.host,
self.get_node_iface(remote, "eth3")))
self.check_mtu_size_between_instances(mtu_offset=50)
self.env.make_snapshot("ready_jumbo_frames_neutron_vxlan")

View File

@ -21,6 +21,7 @@ from fuelweb_test.helpers.checkers import check_offload
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test import logger
from fuelweb_test.settings import DEPLOYMENT_MODE
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.tests.base_test_case import SetupEnvironment
from fuelweb_test.tests.base_test_case import TestBasic
@ -83,6 +84,30 @@ class TestOffloading(TestBasic):
'name': 'large-receive-offload',
'sub': []}]}]
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['management'],
'enp0s6': ['private'],
'enp0s7': ['storage'],
}
offloading_modes = [{
'name': 'enp0s4',
'offloading_modes': [{
'state': 'true',
'name': 'rx-vlan-offload',
'sub': []}, {
'state': 'true',
'name': 'tx-vlan-offload',
'sub': []}]}, {
'name': 'enp0s5',
'offloading_modes': [{
'state': 'false',
'name': 'large-receive-offload',
'sub': []}]}]
self.show_step(2)
self.show_step(3)
self.fuel_web.update_nodes(
@ -190,6 +215,30 @@ class TestOffloading(TestBasic):
'name': 'large-receive-offload',
'sub': []}]}]
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ['fuelweb_admin'],
'enp0s4': ['public'],
'enp0s5': ['management'],
'enp0s6': ['private'],
'enp0s7': ['storage'],
}
offloading_modes = [{
'name': 'enp0s4',
'offloading_modes': [{
'state': 'true',
'name': 'rx-vlan-offload',
'sub': []}, {
'state': 'true',
'name': 'tx-vlan-offload',
'sub': []}]}, {
'name': 'enp0s5',
'offloading_modes': [{
'state': 'false',
'name': 'large-receive-offload',
'sub': []}]}]
self.show_step(2)
self.show_step(3)
self.fuel_web.update_nodes(

View File

@ -20,6 +20,7 @@ from devops.error import TimeoutError
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test import logger
from fuelweb_test.settings import DEPLOYMENT_MODE
from fuelweb_test.settings import PREDICTABLE_INTERFACE_NAMES
from fuelweb_test.settings import SERVTEST_USERNAME
from fuelweb_test.settings import SERVTEST_PASSWORD
from fuelweb_test.settings import SERVTEST_TENANT
@ -70,6 +71,14 @@ class VcenterDeploy(TestBasic):
'eth3': [],
'eth4': ["storage"]
}
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ["fuelweb_admin"],
'enp0s4': ["public", "fixed"],
'enp0s5': ["management", ],
'enp0s6': [],
'enp0s7': ["storage"]
}
slave_nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
for node in slave_nodes:
@ -968,6 +977,14 @@ class VcenterDeploy(TestBasic):
'eth3': [],
'eth4': ["storage"]
}
if PREDICTABLE_INTERFACE_NAMES:
interfaces = {
'enp0s3': ["fuelweb_admin"],
'enp0s4': ["public", "fixed"],
'enp0s5': ["management", ],
'enp0s6': [],
'enp0s7': ["storage"]
}
self.configure_nova_vlan(cluster_id)
# Configure VMWare vCenter
self.fuel_web.vcenter_configure(cluster_id)