def test_custom_vm_report(soft_assert, report_vms): if since_date_or_version(version="5.4.0.0.25"): cluster = "Cluster / Deployment Role Name" host = "Host / Node Name" else: cluster = "Cluster Name" host = "Host Name" for row in report_vms: if row["Name"].startswith("test_"): continue # Might disappear meanwhile provider_name = row[version.pick({ version.LOWEST: "Provider : Name", "5.3": "Cloud/Infrastructure Provider Name", })] provider = get_mgmt_by_name(provider_name) provider_hosts_and_ips = utils.net.resolve_ips(provider.list_host()) provider_datastores = provider.list_datastore() provider_clusters = provider.list_cluster() soft_assert( provider.does_vm_exist(row["Name"]), "VM {} does not exist in {}!".format(row["Name"], provider_name)) if row[cluster]: soft_assert( row[cluster] in provider_clusters, "Cluster {} not found in {}!".format(row[cluster], str(provider_clusters))) if row["Datastore Name"]: soft_assert( row["Datastore Name"] in provider_datastores, "Datastore {} not found in {}!".format( row["Datastore Name"], str(provider_datastores))) # Because of mixing long and short host names, we have to use both-directional `in` op. if row[host]: found = False possible_ips_or_hosts = utils.net.resolve_ips((row[host], )) for possible_ip_or_host in possible_ips_or_hosts: for host_ip in provider_hosts_and_ips: if possible_ip_or_host in host_ip or host_ip in possible_ip_or_host: found = True soft_assert( found, "Host {} not found in {}!".format(possible_ips_or_hosts, provider_hosts_and_ips))
def test_cluster_relationships(soft_assert, setup_a_provider): path = [ "Relationships", "Virtual Machines, Folders, Clusters", "Cluster Relationships" ] report = CannedSavedReport.new(path) for relation in report.data.rows: name = relation["Name"] provider_name = relation["Provider Name"] if not provider_name.strip(): # If no provider name specified, ignore it continue provider = get_mgmt_by_name(provider_name) host_name = relation["Host Name"].strip() soft_assert(name in provider.list_cluster(), "Cluster {} not found in {}".format(name, provider_name)) if not host_name: continue # No host name host_ip = resolve_hostname(host_name, force=True) if host_ip is None: # Don't check continue for host in provider.list_host(): if ip_address.match(host) is None: host_is_ip = False ip_from_provider = resolve_hostname(host, force=True) else: host_is_ip = True ip_from_provider = host if not host_is_ip: # Strings first if host == host_name: break elif host_name.startswith(host): break elif ip_from_provider is not None and ip_from_provider == host_ip: break else: if host_ip == ip_from_provider: break else: soft_assert( False, "Hostname {} not found in {}".format(host_name, provider_name))
def test_custom_vm_report(soft_assert, report_vms): if since_date_or_version(version="5.4.0.0.25"): cluster = "Cluster / Deployment Role Name" host = "Host / Node Name" else: cluster = "Cluster Name" host = "Host Name" for row in report_vms: if row["Name"].startswith("test_"): continue # Might disappear meanwhile provider_name = row[version.pick({ version.LOWEST: "Provider : Name", "5.3": "Cloud/Infrastructure Provider Name", })] provider = get_mgmt_by_name(provider_name) provider_hosts_and_ips = utils.net.resolve_ips(provider.list_host()) provider_datastores = provider.list_datastore() provider_clusters = provider.list_cluster() soft_assert(provider.does_vm_exist(row["Name"]), "VM {} does not exist in {}!".format( row["Name"], provider_name )) if row[cluster]: soft_assert( row[cluster] in provider_clusters, "Cluster {} not found in {}!".format(row[cluster], str(provider_clusters)) ) if row["Datastore Name"]: soft_assert( row["Datastore Name"] in provider_datastores, "Datastore {} not found in {}!".format( row["Datastore Name"], str(provider_datastores)) ) # Because of mixing long and short host names, we have to use both-directional `in` op. if row[host]: found = False possible_ips_or_hosts = utils.net.resolve_ips((row[host], )) for possible_ip_or_host in possible_ips_or_hosts: for host_ip in provider_hosts_and_ips: if possible_ip_or_host in host_ip or host_ip in possible_ip_or_host: found = True soft_assert( found, "Host {} not found in {}!".format(possible_ips_or_hosts, provider_hosts_and_ips) )
def test_cluster_relationships(soft_assert, setup_a_provider): path = ["Relationships", "Virtual Machines, Folders, Clusters", "Cluster Relationships"] report = CannedSavedReport.new(path) for relation in report.data.rows: name = relation["Name"] provider_name = relation["Provider Name"] if not provider_name.strip(): # If no provider name specified, ignore it continue provider = get_mgmt_by_name(provider_name) host_name = relation["Host Name"].strip() soft_assert(name in provider.list_cluster(), "Cluster {} not found in {}".format( name, provider_name )) if not host_name: continue # No host name host_ip = resolve_hostname(host_name, force=True) if host_ip is None: # Don't check continue for host in provider.list_host(): if ip_address.match(host) is None: host_is_ip = False ip_from_provider = resolve_hostname(host, force=True) else: host_is_ip = True ip_from_provider = host if not host_is_ip: # Strings first if host == host_name: break elif host_name.startswith(host): break elif ip_from_provider is not None and ip_from_provider == host_ip: break else: if host_ip == ip_from_provider: break else: soft_assert(False, "Hostname {} not found in {}".format(host_name, provider_name))