Skip to content

Commit

Permalink
Support VirtiofsMounts
Browse files Browse the repository at this point in the history
  • Loading branch information
hartmans committed Nov 19, 2024
1 parent d42d5ea commit 985747f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
18 changes: 17 additions & 1 deletion carthage/resources/templates/vm-config.mako
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ def is_vnc():
<carthage:layout xmlns:carthage='https://github.com/hadron/carthage' layout='${layout_name}' orphan_policy='${orphan_policy.name}'/>
</metadata>
<memory unit='KiB'>${memory_mb*1024}</memory>
%if virtiofs_mounts:
<memoryBacking>
<source type='memfd'/>
<access mode='shared'/>
</memoryBacking>
%endif

<vcpu placement='static' >${cpus}</vcpu>
<cpu mode='host-model'>
Expand Down Expand Up @@ -91,7 +97,17 @@ def is_vnc():
<backend type='emulator' version='2.0'/>
</tpm>
%endif
%for i, link in links.items():
%for mount in virtiofs_mounts:
<filesystem type='mount' accessmode='passthrough'>
<driver type='virtiofs'/>
<source dir='${mount.source}'/>
<target dir='${mount.destination}'/>
%if mount.readonly:
<readonly />
%endif
</filesystem>
%endfor
%for i, link in links.items():
<% if link.local_type: continue %>\
<interface type='bridge'>
%if link.mac is not None:
Expand Down
26 changes: 22 additions & 4 deletions carthage/vm.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,18 @@

vm_image_key = InjectionKey('vm-image')

# Our capitalization rules are kind of under-sspecified. We're not
# upcasing all letters of acronyms in camel-case compounds, but Vm
# seems strange. VM is canonical but Vm is an accepted alias.
#dataclasses.dataclass
class VirtiofsMount(Injectable):

destination: str
source:str
readonly:bool = False
priority:int = 100

def default_instance_injection_key(self):
return InjectionKey(VirtiofsMount, destination=self.destination, priority=self.priority)



@inject_autokwargs(
injector=Injector,
Expand Down Expand Up @@ -144,6 +152,7 @@ async def write_config(self):
links=self.network_links,
model_in=self.model,
disk_config=disk_config,
virtiofs_mounts=self.virtiofs_mounts,
if_name=lambda n: carthage.network.base.if_name(
"vn", self.config_layout.container_prefix, n.name, self.name),
uuid=self.uuid,
Expand Down Expand Up @@ -372,6 +381,15 @@ async def delete(self):
except Exception: pass
del self.stamp_path

@memoproperty
def virtiofs_mounts(self):
'''
Return a list of VirtiofsMounts that should be mounted by this VM in config order. By default self.injector.filter_instantiate is used.
'''
res = [x[1] for x in self.injector.filter_instantiate(VirtiofsMount, ['destination'])]
res.sort(key=lambda k:k.priority)
return res

VM = Vm


Expand Down Expand Up @@ -567,4 +585,4 @@ def __init__(self, **kwargs):
cl = self.injector.get_instance(ConfigLayout)
cl.container_prefix = ""

__all__ = ('VM', 'Vm', 'InstallQemuAgent')
__all__ = ('VM', 'Vm', 'InstallQemuAgent', 'VirtiofsMount')

0 comments on commit 985747f

Please sign in to comment.