Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Parameterize the start effector #1128

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ public class BrooklynConfigKeys {
*/
public static final ConfigKey<Boolean> SKIP_ENTITY_INSTALLATION = newBooleanConfigKey("install.skip", "Skip the driver install commands entirely, for pre-installed software");

/**
* This will skip only the customize phase of the lifecycle and then continue with the launching of the entity.
*/
public static final ConfigKey<Boolean> SKIP_ENTITY_CUSTOMIZATION = newBooleanConfigKey("customize.skip", "Skip the driver customize commands entirely");

// The implementation in AbstractSoftwareSshDriver runs this command as an SSH command
public static final ConfigKey<String> PRE_INSTALL_COMMAND = ConfigKeys.newStringConfigKey("pre.install.command",
"Command to be run prior to the install method being called on the driver");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.stream.ReaderInputStream;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -122,6 +121,9 @@ public void start() {

Optional<Boolean> locationInstalled = Optional.fromNullable(getLocation().getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));
Optional<Boolean> entityInstalled = Optional.fromNullable(entity.getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));

boolean skipCustomized = Optional.fromNullable(entity.getConfig(BrooklynConfigKeys.SKIP_ENTITY_CUSTOMIZATION)).or(false);

boolean skipInstall = locationInstalled.or(entityInstalled).or(false);
if (!skipInstall) {
DynamicTasks.queue("setup", new Runnable() { public void run() {
Expand All @@ -144,10 +146,12 @@ public void start() {
runPostInstallCommand();
}});

DynamicTasks.queue("customize", new Runnable() { public void run() {
waitForConfigKey(BrooklynConfigKeys.CUSTOMIZE_LATCH);
customize();
}});
if (!skipCustomized) {
DynamicTasks.queue("customize", new Runnable() { public void run() {
waitForConfigKey(BrooklynConfigKeys.CUSTOMIZE_LATCH);
customize();
}});
}

DynamicTasks.queue("copy-runtime-resources", new Runnable() { public void run() {
waitForConfigKey(BrooklynConfigKeys.RUNTIME_RESOURCES_LATCH);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,13 @@ private ChildStartableMode(boolean isDisabled, boolean isBackground, boolean isL

AttributeSensor<String> PID_FILE = Sensors.newStringSensor("softwareprocess.pid.file", "PID file");

@Beta
public static class StartSoftwareParameters {
@Beta /** @since 0.9.0 */
public static final ConfigKey<Boolean> SKIP_INSTALLATION = ConfigKeys.newConfigKey(Boolean.class, "skipInstallation",
"Just launch the process without installation and customization, if stopped; default false", false);
}

@Beta
public static class RestartSoftwareParameters {
@Beta /** @since 0.7.0 semantics of parameters to restart being explored */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import org.apache.brooklyn.entity.machine.ProvidesProvisioningFlags;
import org.apache.brooklyn.entity.software.base.SoftwareProcess;
import org.apache.brooklyn.entity.software.base.SoftwareProcess.RestartSoftwareParameters;
import org.apache.brooklyn.entity.software.base.SoftwareProcess.StartSoftwareParameters;
import org.apache.brooklyn.entity.software.base.SoftwareProcess.StopSoftwareParameters;
import org.apache.brooklyn.entity.software.base.SoftwareProcess.RestartSoftwareParameters.RestartMachineMode;
import org.apache.brooklyn.entity.software.base.SoftwareProcess.StopSoftwareParameters.StopMode;
Expand Down Expand Up @@ -140,7 +141,10 @@ public void attachLifecycleEffectors(Entity entity) {
* the behaviour in this lifecycle class instance.
*/
public Effector<Void> newStartEffector() {
return Effectors.effector(Startable.START).impl(newStartEffectorTask()).build();
return Effectors.effector(Startable.START)
.parameter(StartSoftwareParameters.SKIP_INSTALLATION)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A better place for this would be the SoftwareProcessDriverLifecycleEffectorTasks (overriding the method there), but given that the rest of the lifecycle effectors set their process related parameters here ok to stay here for consistency.

.impl(newStartEffectorTask())
.build();
}

/** @see {@link #newStartEffector()} */
Expand Down Expand Up @@ -183,6 +187,12 @@ public EffectorBody<Void> newStartEffectorTask() {
public Void call(ConfigBag parameters) {
Collection<? extends Location> locations = null;

Boolean isSkipInstallation = parameters.get(StartSoftwareParameters.SKIP_INSTALLATION);
if (isSkipInstallation != null && isSkipInstallation) {
entity().config().set(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION, isSkipInstallation);
entity().config().set(BrooklynConfigKeys.SKIP_ENTITY_CUSTOMIZATION, isSkipInstallation);
}

Object locationsRaw = parameters.getStringKey(LOCATIONS.getName());
locations = Locations.coerceToCollection(entity().getManagementContext(), locationsRaw);

Expand All @@ -203,6 +213,12 @@ private class StartEffectorBody extends EffectorBody<Void> {
public Void call(ConfigBag parameters) {
Collection<? extends Location> locations = null;

Boolean isSkipInstallation = parameters.get(StartSoftwareParameters.SKIP_INSTALLATION);
if (isSkipInstallation != null && isSkipInstallation) {
entity().config().set(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION, isSkipInstallation);
entity().config().set(BrooklynConfigKeys.SKIP_ENTITY_CUSTOMIZATION, isSkipInstallation);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's dangerous to set the parameter as config value as it would be (unexpectedly) used for future calls as well. I'd suggest using curl to change the config value if needed and then do a regular start.

}

Object locationsRaw = parameters.getStringKey(LOCATIONS.getName());
locations = Locations.coerceToCollection(entity().getManagementContext(), locationsRaw);

Expand Down