Assign labels to kolla volumes
Kolla volumes do not have assigned any labels, that makes identification and filtering for kolla specific volumes hard. This change allows for easier volume management. Closes-bug: #1630545 Change-Id: I6b536f73433cfc64881ac66e53aa0a5eed709ce6 Signed-off-by: Marek Buch <marek.buch@tietoevry.com>
This commit is contained in:
parent
005978608d
commit
bff6ee9d7e
@ -333,6 +333,9 @@ class DockerWorker(ContainerWorker):
|
||||
|
||||
def create_container(self):
|
||||
self.changed = True
|
||||
# ensure volumes are pre-created before container creation
|
||||
self.create_container_volumes()
|
||||
|
||||
options = self.build_container_options()
|
||||
self.dc.create_container(**options)
|
||||
if self.params.get('restart_policy') != 'oneshot':
|
||||
@ -458,10 +461,22 @@ class DockerWorker(ContainerWorker):
|
||||
self.dc.stop(name, timeout=graceful_timeout)
|
||||
self.dc.start(name)
|
||||
|
||||
def create_volume(self):
|
||||
def create_volume(self, name=None):
|
||||
volume_name = name if name else self.params.get('name')
|
||||
if not self.check_volume():
|
||||
self.changed = True
|
||||
self.dc.create_volume(name=self.params.get('name'), driver='local')
|
||||
self.dc.create_volume(name=volume_name, driver='local',
|
||||
labels={'kolla_managed': 'true'})
|
||||
|
||||
def create_container_volumes(self):
|
||||
volumes = self.params.get("volumes", [])
|
||||
|
||||
for volume in volumes:
|
||||
volume_name = volume.split(":")[0]
|
||||
if "/" in volume_name:
|
||||
continue
|
||||
|
||||
self.create_volume(name=volume_name)
|
||||
|
||||
def remove_volume(self):
|
||||
if self.check_volume():
|
||||
|
@ -274,9 +274,10 @@ class PodmanWorker(ContainerWorker):
|
||||
)
|
||||
)
|
||||
|
||||
def check_volume(self):
|
||||
def check_volume(self, name=None):
|
||||
volume_name = name if name else self.params.get('name')
|
||||
try:
|
||||
vol = self.pc.volumes.get(self.params.get('name'))
|
||||
vol = self.pc.volumes.get(volume_name)
|
||||
return vol.attrs
|
||||
except APIError as e:
|
||||
if e.status_code == 404:
|
||||
@ -503,6 +504,9 @@ class PodmanWorker(ContainerWorker):
|
||||
return ulimits_opt
|
||||
|
||||
def create_container(self):
|
||||
# ensure volumes are pre-created before container creation
|
||||
self.create_container_volumes()
|
||||
|
||||
args = self.prepare_container_args()
|
||||
container = self.pc.containers.create(**args)
|
||||
if container.attrs == {}:
|
||||
@ -624,17 +628,29 @@ class PodmanWorker(ContainerWorker):
|
||||
msg="Container timed out",
|
||||
**container.attrs)
|
||||
|
||||
def create_volume(self):
|
||||
if not self.check_volume():
|
||||
def create_volume(self, name=None):
|
||||
volume_name = name if name else self.params.get('name')
|
||||
if not self.check_volume(name=volume_name):
|
||||
self.changed = True
|
||||
args = dict(
|
||||
name=self.params.get('name'),
|
||||
driver='local'
|
||||
name=volume_name,
|
||||
driver='local',
|
||||
labels={'kolla_managed': 'true'}
|
||||
)
|
||||
|
||||
vol = self.pc.volumes.create(**args)
|
||||
self.result = vol.attrs
|
||||
|
||||
def create_container_volumes(self):
|
||||
volumes = self.params.get("volumes", []) or []
|
||||
|
||||
for volume in volumes:
|
||||
volume_name = volume.split(":")[0]
|
||||
if "/" in volume_name:
|
||||
continue
|
||||
|
||||
self.create_volume(name=volume_name)
|
||||
|
||||
def remove_volume(self):
|
||||
if self.check_volume():
|
||||
self.changed = True
|
||||
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Implements assigning labels to kolla volumes.
|
||||
Kolla volumes did not have assigned any labels,
|
||||
that made identification and filtering for kolla specific volumes hard.
|
||||
This feature is useful in podman migrations and
|
||||
allows for easier volume management such as destroying volumes.
|
||||
`LP#1630545 <https://bugs.launchpad.net/kolla-ansible/+bug/1630545>`
|
@ -385,6 +385,25 @@ class TestContainer(base.BaseTestCase):
|
||||
self.assertTrue(self.dw.changed)
|
||||
self.assertFalse(self.dw.dc.create_host_config.call_args[1]['tmpfs'])
|
||||
|
||||
def test_create_container_create_volumes(self):
|
||||
self.fake_data['params']['volumes'] = [
|
||||
"kolla_logs:/var/log/kolla/",
|
||||
"fluentd_data:/var/lib/fluentd/data/",
|
||||
"/var/log/journal:/var/log/journal:ro",
|
||||
"/etc/kolla/fluentd/:/var/lib/kolla/config_files/:ro"
|
||||
]
|
||||
self.dw = get_DockerWorker(self.fake_data['params'])
|
||||
|
||||
self.dw.create_volume = mock.MagicMock()
|
||||
self.dw.create_container()
|
||||
expected_calls = [
|
||||
mock.call(name="kolla_logs"),
|
||||
mock.call(name="fluentd_data")
|
||||
]
|
||||
|
||||
self.dw.create_volume.assert_has_calls(expected_calls, any_order=True)
|
||||
self.assertEqual(self.dw.create_volume.call_count, 2)
|
||||
|
||||
def test_start_container_without_pull(self):
|
||||
self.fake_data['params'].update({'auth_username': 'fake_user',
|
||||
'auth_password': 'fake_psw',
|
||||
@ -1081,7 +1100,8 @@ class TestVolume(base.BaseTestCase):
|
||||
self.assertTrue(self.dw.changed)
|
||||
self.dw.dc.create_volume.assert_called_once_with(
|
||||
name='rabbitmq',
|
||||
driver='local')
|
||||
driver='local',
|
||||
labels={'kolla_managed': 'true'})
|
||||
|
||||
def test_create_volume_exists(self):
|
||||
self.dw = get_DockerWorker({'name': 'nova_compute',
|
||||
|
@ -279,6 +279,25 @@ class TestContainer(base.BaseTestCase):
|
||||
self.assertTrue(self.pw.changed)
|
||||
self.assertFalse(self.pw.pc.containers.create.call_args[1]['tmpfs'])
|
||||
|
||||
def test_create_container_create_volumes(self):
|
||||
self.fake_data['params']['volumes'] = [
|
||||
"kolla_logs:/var/log/kolla/",
|
||||
"fluentd_data:/var/lib/fluentd/data/",
|
||||
"/var/log/journal:/var/log/journal:ro",
|
||||
"/etc/kolla/fluentd/:/var/lib/kolla/config_files/:ro"
|
||||
]
|
||||
self.pw = get_PodmanWorker(self.fake_data['params'])
|
||||
|
||||
self.pw.create_volume = mock.MagicMock()
|
||||
self.pw.create_container()
|
||||
expected_calls = [
|
||||
mock.call(name="kolla_logs"),
|
||||
mock.call(name="fluentd_data")
|
||||
]
|
||||
|
||||
self.pw.create_volume.assert_has_calls(expected_calls, any_order=True)
|
||||
self.assertEqual(self.pw.create_volume.call_count, 2)
|
||||
|
||||
def test_start_container_without_pull(self):
|
||||
self.fake_data['params'].update({'auth_username': 'fake_user',
|
||||
'auth_password': 'fake_psw',
|
||||
@ -1004,7 +1023,8 @@ class TestVolume(base.BaseTestCase):
|
||||
self.assertTrue(self.pw.changed)
|
||||
self.pw.pc.volumes.create.assert_called_once_with(
|
||||
name='rabbitmq',
|
||||
driver='local')
|
||||
driver='local',
|
||||
labels={'kolla_managed': 'true'})
|
||||
|
||||
def test_create_volume_exists(self):
|
||||
self.pw = get_PodmanWorker({'name': 'nova_compute',
|
||||
|
Loading…
x
Reference in New Issue
Block a user