Revert "Handle defined containers that are stopped."

It is causing some containers (memcached) to be re-created at
every run, with the unique name. We need to rework the code
as well as it's breaking pacemaker-managed containers.
This reverts commit 85fb2ed4d3.

Change-Id: I22d3eb35dced8178fe6beb0c76c855746efdf94d
(cherry picked from commit bd400ccd81)
This commit is contained in:
Emilien Macchi 2019-08-27 23:20:53 +00:00
parent 17a7432947
commit 2124295c6a
2 changed files with 13 additions and 87 deletions

View File

@ -40,18 +40,19 @@ class BaseBuilder(object):
stdout = []
stderr = []
pull_returncode = self.pull_missing_images(stdout, stderr)
if pull_returncode != 0:
return stdout, stderr, pull_returncode
self.delete_missing_and_updated()
deploy_status_code = 0
key_fltr = lambda k: self.config[k].get('start_order', 0)
container_names = self.runner.container_names(self.config_id)
desired_names = set([cn[-1] for cn in container_names])
for container in sorted(self.config, key=key_fltr):
self.log.debug("Apply for container {}.".format(container))
self.log.debug("Running container: %s" % container)
cconfig = self.config[container]
action = cconfig.get('action', 'run')
restart = cconfig.get('restart', 'none')
@ -61,7 +62,6 @@ class BaseBuilder(object):
and self.runner.cont_cmd == 'podman'
and action == 'run')
start_cmd = 'create' if systemd_managed else 'run'
cmd = []
# When upgrading from Docker to Podman, we want to stop the
# container that runs under Docker first before starting it with
@ -70,32 +70,11 @@ class BaseBuilder(object):
if self.runner.cont_cmd == 'podman' and self.which('docker'):
self.runner.stop_container(container, 'docker', quiet=True)
self.log.debug("Apply action {} for container {}.".format(
action, container))
if action == 'run':
if container in desired_names:
discover_container = self.runner.discover_container_name(
container, self.config_id)
inspect_container = self.runner.inspect(discover_container)
try:
self.log.debug("Container running state for %s: %s." %
(container,
inspect_container["State"]["Running"]))
except Exception:
self.log.warn("Unable to find the container state" +
" for %s." % container)
if inspect_container["State"]["Running"]:
self.log.debug("Container %s is already running." %
container)
continue
else:
self.log.debug("Deleting stopped container %s." %
container)
self.runner.remove_container(container)
self.log.debug('Skipping existing container: %s' %
container)
continue
cmd = [
self.runner.cont_cmd,
@ -103,8 +82,8 @@ class BaseBuilder(object):
'--name',
container_name
]
self.label_arguments(cmd, container)
self.log.debug("Start container {}.".format(container))
validations_passed = self.container_run_args(cmd,
container,
container_name)
@ -135,11 +114,11 @@ class BaseBuilder(object):
(cmd_stdout, cmd_stderr, returncode) = self.runner.execute(
cmd, self.log)
if cmd_stdout:
stdout.append(cmd_stdout)
if cmd_stderr:
stderr.append(cmd_stderr)
if returncode not in exit_codes:
self.log.error("Error running %s. [%s]\n" % (cmd, returncode))
self.log.error("stdout: %s" % cmd_stdout)

View File

@ -217,11 +217,11 @@ three-12345678 three''', '', 0),
('', '', 0),
# rm six
('', '', 0),
# inspect config data for two, we made it changed
# inspect two
('{"start_order": 1, "image": "centos:6"}', '', 0),
# rm two
# rm two, changed config data
('', '', 0),
# inspect config data for three
# inspect three
('{"start_order": 2, "image": "centos:7"}', '', 0),
# ps for after delete_missing_and_updated renames
('', '', 0),
@ -229,10 +229,8 @@ three-12345678 three''', '', 0),
('three-12345678 three', '', 0),
('Created one-12345678', '', 0),
('Created two-12345678', '', 0),
# inspect state for three
('[{"State": {"Running": true}}]', '', 0),
('Created four-12345678', '', 0),
('a\nb\nc', '', 0),
('a\nb\nc', '', 0)
]
r.discover_container_name = lambda n, c: '%s-12345678' % n
r.unique_container_name = lambda n: '%s-12345678' % n
@ -248,6 +246,7 @@ three-12345678 three''', '', 0),
'a\nb\nc'
], stdout)
self.assertEqual([], stderr)
exe.assert_has_calls([
# inspect image centos:7
mock.call(
@ -307,9 +306,6 @@ three-12345678 three''', '', 0),
'--label', 'config_data=%s' % json.dumps(config['two']),
'--detach=true', 'centos:7'], mock.ANY
),
# check container three status via inspect
mock.call(['docker', 'inspect', '--type', 'container',
'three-12345678'], mock.ANY, False),
# don't run three, its already running
# run four
mock.call(
@ -537,52 +533,3 @@ three-12345678 three''', '', 0),
['ls', '-l', '"/foo', 'bar"'],
b.command_argument('ls -l "/foo bar"')
)
@mock.patch('paunch.runner.DockerRunner.execute')
@mock.patch('paunch.runner.DockerRunner.remove_container')
@mock.patch('paunch.builder.base.BaseBuilder.pull_missing_images')
@mock.patch('paunch.builder.base.BaseBuilder.delete_missing_and_updated')
@mock.patch('paunch.runner.DockerRunner.container_names')
@mock.patch('paunch.runner.DockerRunner.unique_container_name')
@mock.patch('paunch.runner.DockerRunner.discover_container_name')
@mock.patch('paunch.runner.DockerRunner.inspect')
def test_recreate_stopped_container(self, inspect, discover_container_name,
unique_container_name, container_names,
delete_missing_and_updated,
pull_missing_images, remove_container,
execute):
orig_call = tenacity.wait.wait_random_exponential.__call__
orig_argspec = inspect.getargspec(orig_call)
config = {
# not running yet
'one': {
'start_order': 0,
'image': 'centos:7'
}
}
r = runner.DockerRunner(managed_by='tester', cont_cmd='docker')
with mock.patch('tenacity.wait.wait_random_exponential.__call__') as f:
f.return_value = 0
with mock.patch('inspect.getargspec') as mock_args:
mock_args.return_value = orig_argspec
builder = compose1.ComposeV1Builder('foo', config, r)
pull_missing_images.return_value = 0
# No value is returned
delete_missing_and_updated.return_value = None
container_names.return_value = [['one', 'one']]
unique_container_name.return_value = 'one'
# This can be a no-op since inspect_container() uses this return value
# and that will also be overridden.
discover_container_name.return_value = None
inspect.return_value = {"State": {"Running": False}}
remove_container.return_value = ('stdout', 'stderr', 0)
execute.return_value = ('stdout', 'stderr', 0)
# Run the main apply() method for this test.
stdout, stderr, deploy_status_code = builder.apply()
pull_missing_images.assert_called_once()
container_names.assert_called_once()
unique_container_name.assert_called_once()
delete_missing_and_updated.assert_called()