Repository: incubator-brooklyn Updated Branches: refs/heads/master b35c338a9 -> 119d8945f
Adds template processing to the MySQL database creation script Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f6c84342 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f6c84342 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f6c84342 Branch: refs/heads/master Commit: f6c843427195a2178591e2cc8926c642887dc067 Parents: eab2d39 Author: Martin Harris <[email protected]> Authored: Tue Mar 3 15:24:09 2015 +0000 Committer: Martin Harris <[email protected]> Committed: Tue Mar 3 15:24:09 2015 +0000 ---------------------------------------------------------------------- .../entity/database/DatastoreMixins.java | 11 ++++++++++ .../entity/database/mysql/MySqlSshDriver.java | 23 +++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f6c84342/software/database/src/main/java/brooklyn/entity/database/DatastoreMixins.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/DatastoreMixins.java b/software/database/src/main/java/brooklyn/entity/database/DatastoreMixins.java index bb01c8f..f11f0a6 100644 --- a/software/database/src/main/java/brooklyn/entity/database/DatastoreMixins.java +++ b/software/database/src/main/java/brooklyn/entity/database/DatastoreMixins.java @@ -26,6 +26,7 @@ import brooklyn.config.ConfigKey; import brooklyn.entity.Effector; import brooklyn.entity.Entity; import brooklyn.entity.basic.ConfigKeys; +import brooklyn.entity.basic.EntityLocal; import brooklyn.entity.effector.Effectors; import brooklyn.event.AttributeSensor; import brooklyn.event.basic.Sensors; @@ -79,6 +80,16 @@ public class DatastoreMixins { return null; } + /** returns the creation script contents, if it exists, or null if none is defined (error if it cannot be loaded) */ + @Nullable public static String getDatabaseCreationScriptAsString(Entity entity) { + String url = entity.getConfig(DatastoreMixins.CREATION_SCRIPT_URL); + if (!Strings.isBlank(url)) + return new ResourceUtils(entity).getResourceAsString(url); + String contents = entity.getConfig(DatastoreMixins.CREATION_SCRIPT_CONTENTS); + if (!Strings.isBlank(contents)) + return contents; + return null; + } /** An entity with the most common datastore config, sensors, and effectors */ public interface DatastoreCommon extends Entity, DatastoreMixins.HasDatastoreUrl, DatastoreMixins.CanExecuteScript, DatastoreMixins.CanGiveCreationScript { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f6c84342/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java ---------------------------------------------------------------------- diff --git a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java index 28a1ff3..a4e28d5 100644 --- a/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java +++ b/software/database/src/main/java/brooklyn/entity/database/mysql/MySqlSshDriver.java @@ -23,6 +23,11 @@ import static brooklyn.util.ssh.BashCommands.commandsToDownloadUrlsAs; import static brooklyn.util.ssh.BashCommands.installPackage; import static java.lang.String.format; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; @@ -42,6 +47,7 @@ import brooklyn.location.OsDetails; import brooklyn.location.basic.BasicOsDetails.OsVersions; import brooklyn.location.basic.SshMachineLocation; import brooklyn.util.collections.MutableMap; +import brooklyn.util.exceptions.Exceptions; import brooklyn.util.net.Urls; import brooklyn.util.os.Os; import brooklyn.util.ssh.BashCommands; @@ -186,9 +192,20 @@ public class MySqlSshDriver extends AbstractSoftwareProcessSshDriver implements } protected boolean copyDatabaseCreationScript() { - InputStream creationScript = DatastoreMixins.getDatabaseCreationScript(entity); - if (creationScript==null) return false; - getMachine().copyTo(creationScript, getRunDir() + "/creation-script.sql"); + String creationScriptContents = DatastoreMixins.getDatabaseCreationScriptAsString(entity); + if (creationScriptContents==null) return false; + + File templateFile; + try { + templateFile = File.createTempFile("mysql", null); + templateFile.deleteOnExit(); + BufferedWriter writer = new BufferedWriter(new FileWriter(templateFile)); + writer.write (creationScriptContents); + } catch (IOException e) { + throw Exceptions.propagate(e); + } + copyTemplate(templateFile.getAbsoluteFile(), getRunDir() + "/creation-script.sql"); + templateFile.delete(); return true; }
