import argparse
import datetime
import json
import logging as log
import os
import re
from utils.ansible import ansible_add_to_inventory_executor
from utils.ansible import ansible_log_writer_analyzer
from utils.ansible import ansible_run_check
from utils.utils import setup_logging
docker_name = 'ansible_automation'
[docs]
def cleanup_func(config_opts, cleanup_log_name, log_level, use_docker=True):
log_check_bool = []
for conf in config_opts:
hypervisor_hostname = conf.get('hypervisor_hostname')
hypervisor_username = conf.get('hypervisor_username')
hypervisor_password = conf.get('hypervisor_password')
vm_qcow_name = conf.get('vm_qcow_name')
vm_network_net_a = conf.get('vm_network_net_a')
vm_network_net_b = conf.get('vm_network_net_b')
vm_network_app_a = conf.get('vm_network_app_a')
vm_network_app_b = conf.get('vm_network_app_b')
vm_network_mir_a = conf.get('vm_network_mir_a')
vm_network_mir_b = conf.get('vm_network_mir_b')
# Check if it was not successfully added to the inventory
if not ansible_add_to_inventory_executor(
hostname=hypervisor_hostname,
username=hypervisor_username,
password=hypervisor_password,
use_docker=use_docker,
docker_name=docker_name,
install_log_name=cleanup_log_name,
log_level=log_level,
):
raise Exception(
f'Something went wrong when adding {hypervisor_hostname} to the inventory',
)
log.info('Step 1: Add the SSH keys')
# Step 1: Add the SSH keys
log_check_bool.append(
ansible_log_writer_analyzer(
cleanup_log_name, 'echo Adding SSH Keys',
),
)
make_sure_ssh_available = f'ansible-playbook playbooks/ssh_setup_individual.yml --extra-vars "hypervisor_username={conf["hypervisor_username"]} hypervisor_password={conf["hypervisor_password"]} hypervisor_hostname={conf["hypervisor_hostname"]}"'
ssh_docker_command = f'docker exec -t {docker_name} {make_sure_ssh_available}'
log_check_bool.append(
ansible_log_writer_analyzer(
cleanup_log_name, ssh_docker_command,
),
)
ansible_cleanup_command = f'ansible-playbook playbooks/cleanup.yml --extra-vars\
"hypervisor_hostname={conf["hypervisor_hostname"]}\
hypervisor_dest_directory={conf["hypervisor_dest_directory"]}\
vm_qcow_name={vm_qcow_name}\
vm_network_net_a={vm_network_net_a}\
vm_network_net_b={vm_network_net_b}\
vm_network_app_a={vm_network_app_a}\
vm_network_app_b={vm_network_app_b}\
vm_network_mir_a={vm_network_mir_a}\
vm_network_mir_b={vm_network_mir_b}"'
docker_cleanup_command = f'docker exec -t {docker_name} {ansible_cleanup_command}'
log_check_bool.append(
ansible_log_writer_analyzer(
cleanup_log_name, docker_cleanup_command,
),
)
if ansible_run_check(log_check_bool):
log.error(hypervisor_hostname + ' Cleanup Failed\n')
return False
else:
log.info(hypervisor_hostname + ' Cleanup Succeeded\n')
return True
[docs]
def parse_cleanup_arguments():
"""
Parse command-line arguments for cleanup configuration.
Returns
-------
argparse.Namespace
Parsed command-line arguments.
Example
-------
Example usage:
python deploy.py --config /path/to/config.json
Notes
-----
This function parses command-line arguments for cleanup configuration. It returns
an `argparse.Namespace` object containing the parsed arguments.
"""
parser = argparse.ArgumentParser(description='Deployment Config Parser')
parser.add_argument(
'--config', required=True, type=str,
help='Path to deployment configuration file',
)
parser.add_argument(
'--log-dir', type=str, default=None,
help='Path to deployment logs',
)
parser.add_argument(
'--log-level', type=str, default='INFO', choices=[
'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL', 'VERBOSE',
], help='Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL, VERBOSE)',
)
args = parser.parse_args()
return args
if __name__ == '__main__':
args = parse_cleanup_arguments()
# Setup Logging
log_dir = args.log_dir
if log_dir is not None:
log_file_path = os.path.join(log_dir, 'cleanup-')
else:
log_file_path = 'logs/cleanup-'
log_file_path += str(
datetime.datetime.now().replace(
microsecond=0,
).isoformat(),
)
log_file_path = re.sub(':', '-', log_file_path) + '.log'
# Create the directory if it doesn't exist
if not os.path.exists(os.path.dirname(log_file_path)):
os.makedirs(os.path.dirname(log_file_path))
log_level = str.upper(args.log_level)
setup_logging(log_file_path, log_level=log_level)
config_file_path = args.config
with open(config_file_path) as json_file:
conf_arr = json.load(json_file)
use_docker = True
cleanup_func(conf_arr, log_file_path, log_level, use_docker)