iocage icon indicating copy to clipboard operation
iocage copied to clipboard

iocage rollback option doesn't rollback snapshot

Open Marsel-marsel opened this issue 5 years ago • 0 comments

Version

user@host# iocage -v
Version 1.2

Issue

Iocage doesn't rollback snapshot

Steps to recreate

  1. 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

  1. 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  -
  1. 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

Marsel-marsel avatar May 22 '20 10:05 Marsel-marsel