Revert "Add workaround for the race between creating rooter and booting vm"
This reverts commit a39fc56e27
.
Reason for revert: It brakes many US/DS jobs
Change-Id: I299854fda6ae32c821a3c8992d207a4ec9dfe486
This commit is contained in:
parent
d8bea57ae9
commit
b25c50d2ad
@ -29,8 +29,6 @@ heat_template_file = _template.heat_template_file
|
|||||||
HeatTemplateFixture = _template.HeatTemplateFixture
|
HeatTemplateFixture = _template.HeatTemplateFixture
|
||||||
HeatTemplateFileFixture = _template.HeatTemplateFileFixture
|
HeatTemplateFileFixture = _template.HeatTemplateFileFixture
|
||||||
|
|
||||||
InvalidStackError = _stack.InvalidStackError
|
|
||||||
|
|
||||||
HeatStackFixture = _stack.HeatStackFixture
|
HeatStackFixture = _stack.HeatStackFixture
|
||||||
heat_stack_parameters = _stack.heat_stack_parameters
|
heat_stack_parameters = _stack.heat_stack_parameters
|
||||||
INIT_IN_PROGRESS = _stack.INIT_IN_PROGRESS
|
INIT_IN_PROGRESS = _stack.INIT_IN_PROGRESS
|
||||||
|
@ -247,52 +247,9 @@ class ServerStackFixture(heat.HeatStackFixture, abc.ABC):
|
|||||||
retry_create = 3
|
retry_create = 3
|
||||||
expected_creted_status = {heat.CREATE_COMPLETE}
|
expected_creted_status = {heat.CREATE_COMPLETE}
|
||||||
|
|
||||||
#: String which is used to check if guest OS booting process was finished
|
|
||||||
booting_end_pattern = "login:"
|
|
||||||
guest_boot_timeout = 600 # seconds
|
|
||||||
|
|
||||||
def wait_for_guest_boot_finished(self):
|
|
||||||
# NOTE(slaweq): in that simple check we can look for something like
|
|
||||||
# "login:" in the console log. If this is already there, it means
|
|
||||||
# that vm was booted properly already
|
|
||||||
for attempt in tobiko.retry(timeout=self.guest_boot_timeout,
|
|
||||||
interval=1):
|
|
||||||
if self.booting_end_pattern in self.console_output:
|
|
||||||
return
|
|
||||||
LOG.debug(f"Server {self.server_id} seems that is not boot yet")
|
|
||||||
if attempt.is_last:
|
|
||||||
raise heat.InvalidStackError(
|
|
||||||
f"Server {self.server_id} didn't boot properly.")
|
|
||||||
|
|
||||||
def validate_created_stack(self):
|
def validate_created_stack(self):
|
||||||
stack = super(ServerStackFixture, self).validate_created_stack()
|
stack = super(ServerStackFixture, self).validate_created_stack()
|
||||||
self.validate_scheduler_hints()
|
self.validate_scheduler_hints()
|
||||||
if not self.config_drive:
|
|
||||||
# NOTE(slaweq): Because of the bug
|
|
||||||
# https://bugs.launchpad.net/neutron/+bug/1813787 there can be
|
|
||||||
# race condition between Neutron L3 agent and VM boot. As a result
|
|
||||||
# VM can be booted and tries to get e.g. ssh-key from the metadata
|
|
||||||
# service before router is really ready and can provide metadata
|
|
||||||
# for that VM.
|
|
||||||
# As a workaround for that issue for now, Tobiko checks if guest
|
|
||||||
# OS boot finished and checks if SSH to the VM is possible.
|
|
||||||
# If booting was finished but SSH isn't possible it will reboot VM.
|
|
||||||
# If we hit the issue from the bug
|
|
||||||
# https://bugs.launchpad.net/neutron/+bug/1813787 during reboot of
|
|
||||||
# the VM, ssh-key should be properly configured inside VM as
|
|
||||||
# metadata service should be already available in the Neutron's
|
|
||||||
# router.
|
|
||||||
try:
|
|
||||||
self.wait_for_guest_boot_finished()
|
|
||||||
except heat.InvalidStackError:
|
|
||||||
return
|
|
||||||
if not self.ssh_works():
|
|
||||||
LOG.warning(
|
|
||||||
f"SSH to the server '{self.server_id}' is not "
|
|
||||||
f"working properly. Trying to reboot VM to "
|
|
||||||
f"check if it is maybe caused by the bug "
|
|
||||||
f"https://bugs.launchpad.net/neutron/+bug/1813787")
|
|
||||||
nova.reboot_server(self.server_id)
|
|
||||||
return stack
|
return stack
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -425,15 +382,6 @@ class ServerStackFixture(heat.HeatStackFixture, abc.ABC):
|
|||||||
ssh_client=ssh_client,
|
ssh_client=ssh_client,
|
||||||
timeout=timeout)
|
timeout=timeout)
|
||||||
|
|
||||||
def ssh_works(self):
|
|
||||||
try:
|
|
||||||
# We don't need to retry many times or wait long time for this,
|
|
||||||
# it either works as it should or not
|
|
||||||
self.ssh_client.connect(retry_count=1, retry_timeout=5)
|
|
||||||
return True
|
|
||||||
except Exception:
|
|
||||||
return False
|
|
||||||
|
|
||||||
user_data = None
|
user_data = None
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user