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:
parent
7ad2dedc60
commit
c468c7cc39
@ -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'])
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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")
|
||||
|
@ -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()
|
||||
|
@ -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',
|
||||
|
@ -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)
|
||||
|
@ -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': [
|
||||
|
@ -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__,
|
||||
|
@ -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")
|
||||
|
@ -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(
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user