Compare commits

..

11 Commits

10 changed files with 106 additions and 55 deletions

View File

@ -1 +1 @@
0.9.66
0.9.69

View File

@ -1,5 +1,18 @@
## PVC Changelog
###### [v0.9.69](https://github.com/parallelvirtualcluster/pvc/releases/tag/v0.9.69)
* [Node Daemon] Ensures that system load is always 2 decimal places on Bookworm
* [Node Daemon] Fixes bug blocking primary takeover at DNS Aggregator start if Patroni is down
###### [v0.9.68](https://github.com/parallelvirtualcluster/pvc/releases/tag/v0.9.68)
* [CLI] Fixes another bug with network info view
###### [v0.9.67](https://github.com/parallelvirtualcluster/pvc/releases/tag/v0.9.67)
* [CLI] Fixes several more bugs in the refactored CLI
###### [v0.9.66](https://github.com/parallelvirtualcluster/pvc/releases/tag/v0.9.66)
* [CLI] Fixes a missing YAML import in CLI

View File

@ -27,7 +27,7 @@ from ssl import SSLContext, TLSVersion
from distutils.util import strtobool as dustrtobool
# Daemon version
version = "0.9.66"
version = "0.9.69"
# API version
API_VERSION = 1.0

View File

@ -19,6 +19,8 @@
#
###############################################################################
from colorama import Fore
from difflib import unified_diff
from functools import wraps
from json import dump as jdump
from json import dumps as jdumps
@ -26,7 +28,7 @@ from json import loads as jloads
from os import environ, makedirs, path
from pkg_resources import get_distribution
from lxml.etree import fromstring, tostring
from re import sub
from re import sub, match
from yaml import load as yload
from yaml import SafeLoader as SafeYAMLLoader
@ -1196,7 +1198,7 @@ def cli_vm_modify(
text=current_vm_cfgfile, require_save=True, extension=".xml"
)
if new_vm_cfgfile is None:
echo("Aborting with no modifications.")
echo(CLI_CONFIG, "Aborting with no modifications.")
exit(0)
else:
new_vm_cfgfile = new_vm_cfgfile.strip()
@ -1208,16 +1210,14 @@ def cli_vm_modify(
cfgfile.close()
echo(
CLI_CONFIG,
'Replacing configuration of VM "{}" with file "{}".'.format(
dom_name, cfgfile.name
)
),
)
# Show a diff and confirm
echo("Pending modifications:")
echo("")
diff = list(
difflib.unified_diff(
unified_diff(
current_vm_cfgfile.split("\n"),
new_vm_cfgfile.split("\n"),
fromfile="current",
@ -1228,16 +1228,23 @@ def cli_vm_modify(
lineterm="",
)
)
if len(diff) < 1:
echo(CLI_CONFIG, "Aborting with no modifications.")
exit(0)
# Show a diff and confirm
echo(CLI_CONFIG, "Pending modifications:")
echo(CLI_CONFIG, "")
for line in diff:
if re.match(r"^\+", line) is not None:
echo(colorama.Fore.GREEN + line + colorama.Fore.RESET)
elif re.match(r"^\-", line) is not None:
echo(colorama.Fore.RED + line + colorama.Fore.RESET)
elif re.match(r"^\^", line) is not None:
echo(colorama.Fore.BLUE + line + colorama.Fore.RESET)
if match(r"^\+", line) is not None:
echo(CLI_CONFIG, Fore.GREEN + line + Fore.RESET)
elif match(r"^\-", line) is not None:
echo(CLI_CONFIG, Fore.RED + line + Fore.RESET)
elif match(r"^\^", line) is not None:
echo(CLI_CONFIG, Fore.BLUE + line + Fore.RESET)
else:
echo(line)
echo("")
echo(CLI_CONFIG, line)
echo(CLI_CONFIG, "")
# Verify our XML is sensible
try:
@ -3594,7 +3601,7 @@ def cli_storage_volume_upload(pool, name, image_format, image_file):
"""
if not os.path.exists(image_file):
echo("ERROR: File '{}' does not exist!".format(image_file))
echo(CLI_CONFIG, "ERROR: File '{}' does not exist!".format(image_file))
exit(1)
retcode, retmsg = pvc.lib.storage.ceph_volume_upload(
@ -4432,7 +4439,8 @@ def cli_provisioner_template_storage_disk_add(
if source_volume and (size or filesystem or mountpoint):
echo(
'The "--source-volume" option is not compatible with the "--size", "--filesystem", or "--mountpoint" options.'
CLI_CONFIG,
'The "--source-volume" option is not compatible with the "--size", "--filesystem", or "--mountpoint" options.',
)
exit(1)
@ -4514,7 +4522,7 @@ def cli_provisioner_userdata_add(name, filename):
try:
yload(userdata, Loader=SafeYAMLLoader)
except Exception as e:
echo("Error: Userdata document is malformed")
echo(CLI_CONFIG, "Error: Userdata document is malformed")
cleanup(False, e)
params = dict()
@ -4551,7 +4559,7 @@ def cli_provisioner_userdata_modify(name, filename, editor):
# Grab the current config
retcode, retdata = pvc.lib.provisioner.userdata_info(CLI_CONFIG, name)
if not retcode:
echo(retdata)
echo(CLI_CONFIG, retdata)
exit(1)
current_userdata = retdata["userdata"].strip()
@ -4559,16 +4567,14 @@ def cli_provisioner_userdata_modify(name, filename, editor):
text=current_userdata, require_save=True, extension=".yaml"
)
if new_userdata is None:
echo("Aborting with no modifications.")
echo(CLI_CONFIG, "Aborting with no modifications.")
exit(0)
else:
new_userdata = new_userdata.strip()
# Show a diff and confirm
echo("Pending modifications:")
echo("")
diff = list(
difflib.unified_diff(
unified_diff(
current_userdata.split("\n"),
new_userdata.split("\n"),
fromfile="current",
@ -4579,16 +4585,22 @@ def cli_provisioner_userdata_modify(name, filename, editor):
lineterm="",
)
)
if len(diff) < 1:
echo(CLI_CONFIG, "Aborting with no modifications.")
exit(0)
echo(CLI_CONFIG, "Pending modifications:")
echo(CLI_CONFIG, "")
for line in diff:
if re.match(r"^\+", line) is not None:
echo(colorama.Fore.GREEN + line + colorama.Fore.RESET)
elif re.match(r"^\-", line) is not None:
echo(colorama.Fore.RED + line + colorama.Fore.RESET)
elif re.match(r"^\^", line) is not None:
echo(colorama.Fore.BLUE + line + colorama.Fore.RESET)
if match(r"^\+", line) is not None:
echo(CLI_CONFIG, Fore.GREEN + line + Fore.RESET)
elif match(r"^\-", line) is not None:
echo(CLI_CONFIG, Fore.RED + line + Fore.RESET)
elif match(r"^\^", line) is not None:
echo(CLI_CONFIG, Fore.BLUE + line + Fore.RESET)
else:
echo(line)
echo("")
echo(CLI_CONFIG, line)
echo(CLI_CONFIG, "")
click.confirm("Write modifications to cluster?", abort=True)
@ -4603,7 +4615,7 @@ def cli_provisioner_userdata_modify(name, filename, editor):
try:
yload(userdata, Loader=SafeYAMLLoader)
except Exception as e:
echo("Error: Userdata document is malformed")
echo(CLI_CONFIG, "Error: Userdata document is malformed")
cleanup(False, e)
params = dict()
@ -4741,22 +4753,20 @@ def cli_provisioner_script_modify(name, filename, editor):
# Grab the current config
retcode, retdata = pvc.lib.provisioner.script_info(CLI_CONFIG, name)
if not retcode:
echo(retdata)
echo(CLI_CONFIG, retdata)
exit(1)
current_script = retdata["script"].strip()
new_script = click.edit(text=current_script, require_save=True, extension=".py")
if new_script is None:
echo("Aborting with no modifications.")
echo(CLI_CONFIG, "Aborting with no modifications.")
exit(0)
else:
new_script = new_script.strip()
# Show a diff and confirm
echo("Pending modifications:")
echo("")
diff = list(
difflib.unified_diff(
unified_diff(
current_script.split("\n"),
new_script.split("\n"),
fromfile="current",
@ -4767,16 +4777,22 @@ def cli_provisioner_script_modify(name, filename, editor):
lineterm="",
)
)
if len(diff) < 1:
echo(CLI_CONFIG, "Aborting with no modifications.")
exit(0)
echo(CLI_CONFIG, "Pending modifications:")
echo(CLI_CONFIG, "")
for line in diff:
if re.match(r"^\+", line) is not None:
echo(colorama.Fore.GREEN + line + colorama.Fore.RESET)
elif re.match(r"^\-", line) is not None:
echo(colorama.Fore.RED + line + colorama.Fore.RESET)
elif re.match(r"^\^", line) is not None:
echo(colorama.Fore.BLUE + line + colorama.Fore.RESET)
if match(r"^\+", line) is not None:
echo(CLI_CONFIG, Fore.GREEN + line + Fore.RESET)
elif match(r"^\-", line) is not None:
echo(CLI_CONFIG, Fore.RED + line + Fore.RESET)
elif match(r"^\^", line) is not None:
echo(CLI_CONFIG, Fore.BLUE + line + Fore.RESET)
else:
echo(line)
echo("")
echo(CLI_CONFIG, line)
echo(CLI_CONFIG, "")
click.confirm("Write modifications to cluster?", abort=True)
@ -4897,7 +4913,7 @@ def cli_provisioner_ova_upload(name, filename, pool):
"""
if not os.path.exists(filename):
echo("ERROR: File '{}' does not exist!".format(filename))
echo(CLI_CONFIG, "ERROR: File '{}' does not exist!".format(filename))
exit(1)
params = dict()

View File

@ -700,7 +700,7 @@ def format_info(config, network_information, long_output):
ainformation.append("")
if retcode:
dhcp4_reservations_string = format_list_dhcp(
dhcp4_reservations_list
config, dhcp4_reservations_list
)
for line in dhcp4_reservations_string.split("\n"):
ainformation.append(line)

View File

@ -2,7 +2,7 @@ from setuptools import setup
setup(
name="pvc",
version="0.9.66",
version="0.9.69",
packages=["pvc.cli", "pvc.lib"],
install_requires=[
"Click",

19
debian/changelog vendored
View File

@ -1,3 +1,22 @@
pvc (0.9.69-0) unstable; urgency=high
* [Node Daemon] Ensures that system load is always 2 decimal places on Bookworm
* [Node Daemon] Fixes bug blocking primary takeover at DNS Aggregator start if Patroni is down
-- Joshua M. Boniface <joshua@boniface.me> Tue, 29 Aug 2023 22:01:22 -0400
pvc (0.9.68-0) unstable; urgency=high
* [CLI] Fixes another bug with network info view
-- Joshua M. Boniface <joshua@boniface.me> Sun, 27 Aug 2023 20:59:23 -0400
pvc (0.9.67-0) unstable; urgency=high
* [CLI] Fixes several more bugs in the refactored CLI
-- Joshua M. Boniface <joshua@boniface.me> Sun, 27 Aug 2023 14:47:20 -0400
pvc (0.9.66-0) unstable; urgency=high
* [CLI] Fixes a missing YAML import in CLI

View File

@ -49,7 +49,7 @@ import re
import json
# Daemon version
version = "0.9.66"
version = "0.9.69"
##########################################################

View File

@ -620,9 +620,12 @@ class NodeInstance(object):
for network in self.d_network:
self.d_network[network].startDHCPServer()
# 9. Start DNS aggregator; just continue if we fail
try:
if not patroni_failed:
self.dns_aggregator.start_aggregator()
else:
raise
except Exception:
self.logger.out(
"Not starting DNS aggregator due to Patroni failures", state="e"
)

View File

@ -753,7 +753,7 @@ def node_keepalive(logger, config, zkhandler, this_node, monitoring_instance):
this_node.memtotal = int(psutil.virtual_memory().total / 1024 / 1024)
this_node.memused = int(psutil.virtual_memory().used / 1024 / 1024)
this_node.memfree = int(psutil.virtual_memory().free / 1024 / 1024)
this_node.cpuload = os.getloadavg()[0]
this_node.cpuload = round(os.getloadavg()[0], 2)
# Join against running threads
if config["enable_hypervisor"]: