blob: 70b20ad240770bd58b6937779f803b05815deb21 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.brooklyn.entity.chef.mysql;
import org.apache.brooklyn.api.mgmt.TaskAdaptable;
import org.apache.brooklyn.api.mgmt.TaskFactory;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
import org.apache.brooklyn.entity.chef.ChefConfig;
import org.apache.brooklyn.entity.chef.ChefConfigs;
import org.apache.brooklyn.entity.chef.ChefSoloDriver;
import org.apache.brooklyn.entity.software.base.SoftwareProcessImpl;
import org.apache.brooklyn.feed.ssh.SshFeed;
import org.apache.brooklyn.feed.ssh.SshPollConfig;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.time.Duration;
@Deprecated /** @deprecated since 0.7.0 use see examples {Dynamic,Typed}ToyMySqlEntityChef */
public class ChefSoloDriverToyMySqlEntity extends SoftwareProcessImpl implements ChefConfig {
public static final String PID_FILE = "/var/run/mysqld/mysqld.pid";
public static final ConfigKey<TaskFactory<? extends TaskAdaptable<Boolean>>> IS_RUNNING_TASK =
ConfigKeys.newConfigKeyWithDefault(ChefSoloDriver.IS_RUNNING_TASK,
SshEffectorTasks.isPidFromFileRunning(PID_FILE).runAsRoot());
public static final ConfigKey<TaskFactory<?>> STOP_TASK =
ConfigKeys.newConfigKeyWithDefault(ChefSoloDriver.STOP_TASK,
SshEffectorTasks.ssh("/etc/init.d/mysql stop").allowingNonZeroExitCode().runAsRoot());
private SshFeed upFeed;
@Override
public Class<?> getDriverInterface() {
return ChefSoloDriver.class;
}
@Override
protected void connectSensors() {
super.connectSensors();
// TODO have a TaskFactoryFeed which reuses the IS_RUNNING_TASK
upFeed = SshFeed.builder().entity(this).period(Duration.FIVE_SECONDS.toMilliseconds())
.poll(new SshPollConfig<Boolean>(SERVICE_UP)
.command("ps -p `sudo cat /var/run/mysqld/mysqld.pid`")
.setOnSuccess(true).setOnFailureOrException(false))
.build();
}
@Override
protected void disconnectSensors() {
// TODO nicer way to disconnect
if (upFeed != null) upFeed.stop();
super.disconnectSensors();
}
@Override
public void init() {
super.init();
ChefConfigs.addToLaunchRunList(this, "mysql::server");
ChefConfigs.addToCookbooksFromGithub(this, "mysql", "build-essential", "openssl");
ChefConfigs.setLaunchAttribute(this, "mysql",
MutableMap.of()
.add("server_root_password", "MyPassword")
.add("server_debian_password", "MyPassword")
.add("server_repl_password", "MyPassword")
);
// TODO other attributes, eg:
// node['mysql']['port']
}
}