Skip to content

Commit fb4c6d8

Browse files
committed
improve id/name handling
1 parent 107bc48 commit fb4c6d8

File tree

5 files changed

+46
-53
lines changed

5 files changed

+46
-53
lines changed

libiocage/lib/Jail.py

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -711,22 +711,21 @@ def _teardown_mounts(self):
711711
)
712712

713713
def _resolve_name(self, text):
714+
715+
if (text is None) or (len(text)==0):
716+
raise libiocage.lib.errors.JailNotSupplied(logger=self.logger)
717+
714718
jails_dataset = self.host.datasets.jails
715-
best_guess = ""
719+
716720
for dataset in list(jails_dataset.children):
721+
717722
dataset_name = dataset.name[(len(jails_dataset.name) + 1):]
718-
if text == dataset_name:
719-
# Exact match, immediately return
720-
return dataset_name
721-
elif dataset_name.startswith(text) and len(text) > len(best_guess):
722-
best_guess = text
723-
724-
if len(best_guess) > 0:
725-
self.logger.debug(f"Resolved {text} to uuid {dataset_name}")
726-
return best_guess
723+
humanreadable_name = libiocage.lib.helpers.to_humanreadable_name(
724+
dataset_name
725+
)
727726

728-
if not best_guess:
729-
raise libiocage.lib.errors.JailNotSupplied(logger=self.logger)
727+
if text in [dataset_name, humanreadable_name]:
728+
return dataset_name
730729

731730
raise libiocage.lib.errors.JailNotFound(text, logger=self.logger)
732731

@@ -906,14 +905,6 @@ class Jail(JailGenerator):
906905

907906
def start(self, *args, **kwargs):
908907
return list(JailGenerator.start(self, *args, **kwargs))
909-
# libiocage.lib.helpers.print_event_generator(
910-
# JailGenerator.start(self, *args, **kwargs),
911-
# logger=self.logger
912-
# )
913908

914909
def stop(self, *args, **kwargs):
915-
return list(JailGenerator.start(self, *args, **kwargs))
916-
# libiocage.lib.helpers.print_event_generator(
917-
# JailGenerator.stop(self, *args, **kwargs),
918-
# logger=self.logger
919-
# )
910+
return list(JailGenerator.stop(self, *args, **kwargs))

libiocage/lib/JailConfig.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import re
2+
import uuid
23

34
import libiocage.lib.JailConfigAddresses
45
import libiocage.lib.JailConfigDefaults
@@ -73,15 +74,12 @@ def __init__(self,
7374
self.jail = None
7475
self.fstab = None
7576

76-
data_keys = data.keys()
77-
78-
# the UUID is used in many other variables and needs to be set first
79-
if "name" in data_keys:
80-
self["name"] = data["name"]
81-
elif "uuid" in data_keys:
82-
self["name"] = data["uuid"]
83-
else:
84-
self["id"] = None
77+
# the name is used in many other variables and needs to be set first
78+
self["id"] = None
79+
for key in ["id", "name", "uuid"]:
80+
if key in data.keys():
81+
self["name"] = data[key]
82+
break
8583

8684
# be aware of iocage-legacy jails for migration
8785
try:
@@ -129,8 +127,13 @@ def clone(self, data, skip_on_error=False):
129127
Passed to __setitem__
130128
131129
"""
132-
for key in data:
133-
self.__setitem__(key, data[key], skip_on_error=skip_on_error)
130+
current_id = self["id"]
131+
for key, value in data.items():
132+
133+
if (key in ["id", "name", "uuid"]) and (current_id is not None):
134+
value = current_id
135+
136+
self.__setitem__(key, value, skip_on_error=skip_on_error)
134137

135138
def read(self):
136139

@@ -205,15 +208,19 @@ def _set_name(self, name, **kwargs):
205208
)
206209
self.logger.error(msg)
207210

208-
if libiocage.lib.helpers.validate_name(name) is False:
209-
raise libiocage.lib.errors.InvalidJailName(logger=self.logger)
210-
211-
self.id = name
211+
is_valid_name = libiocage.lib.helpers.validate_name(name)
212+
if is_valid_name is True:
213+
self["id"] = name
214+
else:
215+
try:
216+
self["id"] = str(uuid.UUID(name)) # legacy support
217+
except:
218+
raise libiocage.lib.errors.InvalidJailName(logger=self.logger)
212219

213220
try:
214-
self.host_hostname
221+
self["host_hostname"]
215222
except:
216-
self.host_hostname = name
223+
self["host_hostname"] = name
217224

218225
self.logger.spam(
219226
f"Set jail name to {name}",

libiocage/lib/JailConfigDefaults.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
class JailConfigDefaults(dict):
88

99
DEFAULTS = {
10+
"id": None,
1011
"basejail": False,
1112
"defaultrouter": None,
1213
"defaultrouter6": None,

libiocage/lib/Jails.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,10 @@ def __iter__(self):
4747
yield jail
4848

4949
def _create_jail(self, *args, **kwargs):
50-
return libiocage.lib.Jail.JailGenerator(
51-
*args,
52-
logger=self.logger,
53-
host=self.host,
54-
zfs=self.zfs,
55-
**kwargs
56-
)
50+
kwargs["logger"] = self.logger
51+
kwargs["host"] = self.host
52+
kwargs["zfs"] = self.zfs
53+
return libiocage.lib.Jail.Jail(*args,**kwargs)
5754

5855
@property
5956
def filters(self):
@@ -99,13 +96,10 @@ def _get_name_from_jail_dataset(
9996
class Jails(JailsGenerator):
10097

10198
def _create_jail(self, *args, **kwargs):
102-
return libiocage.lib.Jail.Jail(
103-
*args,
104-
logger=self.logger,
105-
host=self.host,
106-
zfs=self.zfs,
107-
**kwargs
108-
)
99+
kwargs["logger"] = self.logger
100+
kwargs["host"] = self.host
101+
kwargs["zfs"] = self.zfs
102+
return libiocage.lib.Jail.Jail(*args,**kwargs)
109103

110104
def __iter__(self):
111105
return list(JailsGenerator.__iter__(self))

libiocage/lib/Logger.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def __init__(self, print_level=None, log_directory="/var/log/iocage"):
8585

8686
@property
8787
def default_print_level(self):
88-
return "info"
88+
return "spam"
8989

9090
@property
9191
def print_level(self):

0 commit comments

Comments
 (0)