mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2025-12-06 17:22:49 +01:00
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
#!/usr/bin/python3
|
|
|
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
|
# Elastic License 2.0.
|
|
|
|
import sys
|
|
import time
|
|
import libvirt
|
|
import logging
|
|
|
|
def stop_vm(conn, vm_name, logger):
|
|
"""
|
|
Stops the specified virtual machine if it is running.
|
|
|
|
Parameters:
|
|
conn (libvirt.virConnect): The libvirt connection object.
|
|
vm_name (str): The name of the virtual machine.
|
|
logger (logging.Logger): The logger object.
|
|
|
|
Returns:
|
|
libvirt.virDomain: The domain object of the VM.
|
|
|
|
Raises:
|
|
SystemExit: If the VM cannot be found or an error occurs.
|
|
"""
|
|
try:
|
|
dom = conn.lookupByName(vm_name)
|
|
if dom.isActive():
|
|
logger.info(f"Shutting down VM '{vm_name}'...")
|
|
dom.shutdown()
|
|
# Wait for the VM to shut down
|
|
while dom.isActive():
|
|
time.sleep(1)
|
|
logger.info(f"VM '{vm_name}' has been stopped.")
|
|
else:
|
|
logger.info(f"VM '{vm_name}' is already stopped.")
|
|
return dom
|
|
except libvirt.libvirtError as e:
|
|
logger.error(f"Failed to stop VM '{vm_name}': {e}")
|
|
sys.exit(1)
|
|
|
|
def start_vm(dom, logger):
|
|
"""
|
|
Starts the specified virtual machine.
|
|
|
|
Parameters:
|
|
dom (libvirt.virDomain): The domain object of the VM.
|
|
logger (logging.Logger): The logger object.
|
|
|
|
Raises:
|
|
SystemExit: If the VM cannot be started.
|
|
"""
|
|
try:
|
|
dom.create()
|
|
logger.info(f"VM '{dom.name()}' started successfully.")
|
|
except libvirt.libvirtError as e:
|
|
logger.error(f"Failed to start VM '{dom.name()}': {e}")
|
|
sys.exit(1)
|