mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2025-12-06 09:12:45 +01:00
133 lines
4.1 KiB
Python
133 lines
4.1 KiB
Python
#!/opt/saltstack/salt/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.
|
|
#
|
|
# Note: Per the Elastic License 2.0, the second limitation states:
|
|
#
|
|
# "You may not move, change, disable, or circumvent the license key functionality
|
|
# in the software, and you may not remove or obscure any functionality in the
|
|
# software that is protected by the license key."
|
|
|
|
{% if 'vrt' in salt['pillar.get']('features', []) -%}
|
|
|
|
"""
|
|
Script for emitting VM deployment status events to the Salt event bus.
|
|
|
|
This script provides functionality to emit status events for VM deployment operations,
|
|
used by various Security Onion VM management tools.
|
|
|
|
Usage:
|
|
so-salt-emit-vm-deployment-status-event -v <vm_name> -H <hypervisor> -s <status>
|
|
|
|
Arguments:
|
|
-v, --vm-name Name of the VM (hostname_role)
|
|
-H, --hypervisor Name of the hypervisor
|
|
-s, --status Current deployment status of the VM
|
|
|
|
Example:
|
|
so-salt-emit-vm-deployment-status-event -v sensor1_sensor -H hypervisor1 -s "Creating"
|
|
"""
|
|
|
|
import sys
|
|
import argparse
|
|
import logging
|
|
import salt.client
|
|
from typing import Dict, Any
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(levelname)s - %(message)s'
|
|
)
|
|
log = logging.getLogger(__name__)
|
|
|
|
def emit_event(vm_name: str, hypervisor: str, status: str) -> bool:
|
|
"""
|
|
Emit a VM deployment status event to the salt event bus.
|
|
|
|
Args:
|
|
vm_name: Name of the VM (hostname_role)
|
|
hypervisor: Name of the hypervisor
|
|
status: Current deployment status of the VM
|
|
|
|
Returns:
|
|
bool: True if event was sent successfully, False otherwise
|
|
|
|
Raises:
|
|
ValueError: If status is not a valid deployment status
|
|
"""
|
|
log.info("Attempting to emit deployment event...")
|
|
|
|
try:
|
|
caller = salt.client.Caller()
|
|
event_data = {
|
|
'vm_name': vm_name,
|
|
'hypervisor': hypervisor,
|
|
'status': status
|
|
}
|
|
|
|
# Use consistent event tag structure
|
|
event_tag = f'soc/dyanno/hypervisor/{status.lower()}'
|
|
|
|
ret = caller.cmd(
|
|
'event.send',
|
|
event_tag,
|
|
event_data
|
|
)
|
|
|
|
if not ret:
|
|
log.error("Failed to emit VM deployment status event: %s", event_data)
|
|
return False
|
|
|
|
log.info("Successfully emitted VM deployment status event: %s", event_data)
|
|
return True
|
|
|
|
except Exception as e:
|
|
log.error("Error emitting VM deployment status event: %s", str(e))
|
|
return False
|
|
|
|
def parse_args():
|
|
"""Parse command line arguments."""
|
|
parser = argparse.ArgumentParser(
|
|
description='Emit VM deployment status events to the Salt event bus.'
|
|
)
|
|
parser.add_argument('-v', '--vm-name', required=True,
|
|
help='Name of the VM (hostname_role)')
|
|
parser.add_argument('-H', '--hypervisor', required=True,
|
|
help='Name of the hypervisor')
|
|
parser.add_argument('-s', '--status', required=True,
|
|
help='Current deployment status of the VM')
|
|
return parser.parse_args()
|
|
|
|
def main():
|
|
"""Main entry point for the script."""
|
|
try:
|
|
args = parse_args()
|
|
|
|
success = emit_event(
|
|
vm_name=args.vm_name,
|
|
hypervisor=args.hypervisor,
|
|
status=args.status
|
|
)
|
|
|
|
if not success:
|
|
sys.exit(1)
|
|
|
|
except Exception as e:
|
|
log.error("Failed to emit status event: %s", str(e))
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|
|
{%- else -%}
|
|
|
|
echo "Hypervisor nodes are a feature supported only for customers with a valid license. \
|
|
Contact Security Onion Solutions, LLC via our website at https://securityonionsolutions.com \
|
|
for more information about purchasing a license to enable this feature."
|
|
|
|
{% endif -%}
|