clonebox 0.1.24__py3-none-any.whl → 0.1.26__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
clonebox/cli.py CHANGED
@@ -1007,6 +1007,39 @@ def cmd_stop(args):
1007
1007
  cloner.stop_vm(name, force=args.force, console=console)
1008
1008
 
1009
1009
 
1010
+ def cmd_restart(args):
1011
+ """Restart a VM (stop and start)."""
1012
+ name = args.name
1013
+
1014
+ # If name is a path, load config
1015
+ if name and (name.startswith(".") or name.startswith("/") or name.startswith("~")):
1016
+ target_path = Path(name).expanduser().resolve()
1017
+ config_file = target_path / ".clonebox.yaml" if target_path.is_dir() else target_path
1018
+ if config_file.exists():
1019
+ config = load_clonebox_config(config_file)
1020
+ name = config["vm"]["name"]
1021
+ else:
1022
+ console.print(f"[red]❌ Config not found: {config_file}[/]")
1023
+ return
1024
+
1025
+ cloner = SelectiveVMCloner(user_session=getattr(args, "user", False))
1026
+
1027
+ # Stop the VM
1028
+ console.print("[bold yellow]🔄 Stopping VM...[/]")
1029
+ cloner.stop_vm(name, force=args.force, console=console)
1030
+
1031
+ # Wait a moment
1032
+ time.sleep(2)
1033
+
1034
+ # Start the VM
1035
+ console.print("[bold green]🚀 Starting VM...[/]")
1036
+ cloner.start_vm(name, wait_for_agent=True, console=console)
1037
+
1038
+ console.print("[bold green]✅ VM restarted successfully![/]")
1039
+ if getattr(args, "open", False):
1040
+ cloner.open_gui(name, console=console)
1041
+
1042
+
1010
1043
  def cmd_delete(args):
1011
1044
  """Delete a VM."""
1012
1045
  name = args.name
@@ -2521,6 +2554,28 @@ def main():
2521
2554
  )
2522
2555
  stop_parser.set_defaults(func=cmd_stop)
2523
2556
 
2557
+ # Restart command
2558
+ restart_parser = subparsers.add_parser("restart", help="Restart a VM (stop and start)")
2559
+ restart_parser.add_argument("name", nargs="?", default=None, help="VM name or '.' to use .clonebox.yaml")
2560
+ restart_parser.add_argument(
2561
+ "-f",
2562
+ "--force",
2563
+ action="store_true",
2564
+ help="Force stop if VM is stuck",
2565
+ )
2566
+ restart_parser.add_argument(
2567
+ "-u",
2568
+ "--user",
2569
+ action="store_true",
2570
+ help="Use user session (qemu:///session) - no root required",
2571
+ )
2572
+ restart_parser.add_argument(
2573
+ "--open",
2574
+ action="store_true",
2575
+ help="Open GUI after restart",
2576
+ )
2577
+ restart_parser.set_defaults(func=cmd_restart)
2578
+
2524
2579
  # Delete command
2525
2580
  delete_parser = subparsers.add_parser("delete", help="Delete a VM")
2526
2581
  delete_parser.add_argument("name", nargs="?", default=None, help="VM name or '.' to use .clonebox.yaml")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clonebox
3
- Version: 0.1.24
3
+ Version: 0.1.26
4
4
  Summary: Clone your workstation environment to an isolated VM with selective apps, paths and services
5
5
  Author: CloneBox Team
6
6
  License: Apache-2.0
@@ -651,7 +651,9 @@ clonebox list # List all VMs
651
651
  virsh --connect qemu:///session dominfo clone-clonebox
652
652
 
653
653
  # Restart VM if needed:
654
- clonebox stop . --user && clonebox start . --user # Soft reboot
654
+ clonebox restart . --user # Easiest - stop and start
655
+ clonebox stop . --user && clonebox start . --user # Manual restart
656
+ clonebox restart . --user --open # Restart and open GUI
655
657
  virsh --connect qemu:///session reboot clone-clonebox # Direct reboot
656
658
  virsh --connect qemu:///session reset clone-clonebox # Hard reset if frozen
657
659
  ```
@@ -1,6 +1,6 @@
1
1
  clonebox/__init__.py,sha256=CyfHVVq6KqBr4CNERBpXk_O6Q5B35q03YpdQbokVvvI,408
2
2
  clonebox/__main__.py,sha256=Fcoyzwwyz5-eC_sBlQk5a5RbKx8uodQz5sKJ190U0NU,135
3
- clonebox/cli.py,sha256=vbJ65ShdXG1nGkQteCaFtDTas0L2RNV--aay2Qx-6F0,110765
3
+ clonebox/cli.py,sha256=gxh9yFGA8z7F_cNqKJPg1g0zV3oUO3TQLFE_GYISlLc,112642
4
4
  clonebox/cloner.py,sha256=qIcSgG-W28-qBhEVSL8d2gFx2-BI7ygh1Jyh9BjAIBI,79100
5
5
  clonebox/container.py,sha256=tiYK1ZB-DhdD6A2FuMA0h_sRNkUI7KfYcJ0tFOcdyeM,6105
6
6
  clonebox/dashboard.py,sha256=RhSPvR6kWglqXeLkCWesBZQid7wv2WpJa6w78mXbPjY,4268
@@ -9,9 +9,9 @@ clonebox/models.py,sha256=yBRUlJejpeJHZjvCYMGq1nXPFcmhLFxN-LqkEyveWsA,7913
9
9
  clonebox/profiles.py,sha256=VaKVuxCrgyMxx-8_WOTcw7E8irwGxUPhZHVY6RxYYiE,2034
10
10
  clonebox/validator.py,sha256=z4YuIgVnX6ZqfIdJtjKIFwZ-iWlRUnpX7gmWwq-Jr88,35352
11
11
  clonebox/templates/profiles/ml-dev.yaml,sha256=MT7Wu3xGBnYIsO5mzZ2GDI4AAEFGOroIx0eU3XjNARg,140
12
- clonebox-0.1.24.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
13
- clonebox-0.1.24.dist-info/METADATA,sha256=ua1S-CkW_inx_jQYxZLCEGvvRW6o3qY6HIZqJsark_U,46452
14
- clonebox-0.1.24.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
15
- clonebox-0.1.24.dist-info/entry_points.txt,sha256=FES95Vi3btfViLEEoHdb8nikNxTqzaooi9ehZw9ZfWI,47
16
- clonebox-0.1.24.dist-info/top_level.txt,sha256=LdMo2cvCrEcRGH2M8JgQNVsCoszLV0xug6kx1JnaRjo,9
17
- clonebox-0.1.24.dist-info/RECORD,,
12
+ clonebox-0.1.26.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
13
+ clonebox-0.1.26.dist-info/METADATA,sha256=6il30fSxYOaktGaYX1ibMsK0ZPD2Ec4-ulg6OXHh_9k,46566
14
+ clonebox-0.1.26.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
15
+ clonebox-0.1.26.dist-info/entry_points.txt,sha256=FES95Vi3btfViLEEoHdb8nikNxTqzaooi9ehZw9ZfWI,47
16
+ clonebox-0.1.26.dist-info/top_level.txt,sha256=LdMo2cvCrEcRGH2M8JgQNVsCoszLV0xug6kx1JnaRjo,9
17
+ clonebox-0.1.26.dist-info/RECORD,,