Fix path handling for zkhandler
Using full paths broke the local schema generator, so convert these to proper class instance methods and use them along with a new default + settable override.
This commit is contained in:
parent
7f7047dd52
commit
35153cd6b6
|
@ -21,4 +21,5 @@
|
||||||
|
|
||||||
from daemon_lib.zkhandler import ZKSchema
|
from daemon_lib.zkhandler import ZKSchema
|
||||||
|
|
||||||
ZKSchema.write()
|
schema = ZKSchema(root_path=".")
|
||||||
|
schema.write()
|
||||||
|
|
|
@ -30,7 +30,8 @@ from kazoo.client import KazooClient, KazooState
|
||||||
from kazoo.exceptions import NoNodeError
|
from kazoo.exceptions import NoNodeError
|
||||||
|
|
||||||
|
|
||||||
SCHEMA_ROOT_PATH = "daemon_lib/migrations/versions"
|
DEFAULT_ROOT_PATH = "/usr/share/pvc"
|
||||||
|
SCHEMA_PATH = "daemon_lib/migrations/versions"
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -832,8 +833,8 @@ class ZKSchema(object):
|
||||||
def schema(self, schema):
|
def schema(self, schema):
|
||||||
self._schema = schema
|
self._schema = schema
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, root_path=DEFAULT_ROOT_PATH):
|
||||||
pass
|
self.schema_path = f"{root_path}/{SCHEMA_PATH}"
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"ZKSchema({self.version})"
|
return f"ZKSchema({self.version})"
|
||||||
|
@ -873,7 +874,7 @@ class ZKSchema(object):
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print(f"Loading schema version {version}")
|
print(f"Loading schema version {version}")
|
||||||
|
|
||||||
with open(f"{SCHEMA_ROOT_PATH}/{version}.json", "r") as sfh:
|
with open(f"{self.schema_path}/{version}.json", "r") as sfh:
|
||||||
self.schema = json.load(sfh)
|
self.schema = json.load(sfh)
|
||||||
self.version = self.schema.get("version")
|
self.version = self.schema.get("version")
|
||||||
|
|
||||||
|
@ -1135,7 +1136,7 @@ class ZKSchema(object):
|
||||||
# Migrate from older to newer schema
|
# Migrate from older to newer schema
|
||||||
def migrate(self, zkhandler, new_version):
|
def migrate(self, zkhandler, new_version):
|
||||||
# Determine the versions in between
|
# Determine the versions in between
|
||||||
versions = ZKSchema.find_all(start=self.version, end=new_version)
|
versions = self.find_all(start=self.version, end=new_version)
|
||||||
if versions is None:
|
if versions is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -1151,7 +1152,7 @@ class ZKSchema(object):
|
||||||
# Rollback from newer to older schema
|
# Rollback from newer to older schema
|
||||||
def rollback(self, zkhandler, old_version):
|
def rollback(self, zkhandler, old_version):
|
||||||
# Determine the versions in between
|
# Determine the versions in between
|
||||||
versions = ZKSchema.find_all(start=old_version - 1, end=self.version - 1)
|
versions = self.find_all(start=old_version - 1, end=self.version - 1)
|
||||||
if versions is None:
|
if versions is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -1166,6 +1167,12 @@ class ZKSchema(object):
|
||||||
# Apply those changes
|
# Apply those changes
|
||||||
self.run_migrate(zkhandler, changes)
|
self.run_migrate(zkhandler, changes)
|
||||||
|
|
||||||
|
# Write the latest schema to a file
|
||||||
|
def write(self):
|
||||||
|
schema_file = f"{self.schema_path}/{self._version}.json"
|
||||||
|
with open(schema_file, "w") as sfh:
|
||||||
|
json.dump(self._schema, sfh)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def key_diff(cls, schema_a, schema_b):
|
def key_diff(cls, schema_a, schema_b):
|
||||||
# schema_a = current
|
# schema_a = current
|
||||||
|
@ -1211,26 +1218,10 @@ class ZKSchema(object):
|
||||||
|
|
||||||
return {"add": diff_add, "remove": diff_remove, "rename": diff_rename}
|
return {"add": diff_add, "remove": diff_remove, "rename": diff_rename}
|
||||||
|
|
||||||
# Load in the schemal of the current cluster
|
|
||||||
@classmethod
|
|
||||||
def load_current(cls, zkhandler):
|
|
||||||
new_instance = cls()
|
|
||||||
version = new_instance.get_version(zkhandler)
|
|
||||||
new_instance.load(version)
|
|
||||||
return new_instance
|
|
||||||
|
|
||||||
# Write the latest schema to a file
|
|
||||||
@classmethod
|
|
||||||
def write(cls):
|
|
||||||
schema_file = f"{SCHEMA_ROOT_PATH}/{cls._version}.json"
|
|
||||||
with open(schema_file, "w") as sfh:
|
|
||||||
json.dump(cls._schema, sfh)
|
|
||||||
|
|
||||||
# Static methods for reading information from the files
|
# Static methods for reading information from the files
|
||||||
@staticmethod
|
def find_all(self, start=0, end=None):
|
||||||
def find_all(start=0, end=None):
|
|
||||||
versions = list()
|
versions = list()
|
||||||
for version in os.listdir(SCHEMA_ROOT_PATH):
|
for version in os.listdir(self.schema_path):
|
||||||
sequence_id = int(version.split(".")[0])
|
sequence_id = int(version.split(".")[0])
|
||||||
if end is None:
|
if end is None:
|
||||||
if sequence_id > start:
|
if sequence_id > start:
|
||||||
|
@ -1243,11 +1234,18 @@ class ZKSchema(object):
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@staticmethod
|
def find_latest(self):
|
||||||
def find_latest():
|
|
||||||
latest_version = 0
|
latest_version = 0
|
||||||
for version in os.listdir(SCHEMA_ROOT_PATH):
|
for version in os.listdir(self.schema_path):
|
||||||
sequence_id = int(version.split(".")[0])
|
sequence_id = int(version.split(".")[0])
|
||||||
if sequence_id > latest_version:
|
if sequence_id > latest_version:
|
||||||
latest_version = sequence_id
|
latest_version = sequence_id
|
||||||
return latest_version
|
return latest_version
|
||||||
|
|
||||||
|
# Load in the schema of the current cluster
|
||||||
|
@classmethod
|
||||||
|
def load_current(cls, zkhandler):
|
||||||
|
new_instance = cls()
|
||||||
|
version = new_instance.get_version(zkhandler)
|
||||||
|
new_instance.load(version)
|
||||||
|
return new_instance
|
||||||
|
|
Loading…
Reference in New Issue