|
8 | 8 | ''' |
9 | 9 | from lib.Log.log import log |
10 | 10 | from lib.Val.virt_factory import VirtFactory |
| 11 | +from lib.Utils.network_utils import IpCheck, is_IP_pingable |
11 | 12 |
|
12 | 13 |
|
13 | 14 | def print_server_hardware_info(**kwargs): |
@@ -65,7 +66,104 @@ def get_host_all_storage_info(**kwargs): |
65 | 66 | return storage_info |
66 | 67 |
|
67 | 68 |
|
| 69 | +def get_default_device(host=None, user=None, passwd=None): |
| 70 | + """ |
| 71 | + get the host's default network/Interface which has configured an IP; |
| 72 | + :param kwargs: |
| 73 | + :return: Interface name on host, or None |
| 74 | + """ |
| 75 | + log.info("Get the host default network with IP configured.") |
| 76 | + |
| 77 | + host_name = host |
| 78 | + user = user if user else "root" |
| 79 | + passwd = str(passwd).replace('\\', '') if passwd else "" |
| 80 | + |
| 81 | + vnet_driver = VirtFactory.get_vnet_driver(host_name, user, passwd) |
| 82 | + |
| 83 | + devices = vnet_driver.get_all_devices() |
| 84 | + for device_name in devices: |
| 85 | + # 'IP': '' or an ip, |
| 86 | + device_info = vnet_driver.get_device_infor(device_name=device_name) |
| 87 | + ipstr = device_info.get('IP', '') |
| 88 | + if ipstr: |
| 89 | + return device_name |
| 90 | + else: |
| 91 | + log.error("No device found with an IP configured.") |
| 92 | + return None |
| 93 | + |
| 94 | + |
| 95 | +def get_default_storage(host=None, user=None, passwd=None): |
| 96 | + """ |
| 97 | + get the default storage repository which has the largest volume for user |
| 98 | + :param host: |
| 99 | + :param user: |
| 100 | + :param passwd: |
| 101 | + :return: the storage name |
| 102 | + """ |
| 103 | + log.info("Get the host default storage name which has the largest free volume.") |
| 104 | + |
| 105 | + host_name = host |
| 106 | + user = user if user else "root" |
| 107 | + passwd = str(passwd).replace('\\', '') if passwd else "" |
| 108 | + |
| 109 | + virt_driver = VirtFactory.get_virt_driver(host_name, user, passwd) |
| 110 | + all_sr = virt_driver.get_host_all_storages() |
| 111 | + max_volume, target_sr = 0, None |
| 112 | + for sr in all_sr: |
| 113 | + storage_dict = virt_driver.get_host_storage_info(storage_name=sr) |
| 114 | + temp = int(storage_dict.get('size_free', 0)) |
| 115 | + if temp > max_volume: |
| 116 | + max_volume, target_sr = temp, sr |
| 117 | + |
| 118 | + log.info("The default storage is '%s' with volume %s GB.", target_sr, max_volume) |
| 119 | + return target_sr |
| 120 | + |
| 121 | + |
| 122 | +def is_IP_available(vif_ip=None, vif_netmask=None, device=None, **kwargs): |
| 123 | + """ |
| 124 | + check if a IP and Netmask usable |
| 125 | + """ |
| 126 | + # No ip , don't need to check |
| 127 | + if not vif_ip: |
| 128 | + return True |
| 129 | + |
| 130 | + dest_metmask = "" |
| 131 | + dest_gateway = None |
| 132 | + if device is not None: |
| 133 | + try: |
| 134 | + host_name = kwargs['host'] |
| 135 | + user = kwargs['user'] if kwargs['user'] else "root" |
| 136 | + passwd = str(kwargs['passwd']).replace('\\', '') if kwargs['passwd'] else "" |
| 137 | + vnet_driver = VirtFactory.get_vnet_driver(host_name, user, passwd) |
| 138 | + device_info = vnet_driver.get_device_infor(device_name=device) |
| 139 | + dest_metmask = device_info["netmask"] |
| 140 | + dest_gateway = device_info['gateway'] |
| 141 | + except KeyError, error: |
| 142 | + log.exception(str(error)) |
| 143 | + |
| 144 | + if vif_netmask: |
| 145 | + if dest_metmask and dest_metmask != vif_netmask: |
| 146 | + log.error("Netmask [%s] is not corresponding with the target network.", vif_netmask) |
| 147 | + return False |
| 148 | + else: # get the netmask on device as the default one |
| 149 | + vif_netmask = dest_metmask |
| 150 | + log.debug("VIF IP is: %s, netmask is: %s", vif_ip, vif_netmask) |
| 151 | + if not vif_netmask: # No default netmask and no given |
| 152 | + log.error("No netmask given, please specify one.") |
| 153 | + return False |
| 154 | + |
| 155 | + vif_gateway = dest_gateway if dest_gateway else None |
| 156 | + if not IpCheck.is_valid_ipv4_parameter(vif_ip, vif_netmask, gateway=vif_gateway): |
| 157 | + return False |
| 158 | + |
| 159 | + if is_IP_pingable(vif_ip): |
| 160 | + log.error("Ipaddress [%s] is already be used(Ping test).", vif_ip) |
| 161 | + return False |
| 162 | + |
| 163 | + return True |
| 164 | + |
| 165 | + |
68 | 166 | if __name__ == "__main__": |
69 | 167 | d = get_host_all_storage_info(host="10.143.248.16", user="root", passwd="Mojiti!906") |
70 | 168 | for k, v in d.iteritems(): |
71 | | - print k,"\t\t", v |
| 169 | + print k, "\t\t", v |
0 commit comments