# HG changeset patch # User Alain Leufroy # Date 1615047737 -3600 # Sat Mar 06 17:22:17 2021 +0100 # Node ID ee37f25ee9396929f50186df40e0e0fed4562790 # Parent 78c3464d21b0d278dc735c3cb5c63a7d822f7ff1 edit: stop/restart descendannts automatically with --stop-others. diff --git a/overlayctl b/overlayctl --- a/overlayctl +++ b/overlayctl @@ -604,19 +604,26 @@ Popen(cmd, shell=True).wait() -def editer(name, appended=None, prepended=None, removed=None, keep_others=False): +def editer( + name, appended=None, prepended=None, removed=None, + stop_others=False, keep_others=False): """Ask user to edit lowers of the given overlay name, rewrite the metadata and unit files accordingly, finaly retart systemd units of the edited overlay. """ layer = build_layer(name) + to_stop = [] if not keep_others: - to_stop = [layer for layer in _iter_descendants(layer) if layer.automountunit.is_active()] + to_stop[:] = [layer for layer in _iter_descendants(layer) + if layer.automountunit.is_active()] if to_stop: - # XXX automatic stop/start - logger.error( - 'You should prefere to stop the following overlays: \n\n%s\n', - ', '.join(x.name for x in to_stop)) + if stop_others: + for descendant in to_stop: + descendant.stop() + else: + logger.error( + 'You should prefere to stop the following overlays: \n\n%s\n', + ', '.join(x.name for x in to_stop)) return if not appended and not prepended and not removed: with NamedTemporaryFile() as fobj: @@ -647,7 +654,9 @@ with layer.temporary_stop(): layer.lowers[:] = lowers layer.dump() - systemctl.daemon_reload() + systemctl.daemon_reload() + for descendant in to_stop: + descendant.start() # XXX propagate to descendants logger.debug("Systemd \"%s\" restarted", layer.unitname) logger.info("\"%s\" updated", layer.name) @@ -1019,6 +1028,13 @@ '-d', '--delete', action='append', help="append the following names", ) edit.add_argument( + '--stop-others', '-s', + action='store_true', + default=False, + help=('automatically stop descendants to prevent broken mount point. ' + 'Restart them afterward.') + ) + edit.add_argument( '--keep-others', '-K', action='store_true', default=False, @@ -1035,7 +1051,7 @@ ) def _editer(args): - editer(args.mountdir, args.append, args.prepend, args.delete, args.keep_others) + editer(args.mountdir, args.append, args.prepend, args.delete, args.stop_others, args.keep_others) edit.set_defaults(func=_editer)