raise OrchestratorError('host %s does not exist' % host)
def add_host(self, spec: HostSpec) -> None:
- self._inventory[spec.hostname] = spec.to_json()
- self.save()
+ if spec.hostname in self._inventory:
+ # addr
+ if self.get_addr(spec.hostname) != spec.addr:
+ self.set_addr(spec.hostname, spec.addr)
+ # labels
+ for label in spec.labels:
+ self.add_label(spec.hostname, label)
+ else:
+ self._inventory[spec.hostname] = spec.to_json()
+ self.save()
def rm_host(self, host: str) -> None:
self.assert_host(host)
self.registry_login_queue.add(host)
self.last_client_files[host] = {}
+ def refresh_all_host_info(self, host):
+ # type: (str) -> None
+
+ self.last_host_check.pop(host, None)
+ self.daemon_refresh_queue.append(host)
+ self.registry_login_queue.add(host)
+ self.device_refresh_queue.append(host)
+ self.last_facts_update.pop(host, None)
+ self.osdspec_previews_refresh_queue.append(host)
+ self.last_autotune.pop(host, None)
+
def invalidate_host_daemons(self, host):
# type: (str) -> None
self.daemon_refresh_queue.append(host)
]
def _check_valid_addr(self, host: str, addr: str) -> str:
+ # make sure mgr is not resolving own ip
+ if addr in self.get_mgr_id():
+ raise OrchestratorError(
+ "Can not automatically resolve ip address of host where active mgr is running. Please explicitly provide the address.")
+
# make sure hostname is resolvable before trying to make a connection
try:
ip_addr = utils.resolve_ip(addr)
if spec.addr == spec.hostname and ip_addr:
spec.addr = ip_addr
+ if spec.hostname in self.inventory and self.inventory.get_addr(spec.hostname) != spec.addr:
+ self.cache.refresh_all_host_info(spec.hostname)
+
# prime crush map?
if spec.location:
self.check_mon_command({