Store metadata file
This commit is contained in:
parent
373c43fa0e
commit
4ec6acf731
@ -1,13 +1,11 @@
|
|||||||
import grpc
|
import grpc
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from google.protobuf.wrappers_pb2 import BoolValue
|
from google.protobuf.wrappers_pb2 import BoolValue
|
||||||
|
|
||||||
from consts import DATA_DIR
|
import rawfile_util
|
||||||
from csi import csi_pb2, csi_pb2_grpc
|
from csi import csi_pb2, csi_pb2_grpc
|
||||||
from orchestrator.k8s import volume_to_node, run_on_node
|
from orchestrator.k8s import volume_to_node, run_on_node
|
||||||
from util import log_grpc_request, run
|
|
||||||
from remote import init_rawfile, scrub
|
from remote import init_rawfile, scrub
|
||||||
|
from util import log_grpc_request, run
|
||||||
|
|
||||||
NODE_NAME_TOPOLOGY_KEY = "hostname"
|
NODE_NAME_TOPOLOGY_KEY = "hostname"
|
||||||
|
|
||||||
@ -49,9 +47,7 @@ class RawFileNodeServicer(csi_pb2_grpc.NodeServicer):
|
|||||||
@log_grpc_request
|
@log_grpc_request
|
||||||
def NodePublishVolume(self, request, context):
|
def NodePublishVolume(self, request, context):
|
||||||
mount_path = request.target_path
|
mount_path = request.target_path
|
||||||
img_dir = Path(f"{DATA_DIR}/{request.volume_id}")
|
img_file = rawfile_util.img_file(request.volume_id)
|
||||||
img_file = Path(f"{img_dir}/raw.img")
|
|
||||||
|
|
||||||
run(f"mount {img_file} {mount_path}")
|
run(f"mount {img_file} {mount_path}")
|
||||||
return csi_pb2.NodePublishVolumeResponse()
|
return csi_pb2.NodePublishVolumeResponse()
|
||||||
|
|
||||||
@ -112,7 +108,7 @@ class RawFileControllerServicer(csi_pb2_grpc.ControllerServicer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
size = request.capacity_range.required_bytes
|
size = request.capacity_range.required_bytes
|
||||||
size = min(size, 10 * 1024 * 1024) # At least 10MB
|
size = max(size, 10 * 1024 * 1024) # At least 10MB
|
||||||
|
|
||||||
try:
|
try:
|
||||||
node_name = request.accessibility_requirements.preferred[0].segments[
|
node_name = request.accessibility_requirements.preferred[0].segments[
|
||||||
|
30
rawfile_util.py
Normal file
30
rawfile_util.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from consts import DATA_DIR
|
||||||
|
|
||||||
|
|
||||||
|
def img_dir(volume_id):
|
||||||
|
return Path(f"{DATA_DIR}/{volume_id}")
|
||||||
|
|
||||||
|
|
||||||
|
def meta_file(volume_id):
|
||||||
|
return Path(f"{img_dir(volume_id)}/disk.meta")
|
||||||
|
|
||||||
|
|
||||||
|
def metadata(volume_id):
|
||||||
|
try:
|
||||||
|
return json.loads(meta_file(volume_id).read_text())
|
||||||
|
except FileNotFoundError:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def img_file(volume_id):
|
||||||
|
return Path(metadata(volume_id)["img_file"])
|
||||||
|
|
||||||
|
|
||||||
|
def patch_metadata(volume_id, obj):
|
||||||
|
old_data = metadata(volume_id)
|
||||||
|
new_data = {**old_data, **obj}
|
||||||
|
meta_file(volume_id).write_text(json.dumps(new_data))
|
||||||
|
return new_data
|
23
remote.py
23
remote.py
@ -3,18 +3,29 @@ from util import remote_fn
|
|||||||
|
|
||||||
@remote_fn
|
@remote_fn
|
||||||
def scrub(volume_id):
|
def scrub(volume_id):
|
||||||
# TODO: stub
|
import time
|
||||||
pass
|
import rawfile_util
|
||||||
|
|
||||||
|
rawfile_util.patch_metadata(volume_id, {"deleted_at": time.time()})
|
||||||
|
|
||||||
|
|
||||||
@remote_fn
|
@remote_fn
|
||||||
def init_rawfile(volume_id, size):
|
def init_rawfile(volume_id, size):
|
||||||
|
import time
|
||||||
|
import rawfile_util
|
||||||
from util import run
|
from util import run
|
||||||
from consts import DATA_DIR
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
img_dir = Path(f"{DATA_DIR}/{volume_id}")
|
img_dir = rawfile_util.img_dir(volume_id)
|
||||||
img_dir.mkdir(parents=False, exist_ok=False)
|
img_dir.mkdir(parents=False, exist_ok=False)
|
||||||
img_file = Path(f"{img_dir}/raw.img")
|
img_file = f"{img_dir}/disk.img"
|
||||||
|
rawfile_util.patch_metadata(
|
||||||
|
volume_id,
|
||||||
|
{
|
||||||
|
"volume_id": volume_id,
|
||||||
|
"created_at": time.time(),
|
||||||
|
"img_file": img_file,
|
||||||
|
"size": size,
|
||||||
|
},
|
||||||
|
)
|
||||||
run(f"truncate -s {size} {img_file}")
|
run(f"truncate -s {size} {img_file}")
|
||||||
run(f"mkfs.ext4 {img_file}")
|
run(f"mkfs.ext4 {img_file}")
|
||||||
|
Loading…
Reference in New Issue
Block a user