def render(self, session, logger, fqdn, dns_environment, target, comments, **kwargs): dbdns_env = DnsEnvironment.get_unique_or_default( session, dns_environment) dbalias = Alias.get_unique(session, fqdn=fqdn, dns_environment=dbdns_env, compel=True) old_target_fqdn = str(dbalias.target.fqdn) old_comments = dbalias.comments if target: old_target = dbalias.target dbalias.target = create_target_if_needed(session, logger, target, dbdns_env) if dbalias.target != old_target: delete_target_if_needed(session, old_target) if comments is not None: dbalias.comments = comments session.flush() if dbdns_env.is_default and dbalias.fqdn.dns_domain.name == "ms.com": dsdb_runner = DSDBRunner(logger=logger) dsdb_runner.update_alias(fqdn, dbalias.target.fqdn, dbalias.comments, old_target_fqdn, old_comments) dsdb_runner.commit_or_rollback("Could not update alias in DSDB") return
def render(self, session, logger, fqdn, dns_environment, target, comments, **kwargs): dbdns_env = DnsEnvironment.get_unique_or_default(session, dns_environment) dbalias = Alias.get_unique(session, fqdn=fqdn, dns_environment=dbdns_env, compel=True) old_target_fqdn = str(dbalias.target.fqdn) old_comments = dbalias.comments if target: old_target = dbalias.target dbalias.target = create_target_if_needed(session, logger, target, dbdns_env) if dbalias.target != old_target: delete_target_if_needed(session, old_target) if comments is not None: dbalias.comments = comments session.flush() if dbdns_env.is_default and dbalias.fqdn.dns_domain.name == "ms.com": dsdb_runner = DSDBRunner(logger=logger) dsdb_runner.update_alias(fqdn, dbalias.target.fqdn, dbalias.comments, old_target_fqdn, old_comments) dsdb_runner.commit_or_rollback("Could not update alias in DSDB") return
def render(self, session, logger, fqdn, dns_environment, target, comments, **kwargs): dbdns_env = DnsEnvironment.get_unique_or_default(session, dns_environment) dbalias = Alias.get_unique(session, fqdn=fqdn, dns_environment=dbdns_env, compel=True) old_target_fqdn = str(dbalias.target.fqdn) old_comments = dbalias.comments if target: old_target = dbalias.target dbalias.target = create_target_if_needed(session, logger, target, dbdns_env) # TODO: at some day we should verify that the new target is also # bound as a server, and modify the ServiceInstanceServer bindings # accordingly for srv in dbalias.services_provided: if srv.host or srv.cluster: provider = srv.host or srv.cluster logger.client_info("Warning: {0} provides {1:l}, and is " "bound to {2:l}. Updating the target of " "the alias may leave that server " "binding in an inconsistent state." .format(dbalias, srv.service_instance, provider)) if dbalias.target != old_target: delete_target_if_needed(session, old_target) if comments is not None: dbalias.comments = comments session.flush() if dbdns_env.is_default and dbalias.fqdn.dns_domain.name == "ms.com": dsdb_runner = DSDBRunner(logger=logger) dsdb_runner.update_alias(fqdn, dbalias.target.fqdn, dbalias.comments, old_target_fqdn, old_comments) dsdb_runner.commit_or_rollback("Could not update alias in DSDB") return
def render(self, session, logger, fqdn, ip, reverse_ptr, dns_environment, network_environment, comments, **arguments): dbnet_env, dbdns_env = get_net_dns_env(session, network_environment, dns_environment) dbdns_rec = ARecord.get_unique(session, fqdn=fqdn, dns_environment=dbdns_env, compel=True) old_ip = dbdns_rec.ip old_comments = dbdns_rec.comments if ip: if dbdns_rec.hardware_entity: raise ArgumentError("{0} is a primary name, and its IP address " "cannot be changed.".format(dbdns_rec)) if dbdns_rec.assignments: ifaces = ", ".join(["%s/%s" % (addr.interface.hardware_entity, addr.interface) for addr in dbdns_rec.assignments]) raise ArgumentError("{0} is already used by the following " "interfaces, and its IP address cannot be " "changed: {1!s}." .format(dbdns_rec, ifaces)) dbnetwork = get_net_id_from_ip(session, ip, dbnet_env) q = session.query(ARecord) q = q.filter_by(network=dbnetwork) q = q.filter_by(ip=ip) q = q.join(ARecord.fqdn) q = q.filter_by(dns_environment=dbdns_env) existing = q.first() if existing: raise ArgumentError("IP address {0!s} is already used by " "{1:l}." .format(ip, existing)) dbdns_rec.network = dbnetwork old_ip = dbdns_rec.ip dbdns_rec.ip = ip if reverse_ptr: old_reverse = dbdns_rec.reverse_ptr set_reverse_ptr(session, logger, dbdns_rec, reverse_ptr) if old_reverse and old_reverse != dbdns_rec.reverse_ptr: delete_target_if_needed(session, old_reverse) if comments: dbdns_rec.comments = comments session.flush() if dbdns_env.is_default and (dbdns_rec.ip != old_ip or dbdns_rec.comments != old_comments): dsdb_runner = DSDBRunner(logger=logger) dsdb_runner.update_host_details(dbdns_rec.fqdn, new_ip=dbdns_rec.ip, old_ip=old_ip, new_comments=dbdns_rec.comments, old_comments=old_comments) dsdb_runner.commit_or_rollback() return