Compare commits

..

3 Commits

Author SHA1 Message Date
a28f8372b3 Bump version to 1.0.3 2026-03-01 22:48:49 -05:00
c7729db898 Improve 3-debootstrap example for Debian 13+
Debian 13+ no longer include isc-dhcp-server (or any DHCP client it
seems) in their default minimal stack. This can cause cloud-init to fail
early and render newly provsiioned VMs unbootable. We add it to the
example here for posterity. We also explicitly add ifupdown, which
provides the legacy Debian networking subsystem.

Finally we modify the cloud-init to ensure it does not attempt to
overwrite the networking provided by the system, and reduce timeouts to
avoid excessive delays.
2026-03-01 22:47:01 -05:00
dfc8d598cb Fix errors when overwriting DHCP leases
Ensure we remove any existing leases for the MAC first, before adding a
new entry for that MAC. Otherwise what dnsmasq returns will not be valid
and this can cause CloudInit bootstrap errors.
2026-03-01 21:10:35 -05:00
10 changed files with 44 additions and 24 deletions

View File

@@ -1 +1 @@
1.0.2
1.0.3

View File

@@ -1,5 +1,10 @@
## PVC Changelog
###### [v1.0.3](https://github.com/parallelvirtualcluster/pvc/releases/tag/v1.0.3)
* Fixes silent errors in the dnsmasq DHCP lease handler which can prevent leases from updating
* Improves the 3-debootstrap.py provisioner example script to work with Debian 13+
###### [v1.0.2](https://github.com/parallelvirtualcluster/pvc/releases/tag/v1.0.2)
* [Worker Daemon] [Bugfix] Fixed a bug in the calling of osd create-db-vg command worker

View File

@@ -485,6 +485,8 @@ class VMBuilderScript(VMBuilder):
"acpid",
"acpi-support-base",
"wget",
"ifupdown", # be explicit for Debian 13+
"isc-dhcp-server", # required for cloud-init on Debian 13+ where this is no longer standard
]
# We need to know our root disk for later GRUB-ing
@@ -586,12 +588,14 @@ After=multi-user.target
preserve_hostname: true
network:
config: disabled
datasource:
Ec2:
metadata_urls: ["http://169.254.169.254:80"]
max_wait: 30
timeout: 30
apply_full_imds_network_config: true
max_wait: 5
timeout: 5
cloud_init_modules:
- migrator

View File

@@ -30,7 +30,7 @@ from yaml import load as yload
from yaml import SafeLoader
VERSION = "1.0.2"
VERSION = "1.0.3"
DEFAULT_STORE_DATA = {"cfgfile": "/etc/pvc/pvc.conf"}
DEFAULT_STORE_FILENAME = "pvc.json"

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "pvc"
version = "1.0.2"
version = "1.0.3"
dependencies = [
"Click",
"PyYAML",

7
debian/changelog vendored
View File

@@ -1,3 +1,10 @@
pvc (1.0.3-0) unstable; urgency=high
* Fixes silent errors in the dnsmasq DHCP lease handler which can prevent leases from updating
* Improves the 3-debootstrap.py provisioner example script to work with Debian 13+
-- Joshua M. Boniface <joshua@boniface.me> Sun, 01 Mar 2026 22:48:49 -0500
pvc (1.0.2-0) unstable; urgency=high
* [Worker Daemon] [Bugfix] Fixed a bug in the calling of osd create-db-vg command worker

View File

@@ -33,7 +33,7 @@ import os
import signal
# Daemon version
version = "1.0.2"
version = "1.0.3"
##########################################################

View File

@@ -49,7 +49,7 @@ import re
import json
# Daemon version
version = "1.0.2"
version = "1.0.3"
##########################################################

View File

@@ -130,6 +130,8 @@ def read_lease_database(zk_conn, zk_leases_key):
def add_lease(zk_conn, zk_leases_key, expiry, macaddr, ipaddr, hostname, clientid):
if not hostname:
hostname = ""
try:
zk_conn.delete("{}/{}".format(zk_leases_key, macaddr), recursive=True)
transaction = zk_conn.transaction()
transaction.create("{}/{}".format(zk_leases_key, macaddr), "".encode("ascii"))
transaction.create(
@@ -145,6 +147,8 @@ def add_lease(zk_conn, zk_leases_key, expiry, macaddr, ipaddr, hostname, clienti
"{}/{}/clientid".format(zk_leases_key, macaddr), clientid.encode("ascii")
)
transaction.commit()
except Exception as e:
print(f"FATAL: {e}")
def del_lease(zk_conn, zk_leases_key, macaddr, expiry):

View File

@@ -58,7 +58,7 @@ from daemon_lib.automirror import (
)
# Daemon version
version = "1.0.2"
version = "1.0.3"
config = cfg.get_configuration()