Beispiel #1
0
  private MQBrokerConfigDTO createDTO() {
    if (Strings.isNullOrBlank(username)) {
      username = ShellUtils.retrieveFabricUser(session);
    }
    if (Strings.isNullOrBlank(password)) {
      password = ShellUtils.retrieveFabricUserPassword(session);
    }

    MQBrokerConfigDTO dto = new MQBrokerConfigDTO();
    dto.setConfigUrl(config);
    dto.setData(data);
    if (ports != null && ports.length > 0) {
      for (String port : ports) {
        addConfig(port, dto.getPorts());
      }
    }
    dto.setGroup(group);
    dto.setJvmOpts(jvmOpts);
    dto.setBrokerName(name);
    dto.setProfile(profile);
    dto.setClientProfile(clientProfile);
    dto.setClientParentProfile(clientParentProfile);
    dto.setNetworks(networks);
    dto.setNetworksPassword(networksPassword);
    dto.setNetworksUserName(networksUserName);
    dto.setParentProfile(parentProfile);
    dto.setProperties(properties);
    dto.setVersion(version);
    dto.setMinimumInstances(minimumInstances);
    dto.setReplicas(replicas);
    if (kind != null) {
      dto.setKind(kind);
    }
    return dto;
  }
  private void promptForJmxCredentialsIfNeeded() throws IOException {
    // If the username was not configured via cli, then prompt the user for the values
    if (username == null) {
      log.debug("Prompting user for jmx login");
      username = ShellUtils.readLine(session, "Jmx Login for " + parent + ": ", false);
    }

    if (password == null) {
      password = ShellUtils.readLine(session, "Jmx Password for " + parent + ": ", true);
    }
  }
  @Override
  protected Object doExecute() throws Exception {
    CreateContainerMetadata[] metadatas = null;
    validateProfileName(profiles);

    // validate input before creating containers
    preCreateContainer(name);

    String jmxUser = username != null ? username : ShellUtils.retrieveFabricUser(session);
    String jmxPassword =
        password != null ? password : ShellUtils.retrieveFabricUserPassword(session);

    // okay create child container
    String url = "child://" + parent;
    CreateChildContainerOptions.Builder builder =
        CreateChildContainerOptions.builder()
            .name(name)
            .parent(parent)
            .bindAddress(bindAddress)
            .resolver(resolver)
            .manualIp(manualIp)
            .ensembleServer(isEnsembleServer)
            .number(number)
            .zookeeperUrl(fabricService.getZookeeperUrl())
            .zookeeperPassword(fabricService.getZookeeperPassword())
            .jvmOpts(jvmOpts)
            .jmxUser(jmxUser)
            .jmxPassword(jmxPassword)
            .version(version)
            .profiles(getProfileNames())
            .dataStoreProperties(getDataStoreProperties())
            .dataStoreType(fabricService.getDataStore().getType());

    try {
      metadatas = fabricService.createContainers(builder.build());
      rethrowAuthenticationErrors(metadatas);
      ShellUtils.storeFabricCredentials(session, jmxUser, jmxPassword);
    } catch (FabricAuthenticationException ex) {
      // If authentication fails, prompts for credentials and try again.
      username = null;
      password = null;
      promptForJmxCredentialsIfNeeded();
      metadatas =
          fabricService.createContainers(builder.jmxUser(username).jmxPassword(password).build());
      ShellUtils.storeFabricCredentials(session, username, password);
    }

    // display containers
    displayContainers(metadatas);
    return null;
  }
Beispiel #4
0
  @Override
  protected Object doExecute() throws Exception {
    MQBrokerConfigDTO dto = createDTO();

    Profile profile = MQManager.createOrUpdateProfile(dto, fabricService);
    String profileId = profile.getId();

    System.out.println("MQ profile " + profileId + " ready");

    // assign profile to existing containers
    if (assign != null) {
      String[] assignContainers = assign.split(",");
      MQManager.assignProfileToContainers(fabricService, profile, assignContainers);
    }

    // create containers
    if (create != null) {
      String[] createContainers = create.split(",");
      List<CreateContainerBasicOptions.Builder> builderList =
          MQManager.createContainerBuilders(
              dto, fabricService, "child", profileId, dto.version(), createContainers);
      for (CreateContainerBasicOptions.Builder builder : builderList) {
        CreateContainerMetadata[] metadatas = null;
        try {
          if (builder instanceof CreateChildContainerOptions.Builder) {
            CreateChildContainerOptions.Builder childBuilder =
                (CreateChildContainerOptions.Builder) builder;
            builder = childBuilder.jmxUser(username).jmxPassword(password);
          }
          metadatas = fabricService.createContainers(builder.build());
          ShellUtils.storeFabricCredentials(session, username, password);
        } catch (FabricAuthenticationException fae) {
          // If authentication fails, prompts for credentials and try again.
          if (builder instanceof CreateChildContainerOptions.Builder) {
            CreateChildContainerOptions.Builder childBuilder =
                (CreateChildContainerOptions.Builder) builder;
            promptForJmxCredentialsIfNeeded();
            metadatas =
                fabricService.createContainers(
                    childBuilder.jmxUser(username).jmxPassword(password).build());
            ShellUtils.storeFabricCredentials(session, username, password);
          }
        }
      }
    }
    return null;
  }
Beispiel #5
0
  private String[] promptForNewUser(String user, String password) throws IOException {
    String[] response = new String[2];
    // If the username was not configured via cli, then prompt the user for the values
    if (user == null || password == null) {
      System.out.println(
          "No user found in etc/users.properties or specified as an option. Please specify one ...");
    }
    while (user == null || user.isEmpty()) {
      user = ShellUtils.readLine(session, "New user name: ", false);
      if (user == null) {
        break;
      }
    }

    if (user != null && password == null) {
      String password1 = null;
      String password2 = null;
      while (password1 == null || !password1.equals(password2)) {
        password1 = ShellUtils.readLine(session, "Password for " + user + ": ", true);
        password2 = ShellUtils.readLine(session, "Verify password for " + user + ": ", true);

        if (password1 == null || password2 == null) {
          break;
        }

        if (password1 != null && password1.equals(password2)) {
          password = password1;
        } else {
          System.out.println("Passwords did not match. Please try again!");
        }
      }
    }
    response[0] = user;
    response[1] = password;
    return response;
  }
Beispiel #6
0
  protected Object doExecute() throws Exception {

    // prevent creating fabric if already created
    ServiceReference<FabricService> sref = bundleContext.getServiceReference(FabricService.class);
    FabricService fabricService = sref != null ? bundleContext.getService(sref) : null;
    if (!force
        && (fabricService != null && fabricService.getCurrentContainer().isEnsembleServer())) {
      System.out.println(
          "Current container "
              + fabricService.getCurrentContainerName()
              + " is already in the current fabric ensemble. Cannot create fabric.");
      System.out.println(
          "You can use the --force option, if you want to force re-create the fabric.");
      return null;
    }

    Configuration bootConfiguration =
        configAdmin.getConfiguration(BootstrapConfiguration.COMPONENT_PID, null);
    Dictionary<String, Object> bootProperties = bootConfiguration.getProperties();
    if (bootProperties == null) {
      bootProperties = new Hashtable<>();
    }

    String runtimeIdentity = runtimeProperties.getRuntimeIdentity();
    CreateEnsembleOptions.Builder<?> builder =
        CreateEnsembleOptions.builder()
            .zooKeeperServerTickTime(zooKeeperTickTime)
            .zooKeeperServerInitLimit(zooKeeperInitLimit)
            .zooKeeperServerSyncLimit(zooKeeperSyncLimit)
            .zooKeeperServerDataDir(zooKeeperDataDir)
            .fromRuntimeProperties(runtimeProperties)
            .bootstrapTimeout(bootstrapTimeout)
            .waitForProvision(waitForProvisioning)
            .clean(clean);

    builder.version(version);

    if (containers == null || containers.isEmpty()) {
      containers = Arrays.asList(runtimeIdentity);
    }

    if (!noImport && importDir != null) {
      builder.autoImportEnabled(true);
      builder.importPath(importDir);
    }

    if (globalResolver != null) {
      builder.globalResolver(globalResolver);
      bootProperties.put(ZkDefs.GLOBAL_RESOLVER_PROPERTY, globalResolver);
    }

    if (resolver != null) {
      builder.resolver(resolver);
      bootProperties.put(ZkDefs.LOCAL_RESOLVER_PROPERTY, resolver);
    }

    if (manualIp != null) {
      builder.manualIp(manualIp);
      bootProperties.put(ZkDefs.MANUAL_IP, manualIp);
    }

    if (bindAddress != null) {
      if (!bindAddress.contains(":")) {
        builder.bindAddress(bindAddress);
        bootProperties.put(ZkDefs.BIND_ADDRESS, bindAddress);
      } else {
        String[] parts = bindAddress.split(":");
        builder.bindAddress(parts[0]);
        builder.zooKeeperServerPort(Integer.parseInt(parts[1]));
        bootProperties.put(ZkDefs.BIND_ADDRESS, parts[0]);
      }
    }

    if (zooKeeperServerPort > 0) {
      // --zookeeper-server-port option has higher priority than
      // CreateEnsembleOptions.ZOOKEEPER_SERVER_PORT and
      // CreateEnsembleOptions.ZOOKEEPER_SERVER_CONNECTION_PORT
      // system/runtime properties
      builder.setZooKeeperServerPort(zooKeeperServerPort);
      builder.setZooKeeperServerConnectionPort(zooKeeperServerPort);
    }

    // Configure External Git Repository.
    if (externalGitUrl != null) {
      builder.dataStoreProperty(GIT_REMOTE_URL, externalGitUrl);
    }
    if (externalGitUser != null) {
      builder.dataStoreProperty(GIT_REMOTE_USER, externalGitUser);
    }
    if (externalGitPassword != null) {
      builder.dataStoreProperty(GIT_REMOTE_PASSWORD, externalGitPassword);
    }

    if (profiles != null && profiles.size() > 0) {
      builder.profiles(profiles);
    }

    if (nonManaged) {
      builder.agentEnabled(false);
    } else {
      builder.agentEnabled(true);
    }

    builder.minimumPort(minimumPort);
    builder.minimumPort(maximumPort);
    bootProperties.put(ZkDefs.MINIMUM_PORT, String.valueOf(minimumPort));
    bootProperties.put(ZkDefs.MAXIMUM_PORT, String.valueOf(maximumPort));

    newUser = newUser != null ? newUser : ShellUtils.retrieveFabricUser(session);
    newUserPassword =
        newUserPassword != null ? newUserPassword : ShellUtils.retrieveFabricUserPassword(session);

    Path propsPath = runtimeProperties.getConfPath().resolve("users.properties");
    Properties userProps = new Properties(propsPath.toFile());

    if (userProps.isEmpty()) {
      String[] credentials = promptForNewUser(newUser, newUserPassword);
      newUser = credentials[0];
      newUserPassword = credentials[1];
    } else {
      if (newUser == null || newUserPassword == null) {
        newUser = "" + userProps.keySet().iterator().next();
        newUserPassword = "" + userProps.get(newUser);
        if (newUserPassword.contains(ROLE_DELIMITER)) {
          newUserPassword = newUserPassword.substring(0, newUserPassword.indexOf(ROLE_DELIMITER));
        }
      }
      String passwordWithroles = userProps.get(newUser);
      if (passwordWithroles != null && passwordWithroles.contains(ROLE_DELIMITER)) {
        String[] infos = passwordWithroles.split(",");
        String oldUserRole = newUserRole;
        for (int i = 1; i < infos.length; i++) {
          if (infos[i].trim().startsWith(BackingEngine.GROUP_PREFIX)) {
            // it's a group reference
            String groupInfo = (String) userProps.get(infos[i].trim());
            if (groupInfo != null) {
              String[] roles = groupInfo.split(",");
              for (int j = 1; j < roles.length; j++) {
                if (!roles[j].trim().equals(oldUserRole)) {
                  newUserRole = newUserRole + ROLE_DELIMITER + roles[j].trim();
                }
              }
            }
          } else {
            // it's an user reference
            if (!infos[i].trim().equals(oldUserRole)) {
              newUserRole = newUserRole + ROLE_DELIMITER + infos[i].trim();
            }
          }
        }
      }
    }

    if (Strings.isNullOrEmpty(newUser)) {
      System.out.println("No user specified. Cannot create a new fabric ensemble.");
      return null;
    }

    StringBuilder sb = new StringBuilder();

    // session is unset when this is called from FMC
    if (session != null) {
      ShellUtils.storeFabricCredentials(session, newUser, newUserPassword);
    }

    if (generateZookeeperPassword) {
      // do nothing use the generated password.
    } else if (zookeeperPassword == null) {
      zookeeperPassword =
          PasswordEncoder.decode(
              runtimeProperties.getProperty(
                  CreateEnsembleOptions.ZOOKEEPER_PASSWORD,
                  PasswordEncoder.encode(newUserPassword)));
      builder.zookeeperPassword(zookeeperPassword);
    } else {
      builder.zookeeperPassword(zookeeperPassword);
    }

    bootConfiguration.update(bootProperties);
    CreateEnsembleOptions options =
        builder.users(userProps).withUser(newUser, newUserPassword, newUserRole).build();

    if (containers.size() == 1 && containers.contains(runtimeIdentity)) {
      bootstrap.create(options);
    } else {
      ServiceProxy<ZooKeeperClusterService> serviceProxy =
          ServiceProxy.createServiceProxy(bundleContext, ZooKeeperClusterService.class);
      try {
        serviceProxy.getService().createCluster(containers, options);
      } finally {
        serviceProxy.close();
      }
    }

    ShellUtils.storeZookeeperPassword(session, options.getZookeeperPassword());
    if (zookeeperPassword == null && !generateZookeeperPassword) {
      sb.append("Zookeeper password: (reusing users ")
          .append(newUser)
          .append(" password:"******")\n");
      sb.append(
          "(You can use the --zookeeper-password / --generate-zookeeper-password option to specify one.)\n");
    } else if (generateZookeeperPassword) {
      sb.append("Generated zookeeper password:"******"Using specified zookeeper password:"******"It may take a couple of seconds for the container to provision...");
      System.out.println(
          "You can use the --wait-for-provisioning option, if you want this command to block until the container is provisioned.");
    }

    return null;
  }