summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRauno Väli <rauno@oyenetwork.com>2018-01-26 12:27:20 +0200
committerCole Robinson <crobinso@redhat.com>2018-01-30 11:30:22 -0500
commit582c1d3dedbb09f987039213648d9f37ef80fd7c (patch)
tree3f42011c76fd088414e67486e850404397a894bd
parentae5239358a1c162921eb4698c088e28e767fc68b (diff)
downloadvirt-manager-582c1d3dedbb09f987039213648d9f37ef80fd7c.tar.gz
devicedisk: copy all rbd pool host and auth for volume
(crobinso: add test suite coverage, fix some pylint)
-rw-r--r--tests/cli-test-xml/compare/virt-install-many-devices.xml5
-rw-r--r--tests/testdriver.xml3
-rw-r--r--virtinst/devicedisk.py32
-rw-r--r--virtinst/storage.py7
4 files changed, 46 insertions, 1 deletions
diff --git a/tests/cli-test-xml/compare/virt-install-many-devices.xml b/tests/cli-test-xml/compare/virt-install-many-devices.xml
index 20752ee7..e265b049 100644
--- a/tests/cli-test-xml/compare/virt-install-many-devices.xml
+++ b/tests/cli-test-xml/compare/virt-install-many-devices.xml
@@ -84,8 +84,13 @@
</disk>
<disk type="network" device="disk">
<driver name="qemu" type="raw"/>
+ <auth username="admin">
+ <secret type="ceph" uuid="f65cc5a8-b77b-4254-9030-d50a528fb456"/>
+ </auth>
<source protocol="rbd" name="rbd/foobar">
<host name="ceph-mon-1.example.com" port="6789"/>
+ <host name="ceph-mon-2.example.com" port="6789"/>
+ <host name="ceph-mon-3.example.com" port="6789"/>
</source>
<target dev="vdh" bus="virtio"/>
</disk>
diff --git a/tests/testdriver.xml b/tests/testdriver.xml
index d81dfcfc..7c74e431 100644
--- a/tests/testdriver.xml
+++ b/tests/testdriver.xml
@@ -2078,6 +2078,9 @@ ba</description>
<host name='ceph-mon-2.example.com' port='6789'/>
<host name='ceph-mon-3.example.com' port='6789'/>
<name>rbd</name>
+ <auth type='ceph' username='admin'>
+ <secret uuid='f65cc5a8-b77b-4254-9030-d50a528fb456'/>
+ </auth>
</source>
<volume type='network'>
diff --git a/virtinst/devicedisk.py b/virtinst/devicedisk.py
index 9f56398e..2cbc0a62 100644
--- a/virtinst/devicedisk.py
+++ b/virtinst/devicedisk.py
@@ -90,6 +90,14 @@ def _is_dir_searchable(uid, username, path):
return bool(re.search("user:%s:..x" % username, out))
+class _Host(XMLBuilder):
+ _XML_PROP_ORDER = ["name", "port"]
+ _XML_ROOT_NAME = "host"
+
+ name = XMLProperty("./@name")
+ port = XMLProperty("./@port", is_int=True)
+
+
class _DiskSeclabel(XMLBuilder):
"""
This is for disk source <seclabel>. It's similar to a domain
@@ -473,6 +481,7 @@ class VirtualDisk(VirtualDevice):
"driver_cache", "driver_discard", "driver_detect_zeroes",
"driver_io", "error_policy",
"_source_file", "_source_dev", "_source_dir",
+ "auth_username", "auth_secret_type", "auth_secret_uuid",
"source_volume", "source_pool", "source_protocol", "source_name",
"source_host_name", "source_host_port",
"source_host_transport", "source_host_socket",
@@ -587,6 +596,21 @@ class VirtualDisk(VirtualDevice):
source_pool = XMLProperty("./source/@pool")
source_volume = XMLProperty("./source/@volume")
+ auth_username = XMLProperty("./auth/@username")
+ auth_secret_type = XMLProperty("./auth/secret/@type")
+ auth_secret_uuid = XMLProperty("./auth/secret/@uuid")
+
+ def add_host(self, name, port):
+ obj = _Host(self.conn)
+ obj.name = name
+ obj.port = port
+ self.add_child(obj)
+
+ def remove_host(self, obj):
+ self.remove_child(obj)
+
+ hosts = XMLChildProperty(_Host, relative_xpath="./source")
+
source_name = XMLProperty("./source/@name")
source_protocol = XMLProperty("./source/@protocol")
# Technically multiple host lines can be listed
@@ -617,9 +641,17 @@ class VirtualDisk(VirtualDevice):
def _set_source_network_from_storage(self, volxml, poolxml):
self.source_protocol = poolxml.type
+ logging.debug("disk.set_vol_object: poolxml=\n%s",
+ dir(poolxml))
+ if poolxml.auth_type:
+ self.auth_username = poolxml.auth_username
+ self.auth_secret_type = poolxml.auth_type
+ self.auth_secret_uuid = poolxml.auth_secret_uuid
if poolxml.hosts:
self.source_host_name = poolxml.hosts[0].name
self.source_host_port = poolxml.hosts[0].port
+ for host in poolxml.hosts:
+ self.add_host(host.name, host.port)
path = ""
if poolxml.source_name:
diff --git a/virtinst/storage.py b/virtinst/storage.py
index 379bdd7f..c7c75127 100644
--- a/virtinst/storage.py
+++ b/virtinst/storage.py
@@ -390,7 +390,8 @@ class StoragePool(_StorageObject):
"format", "hosts",
"_source_dir", "_source_adapter", "_source_device",
"source_name", "target_path",
- "permissions"]
+ "permissions",
+ "auth_type", "auth_username", "auth_secret_uuid"]
_source_dir = XMLProperty("./source/dir/@path")
@@ -413,6 +414,10 @@ class StoragePool(_StorageObject):
default_cb=_default_source_name,
doc=_("Name of the Volume Group"))
+ auth_type = XMLProperty("./source/auth/@type")
+ auth_username = XMLProperty("./source/auth/@username")
+ auth_secret_uuid = XMLProperty("./source/auth/secret/@uuid")
+
target_path = XMLProperty("./target/path",
default_cb=_get_default_target_path)