cli: Add --keywrap cipher[0-9]*.name=aes|des, cipher[0-9]*.state=on|off

XML Mapping:

<domain>
...
  <keywrap>
    <cipher name="X" state="X"/>
  </keywrap>
...
</domain>

Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Athina Plaskasoviti <athina.plaskasoviti@gmail.com>
This commit is contained in:
Athina Plaskasoviti 2019-07-21 16:37:37 +03:00 committed by Cole Robinson
parent 567463a07c
commit 9afe51a0f8
6 changed files with 56 additions and 1 deletions

View File

@ -211,6 +211,9 @@
<seclabel type="dynamic" model="dac"> <seclabel type="dynamic" model="dac">
<label>012:345</label> <label>012:345</label>
</seclabel> </seclabel>
<keywrap>
<cipher name="aes" state="on"/>
</keywrap>
<on_lockfailure>ignore</on_lockfailure> <on_lockfailure>ignore</on_lockfailure>
<cputune> <cputune>
<vcpupin vcpu="0" cpuset="0-3"/> <vcpupin vcpu="0" cpuset="0-3"/>
@ -432,6 +435,9 @@
<seclabel type="dynamic" model="dac"> <seclabel type="dynamic" model="dac">
<label>012:345</label> <label>012:345</label>
</seclabel> </seclabel>
<keywrap>
<cipher name="aes" state="on"/>
</keywrap>
<on_lockfailure>ignore</on_lockfailure> <on_lockfailure>ignore</on_lockfailure>
<cputune> <cputune>
<vcpupin vcpu="0" cpuset="0-3"/> <vcpupin vcpu="0" cpuset="0-3"/>

View File

@ -511,6 +511,7 @@ cache.mode=emulate,cache.level=3
--idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10 --idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10
--seclabel type=static,label='system_u:object_r:svirt_image_t:s0:c100,c200',relabel=yes,baselabel=baselabel --seclabel type=static,label='system_u:object_r:svirt_image_t:s0:c100,c200',relabel=yes,baselabel=baselabel
--seclabel type=dynamic,label=012:345 --seclabel type=dynamic,label=012:345
--keywrap cipher0.name=aes,cipher0.state=on
--numatune 1-3,4,mode=strict,\ --numatune 1-3,4,mode=strict,\
memnode0.cellid=1,memnode0.mode=strict,memnode0.nodeset=2 memnode0.cellid=1,memnode0.mode=strict,memnode0.nodeset=2
--memtune hard_limit=10,soft_limit=20,swap_hard_limit=30,min_guarantee=40 --memtune hard_limit=10,soft_limit=20,swap_hard_limit=30,min_guarantee=40

View File

@ -775,6 +775,10 @@ def add_guest_xml_options(geng):
geng.add_argument("--seclabel", "--security", action="append", geng.add_argument("--seclabel", "--security", action="append",
help=_("Set domain seclabel configuration.")) help=_("Set domain seclabel configuration."))
ParserKeyWrap.register()
geng.add_argument("--keywrap", action="append",
help=_("Set guest to perform the S390 cryptographic key management operations."))
ParserCputune.register() ParserCputune.register()
geng.add_argument("--cputune", action="append", geng.add_argument("--cputune", action="append",
help=_("Tune CPU parameters for the domain process.")) help=_("Tune CPU parameters for the domain process."))
@ -2367,6 +2371,29 @@ class ParserSeclabel(VirtCLIParser):
cls.add_arg("baselabel", "baselabel", can_comma=True) cls.add_arg("baselabel", "baselabel", can_comma=True)
######################
# --keywrap parsing #
######################
class ParserKeyWrap(VirtCLIParser):
cli_arg_name = "keywrap"
guest_propname = "keywrap"
def cipher_find_inst_cb(self, *args, **kwargs):
cliarg = "cipher" # keywrap[0-9]*
list_propname = "cipher"
cb = self._make_find_inst_cb(cliarg, list_propname)
return cb(*args, **kwargs)
@classmethod
def _init_class(cls, **kwargs):
VirtCLIParser._init_class(**kwargs)
cls.add_arg("cipher[0-9]*.name", "name", can_comma=True,
find_inst_cb=cls.cipher_find_inst_cb)
cls.add_arg("cipher[0-9]*.state", "state", can_comma=True,
find_inst_cb=cls.cipher_find_inst_cb)
###################### ######################
# --features parsing # # --features parsing #
###################### ######################

View File

@ -16,6 +16,7 @@ from .os import DomainOs
from .pm import DomainPm from .pm import DomainPm
from .resource import DomainResource from .resource import DomainResource
from .seclabel import DomainSeclabel from .seclabel import DomainSeclabel
from .keywrap import DomainKeyWrap
from .sysinfo import DomainSysinfo from .sysinfo import DomainSysinfo
from .vcpus import DomainVCPUs from .vcpus import DomainVCPUs
from .xmlnsqemu import DomainXMLNSQemu from .xmlnsqemu import DomainXMLNSQemu

View File

@ -0,0 +1,19 @@
from ..xmlbuilder import XMLBuilder, XMLProperty, XMLChildProperty
class _KeyWrap(XMLBuilder):
XML_NAME = "cipher"
_XML_PROP_ORDER = ["name", "state"]
name = XMLProperty("./@name")
state = XMLProperty("./@state", is_onoff=True)
class DomainKeyWrap(XMLBuilder):
"""
Class for generating <keywrap> XML
"""
XML_NAME = "keywrap"
cipher = XMLChildProperty(_KeyWrap)

View File

@ -213,7 +213,7 @@ class Guest(XMLBuilder):
"vcpu_cpuset", "vcpulist", "numatune", "resource", "sysinfo", "vcpu_cpuset", "vcpulist", "numatune", "resource", "sysinfo",
"bootloader", "os", "idmap", "features", "cpu", "clock", "bootloader", "os", "idmap", "features", "cpu", "clock",
"on_poweroff", "on_reboot", "on_crash", "on_poweroff", "on_reboot", "on_crash",
"pm", "emulator", "devices", "launchSecurity", "seclabels"] "pm", "emulator", "devices", "launchSecurity", "seclabels", "keywrap"]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
XMLBuilder.__init__(self, *args, **kwargs) XMLBuilder.__init__(self, *args, **kwargs)
@ -294,6 +294,7 @@ class Guest(XMLBuilder):
vcpulist = XMLChildProperty(DomainVCPUs, is_single=True) vcpulist = XMLChildProperty(DomainVCPUs, is_single=True)
seclabels = XMLChildProperty(DomainSeclabel) seclabels = XMLChildProperty(DomainSeclabel)
keywrap = XMLChildProperty(DomainKeyWrap, is_single=True)
os = XMLChildProperty(DomainOs, is_single=True) os = XMLChildProperty(DomainOs, is_single=True)
features = XMLChildProperty(DomainFeatures, is_single=True) features = XMLChildProperty(DomainFeatures, is_single=True)
clock = XMLChildProperty(DomainClock, is_single=True) clock = XMLChildProperty(DomainClock, is_single=True)