143 lines
4.2 KiB
Python
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_()
|