code: def ConfigureUrls(config, external_hostname = None):
    
    print("\n\n-=GRR URLs=-\n"
          "For GRR to work each client has to be able to communicate with the\n"
          "server. To do this we normally need a public dns name or IP address\n"
          "to communicate with. In the standard configuration this will be used\n"
          "to host both the client facing server and the admin user interface.\n")
  
    existing_ui_urn = grr_config.CONFIG.Get("AdminUI.url", default=None)
    existing_frontend_urns = grr_config.CONFIG.Get("Client.server_urls")
    if not existing_frontend_urns:
      # Port from older deprecated setting Client.control_urls.
      existing_control_urns = grr_config.CONFIG.Get(
          "Client.control_urls", default=None)
      if existing_control_urns is not None:
        existing_frontend_urns = []
        for existing_control_urn in existing_control_urns:
          if not existing_control_urn.endswith("control"):
            raise RuntimeError("Invalid existing control URL: %s" %
                               existing_control_urn)
  
          existing_frontend_urns.append(
              existing_control_urn.rsplit("/", 1)[0] + "/")
  
        config.Set("Client.server_urls", existing_frontend_urns)
        config.Set("Client.control_urls", ["deprecated use Client.server_urls"])
  
    if not existing_frontend_urns or not existing_ui_urn:
      ConfigureHostnames(config, external_hostname=external_hostname)
    else:
      print("Found existing settings:\n  AdminUI URL: %s\n  "
            "Frontend URL(s): %s\n" % (existing_ui_urn, existing_frontend_urns))
      if not RetryBoolQuestion("Do you want to keep this configuration?", True):
        ConfigureHostnames(config, external_hostname=external_hostname)
docs: Guides the user through configuration of various URLs used by GRR.