manila/manila/tests/windows/windowsutils.py

143 lines
4.2 KiB
Python

# Copyright 2012 Pedro Navarro Perez
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
Windows storage classes to be used in testing.
"""
import os
from oslo.config import cfg
# Check needed for unit testing on Unix
if os.name == 'nt':
import wmi
CONF = cfg.CONF
class WindowsUtils(object):
def __init__(self):
self.__conn_cimv2 = None
self.__conn_wmi = None
@property
def _conn_cimv2(self):
if self.__conn_cimv2 is None:
self.__conn_cimv2 = wmi.WMI(moniker='//./root/cimv2')
return self.__conn_cimv2
@property
def _conn_wmi(self):
if self.__conn_wmi is None:
self.__conn_wmi = wmi.WMI(moniker='//./root/wmi')
return self.__conn_wmi
def find_vhd_by_name(self, name):
'''Finds a volume by its name.'''
wt_disks = self._conn_wmi.WT_Disk(Description=name)
return wt_disks
def volume_exists(self, name):
'''Checks if a volume exists.'''
wt_disks = self.find_vhd_by_name(name)
if len(wt_disks) > 0:
return True
return False
def snapshot_exists(self, name):
'''Checks if a snapshot exists.'''
wt_snapshots = self.find_snapshot_by_name(name)
if len(wt_snapshots) > 0:
return True
return False
def find_snapshot_by_name(self, name):
'''Finds a snapshot by its name.'''
wt_snapshots = self._conn_wmi.WT_Snapshot(Description=name)
return wt_snapshots
def delete_volume(self, name):
'''Deletes a volume.'''
wt_disk = self._conn_wmi.WT_Disk(Description=name)[0]
wt_disk.Delete_()
vhdfiles = self._conn_cimv2.query(
"Select * from CIM_DataFile where Name = '" +
self._get_vhd_path(name) + "'")
if len(vhdfiles) > 0:
vhdfiles[0].Delete()
def _get_vhd_path(self, volume_name):
'''Gets the path disk of the volume.'''
base_vhd_folder = CONF.windows_iscsi_lun_path
return os.path.join(base_vhd_folder, volume_name + ".vhd")
def delete_snapshot(self, name):
'''Deletes a snapshot.'''
wt_snapshot = self._conn_wmi.WT_Snapshot(Description=name)[0]
wt_snapshot.Delete_()
vhdfile = self._conn_cimv2.query(
"Select * from CIM_DataFile where Name = '" +
self._get_vhd_path(name) + "'")[0]
vhdfile.Delete()
def find_initiator_ids(self, target_name, initiator_name):
'''Finds a initiator id by its name.'''
wt_idmethod = self._conn_wmi.WT_IDMethod(HostName=target_name,
Method=4,
Value=initiator_name)
return wt_idmethod
def initiator_id_exists(self, target_name, initiator_name):
'''Checks if a initiatorId exists.'''
wt_idmethod = self.find_initiator_ids(target_name, initiator_name)
if len(wt_idmethod) > 0:
return True
return False
def find_exports(self, target_name):
'''Finds a export id by its name.'''
wt_host = self._conn_wmi.WT_Host(HostName=target_name)
return wt_host
def export_exists(self, target_name):
'''Checks if a export exists.'''
wt_host = self.find_exports(target_name)
if len(wt_host) > 0:
return True
return False
def delete_initiator_id(self, target_name, initiator_name):
'''Deletes a initiatorId.'''
wt_init_id = self.find_initiator_ids(target_name, initiator_name)[0]
wt_init_id.Delete_()
def delete_export(self, target_name):
'''Deletes an export.'''
wt_host = self.find_exports(target_name)[0]
wt_host.RemoveAllWTDisks()
wt_host.Delete_()