コード例 #1
0
  /**
   * Iterate through registered additional node types to find type which = prefix of dns, and then
   * return NodeConfig(found_type, dns). For example: given: dns = "builder2.dev.com"
   * $builder_host_name = "builder1.dev.com" => base_node_domain = ".dev.com" Result = new
   * NodeConfig(BUILDER, "builder2.dev.com")
   *
   * <p>Example 2: given: dns = "builder2.dev.com" $builder_host_name = "builder1.example.com" =>
   * base_node_domain = ".example.com" != ".dev.com" Result = IllegalArgumentException("Illegal DNS
   * name 'builder2.dev.com' of additional node....)
   *
   * @throws IllegalArgumentException if dns doesn't comply with convention
   *     '<supported_node_type><number>(base_node_domain)' where supported prefix
   */
  public NodeConfig recognizeNodeConfigFromDns(String dns)
      throws IllegalArgumentException, IllegalStateException {
    for (Map.Entry<NodeConfig.NodeType, String> entry :
        ADDITIONAL_NODES_CODENVY_PROPERTIES.entrySet()) {
      NodeConfig.NodeType type = entry.getKey();

      NodeConfig baseNode = NodeConfig.extractConfigFrom(config, type);
      if (baseNode == null) {
        throw new IllegalStateException(
            format("Host name of base node of type '%s' wasn't found.", type));
      }

      String typeString = type.toString().toLowerCase();
      String baseNodeDomain = ConfigManager.getBaseNodeDomain(baseNode).toLowerCase();
      String regex = format("^%s\\d+%s$", typeString, baseNodeDomain);

      if (dns != null && dns.toLowerCase().matches(regex)) {
        return new NodeConfig(type, dns, null);
      }
    }

    throw new IllegalArgumentException(
        format(
            "Illegal DNS name '%s' of additional node. "
                + "Correct name template is '<prefix><number><base_node_domain>' where supported prefix is one from"
                + " the list '%s'",
            dns, ADDITIONAL_NODES_CODENVY_PROPERTIES.keySet().toString().toLowerCase()));
  }