def refresh(fail_on_error=False): """ Refreshes the virtualization info for this host and any subdomains on the server. """ if _is_host_domain(fail_on_error): domain_identity = IdentityType.HOST my_uuid = _fetch_host_uuid() else: # Not a host. No-op. return # Now that we've gathered some preliminary information, create a plan of # actions that we will eventually pass to the server. plan = Plan() # First, declare our own existence. plan.add( EventType.EXISTS, TargetType.SYSTEM, { PropertyType.IDENTITY : domain_identity, PropertyType.UUID : my_uuid }) # Now, crawl each of the domains on this host. if vdsm_enabled: server = localvdsm.connect() domains = poller.poll_through_vdsm(server) else: domains = poller.poll_hypervisor() if not len(domains) and libvirt.openReadOnly(None).getType() == 'Xen': # On a KVM/QEMU host, libvirt reports no domain entry for host itself # On a Xen host, either there were no domains or xend might not be # running. Don't proceed further. return domain_list = list(domains.values()) domain_uuids = list(domains.keys()) if not vdsm_enabled: # We need this only for libvirt domain_dir = DomainDirectory() domain_dir.save_unknown_domain_configs(domain_uuids) plan.add(EventType.CRAWL_BEGAN, TargetType.SYSTEM) for domain_properties in domain_list: plan.add(EventType.EXISTS, TargetType.DOMAIN, domain_properties) plan.add(EventType.CRAWL_ENDED, TargetType.SYSTEM) # Finally, execute the actions queued up in the plan. plan.execute()
# will cause cron to email root with the output. It is not our # job to nag the user every two minutes if libvirt is not running. # The only way to avoid this is to shell out to check if libvirt # is running, and exit if it's not. # See if the libvirtd service is running, discarding all output. # Non-zero exit code means it's not running. if (subprocess.call(['/sbin/service','libvirtd','status'], stdout=open(os.devnull, 'wb'), stderr=subprocess.STDOUT) != 0): sys.exit(0) domain_list = poll_hypervisor() else: # If no libvirt nor vdsm is present, this program is pretty much # useless. Just exit. sys.exit(0) # create the unkonwn domain config files (for libvirt only) if libvirt and not vdsm_enabled: uuid_list = list(domain_list.keys()) domain = DomainDirectory() domain.save_unknown_domain_configs(uuid_list) cached_state = PollerStateCache(domain_list, debug = options and options.debug) # Send notifications, if necessary. _send_notifications(cached_state) # Save the new state. cached_state.save()