Skip to content

Commit bcc75c7

Browse files
committed
load default config default.json and clean up system defaults
1 parent d1fee16 commit bcc75c7

File tree

5 files changed

+179
-156
lines changed

5 files changed

+179
-156
lines changed

libiocage/lib/Jail.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def create(self, release_name):
271271

272272
if len(filteres_released) == 0:
273273
raise libiocage.lib.errors.ReleaseNotFetched(
274-
release_name,
274+
name=release_name,
275275
logger=self.logger
276276
)
277277

@@ -557,10 +557,6 @@ def _configure_routes(self):
557557
return
558558

559559
if defaultrouter:
560-
self.logger.verbose(
561-
f"setting default IPv4 gateway to {defaultrouter}",
562-
jail=self
563-
)
564560
self._configure_route(defaultrouter)
565561

566562
if defaultrouter6:

libiocage/lib/JailConfig.py

Lines changed: 81 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import libiocage.lib.JailConfigLegacy
88
import libiocage.lib.JailConfigResolver
99
import libiocage.lib.JailConfigZFS
10+
import libiocage.lib.JailConfigDefaults
1011
import libiocage.lib.errors
1112
import libiocage.lib.helpers
1213

@@ -45,7 +46,12 @@ class JailConfig(dict, object):
4546
4647
"""
4748

48-
def __init__(self, data={}, jail=None, logger=None, new=False):
49+
def __init__(self,
50+
data={},
51+
jail=None,
52+
logger=None,
53+
new=False,
54+
defaults_file=None):
4955

5056
dict.__init__(self)
5157

@@ -59,7 +65,9 @@ def __init__(self, data={}, jail=None, logger=None, new=False):
5965
if jail:
6066
self.jail = jail
6167
fstab = libiocage.lib.JailConfigFstab.JailConfigFstab(
62-
jail=jail, logger=self.logger)
68+
jail=jail,
69+
logger=self.logger
70+
)
6371
self.fstab = fstab
6472
else:
6573
self.jail = None
@@ -81,9 +89,40 @@ def __init__(self, data={}, jail=None, logger=None, new=False):
8189
except:
8290
self["legacy"] = False
8391

92+
self.defaults_file = defaults_file
93+
self.defaults = None
94+
8495
self.clone(data)
8596

97+
def load_defaults(self, defaults_file=None):
98+
99+
if defaults_file is not None:
100+
self.defaults_file = defaults_file
101+
102+
if defaults_file is None and self.jail is not None:
103+
root_mountpoint = self.jail.host.datasets.root.mountpoint
104+
defaults_file = f"{root_mountpoint}/defaults.json"
105+
106+
self.defaults = libiocage.lib.JailConfigDefaults.JailConfigDefaults(
107+
file=defaults_file,
108+
logger=self.logger
109+
)
110+
86111
def clone(self, data, skip_on_error=False):
112+
"""
113+
Apply data from a data dictionary to the JailConfig
114+
115+
Existing jail configuration is not emptied using.
116+
117+
Args:
118+
119+
data (dict):
120+
Dictionary containing the configuration to apply
121+
122+
skip_on_error (bool):
123+
Passed to __setitem__
124+
125+
"""
87126
for key in data:
88127
self.__setitem__(key, data[key], skip_on_error=skip_on_error)
89128

@@ -291,9 +330,6 @@ def _set_defaultrouter(self, value, **kwargs):
291330
value = 'none'
292331
self.data['defaultrouter'] = value
293332

294-
def _default_defaultrouter(self):
295-
return None
296-
297333
def _get_defaultrouter6(self):
298334
value = self.data['defaultrouter6']
299335
return value if (value != "none" and value is not None) else None
@@ -303,9 +339,6 @@ def _set_defaultrouter6(self, value, **kwargs):
303339
value = 'none'
304340
self.data['defaultrouter6'] = value
305341

306-
def _default_defaultrouter6(self):
307-
return None
308-
309342
def _get_vnet(self):
310343
return libiocage.lib.helpers.parse_user_input(self.data["vnet"])
311344

@@ -316,16 +349,21 @@ def _set_vnet(self, value, **kwargs):
316349
def _get_jail_zfs_dataset(self):
317350
try:
318351
return self.data["jail_zfs_dataset"].split()
319-
except:
320-
pass
321-
return []
352+
except KeyError:
353+
return []
322354

323355
def _set_jail_zfs_dataset(self, value, **kwargs):
324356
value = [value] if isinstance(value, str) else value
325357
self.data["jail_zfs_dataset"] = " ".join(value)
326358

327359
def _get_jail_zfs(self):
328-
enabled = libiocage.lib.helpers.parse_user_input(self.data["jail_zfs"])
360+
try:
361+
enabled = libiocage.lib.helpers.parse_user_input(
362+
self.data["jail_zfs"]
363+
)
364+
except:
365+
enabled = self._default_jail_zfs()
366+
329367
if not enabled:
330368
if len(self.jail_zfs_dataset) > 0:
331369
raise libiocage.lib.errors.JailConigZFSIsNotAllowed(
@@ -340,16 +378,13 @@ def _set_jail_zfs(self, value, **kwargs):
340378
value, true="on", false="off")
341379

342380
def _default_jail_zfs(self):
343-
# if self.data["jail_zfs"] does not explicitly exist, _get_jail_zfs
344-
# would raise
381+
# if self.data["jail_zfs"] does not explicitly exist,
382+
# _get_jail_zfs would raise
345383
try:
346-
return len(self.jail_zfs_dataset) > 0
384+
return len(self["jail_zfs_dataset"]) > 0
347385
except:
348386
return False
349387

350-
def _default_mac_prefix(self):
351-
return "02ff60"
352-
353388
def _get_resolver(self):
354389
return self.__create_special_property_resolver()
355390

@@ -370,18 +405,28 @@ def _get_cloned_release(self):
370405
return self["release"]
371406

372407
def _get_basejail_type(self):
373-
return self.data["basejail_type"]
374408

375-
def _default_basejail_type(self):
409+
# first see if basejail_type was explicitly set
410+
try:
411+
return self.data["basejail_type"]
412+
except:
413+
pass
414+
415+
# if it was not, the default for is 'nullfs' if the jail is a basejail
376416
try:
377417
if self["basejail"]:
378418
return "nullfs"
379419
except:
380420
pass
421+
422+
# otherwise the jail does not have a basejail_type
381423
return None
382424

383425
def _get_login_flags(self):
384-
return JailConfigList(self.data["login_flags"].split())
426+
try:
427+
return JailConfigList(self.data["login_flags"].split())
428+
except KeyError:
429+
return JailConfigList(["-f", "root"])
385430

386431
def _set_login_flags(self, value, **kwargs):
387432
if value is None:
@@ -413,128 +458,17 @@ def _set_tags(self, value, **kwargs):
413458
logger=self.logger
414459
)
415460

416-
def _default_login_flags(self):
417-
return JailConfigList(["-f", "root"])
418-
419-
def _default_vnet(self):
420-
return False
421-
422-
def _default_ip4_saddrsel(self):
423-
return 1
424-
425-
def _default_ip6_saddrsel(self):
426-
return 1
427-
428-
def _default_ip4(self):
429-
return "new"
430-
431-
def _default_ip6(self):
432-
return "new"
433-
434-
def _default_host_hostname(self):
435-
return self.jail.humanreadable_name
436-
437-
def _default_host_hostuuid(self):
438-
return self["id"]
439-
440-
def _default_host_domainname(self):
441-
return "none"
442-
443-
def _default_devfs_ruleset(self):
444-
return "4"
445-
446-
def _default_enforce_statfs(self):
447-
return "2"
448-
449-
def _default_children_max(self):
450-
return "0"
451-
452-
def _default_allow_set_hostname(self):
453-
return "1"
454-
455-
def _default_allow_sysvipc(self):
456-
return "0"
457-
458-
def _default_allow_raw_sockets(self):
459-
return "0"
460-
461-
def _default_allow_chflags(self):
462-
return "0"
463-
464-
def _default_allow_mount(self):
465-
return "0"
466-
467-
def _default_allow_mount_devfs(self):
468-
return "0"
469-
470-
def _default_allow_mount_nullfs(self):
471-
return "0"
472-
473-
def _default_allow_mount_procfs(self):
474-
return "0"
475-
476-
def _default_allow_mount_zfs(self):
477-
return "0"
478-
479-
def _default_allow_mount_tmpfs(self):
480-
return "0"
481-
482-
def _default_allow_quotas(self):
483-
return "0"
484-
485-
def _default_allow_socket_af(self):
486-
return "0"
487-
488-
def _default_sysvmsg(self):
489-
return "new"
490-
491-
def _default_sysvsem(self):
492-
return "new"
493-
494-
def _default_sysvshm(self):
495-
return "new"
496-
497-
def _default_exec_clean(self):
498-
return "1"
499-
500-
def _default_exec_fib(self):
501-
return "0"
502-
503-
def _default_exec_prestart(self):
504-
return "/usr/bin/true"
505-
506-
def _default_exec_start(self):
507-
return "/bin/sh /etc/rc"
508-
509-
def _default_exec_poststart(self):
510-
return "/usr/bin/true"
511-
512-
def _default_exec_prestop(self):
513-
return "/usr/bin/true"
514-
515-
def _default_exec_stop(self):
516-
return "/bin/sh /etc/rc.shutdown"
517-
518-
def _default_exec_poststop(self):
519-
return "/usr/bin/true"
520-
521-
def _default_exec_timeout(self):
522-
return "60"
523-
524-
def _default_stop_timeout(self):
525-
return "30"
526-
527-
def _default_mount_devfs(self):
528-
return "1"
529-
530-
def _default_mount_fdescfs(self):
531-
return "1"
532-
533-
def _default_securelevel(self):
534-
return "2"
461+
def _get_host_hostname(self):
462+
try:
463+
return self.data["host_hostname"]
464+
except KeyError:
465+
return self.jail.humanreadable_name
535466

536-
def _default_tags(self):
537-
return []
467+
def _get_host_hostuuid(self):
468+
try:
469+
return self.data["host_hostuuid"]
470+
except KeyError:
471+
return self["id"]
538472

539473
def __create_special_property_resolver(self):
540474

@@ -557,6 +491,9 @@ def get_string(self, key):
557491
return self.__getitem__(key, string=True)
558492

559493
def _skip_on_error(self, **kwargs):
494+
"""
495+
A helper to resolve skip_on_error attribute
496+
"""
560497
try:
561498
return kwargs["skip_on_error"] is True
562499
except AttributeError:
@@ -586,8 +523,7 @@ def __getitem__(self, key, string=False):
586523

587524
# then fall back to default
588525
try:
589-
fallback_method = self.__getattribute__(f"_default_{key}")
590-
return self.stringify(fallback_method(), string)
526+
return self.defaults[key]
591527
except:
592528
raise KeyError(f"Config variable {key} not found")
593529

@@ -661,5 +597,6 @@ def stringify(self, value, enabled=True):
661597

662598

663599
class JailConfigList(list):
600+
664601
def __str__(self):
665602
return " ".join(self)

0 commit comments

Comments
 (0)