def add_storage_for_backup(deployConfig): print "try to add backup storage" if xmlobject.has_element(deployConfig, 'backupStorages.imageStoreBackupStorage'): print "find image store backup storage" for bs in xmlobject.safe_list(deployConfig.backupStorages.imageStoreBackupStorage): if hasattr(bs, 'local_backup_storage_'): print "find local_backup_storage" cond = res_ops.gen_query_conditions('tag', '=', "allowbackup") tags = res_ops.query_resource(res_ops.SYSTEM_TAG, cond) if len(tags) > 0: print "local backup storage already exists" break cond = res_ops.gen_query_conditions('name', '=', bs.name_) bss = res_ops.query_resource(res_ops.BACKUP_STORAGE, cond) print bss add_local_bs_tag = tag_ops.create_system_tag('ImageStoreBackupStorageVO', bss[0].uuid,'allowbackup') if xmlobject.has_element(deployConfig, 'backupStorages.imageStoreBackupStorage'): for bs in xmlobject.safe_list(deployConfig.backupStorages.imageStoreBackupStorage): if hasattr(bs, 'remote_backup_storage_'): print "find remote_backup_storage" cond = res_ops.gen_query_conditions('tag', '=', "remotebackup") tags = res_ops.query_resource(res_ops.SYSTEM_TAG, cond) if len(tags) > 0: print "remote backup storage already exists" break cond = res_ops.gen_query_conditions('name', '=', bs.name_) bss = res_ops.query_resource(res_ops.BACKUP_STORAGE, cond) print bss add_local_bs_tag = tag_ops.create_system_tag('ImageStoreBackupStorageVO', bss[0].uuid,'remotebackup')
def add_backup_storage(deployConfig, session_uuid): if xmlobject.has_element(deployConfig, 'backupStorages.sftpBackupStorage'): for bs in xmlobject.safe_list(deployConfig.backupStorages.sftpBackupStorage): action = api_actions.AddSftpBackupStorageAction() action.sessionUuid = session_uuid action.name = bs.name_ action.description = bs.description__ action.url = bs.url_ action.username = bs.username_ action.password = bs.password_ action.hostname = bs.hostname_ action.timeout = AddKVMHostTimeOut #for some platform slowly salt execution action.type = inventory.SFTP_BACKUP_STORAGE_TYPE if bs.uuid__: action.resourceUuid = bs.uuid__ thread = threading.Thread(target = _thread_for_action, args = (action, )) wait_for_thread_queue() thread.start() if xmlobject.has_element(deployConfig, 'backupStorages.simulatorBackupStorage'): for bs in xmlobject.safe_list(deployConfig.backupStorages.simulatorBackupStorage): action = api_actions.AddSimulatorBackupStorageAction() action.sessionUuid = session_uuid action.name = bs.name_ action.description = bs.description__ action.url = bs.url_ action.type = inventory.SIMULATOR_BACKUP_STORAGE_TYPE action.totalCapacity = sizeunit.get_size(bs.totalCapacity_) action.availableCapacity = sizeunit.get_size(bs.availableCapacity_) thread = threading.Thread(target = _thread_for_action, args = (action, )) wait_for_thread_queue() thread.start() wait_for_thread_done()
def _add_cluster(action, zone_ref, cluster, cluster_ref): evt = action.run() deploy_logger(jsonobject.dumps(evt)) cinv = evt.inventory try: if xmlobject.has_element(cluster, 'primaryStorageRef'): for pref in xmlobject.safe_list(cluster.primaryStorageRef): ps_name = generate_dup_name(generate_dup_name(pref.text_, zone_ref, 'z'), cluster_ref, 'c') pinvs = res_ops.get_resource(res_ops.PRIMARY_STORAGE, session_uuid, name=ps_name) pinv = get_first_item_from_list(pinvs, 'Primary Storage', ps_name, 'Cluster') action_ps = api_actions.AttachPrimaryStorageToClusterAction() action_ps.sessionUuid = session_uuid action_ps.clusterUuid = cinv.uuid action_ps.primaryStorageUuid = pinv.uuid evt = action_ps.run() deploy_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) if cluster.allL2NetworkRef__ == 'true': # find all L2 network in zone and attach to cluster cond = res_ops.gen_query_conditions('zoneUuid', '=', action.zoneUuid) l2_count = res_ops.query_resource_count(res_ops.L2_NETWORK, cond, session_uuid) l2invs = res_ops.query_resource_fields(res_ops.L2_NETWORK, [{'name': 'zoneUuid', 'op': '=', 'value': action.zoneUuid}], session_uuid, ['uuid'], 0, l2_count) else: l2invs = [] if xmlobject.has_element(cluster, 'l2NetworkRef'): for l2ref in xmlobject.safe_list(cluster.l2NetworkRef): l2_name = generate_dup_name(generate_dup_name(l2ref.text_, zone_ref, 'z'), cluster_ref, 'c') cond = res_ops.gen_query_conditions('zoneUuid', '=', action.zoneUuid) cond = res_ops.gen_query_conditions('name', '=', l2_name, cond) l2inv = res_ops.query_resource_fields(res_ops.L2_NETWORK, cond, session_uuid, ['uuid']) if not l2inv: raise DeployError("Can't find l2 network [%s] in database." % l2_name) l2invs.extend(l2inv) for l2inv in l2invs: action = api_actions.AttachL2NetworkToClusterAction() action.sessionUuid = session_uuid action.clusterUuid = cinv.uuid action.l2NetworkUuid = l2inv.uuid thread = threading.Thread(target=_thread_for_action, args=(action,)) wait_for_thread_queue() thread.start()
def skip_if_not_storage_network_separate(scenarioConfig): is_storage_network_separated = False for host in xmlobject.safe_list(scenarioConfig.deployerConfig.hosts.host): for vm in xmlobject.safe_list(host.vms.vm): for l3Network in xmlobject.safe_list(vm.l3Networks.l3Network): if xmlobject.has_element(l3Network, 'primaryStorageRef'): is_storage_network_separated = True break if not is_storage_network_separated: test_util.test_skip("not found separate network in scenario config.")
def add_ip_range(deployConfig, session_uuid, ip_range_name=None, zone_name=None, l3_name=None): """ Call by only adding an IP range. If the IP range is in L3 config, add_l3_network will add ip range direclty. deployConfig is a xmlobject. If using standard net_operation, please check net_operations.add_ip_range(test_util.IpRangeOption()) """ if not xmlobject.has_element(deployConfig, "zones.zone"): return l3networks = [] for zone in xmlobject.safe_list(deployConfig.zones.zone): if zone_name and zone_name != zone.name_: continue l2networks = [] if xmlobject.has_element(zone, 'l2Networks.l2NoVlanNetwork'): l2networks.extend(xmlobject.safe_list(zone.l2Networks.l2NoVlanNetwork)) if xmlobject.has_element(zone, 'l2Networks.l2VlanNetwork'): l2networks.extend(xmlobject.safe_list(zone.l2Networks.l2VlanNetwork)) for l2 in l2networks: if xmlobject.has_element(l2, 'l3Networks.l3BasicNetwork'): l3networks.extend(xmlobject.safe_list(l2.l3Networks.l3BasicNetwork)) if zone.duplication__ == None: duplication = 1 else: duplication = int(zone.duplication__) for zone_duplication in range(duplication): for l3 in l3networks: if l3_name and l3_name != l3.name_: continue if not xmlobject.has_element(l3, 'ipRange'): continue if zone_duplication == 0: l3Name = l3.name_ else: l3Name = generate_dup_name(l3.name_, zone_duplication, 'z') l3_invs = res_ops.get_resource(res_ops.L3_NETWORK, session_uuid, name=l3Name) l3_inv = get_first_item_from_list(l3_invs, 'L3 Network', l3Name, 'IP range') do_add_ip_range(l3.ipRange, l3_inv.uuid, session_uuid, ip_range_name)
def recover_host_vlan(host_vm, scenarioConfig, deploy_config): host_ip = host_vm.ip_ test_lib.lib_wait_target_up(host_ip, '22', 120) host_config = sce_ops.get_scenario_config_vm(host_vm.name_,scenarioConfig) for l3network in xmlobject.safe_list(host_config.l3Networks.l3Network): if hasattr(l3network, 'l2NetworkRef'): for l2networkref in xmlobject.safe_list(l3network.l2NetworkRef): nic_name = sce_ops.get_ref_l2_nic_name(l2networkref.text_, deploy_config) if nic_name.find('.') >= 0 : vlan = nic_name.split('.')[1] test_util.test_logger('[vm:] %s %s is created.' % (host_ip, nic_name.replace("eth", "zsn"))) cmd = 'vconfig add %s %s' % (nic_name.split('.')[0].replace("eth", "zsn"), vlan) test_lib.lib_execute_ssh_cmd(host_ip, host_config.imageUsername_, host_config.imagePassword_, cmd) return True
def add_network_service(deployConfig, session_uuid): if not xmlobject.has_element(deployConfig, "zones.zone"): return l3networks = [] for zone in xmlobject.safe_list(deployConfig.zones.zone): l2networks = [] if xmlobject.has_element(zone, 'l2Networks.l2NoVlanNetwork'): l2networks.extend(xmlobject.safe_list(zone.l2Networks.l2NoVlanNetwork)) if xmlobject.has_element(zone, 'l2Networks.l2VlanNetwork'): l2networks.extend(xmlobject.safe_list(zone.l2Networks.l2VlanNetwork)) for l2 in l2networks: if xmlobject.has_element(l2, 'l3Networks.l3BasicNetwork'): l3networks.extend(xmlobject.safe_list(l2.l3Networks.l3BasicNetwork)) providers = {} action = api_actions.QueryNetworkServiceProviderAction() action.sessionUuid = session_uuid action.conditions = [] try: reply = action.run() except Exception as e: exc_info.append(sys.exc_info()) raise e for pinv in reply: providers[pinv.name] = pinv.uuid if zone.duplication__ == None: duplication = 1 else: duplication = int(zone.duplication__) for zone_duplication in range(duplication): for l3 in l3networks: if not xmlobject.has_element(l3, 'networkService'): continue if zone_duplication == 0: l3_name = l3.name_ else: l3_name = generate_dup_name(l3.name_, zone_duplication, 'z') l3_invs = res_ops.get_resource(res_ops.L3_NETWORK, session_uuid, name=l3_name) l3_inv = get_first_item_from_list(l3_invs, 'L3 Network', l3_name, 'Network Service') do_add_network_service(l3.networkService, l3_inv.uuid, providers, session_uuid)
def add_image(deployConfig, session_uuid): def _add_image(action): increase_image_thread() try: evt = action.run() test_util.test_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) finally: decrease_image_thread() if not xmlobject.has_element(deployConfig, 'images.image'): return for i in xmlobject.safe_list(deployConfig.images.image): for bsref in xmlobject.safe_list(i.backupStorageRef): bss = res_ops.get_resource(res_ops.BACKUP_STORAGE, session_uuid, name=bsref.text_) bs = get_first_item_from_list(bss, 'backup storage', bsref.text_, 'image') action = api_actions.AddImageAction() action.sessionUuid = session_uuid #TODO: account uuid will be removed later. action.accountUuid = inventory.INITIAL_SYSTEM_ADMIN_UUID action.backupStorageUuids = [bs.uuid] action.bits = i.bits__ if not action.bits: action.bits = 64 action.description = i.description__ action.format = i.format_ action.mediaType = i.mediaType_ action.guestOsType = i.guestOsType__ if not action.guestOsType: action.guestOsType = 'unknown' action.platform = i.platform__ if not action.platform: action.platform = 'Linux' action.hypervisorType = i.hypervisorType__ action.name = i.name_ action.url = i.url_ action.timeout = 1800000 thread = threading.Thread(target = _add_image, args = (action, )) print 'before add image1: %s' % i.url_ wait_for_image_thread_queue() print 'before add image2: %s' % i.url_ thread.start() print 'add image: %s' % i.url_ print 'all images add command are executed' wait_for_thread_done(True) print 'all images have been added'
def _deploy_cluster(zone): if not xmlobject.has_element(zone, "clusters.cluster"): return if zone.duplication__ == None: zone_duplication = 1 else: zone_duplication = int(zone.duplication__) for zone_ref in range(zone_duplication): for cluster in xmlobject.safe_list(zone.clusters.cluster): if cluster_name and cluster_name != cluster.name_: continue if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int(cluster.duplication__) for cluster_ref in range(cluster_duplication): action = api_actions.CreateClusterAction() action.sessionUuid = session_uuid action.name = generate_dup_name(generate_dup_name(cluster.name_, zone_ref, 'z'), cluster_ref, 'c') action.description = generate_dup_name(generate_dup_name(cluster.description__, zone_ref, 'z'), cluster_ref, 'c') action.hypervisorType = cluster.hypervisorType_ zone_name = generate_dup_name(zone.name_, zone_ref, 'z') zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, name=zone_name) zinv = get_first_item_from_list(zinvs, 'Zone', zone_name, 'Cluster') action.zoneUuid = zinv.uuid thread = threading.Thread(target=_add_cluster, args=(action, zone_ref, cluster, cluster_ref, )) wait_for_thread_queue() thread.start()
def add_instance_offering(deployConfig, session_uuid): def _add_io(instance_offering_xml_obj, session_uuid): action = api_actions.CreateInstanceOfferingAction() action.sessionUuid = session_uuid action.name = instance_offering_xml_obj.name_ action.description = instance_offering_xml_obj.description__ action.cpuNum = instance_offering_xml_obj.cpuNum_ action.cpuSpeed = instance_offering_xml_obj.cpuSpeed_ action.memorySize = sizeunit.get_size(instance_offering_xml_obj.memorySize_) if instance_offering_xml_obj.uuid__: action.resourceUuid = instance_offering_xml_obj.uuid__ evt = action.run() deploy_logger(jsonobject.dumps(evt)) if not xmlobject.has_element(deployConfig, 'instanceOfferings.instanceOffering'): return for instance_offering_xml_obj in \ xmlobject.safe_list(deployConfig.instanceOfferings.instanceOffering): thread = threading.Thread(target=_add_io, args=(instance_offering_xml_obj, session_uuid,)) wait_for_thread_queue() thread.start() wait_for_thread_done()
def _deploy_l3_network(l2, zone_ref, cluster_ref): if not xmlobject.has_element(l2, "l3Networks.l3BasicNetwork"): return if not l2.duplication__: l2_dup = 1 else: l2_dup = int(l2.duplication__) for l2_num in range(l2_dup): for l3 in xmlobject.safe_list(l2.l3Networks.l3BasicNetwork): if l3_name and l3_name != l3.name_: continue l2Name = generate_dup_name( generate_dup_name(generate_dup_name(l2.name_, zone_ref, 'z'), cluster_ref, 'c'), l2_num, 'n') l3Name = generate_dup_name( generate_dup_name(generate_dup_name(l3.name_, zone_ref, 'z'), cluster_ref, 'c'), l2_num, 'n') l2invs = res_ops.get_resource(res_ops.L2_NETWORK, session_uuid, name=l2Name) l2inv = get_first_item_from_list(l2invs, 'L2 Network', l2Name, 'L3 Network') thread = threading.Thread(target=_do_l3_deploy, args=(l3, l2inv.uuid, l3Name, session_uuid,)) wait_for_thread_queue() thread.start()
def add_virtual_router(deployConfig, session_uuid, l3_name = None, \ zone_name = None): if not xmlobject.has_element(deployConfig, 'instanceOfferings.virtualRouterOffering'): return for i in xmlobject.safe_list(deployConfig.instanceOfferings.virtualRouterOffering): if l3_name and l3_name != i.managementL3NetworkRef.text_: continue if zone_name and zone_name != i.zoneRef.text_: continue print "continue l3_name: %s; zone_name: %s" % (l3_name, zone_name) action = api_actions.CreateVirtualRouterOfferingAction() action.sessionUuid = session_uuid action.name = i.name_ action.description = i.description__ action.cpuNum = i.cpuNum_ action.cpuSpeed = i.cpuSpeed_ if i.memorySize__: action.memorySize = sizeunit.get_size(i.memorySize_) elif i.memoryCapacity_: action.memorySize = sizeunit.get_size(i.memoryCapacity_) action.isDefault = i.isDefault__ action.type = 'VirtualRouter' zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, name=i.zoneRef.text_) zinv = get_first_item_from_list(zinvs, 'zone', i.zoneRef.text_, 'virtual router offering') action.zoneUuid = zinv.uuid cond = res_ops.gen_query_conditions('zoneUuid', '=', zinv.uuid) cond1 = res_ops.gen_query_conditions('name', '=', \ i.managementL3NetworkRef.text_, cond) minvs = res_ops.query_resource(res_ops.L3_NETWORK, cond1, \ session_uuid) minv = get_first_item_from_list(minvs, 'Management L3 Network', i.managementL3NetworkRef.text_, 'virtualRouterOffering') action.managementNetworkUuid = minv.uuid if xmlobject.has_element(i, 'publicL3NetworkRef'): cond1 = res_ops.gen_query_conditions('name', '=', \ i.publicL3NetworkRef.text_, cond) pinvs = res_ops.query_resource(res_ops.L3_NETWORK, cond1, \ session_uuid) pinv = get_first_item_from_list(pinvs, 'Public L3 Network', i.publicL3NetworkRef.text_, 'virtualRouterOffering') action.publicNetworkUuid = pinv.uuid iinvs = res_ops.get_resource(res_ops.IMAGE, session_uuid, \ name=i.imageRef.text_) iinv = get_first_item_from_list(iinvs, 'Image', i.imageRef.text_, 'virtualRouterOffering') action.imageUuid = iinv.uuid thread = threading.Thread(target = _thread_for_action, args = (action, )) wait_for_thread_queue() thread.start() wait_for_thread_done()
def _add_zone(zone, zone_duplication): action = api_actions.CreateZoneAction() action.sessionUuid = session_uuid if zone_duplication == 0: action.name = zone.name_ action.description = zone.description__ if zone.uuid__: action.resourceUuid = zone.uuid__ else: action.name = generate_dup_name(zone.name_, zone_duplication, 'z') action.description = generate_dup_name(zone.description__, zone_duplication, 'zone') try: evt = action.run() deploy_logger(jsonobject.dumps(evt)) zinv = evt.inventory except: exc_info.append(sys.exc_info()) if xmlobject.has_element(zone, 'backupStorageRef'): for ref in xmlobject.safe_list(zone.backupStorageRef): bss = res_ops.get_resource(res_ops.BACKUP_STORAGE, session_uuid, name=ref.text_) bs = get_first_item_from_list(bss, 'Backup Storage', ref.text_, 'attach backup storage to zone') action = api_actions.AttachBackupStorageToZoneAction() action.sessionUuid = session_uuid action.backupStorageUuid = bs.uuid action.zoneUuid = zinv.uuid try: evt = action.run() deploy_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info())
def add_instance_offering(deployConfig, session_uuid): def _add_io(instance_offering_xml_obj, session_uuid): action = api_actions.CreateInstanceOfferingAction() action.sessionUuid = session_uuid action.name = instance_offering_xml_obj.name_ action.description = instance_offering_xml_obj.description__ action.cpuNum = instance_offering_xml_obj.cpuNum_ action.cpuSpeed = instance_offering_xml_obj.cpuSpeed_ if instance_offering_xml_obj.memorySize__: action.memorySize = sizeunit.get_size(instance_offering_xml_obj.memorySize_) elif instance_offering_xml_obj.memoryCapacity_: action.memorySize = sizeunit.get_size(instance_offering_xml_obj.memoryCapacity_) try: evt = action.run() test_util.test_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) if not xmlobject.has_element(deployConfig, \ 'instanceOfferings.instanceOffering'): return for instance_offering_xml_obj in \ xmlobject.safe_list(deployConfig.instanceOfferings.instanceOffering): thread = threading.Thread(target = _add_io, \ args = (instance_offering_xml_obj, session_uuid, )) wait_for_thread_queue() thread.start() wait_for_thread_done()
def get_sce_hosts(scenarioConfig=test_lib.all_scenario_config, scenarioFile=test_lib.scenario_file): host_list = [] if scenarioConfig == None or scenarioFile == None or not os.path.exists(scenarioFile): return host_list for host in xmlobject.safe_list(scenarioConfig.deployerConfig.hosts.host): for vm in xmlobject.safe_list(host.vms.vm): with open(scenarioFile, 'r') as fd: xmlstr = fd.read() fd.close() scenario_file = xmlobject.loads(xmlstr) for s_vm in xmlobject.safe_list(scenario_file.vms.vm): if s_vm.name_ == vm.name_: host_list.append(s_vm) return host_list
def _deploy_host(cluster, zone_ref, cluster_ref): if not xmlobject.has_element(cluster, "hosts.host"): return if zone_ref == 0 and cluster_ref == 0: cluster_name = cluster.name_ else: cluster_name = generate_dup_name(generate_dup_name(cluster.name_, zone_ref, 'z'), cluster_ref, 'c') cinvs = res_ops.get_resource(res_ops.CLUSTER, session_uuid, name=cluster_name) cinv = get_first_item_from_list(cinvs, 'Cluster', cluster_name, 'L3 network') for host in xmlobject.safe_list(cluster.hosts.host): if host_ip and host_ip != host.managementIp_: continue if host.duplication__ == None: host_duplication = 1 else: host_duplication = int(host.duplication__) for i in range(host_duplication): if cluster.hypervisorType_ == inventory.KVM_HYPERVISOR_TYPE: action = api_actions.AddKVMHostAction() action.username = host.username_ action.password = host.password_ action.timeout = AddKVMHostTimeOut if hasattr(host, 'sshPort_'): action.port = host.sshPort_ elif cluster.hypervisorType_ == inventory.SIMULATOR_HYPERVISOR_TYPE: action = api_actions.AddSimulatorHostAction() if host.cpuCapacity__: action.cpuCapacity = host.cpuCapacity_ else: action.cpuCapacity = 416000 if host.memoryCapacity__: action.memoryCapacity = sizeunit.get_size(host.memoryCapacity_) else: action.memoryCapacity = sizeunit.get_size('1024G') action.sessionUuid = session_uuid action.clusterUuid = cinv.uuid action.hostTags = host.hostTags__ if zone_ref == 0 and cluster_ref == 0 and i == 0: action.name = host.name_ action.description = host.description__ action.managementIp = host.managementIp_ if host.uuid__: action.resourceUuid = host.uuid__ else: action.name = generate_dup_name( generate_dup_name(generate_dup_name(host.name_, zone_ref, 'z'), cluster_ref, 'c'), i, 'h') action.description = generate_dup_name( generate_dup_name(generate_dup_name(host.description__, zone_ref, 'z'), cluster_ref, 'c'), i, 'h') action.managementIp = generate_dup_host_ip(host.managementIp_, zone_ref, cluster_ref, i) thread = threading.Thread(target=_thread_for_action, args=(action,)) wait_for_thread_queue() thread.start()
def _deploy_primary_storage(zone): if xmlobject.has_element(zone, 'primaryStorages.nfsPrimaryStorage'): zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, \ name=zone.name_) zinv = get_first_item_from_list(zinvs, 'Zone', zone.name_, 'primary storage') for pr in xmlobject.safe_list(zone.primaryStorages.nfsPrimaryStorage): if ps_name and ps_name != pr.name_: continue action = api_actions.AddNfsPrimaryStorageAction() action.sessionUuid = session_uuid action.name = pr.name_ action.description = pr.description__ action.type = inventory.NFS_PRIMARY_STORAGE_TYPE action.url = pr.url_ action.zoneUuid = zinv.uuid if pr.uuid__: action.resourceUuid = pr.uuid__ thread = threading.Thread(target=_thread_for_action, args=(action,)) wait_for_thread_queue() thread.start() if xmlobject.has_element(zone, 'primaryStorages.simulatorPrimaryStorage'): if zone.duplication__ == None: duplication = 1 else: duplication = int(zone.duplication__) for pr in xmlobject.safe_list(zone.primaryStorages.simulatorPrimaryStorage): for zone_ref in range(duplication): for cluster in xmlobject.safe_list(zone.clusters.cluster): for pref in xmlobject.safe_list(cluster.primaryStorageRef): if pref.text_ == pr.name_: if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int(cluster.duplication__) for cluster_ref in range(cluster_duplication): action = _generate_sim_ps_action(zone, pr, zone_ref, cluster_ref) thread = threading.Thread(target=_thread_for_action, args=(action,)) wait_for_thread_queue() thread.start()
def setup_static_ip(scenario_file): ssh_cmd = 'sshpass -p password ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null' with open(scenario_file, 'r') as fd: xmlstr = fd.read() fd.close() scenario_file = xmlobject.loads(xmlstr) for vm in xmlobject.safe_list(scenario_file.vms.vm): mnip = vm.managementIp_ if xmlobject.has_element(vm, 'ips'): for ip in xmlobject.safe_list(vm.ips.ip): nic_ip = ip.ip_ if nic_ip.startswith("10"): if shell.run("%s %s 'ip a|grep br_zsn1'"%(ssh_cmd, mnip))== 0: nic = "br_zsn1" else: nic = "zsn1" netmask = "255.255.255.0" shell.call("%s %s zs-network-setting -i %s %s %s|exit 0" %(ssh_cmd, mnip, nic, nic_ip, netmask) ) return
def add_l2_resource(deploy_config, l2_name, zone_name = None, \ session_uuid = None): session_uuid_flag = True if not session_uuid: session_uuid = acc_ops.login_as_admin() session_uuid_flag = False try: dep_ops.add_l2_network(deploy_config, session_uuid, l2_name, \ zone_name = zone_name) l2_uuid = res_ops.get_resource(res_ops.L2_NETWORK, session_uuid, \ name = l2_name)[0].uuid for zone in xmlobject.safe_list(deploy_config.zones.zone): if zone_name and zone_name != zone.name_: continue for cluster in xmlobject.safe_list(zone.clusters.cluster): if xmlobject.has_element(cluster, 'l2NetworkRef'): for l2ref in xmlobject.safe_list(cluster.l2NetworkRef): if l2_name != l2ref.text_: continue cluster_uuid = res_ops.get_resource(res_ops.CLUSTER, \ session_uuid, name=cluster.name_)[0].uuid attach_l2(l2_uuid, cluster_uuid, session_uuid) dep_ops.add_l3_network(None, None, deploy_config, session_uuid, l2_name = l2_name, \ zone_name = zone_name) cond = res_ops.gen_query_conditions('l2NetworkUuid', '=', l2_uuid) l3_name = res_ops.query_resource(res_ops.L3_NETWORK, cond, \ session_uuid)[0].name dep_ops.add_virtual_router(None, None, deploy_config, session_uuid, \ l3_name = l3_name, zone_name = zone_name) except Exception as e: test_util.test_logger('[Error] zstack deployment meets exception when adding l2 resource .') traceback.print_exc(file=sys.stdout) raise e finally: if not session_uuid_flag: acc_ops.logout(session_uuid) test_util.action_logger('Complete add l2 resources for [uuid:] %s' \ % l2_uuid)
def add_zone(deployConfig, session_uuid, zone_name = None): def _add_zone(zone, zone_duplication): action = api_actions.CreateZoneAction() action.sessionUuid = session_uuid if zone_duplication == 0: action.name = zone.name_ action.description = zone.description__ if zone.uuid__: action.resourceUuid = zone.uuid__ else: action.name = generate_dup_name(zone.name_, zone_duplication, 'z') action.description = generate_dup_name(zone.description__, zone_duplication, 'zone') try: evt = action.run() deploy_logger(jsonobject.dumps(evt)) zinv = evt.inventory except: exc_info.append(sys.exc_info()) if xmlobject.has_element(zone, 'backupStorageRef'): for ref in xmlobject.safe_list(zone.backupStorageRef): bss = res_ops.get_resource(res_ops.BACKUP_STORAGE, session_uuid, name=ref.text_) bs = get_first_item_from_list(bss, 'Backup Storage', ref.text_, 'attach backup storage to zone') action = api_actions.AttachBackupStorageToZoneAction() action.sessionUuid = session_uuid action.backupStorageUuid = bs.uuid action.zoneUuid = zinv.uuid try: evt = action.run() deploy_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) if not xmlobject.has_element(deployConfig, 'zones.zone'): return for zone in xmlobject.safe_list(deployConfig.zones.zone): if zone_name and zone_name != zone.name_: continue if zone.duplication__ == None: duplication = 1 else: duplication = int(zone.duplication__) for i in range(duplication): thread = threading.Thread(target=_add_zone, args=(zone, i, )) wait_for_thread_queue() thread.start() wait_for_thread_done()
def _do_l3_deploy(l3, l2inv_uuid, l3Name, session_uuid): action = api_actions.CreateL3NetworkAction() action.sessionUuid = session_uuid action.description = l3.description__ if l3.system__ and l3.system__ != 'False': action.system = 'true' action.l2NetworkUuid = l2inv_uuid action.name = l3Name if l3.uuid__: action.resourceUuid = l3.uuid__ action.type = inventory.L3_BASIC_NETWORK_TYPE if l3.domain_name__: action.dnsDomain = l3.domain_name__ try: evt = action.run() except: exc_info.append(sys.exc_info()) deploy_logger(jsonobject.dumps(evt)) l3_inv = evt.inventory # add dns if xmlobject.has_element(l3, 'dns'): for dns in xmlobject.safe_list(l3.dns): action = api_actions.AddDnsToL3NetworkAction() action.sessionUuid = session_uuid action.dns = dns.text_ action.l3NetworkUuid = l3_inv.uuid try: evt = action.run() except: exc_info.append(sys.exc_info()) deploy_logger(jsonobject.dumps(evt)) # add ip range. if xmlobject.has_element(l3, 'ipRange'): do_add_ip_range(l3.ipRange, l3_inv.uuid, session_uuid) # add network service. providers = {} action = api_actions.QueryNetworkServiceProviderAction() action.sessionUuid = session_uuid action.conditions = [] try: reply = action.run() except: exc_info.append(sys.exc_info()) for pinv in reply: providers[pinv.name] = pinv.uuid if xmlobject.has_element(l3, 'networkService'): do_add_network_service(l3.networkService, l3_inv.uuid, providers, session_uuid)
def get_mn_host(scenarioConfig, scenarioFile): mn_host_list = [] test_util.test_logger("@@DEBUG@@:<scenarioConfig:%s><scenarioFile:%s><scenarioFile is existed: %s>" \ %(str(scenarioConfig), str(scenarioFile), str(os.path.exists(scenarioFile)))) if scenarioConfig == None or scenarioFile == None or not os.path.exists(scenarioFile): return mn_host_list test_util.test_logger("@@DEBUG@@: after config file exist check") for host in xmlobject.safe_list(scenarioConfig.deployerConfig.hosts.host): for vm in xmlobject.safe_list(host.vms.vm): if xmlobject.has_element(vm, 'mnHostRef'): with open(scenarioFile, 'r') as fd: xmlstr = fd.read() fd.close() scenario_file = xmlobject.loads(xmlstr) for s_vm in xmlobject.safe_list(scenario_file.vms.vm): if s_vm.name_ == vm.name_: mn_host_list.append(s_vm) test_util.test_logger("@@DEBUG@@: %s" %(str(mn_host_list))) return mn_host_list
def get_host_by_index_in_scenario_file(scenarioConfig, scenarioFile, index): test_util.test_logger("@@DEBUG@@:<scenarioConfig:%s><scenarioFile:%s><scenarioFile is existed: %s>" \ %(str(scenarioConfig), str(scenarioFile), str(os.path.exists(scenarioFile)))) if scenarioConfig == None or scenarioFile == None or not os.path.exists(scenarioFile): return mha_s_vm_list test_util.test_logger("@@DEBUG@@: after config file exist check") with open(scenarioFile, 'r') as fd: xmlstr = fd.read() fd.close() scenario_file = xmlobject.loads(xmlstr) return xmlobject.safe_list(scenario_file.vms.vm)[index]
def recover_vlan_in_host(host_ip, scenarioConfig, deploy_config): test_util.test_logger("func: recover_vlan_in_host; host_ip=%s" %(host_ip)) host_inv = query_host(host_ip, scenarioConfig) test_lib.lib_wait_target_up(host_ip, '22', 120) host_config = sce_ops.get_scenario_config_vm(host_inv.name,scenarioConfig) for l3network in xmlobject.safe_list(host_config.l3Networks.l3Network): test_util.test_logger("loop in for l3network") if hasattr(l3network, 'l2NetworkRef'): test_util.test_logger("below if l2NetworkRef") for l2networkref in xmlobject.safe_list(l3network.l2NetworkRef): test_util.test_logger("loop in l2networkref") nic_name = sce_ops.get_ref_l2_nic_name(l2networkref.text_, deploy_config) test_util.test_logger("nic_name=%s; l2networkref.text_=%s" %(nic_name, l2networkref.text_)) if nic_name.find('.') >= 0 : vlan = nic_name.split('.')[1] test_util.test_logger('[vm:] %s %s is created.' % (host_ip, nic_name.replace("eth","zsn"))) cmd = 'vconfig add %s %s' % (nic_name.split('.')[0].replace("eth","zsn"), vlan) test_util.test_logger("vconfig cmd=%s" %(cmd)) test_lib.lib_execute_ssh_cmd(host_ip, host_config.imageUsername_, host_config.imagePassword_, cmd) return True
def do_add_network_service(net_service_xml_obj, l3_uuid, providers, session_uuid): allservices = {} for ns in xmlobject.safe_list(net_service_xml_obj): puuid = providers.get(ns.provider_) if not puuid: raise DeployError('cannot find network service provider[%s], it may not have been added' % ns.provider_) servs = [] for nst in xmlobject.safe_list(ns.serviceType): servs.append(nst.text_) allservices[puuid] = servs action = api_actions.AttachNetworkServiceToL3NetworkAction() action.sessionUuid = session_uuid action.l3NetworkUuid = l3_uuid action.networkServices = allservices try: evt = action.run() except Exception as e: exc_info.append(sys.exc_info()) raise e deploy_logger(jsonobject.dumps(evt))
def get_buildid_by_sce_file(scenarioFile): """ It gets host with vip bound, while returned a s_vm config """ with open(scenarioFile, 'r') as fd: xmlstr = fd.read() fd.close() scenario_file = xmlobject.loads(xmlstr) for s_vm in xmlobject.safe_list(scenario_file.vms.vm): raw_name = s_vm.name_ test_util.test_logger("raw name from s_vm is %s" %(raw_name)) sub_name_lst = raw_name.split('_') buildid = sub_name_lst[6] test_util.test_logger("get buildid is %s" %(buildid)) return buildid
def do_add_ip_range(ip_range_xml_obj, l3_uuid, session_uuid, \ ip_range_name = None): for ir in xmlobject.safe_list(ip_range_xml_obj): if ip_range_name and ip_range_name != ir.name_: continue action = api_actions.AddIpRangeAction() action.sessionUuid = session_uuid action.description = ir.description__ action.endIp = ir.endIp_ action.gateway = ir.gateway_ action.l3NetworkUuid = l3_uuid action.name = ir.name_ action.netmask = ir.netmask_ action.startIp = ir.startIp_ try: evt = action.run() except Exception as e: exc_info.append(sys.exc_info()) raise e test_util.test_logger(jsonobject.dumps(evt))
def add_disk_offering(deployConfig, session_uuid): def _add_disk_offering(disk_offering_xml_obj, session_uuid): action = api_actions.CreateDiskOfferingAction() action.sessionUuid = session_uuid action.name = disk_offering_xml_obj.name_ action.description = disk_offering_xml_obj.description_ action.diskSize = sizeunit.get_size(disk_offering_xml_obj.diskSize_) if disk_offering_xml_obj.uuid__: action.resourceUuid = disk_offering_xml_obj.uuid__ evt = action.run() dinv = evt.inventory deploy_logger(jsonobject.dumps(evt)) if not xmlobject.has_element(deployConfig, 'diskOfferings.diskOffering'): return for disk_offering_xml_obj in \ xmlobject.safe_list(deployConfig.diskOfferings.diskOffering): thread = threading.Thread(target=_add_disk_offering, args=(disk_offering_xml_obj, session_uuid)) wait_for_thread_queue() thread.start() wait_for_thread_done()
def add_disk_offering(deployConfig, session_uuid): def _add_disk_offering(disk_offering_xml_obj, session_uuid): action = api_actions.CreateDiskOfferingAction() action.sessionUuid = session_uuid action.name = disk_offering_xml_obj.name_ action.description = disk_offering_xml_obj.description_ action.diskSize = sizeunit.get_size(disk_offering_xml_obj.diskSize_) try: evt = action.run() test_util.test_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) if not xmlobject.has_element(deployConfig, 'diskOfferings.diskOffering'): return for disk_offering_xml_obj in \ xmlobject.safe_list(deployConfig.diskOfferings.diskOffering): thread = threading.Thread(target = _add_disk_offering, \ args = (disk_offering_xml_obj, session_uuid)) wait_for_thread_queue() thread.start() wait_for_thread_done()
def _lazyload_image(condition=None): def _load_image(action): increase_image_thread() try: #evt = action.run() evt = account_operations.execute_action_with_session(action, None) except: exc_info.append(sys.exc_info()) finally: decrease_image_thread() iaction = api_actions.QueryImageAction() iaction.conditions = condition ret = account_operations.execute_action_with_session(iaction, None) if len(ret) != 0: print "no need lazy" return test_config_path = os.environ.get('WOODPECKER_TEST_CONFIG_FILE') test_config_obj = test_util.TestConfig(test_config_path) #Special config in test-config.xml, such like test ping target. test_config = test_config_obj.get_test_config() #All configs in deploy.xml. all_config = test_config_obj.get_deploy_config() #Detailed zstack deployment information, including zones/cluster/hosts... deploy_config = all_config.deployerConfig for i in xmlobject.safe_list(deploy_config.images.image): image_action = api_actions.QueryImageAction() condition = gen_query_conditions('name', '=', i.name_) image_action.conditions = condition ret = account_operations.execute_action_with_session(image_action, None) if len(ret) != 0: print "image has beed added" continue session_uuid = None if i.hasattr('label_') and i.label_ == 'lazyload': for bsref in xmlobject.safe_list(i.backupStorageRef): bss = get_resource(BACKUP_STORAGE, None, name=bsref.text_) bs = deploy_operations.get_first_item_from_list(bss, 'backup storage', bsref.text_, 'image') action = api_actions.AddImageAction() action.sessionUuid = session_uuid #TODO: account uuid will be removed later. action.accountUuid = inventory.INITIAL_SYSTEM_ADMIN_UUID action.backupStorageUuids = [bs.uuid] action.bits = i.bits__ if not action.bits: action.bits = 64 action.description = i.description__ action.format = i.format_ action.mediaType = i.mediaType_ action.guestOsType = i.guestOsType__ if not action.guestOsType: action.guestOsType = 'unknown' action.platform = i.platform__ if not action.platform: action.platform = 'Linux' action.hypervisorType = i.hypervisorType__ action.name = i.name_ action.url = i.url_ action.timeout = 1800000 if i.hasattr('system_'): action.system = i.system_ if i.hasattr('systemTags_'): action.systemTags = i.systemTags_.split(',') thread = threading.Thread(target = _load_image, args = (action, )) wait_for_image_thread_queue() print 'before add image2: %s' % i.url_ thread.start() print 'add image: %s' % i.url_ print 'all images add command are executed' wait_for_thread_done(True) print 'all images have been added'
def _deploy_l2_network(zone, is_vlan): if is_vlan: if not xmlobject.has_element(zone, "l2Networks.l2VlanNetwork"): return l2Network = zone.l2Networks.l2VlanNetwork else: if not xmlobject.has_element(zone, \ "l2Networks.l2NoVlanNetwork"): return l2Network = zone.l2Networks.l2NoVlanNetwork if zone.duplication__ == None: zone_dup = 1 else: zone_dup = int(zone.duplication__) for zone_ref in range(zone_dup): zoneName = generate_dup_name(zone.name_, zone_ref, 'z') zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, name=zoneName) zinv = get_first_item_from_list(zinvs, 'Zone', zoneName, 'L2 network') #can only deal with single cluster duplication case. cluster = xmlobject.safe_list(zone.clusters.cluster)[0] if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int(cluster.duplication__) for cluster_ref in range(cluster_duplication): for l2 in xmlobject.safe_list(l2Network): if l2_name and l2_name != l2.name_: continue if not is_vlan or l2.duplication__ == None: l2_dup = 1 else: l2_dup = int(l2.duplication__) for j in range(l2_dup): l2Name = generate_dup_name(\ generate_dup_name(\ generate_dup_name(\ l2.name_, zone_ref, 'z')\ , cluster_ref, 'c')\ , j, 'n') l2Des = generate_dup_name(\ generate_dup_name(\ generate_dup_name(\ l2.description_, zone_ref, 'z')\ , cluster_ref, 'c')\ , j, 'n') if is_vlan: l2_vlan = int(l2.vlan_) + j if is_vlan: action = api_actions.CreateL2VlanNetworkAction() else: action = api_actions.CreateL2NoVlanNetworkAction() action.sessionUuid = session_uuid action.name = l2Name action.description = l2Des action.physicalInterface = l2.physicalInterface_ action.zoneUuid = zinv.uuid if is_vlan: action.vlan = l2_vlan if l2.uuid_: action.resourceUuid = l2.uuid_ thread = threading.Thread(\ target=_thread_for_action, \ args=(action,)) wait_for_thread_queue() thread.start()
def add_primary_storage(deployConfig, session_uuid, ps_name = None, \ zone_name = None): if not xmlobject.has_element(deployConfig, 'zones.zone'): deploy_logger( 'Not find zones.zone in config, skip primary storage deployment') return def _generate_sim_ps_action(zone, pr, zone_ref, cluster_ref): if zone_ref == 0: zone_name = zone.name_ else: zone_name = generate_dup_name(zone.name_, zone_ref, 'z') zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, name=zone_name) zinv = get_first_item_from_list(zinvs, 'Zone', zone_name, 'primary storage') action = api_actions.AddSimulatorPrimaryStorageAction() action.sessionUuid = session_uuid action.name = generate_dup_name( generate_dup_name(pr.name_, zone_ref, 'z'), cluster_ref, 'c') action.description = generate_dup_name( generate_dup_name(pr.description__, zone_ref, 'zone'), cluster_ref, 'cluster') action.url = generate_dup_name( generate_dup_name(pr.url_, zone_ref, 'z'), cluster_ref, 'c') action.type = inventory.SIMULATOR_PRIMARY_STORAGE_TYPE action.zoneUuid = zinv.uuid action.totalCapacity = sizeunit.get_size(pr.totalCapacity_) action.availableCapacity = sizeunit.get_size(pr.availableCapacity_) if inventory.uuid_: action.resourceUuid = inventory.uuid_ return action def _deploy_primary_storage(zone): if xmlobject.has_element(zone, 'primaryStorages.nfsPrimaryStorage'): zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, \ name=zone.name_) zinv = get_first_item_from_list(zinvs, 'Zone', zone.name_, 'primary storage') for pr in xmlobject.safe_list( zone.primaryStorages.nfsPrimaryStorage): if ps_name and ps_name != pr.name_: continue action = api_actions.AddNfsPrimaryStorageAction() action.sessionUuid = session_uuid action.name = pr.name_ action.description = pr.description__ action.type = inventory.NFS_PRIMARY_STORAGE_TYPE action.url = pr.url_ action.zoneUuid = zinv.uuid if pr.uuid_: action.resourceUuid = pr.uuid_ thread = threading.Thread(target=_thread_for_action, args=(action, )) wait_for_thread_queue() thread.start() if xmlobject.has_element(zone, 'primaryStorages.simulatorPrimaryStorage'): if zone.duplication__ == None: duplication = 1 else: duplication = int(zone.duplication__) for pr in xmlobject.safe_list( zone.primaryStorages.simulatorPrimaryStorage): for zone_ref in range(duplication): for cluster in xmlobject.safe_list(zone.clusters.cluster): for pref in xmlobject.safe_list( cluster.primaryStorageRef): if pref.text_ == pr.name_: if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int( cluster.duplication__) for cluster_ref in range(cluster_duplication): action = _generate_sim_ps_action( zone, pr, zone_ref, cluster_ref) thread = threading.Thread( target=_thread_for_action, args=(action, )) wait_for_thread_queue() thread.start() for zone in xmlobject.safe_list(deployConfig.zones.zone): if zone_name and zone.name_ != zone_name: continue _deploy_primary_storage(zone) wait_for_thread_done()
def add_cluster(deployConfig, session_uuid, cluster_name = None, \ zone_name = None): if not xmlobject.has_element(deployConfig, "zones.zone"): return def _add_cluster(action, zone_ref, cluster, cluster_ref): evt = action.run() deploy_logger(jsonobject.dumps(evt)) cinv = evt.inventory try: if xmlobject.has_element(cluster, 'primaryStorageRef'): for pref in xmlobject.safe_list(cluster.primaryStorageRef): ps_name = generate_dup_name( generate_dup_name(pref.text_, zone_ref, 'z'), cluster_ref, 'c') pinvs = res_ops.get_resource(res_ops.PRIMARY_STORAGE, session_uuid, name=ps_name) pinv = get_first_item_from_list(pinvs, 'Primary Storage', ps_name, 'Cluster') action_ps = api_actions.AttachPrimaryStorageToClusterAction( ) action_ps.sessionUuid = session_uuid action_ps.clusterUuid = cinv.uuid action_ps.primaryStorageUuid = pinv.uuid evt = action_ps.run() deploy_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) if cluster.allL2NetworkRef__ == 'true': #find all L2 network in zone and attach to cluster cond = res_ops.gen_query_conditions('zoneUuid', '=', \ action.zoneUuid) l2_count = res_ops.query_resource_count(res_ops.L2_NETWORK, \ cond, session_uuid) l2invs = res_ops.query_resource_fields(res_ops.L2_NETWORK, \ [{'name':'zoneUuid', 'op':'=', 'value':action.zoneUuid}], \ session_uuid, ['uuid'], 0, l2_count) else: l2invs = [] if xmlobject.has_element(cluster, 'l2NetworkRef'): for l2ref in xmlobject.safe_list(cluster.l2NetworkRef): l2_name = generate_dup_name( generate_dup_name(l2ref.text_, zone_ref, 'z'), cluster_ref, 'c') cond = res_ops.gen_query_conditions('zoneUuid', '=', \ action.zoneUuid) cond = res_ops.gen_query_conditions('name', '=', l2_name, \ cond) l2inv = res_ops.query_resource_fields(res_ops.L2_NETWORK, \ cond, session_uuid, ['uuid']) if not l2inv: raise DeployError( "Can't find l2 network [%s] in database." % l2_name) l2invs.extend(l2inv) for l2inv in l2invs: action = api_actions.AttachL2NetworkToClusterAction() action.sessionUuid = session_uuid action.clusterUuid = cinv.uuid action.l2NetworkUuid = l2inv.uuid thread = threading.Thread(target=_thread_for_action, args=(action, )) wait_for_thread_queue() thread.start() def _deploy_cluster(zone): if not xmlobject.has_element(zone, "clusters.cluster"): return if zone.duplication__ == None: zone_duplication = 1 else: zone_duplication = int(zone.duplication__) for zone_ref in range(zone_duplication): for cluster in xmlobject.safe_list(zone.clusters.cluster): if cluster_name and cluster_name != cluster.name_: continue if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int(cluster.duplication__) for cluster_ref in range(cluster_duplication): action = api_actions.CreateClusterAction() action.sessionUuid = session_uuid action.name = generate_dup_name( generate_dup_name(cluster.name_, zone_ref, 'z'), cluster_ref, 'c') action.description = generate_dup_name( generate_dup_name(cluster.description__, zone_ref, 'z'), cluster_ref, 'c') action.hypervisorType = cluster.hypervisorType_ zone_name = generate_dup_name(zone.name_, zone_ref, 'z') zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, name=zone_name) zinv = get_first_item_from_list(zinvs, 'Zone', zone_name, 'Cluster') action.zoneUuid = zinv.uuid if cluster.uuid_: action.resourceUuid = cluster.uuid_ thread = threading.Thread(target=_add_cluster, args=( action, zone_ref, cluster, cluster_ref, )) wait_for_thread_queue() thread.start() for zone in xmlobject.safe_list(deployConfig.zones.zone): if zone_name and zone_name != zone.name_: continue _deploy_cluster(zone) wait_for_thread_done()
def _add_cluster(action, zone_ref, cluster, cluster_ref): evt = action.run() deploy_logger(jsonobject.dumps(evt)) cinv = evt.inventory try: if xmlobject.has_element(cluster, 'primaryStorageRef'): for pref in xmlobject.safe_list(cluster.primaryStorageRef): ps_name = generate_dup_name( generate_dup_name(pref.text_, zone_ref, 'z'), cluster_ref, 'c') pinvs = res_ops.get_resource(res_ops.PRIMARY_STORAGE, session_uuid, name=ps_name) pinv = get_first_item_from_list(pinvs, 'Primary Storage', ps_name, 'Cluster') action_ps = api_actions.AttachPrimaryStorageToClusterAction( ) action_ps.sessionUuid = session_uuid action_ps.clusterUuid = cinv.uuid action_ps.primaryStorageUuid = pinv.uuid evt = action_ps.run() deploy_logger(jsonobject.dumps(evt)) except: exc_info.append(sys.exc_info()) if cluster.allL2NetworkRef__ == 'true': #find all L2 network in zone and attach to cluster cond = res_ops.gen_query_conditions('zoneUuid', '=', \ action.zoneUuid) l2_count = res_ops.query_resource_count(res_ops.L2_NETWORK, \ cond, session_uuid) l2invs = res_ops.query_resource_fields(res_ops.L2_NETWORK, \ [{'name':'zoneUuid', 'op':'=', 'value':action.zoneUuid}], \ session_uuid, ['uuid'], 0, l2_count) else: l2invs = [] if xmlobject.has_element(cluster, 'l2NetworkRef'): for l2ref in xmlobject.safe_list(cluster.l2NetworkRef): l2_name = generate_dup_name( generate_dup_name(l2ref.text_, zone_ref, 'z'), cluster_ref, 'c') cond = res_ops.gen_query_conditions('zoneUuid', '=', \ action.zoneUuid) cond = res_ops.gen_query_conditions('name', '=', l2_name, \ cond) l2inv = res_ops.query_resource_fields(res_ops.L2_NETWORK, \ cond, session_uuid, ['uuid']) if not l2inv: raise DeployError( "Can't find l2 network [%s] in database." % l2_name) l2invs.extend(l2inv) for l2inv in l2invs: action = api_actions.AttachL2NetworkToClusterAction() action.sessionUuid = session_uuid action.clusterUuid = cinv.uuid action.l2NetworkUuid = l2inv.uuid thread = threading.Thread(target=_thread_for_action, args=(action, )) wait_for_thread_queue() thread.start()
def add_l3_network(deployConfig, session_uuid, l3_name=None, l2_name=None, zone_name=None): ''' add_l3_network will add L3 network and also add related DNS, IpRange and network services. ''' if not xmlobject.has_element(deployConfig, "zones.zone"): return def _deploy_l3_network(l2, zone_ref, cluster_ref): if not xmlobject.has_element(l2, "l3Networks.l3BasicNetwork"): return if not l2.duplication__: l2_dup = 1 else: l2_dup = int(l2.duplication__) for l2_num in range(l2_dup): for l3 in xmlobject.safe_list(l2.l3Networks.l3BasicNetwork): if l3_name and l3_name != l3.name_: continue l2Name = generate_dup_name( generate_dup_name(generate_dup_name(l2.name_, zone_ref, 'z'), cluster_ref, 'c'), l2_num, 'n') l3Name = generate_dup_name( generate_dup_name(generate_dup_name(l3.name_, zone_ref, 'z'), cluster_ref, 'c'), l2_num, 'n') l2invs = res_ops.get_resource(res_ops.L2_NETWORK, session_uuid, name=l2Name) l2inv = get_first_item_from_list(l2invs, 'L2 Network', l2Name, 'L3 Network') thread = threading.Thread(target=_do_l3_deploy, args=(l3, l2inv.uuid, l3Name, session_uuid,)) wait_for_thread_queue() thread.start() def _do_l3_deploy(l3, l2inv_uuid, l3Name, session_uuid): action = api_actions.CreateL3NetworkAction() action.sessionUuid = session_uuid action.description = l3.description__ if l3.system__ and l3.system__ != 'False': action.system = 'true' action.l2NetworkUuid = l2inv_uuid action.name = l3Name if l3.uuid__: action.resourceUuid = l3.uuid__ action.type = inventory.L3_BASIC_NETWORK_TYPE if l3.domain_name__: action.dnsDomain = l3.domain_name__ try: evt = action.run() except: exc_info.append(sys.exc_info()) deploy_logger(jsonobject.dumps(evt)) l3_inv = evt.inventory # add dns if xmlobject.has_element(l3, 'dns'): for dns in xmlobject.safe_list(l3.dns): action = api_actions.AddDnsToL3NetworkAction() action.sessionUuid = session_uuid action.dns = dns.text_ action.l3NetworkUuid = l3_inv.uuid try: evt = action.run() except: exc_info.append(sys.exc_info()) deploy_logger(jsonobject.dumps(evt)) # add ip range. if xmlobject.has_element(l3, 'ipRange'): do_add_ip_range(l3.ipRange, l3_inv.uuid, session_uuid) # add network service. providers = {} action = api_actions.QueryNetworkServiceProviderAction() action.sessionUuid = session_uuid action.conditions = [] try: reply = action.run() except: exc_info.append(sys.exc_info()) for pinv in reply: providers[pinv.name] = pinv.uuid if xmlobject.has_element(l3, 'networkService'): do_add_network_service(l3.networkService, l3_inv.uuid, providers, session_uuid) for zone in xmlobject.safe_list(deployConfig.zones.zone): if zone_name and zone_name != zone.name_: continue l2networks = [] if xmlobject.has_element(zone, 'l2Networks.l2NoVlanNetwork'): l2networks.extend(xmlobject.safe_list(zone.l2Networks.l2NoVlanNetwork)) if xmlobject.has_element(zone, 'l2Networks.l2VlanNetwork'): l2networks.extend(xmlobject.safe_list(zone.l2Networks.l2VlanNetwork)) for l2 in l2networks: if l2_name and l2_name != l2.name_: continue if zone.duplication__ == None: duplication = 1 else: duplication = int(zone.duplication__) if duplication == 1: _deploy_l3_network(l2, 0, 0) else: for zone_ref in range(duplication): for cluster in xmlobject.safe_list(zone.clusters.cluster): if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int(cluster.duplication__) for cluster_ref in range(cluster_duplication): _deploy_l3_network(l2, zone_ref, cluster_ref) wait_for_thread_done() deploy_logger('All add L3 Network actions are done.')
def add_host(deployConfig, session_uuid, host_ip = None, zone_name = None, \ cluster_name = None): ''' Base on an xml deploy config object to add hosts. If providing giving zone_name, cluster_name or host_ip, this function will only add related hosts. ''' if not xmlobject.has_element(deployConfig, "zones.zone"): return def _deploy_host(cluster, zone_ref, cluster_ref): if not xmlobject.has_element(cluster, "hosts.host"): return if zone_ref == 0 and cluster_ref == 0: cluster_name = cluster.name_ else: cluster_name = generate_dup_name( generate_dup_name(cluster.name_, zone_ref, 'z'), cluster_ref, 'c') cinvs = res_ops.get_resource(res_ops.CLUSTER, session_uuid, name=cluster_name) cinv = get_first_item_from_list(cinvs, 'Cluster', cluster_name, 'L3 network') for host in xmlobject.safe_list(cluster.hosts.host): if host_ip and host_ip != host.managementIp_: continue if host.duplication__ == None: host_duplication = 1 else: host_duplication = int(host.duplication__) for i in range(host_duplication): if cluster.hypervisorType_ == inventory.KVM_HYPERVISOR_TYPE: action = api_actions.AddKVMHostAction() action.username = host.username_ action.password = host.password_ action.timeout = AddKVMHostTimeOut elif cluster.hypervisorType_ == inventory.SIMULATOR_HYPERVISOR_TYPE: action = api_actions.AddSimulatorHostAction() action.cpuCapacity = host.cpuCapacity_ action.memoryCapacity = sizeunit.get_size( host.memoryCapacity_) action.sessionUuid = session_uuid action.clusterUuid = cinv.uuid action.hostTags = host.hostTags__ if zone_ref == 0 and cluster_ref == 0 and i == 0: action.name = host.name_ action.description = host.description__ action.managementIp = host.managementIp_ if host.uuid_: action.resourceUuid = host.uuid_ else: action.name = generate_dup_name( generate_dup_name( generate_dup_name(host.name_, zone_ref, 'z'), cluster_ref, 'c'), i, 'h') action.description = generate_dup_name( generate_dup_name( generate_dup_name(host.description__, zone_ref, 'z'), cluster_ref, 'c'), i, 'h') action.managementIp = generate_dup_host_ip( host.managementIp_, zone_ref, cluster_ref, i) thread = threading.Thread(target=_thread_for_action, args=(action, )) wait_for_thread_queue() thread.start() for zone in xmlobject.safe_list(deployConfig.zones.zone): if zone_name and zone_name != zone.name_: continue if not xmlobject.has_element(zone, 'clusters.cluster'): continue if zone.duplication__ == None: zone_duplication = 1 else: zone_duplication = int(zone.duplication__) for zone_ref in range(zone_duplication): for cluster in xmlobject.safe_list(zone.clusters.cluster): if cluster_name and cluster_name != cluster.name_: continue if cluster.duplication__ == None: cluster_duplication = 1 else: cluster_duplication = int(cluster.duplication__) for cluster_ref in range(cluster_duplication): _deploy_host(cluster, zone_ref, cluster_ref) wait_for_thread_done() deploy_logger('All add KVM host actions are done.')
def add_virtual_router(deployConfig, session_uuid, l3_name = None, \ zone_name = None): if not xmlobject.has_element(deployConfig, 'instanceOfferings.virtualRouterOffering'): return for i in xmlobject.safe_list( deployConfig.instanceOfferings.virtualRouterOffering): if l3_name and l3_name != i.managementL3NetworkRef.text_: continue if zone_name and zone_name != i.zoneRef.text_: continue action = api_actions.CreateVirtualRouterOfferingAction() action.sessionUuid = session_uuid action.name = i.name_ action.description = i.description__ action.cpuNum = i.cpuNum_ action.cpuSpeed = i.cpuSpeed_ action.memorySize = sizeunit.get_size(i.memorySize_) action.isDefault = i.isDefault__ action.type = 'VirtualRouter' if i.uuid_: action.resourceUuid = i.uuid_ zinvs = res_ops.get_resource(res_ops.ZONE, session_uuid, name=i.zoneRef.text_) zinv = get_first_item_from_list(zinvs, 'zone', i.zoneRef.text_, 'virtual router offering') action.zoneUuid = zinv.uuid cond = res_ops.gen_query_conditions('zoneUuid', '=', zinv.uuid) cond1 = res_ops.gen_query_conditions('name', '=', \ i.managementL3NetworkRef.text_, cond) minvs = res_ops.query_resource(res_ops.L3_NETWORK, cond1, \ session_uuid) minv = get_first_item_from_list(minvs, 'Management L3 Network', i.managementL3NetworkRef.text_, 'virtualRouterOffering') action.managementNetworkUuid = minv.uuid if xmlobject.has_element(i, 'publicL3NetworkRef'): cond1 = res_ops.gen_query_conditions('name', '=', \ i.publicL3NetworkRef.text_, cond) pinvs = res_ops.query_resource(res_ops.L3_NETWORK, cond1, \ session_uuid) pinv = get_first_item_from_list(pinvs, 'Public L3 Network', i.publicL3NetworkRef.text_, 'virtualRouterOffering') action.publicNetworkUuid = pinv.uuid iinvs = res_ops.get_resource(res_ops.IMAGE, session_uuid, \ name=i.imageRef.text_) iinv = get_first_item_from_list(iinvs, 'Image', i.imageRef.text_, 'virtualRouterOffering') action.imageUuid = iinv.uuid thread = threading.Thread(target=_thread_for_action, args=(action, )) wait_for_thread_queue() thread.start() wait_for_thread_done()