You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/08/18 13:06:00 UTC
[02/24] incubator-brooklyn git commit: add the creation of default
database and user with generated password.
add the creation of default database and user with generated password.
Also publishes these credentials as sensors
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/9458e151
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/9458e151
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/9458e151
Branch: refs/heads/master
Commit: 9458e15167555f5fce4f7cc0ba66056f92d0cf78
Parents: 5ef0b61
Author: Robert Moss <ro...@gmail.com>
Authored: Mon Aug 17 13:45:42 2015 +0100
Committer: Robert Moss <ro...@gmail.com>
Committed: Mon Aug 17 13:45:42 2015 +0100
----------------------------------------------------------------------
.../database/postgresql/PostgreSqlNode.java | 17 ++++++++++-
.../postgresql/PostgreSqlSshDriver.java | 31 +++++++++++++++++++-
2 files changed, 46 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9458e151/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
index 793debf..e8496f3 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlNode.java
@@ -22,6 +22,7 @@ import org.apache.brooklyn.api.catalog.Catalog;
import org.apache.brooklyn.api.entity.Effector;
import org.apache.brooklyn.api.entity.proxying.ImplementedBy;
import org.apache.brooklyn.api.entity.trait.HasShortName;
+import org.apache.brooklyn.location.basic.PortRanges;
import brooklyn.config.ConfigKey;
import brooklyn.entity.basic.ConfigKeys;
@@ -30,8 +31,8 @@ import brooklyn.entity.database.DatabaseNode;
import brooklyn.entity.database.DatastoreMixins;
import brooklyn.entity.database.DatastoreMixins.DatastoreCommon;
import brooklyn.entity.effector.Effectors;
+import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
-import org.apache.brooklyn.location.basic.PortRanges;
import brooklyn.util.flags.SetFromFlag;
/**
@@ -80,6 +81,20 @@ public interface PostgreSqlNode extends SoftwareProcess, HasShortName, Datastore
@SetFromFlag("pollPeriod")
ConfigKey<Long> POLL_PERIOD = ConfigKeys.newLongConfigKey(
"postgresql.sensorpoll", "Poll period (in milliseconds)", 1000L);
+
+ @SetFromFlag("username")
+ BasicAttributeSensorAndConfigKey<String> USERNAME = new BasicAttributeSensorAndConfigKey<>(
+ String.class, "postgresql.username", "Username of the database user",
+ "postgresuser");
+
+ @SetFromFlag("password")
+ BasicAttributeSensorAndConfigKey<String> PASSWORD = new BasicAttributeSensorAndConfigKey<>(
+ String.class, "postgresql.password",
+ "Password for the database user, auto-generated if not set");
+
+ @SetFromFlag("database")
+ BasicAttributeSensorAndConfigKey<String> DATABASE = new BasicAttributeSensorAndConfigKey<>(
+ String.class, "postgresql.database", "Database to be used", "db");
Effector<String> EXECUTE_SCRIPT = Effectors.effector(DatastoreMixins.EXECUTE_SCRIPT)
.description("Executes the given script contents using psql")
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9458e151/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
----------------------------------------------------------------------
diff --git a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
index a23f2bc..18dc9a4 100644
--- a/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
+++ b/software/database/src/main/java/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java
@@ -47,6 +47,7 @@ import brooklyn.entity.basic.SoftwareProcess;
import brooklyn.entity.database.DatastoreMixins;
import brooklyn.entity.software.SshEffectorTasks;
+import org.apache.brooklyn.api.entity.basic.EntityLocal;
import org.apache.brooklyn.api.location.OsDetails;
import org.apache.brooklyn.location.basic.SshMachineLocation;
@@ -294,7 +295,24 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver implem
// Wait for commands to complete before running the creation script
DynamicTasks.waitForLast();
-
+ String createUserCommand = String.format(
+ "\"CREATE USER %s WITH PASSWORD '%s'; \"",
+ entity.getConfig(PostgreSqlNode.USERNAME), getUserPassword()
+ );
+ String createDatabaseCommand = String.format(
+ "\"CREATE DATABASE %s OWNER %s\"",
+ entity.getConfig(PostgreSqlNode.DATABASE),
+ entity.getConfig(PostgreSqlNode.USERNAME));
+ newScript("initializing user and database")
+ .body.append(
+ "cd " + getInstallDir(),
+ callPgctl("start", true),
+ sudoAsUser("postgres", getInstallDir() + "/bin/psql -p " + entity.getAttribute(PostgreSqlNode.POSTGRESQL_PORT) +
+ " --command="+ createUserCommand),
+ sudoAsUser("postgres", getInstallDir() + "/bin/psql -p " + entity.getAttribute(PostgreSqlNode.POSTGRESQL_PORT) +
+ " --command="+ createDatabaseCommand),
+ callPgctl("stop", true))
+ .failOnNonZeroResultCode().execute();
// Capture log file contents if there is an error configuring the database
try {
executeDatabaseCreationScript();
@@ -307,6 +325,17 @@ public class PostgreSqlSshDriver extends AbstractSoftwareProcessSshDriver implem
// on port 5432?" error then the port is probably closed. Check that the firewall allows external TCP/IP
// connections (netstat -nap). You can open a port with lokkit or by configuring the iptables.
}
+
+ protected String getUserPassword() {
+ String password = entity.getConfig(PostgreSqlNode.PASSWORD);
+ if (Strings.isEmpty(password)) {
+ log.debug(entity + " has no password specified for " + PostgreSqlNode.PASSWORD + "; using a random string");
+ password = brooklyn.util.text.Strings.makeRandomId(8);
+ entity.setAttribute(PostgreSqlNode.PASSWORD, password);
+ entity.config().set(PostgreSqlNode.PASSWORD, password);
+ }
+ return password;
+ }
protected void executeDatabaseCreationScript() {
if (copyDatabaseCreationScript()) {