iocage
iocage copied to clipboard
iocage rollback option doesn't rollback snapshot
Version
user@host# iocage -v
Version 1.2
Issue
Iocage doesn't rollback snapshot
Steps to recreate
- Jail my_jail cloned with name cloned_jail. Thus 4 zfs datasets created:
user@host# iocage clone -n cloned_jail my_jail &>/dev/null
user@host# zfs list -t all | grep cloned
zroot/iocage/jails/my_jail@cloned_jail 0 - 96K -
zroot/iocage/jails/my_jail/root@cloned_jail 0 - 1.56G -
zroot/iocage/jails/cloned_jail 376K 512G 96K /zroot/iocage/jails/cloned_jail
zroot/iocage/jails/cloned_jail/root 312K 512G 1.56G /zroot/iocage/jails/cloned_jail/root
- Create snapshot using iocage snapshot. Thus two zfs datasets (@now and root@now) created:
user@host# iocage snapshot -n now my_jail
Snapshot: zroot/iocage/jails/my_jail@now created.
user@host# zfs list -t snapshot | grep now
zroot/iocage/jails/my_jail@now 0 - 96K -
zroot/iocage/jails/my_jail/root@now 0 - 1.56G -
- Rollback to snapshot named now using iocage rollback
user@host# iocage rollback -f -n now my_jail
Traceback (most recent call last):
File "/usr/local/bin/iocage", line 10, in <module>
sys.exit(cli())
File "/usr/local/lib/python3.6/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.6/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.6/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/iocage_cli/rollback.py", line 51, in cli
ioc.IOCage(jail=jail).rollback(name)
File "/usr/local/lib/python3.6/site-packages/iocage_lib/iocage.py", line 1583, in rollback
self.zfs.get_snapshot(f"{dataset.name}@{name}").rollback()
File "libzfs.pyx", line 629, in libzfs.ZFS.get_snapshot
libzfs.ZFSException: Snapshot zroot/iocage/jails/cloned_jail/root@now not found
iocage looks for snapshot called now of jail cloned_jail created on first step, this snapshot doesn't exist. Iocage should look for snapshot called now of jail my_jail. Thus iocage can't rollback to just created shapshot.
Workaround
Rollback using zfs giving right snapshot names:
zfs rollback zroot/iocage/jails/may_jail@now
zfs rollback zroot/iocage/jails/may_jail/root@now