~ubuntu-branches/ubuntu/quantal/virtinst/quantal-proposed

« back to all changes in this revision

Viewing changes to virtinst/VirtualHostDevice.py

  • Committer: Bazaar Package Importer
  • Author(s): Laurent Léonard
  • Date: 2011-01-29 21:41:21 UTC
  • mto: (1.6.3 sid)
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: james.westby@ubuntu.com-20110129214121-pjuxf2xz08l5zqew
Tags: upstream-0.500.5
Import upstream version 0.500.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from virtinst import support
26
26
from virtinst import _util
27
27
from virtinst import _virtinst as _
 
28
from XMLBuilderDomain import _xml_property
28
29
 
29
30
class VirtualHostDevice(VirtualDevice.VirtualDevice):
30
31
 
70
71
 
71
72
    device_from_node = staticmethod(device_from_node)
72
73
 
73
 
    def __init__(self, conn, nodedev):
 
74
    def __init__(self, conn, nodedev=None,
 
75
                 parsexml=None, parsexmlnode=None, caps=None):
74
76
        """
75
77
        @param conn: Connection the device/guest will be installed on
76
78
        @type conn: libvirt.virConnect
78
80
                         attached to the guest
79
81
        @type nodedev: L{virtinst.NodeDeviceParser.NodeDevice}
80
82
        """
81
 
        VirtualDevice.VirtualDevice.__init__(self, conn)
82
 
 
83
 
        self.mode = None
84
 
        self.type = None
 
83
        VirtualDevice.VirtualDevice.__init__(self, conn, parsexml,
 
84
                                             parsexmlnode, caps)
 
85
 
 
86
        self._mode = None
 
87
        self._type = None
 
88
        self._managed = None
 
89
        self._nodedev = nodedev
 
90
        self._vendor = None
 
91
        self._product = None
 
92
        self._bus = None
 
93
        self._device = None
 
94
        self._domain = "0x0"
 
95
        self._slot = None
 
96
        self._function = None
 
97
 
 
98
        if self._is_parse():
 
99
            return
85
100
 
86
101
        self.managed = True
87
102
        if _util.get_uri_driver(self.conn.getURI()).lower() == "xen":
88
103
            self.managed = False
89
104
 
90
 
        self._nodedev = nodedev
 
105
 
 
106
    def get_mode(self):
 
107
        return self._mode
 
108
    def set_mode(self, val):
 
109
        self._mode = val
 
110
    mode = _xml_property(get_mode, set_mode,
 
111
                         xpath="./@mode")
 
112
 
 
113
    def get_type(self):
 
114
        return self._type
 
115
    def set_type(self, val):
 
116
        self._type = val
 
117
    type = _xml_property(get_type, set_type,
 
118
                         xpath="./@type")
 
119
 
 
120
    def get_managed(self):
 
121
        return self._managed
 
122
    def set_managed(self, val):
 
123
        self._managed = bool(val)
 
124
    managed = _xml_property(get_type, set_type,
 
125
                            get_converter=lambda s, x: bool(x == "yes"),
 
126
                            set_converter=lambda s, x: x and "yes" or "no",
 
127
                            xpath="./@managed")
 
128
 
 
129
    def get_vendor(self):
 
130
        return self._vendor
 
131
    def set_vendor(self, val):
 
132
        self._vendor = val
 
133
    vendor = _xml_property(get_vendor, set_vendor,
 
134
                           xpath="./source/vendor/@id")
 
135
 
 
136
    def get_product(self):
 
137
        return self._product
 
138
    def set_product(self, val):
 
139
        self._product = val
 
140
    product = _xml_property(get_product, set_product,
 
141
                            xpath="./source/product/@id")
 
142
 
 
143
    def get_device(self):
 
144
        return self._device
 
145
    def set_device(self, val):
 
146
        self._device = val
 
147
    device = _xml_property(get_device, set_device,
 
148
                           xpath="./source/address/@device")
 
149
 
 
150
    def get_bus(self):
 
151
        return self._bus
 
152
    def set_bus(self, val):
 
153
        self._bus = val
 
154
    bus = _xml_property(get_bus, set_bus,
 
155
                        xpath="./source/address/@bus")
 
156
 
 
157
    def get_function(self):
 
158
        return self._function
 
159
    def set_function(self, val):
 
160
        self._function = val
 
161
    function = _xml_property(get_function, set_function,
 
162
                             xpath="./source/address/@function")
 
163
 
 
164
    def get_domain(self):
 
165
        return self._domain
 
166
    def set_domain(self, val):
 
167
        self._domain = val
 
168
    domain = _xml_property(get_domain, set_domain,
 
169
                             xpath="./source/address/@domain")
 
170
 
 
171
    def get_slot(self):
 
172
        return self._slot
 
173
    def set_slot(self, val):
 
174
        self._slot = val
 
175
    slot = _xml_property(get_slot, set_slot,
 
176
                         xpath="./source/address/@slot")
91
177
 
92
178
    def _get_source_xml(self):
93
179
        raise NotImplementedError("Must be implemented in subclass")
94
180
 
95
 
    def setup(self, conn = None):
 
181
    def setup(self, conn=None):
96
182
        """
97
183
        Perform DeviceDetach and DeviceReset calls if necessary
98
184
 
101
187
        """
102
188
        raise NotImplementedError
103
189
 
104
 
    def get_xml_config(self):
105
 
        xml =  ("    <hostdev mode='%s' type='%s' managed='%s'>\n" % \
 
190
    def _get_xml_config(self):
 
191
        xml  = ("    <hostdev mode='%s' type='%s' managed='%s'>\n" % \
106
192
                (self.mode, self.type, self.managed and "yes" or "no"))
107
193
        xml += "      <source>\n"
108
194
        xml += self._get_source_xml()
119
205
        self.mode = "subsystem"
120
206
        self.type = "usb"
121
207
 
122
 
        self.vendor = None
123
 
        self.product = None
124
 
 
125
 
        self.bus = None
126
 
        self.device = None
127
 
 
128
208
        self._set_from_nodedev(self._nodedev)
129
209
 
130
210
 
156
236
    def setup_dev(self, conn=None, meter=None):
157
237
        return self.setup(conn)
158
238
 
159
 
    def setup(self, conn = None):
 
239
    def setup(self, conn=None):
160
240
        """
161
241
        DEPRECATED: Please use setup_dev instead
162
242
        """
174
254
        self.mode = "subsystem"
175
255
        self.type = "pci"
176
256
 
177
 
        self.domain = "0x0"
178
 
        self.bus = None
179
 
        self.slot = None
180
 
        self.function = None
181
 
 
182
257
        self._set_from_nodedev(self._nodedev)
183
258
 
184
259
 
211
286
        """
212
287
        return self.setup(conn)
213
288
 
214
 
    def setup(self, conn = None):
 
289
    def setup(self, conn=None):
215
290
        """
216
291
        DEPRECATED: Please use setup_dev instead
217
292
        """
234
309
                    raise
235
310
        except Exception, e:
236
311
            raise RuntimeError(_("Could not detach PCI device: %s" % str(e)))
237
 
 
238