Package org.platformlayer.service.gerrit.ops

Source Code of org.platformlayer.service.gerrit.ops.GerritTemplate

package org.platformlayer.service.gerrit.ops;

import java.io.File;
import java.util.Map;

import javax.inject.Inject;

import org.platformlayer.InetAddressChooser;
import org.platformlayer.core.model.ItemBase;
import org.platformlayer.core.model.PlatformLayerKey;
import org.platformlayer.core.model.Secret;
import org.platformlayer.ops.OpsContext;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.databases.DatabaseHelper;
import org.platformlayer.ops.databases.DatabaseServer;
import org.platformlayer.service.gerrit.model.GerritDatabase;
import org.platformlayer.service.gerrit.model.GerritService;
import org.platformlayer.service.jetty.ops.JettyTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Maps;

public class GerritTemplate extends JettyTemplate {

  private static final Logger log = LoggerFactory.getLogger(GerritTemplate.class);

  @Inject
  DatabaseHelper databases;

  @Override
  public GerritService getModel() {
    return getGerritService();
  }

  public GerritService getGerritService() {
    GerritService model = OpsContext.get().getInstance(GerritService.class);
    return model;
  }

  public File getLogConfigurationFile() {
    return new File(getInstanceDir(), "logback.xml");
  }

  // @Override
  // public Command getCommand() {
  // // GerritCodeReview -jar /var/gerrit/default/data/bin/gerrit.war daemon -d /var/gerrit/default/data
  // // --console-log
  //
  // File gerritScript = new File(getDataDir(), "bin/gerrit.sh");
  // Command command = Command.build("{0} run", gerritScript);
  //
  // return command;
  // }

  @Override
  public String getKey() {
    return "gerrit";
  }

  public File getServicesDir() {
    return new File(getConfigDir(), "services");
  }

  public String getDatabaseUsername() throws OpsException {
    return getDatabase().username;
  }

  public String getDatabaseName() throws OpsException {
    return getDatabase().databaseName;
  }

  public Secret getDatabasePassword() throws OpsException {
    return getDatabase().password;
    // return Secret.build("platformlayer-password");
  }

  public GerritDatabase getDatabase() throws OpsException {
    PlatformLayerKey databaseKey = getDatabaseKey();
    GerritDatabase database = platformLayer.getItem(databaseKey, GerritDatabase.class);
    return database;
  }

  protected PlatformLayerKey getDatabaseKey() {
    return getGerritService().database;
  }

  protected String getJdbcUrl() throws OpsException {
    PlatformLayerKey serverKey = getDatabase().server;

    ItemBase serverItem = (ItemBase) platformLayer.getItem(serverKey);
    DatabaseServer server = databases.toDatabase(serverItem);

    String jdbc = server.getJdbcUrl(getDatabaseName(), InetAddressChooser.preferIpv6());
    return jdbc;
  }

  @Override
  protected PlatformLayerKey getSslKeyPath() {
    return getModel().sslKey;
  }

  public String getPlacementKey() {
    return "gerrit";
  }

  @Override
  public void buildTemplateModel(Map<String, Object> model) throws OpsException {
    super.buildTemplateModel(model);

    Map<String, String> config = getConfigurationProperties();
    // We can't have dots, or freemarker assumes they are objects
    for (String key : config.keySet()) {
      String value = config.get(key);
      key = key.replace(".", "_");
      model.put(key, value);
    }

    String requiredRole = "project-" + getModel().getKey().getProjectString();
    model.put("requiredRole", requiredRole);
  }

  public int getSshdPort() {
    return 29418;
  }

  public int getWebPort() {
    return 443;
  }

  @Override
  public File getConfigurationFile() {
    return new File(getDataDir(), "etc/gerrit.config");
  }

  boolean useOpenId = false;

  @Override
  protected Map<String, String> getConfigurationProperties() throws OpsException {
    Map<String, String> model = Maps.newHashMap();

    model.put("database.type", "POSTGRESQL");
    // model.put("database.hostname", );
    model.put("database.url", getJdbcUrl());
    model.put("database.username", getDatabaseUsername());
    model.put("database.password", getDatabasePassword().plaintext());
    model.put("database.database", getDatabaseName());

    String scheme = "https";

    model.put("gerrit.basePath", "git");
    model.put("gerrit.canonicalWebUrl", scheme + "://" + getModel().dnsName + ":" + getWebPort() + "/");

    if (useOpenId) {
      model.put("auth.type", "OPENID");
    } else {
      model.put("auth.type", "HTTP");
      model.put("auth.emailFormat", "{0}");

      // LDAP...
      // [auth]
      // type = LDAP_BIND
      // [ldap]
      // server = ldap://1.2.3.4:11389
      // accountEmailAddress = "mail"
      // accountBase = "ou=people,dc=example,dc=com"

    }
    model.put("sendemail.enable", "false");

    model.put("container.user", getUser());
    model.put("container.javaHome", "/usr/lib/jvm/java-7-openjdk-amd64/jre");

    model.put("sshd.listenAddress", "*:" + getSshdPort());

    String listenUrl = scheme + "://*:" + getWebPort();
    model.put("httpd.listenUrl", listenUrl);

    model.put("cache.directory", "cache");

    // [gerrit]
    // basePath = git
    // canonicalWebUrl = http://devstack:8080/
    // [database]
    // type = POSTGRESQL
    // #database = db/ReviewDB
    // [auth]
    // type = OPENID
    // [sendemail]
    // smtpServer = localhost
    // [container]
    // user = justinsb
    // javaHome = /usr/lib/jvm/java-6-openjdk-amd64/jre
    // [sshd]
    // listenAddress = *:29418
    // [httpd]
    // listenUrl = http://*:8080/
    // [cache]
    // directory = cache}

    return model;
  }

  public File getDataDir() {
    return new File(getInstanceDir(), "data");
  }

  public File getInstallWarFile() {
    // return new File(getInstallDir(), "gerrit-2.4.2.war");
    return new File(getInstallDir(), "gerrit-full-2.5.war");
  }

  @Override
  public String getMatchExecutableName() {
    // We run a script, but that script runs java
    return "java";
  }

  public File getLibExtDir() {
    return new File(getJettyInstanceDir(), "lib/ext");
  }

  public File getJettyInstanceDir() {
    return getInstanceDir();
  }

  @Override
  protected boolean getUseHttps() {
    return true;
  }

  @Override
  protected boolean getUseJndi() {
    return true;
  }

}
TOP

Related Classes of org.platformlayer.service.gerrit.ops.GerritTemplate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.