use of io.fabric8.api.LockHandle in project fabric8 by jboss-fuse.
the class DummyBatchingProgressMonitor method doPush.
@Override
public Iterable<PushResult> doPush(Git git, GitContext context) throws Exception {
IllegalArgumentAssertion.assertNotNull(git, "git");
IllegalArgumentAssertion.assertNotNull(context, "context");
LockHandle writeLock = aquireWriteLock();
try {
assertValid();
LOGGER.debug("External call to push");
PushPolicyResult pushResult = doPushInternal(context, getCredentialsProvider());
return pushResult.getPushResults();
} finally {
writeLock.unlock();
}
}
use of io.fabric8.api.LockHandle in project fabric8 by jboss-fuse.
the class DummyBatchingProgressMonitor method importProfiles.
@Override
public void importProfiles(final String versionId, final List<String> profileZipUrls) {
IllegalStateAssertion.assertNotNull(versionId, "versionId");
IllegalStateAssertion.assertNotNull(profileZipUrls, "profileZipUrls");
LockHandle writeLock = aquireWriteLock();
try {
assertValid();
GitOperation<String> gitop = new GitOperation<String>() {
public String call(Git git, GitContext context) throws Exception {
// TODO(tdi): Is it correct to implicitly create the version?
createOrCheckoutVersion(git, versionId);
// checkoutRequiredProfileBranch(git, versionId, null);
return doImportProfiles(git, context, profileZipUrls);
}
};
executeWrite(gitop, versionId);
} finally {
writeLock.unlock();
}
}
use of io.fabric8.api.LockHandle in project fabric8 by jboss-fuse.
the class DummyBatchingProgressMonitor method getInitialVersions.
private List<String> getInitialVersions() {
LockHandle readLock = aquireReadLock();
try {
GitOperation<List<String>> gitop = new GitOperation<List<String>>() {
public List<String> call(Git git, GitContext context) throws Exception {
Collection<String> branches = RepositoryUtils.getBranches(git.getRepository());
List<String> answer = new ArrayList<String>();
for (String branch : branches) {
String name = branch;
String prefix = "refs/heads/";
if (name.startsWith(prefix)) {
name = name.substring(prefix.length());
if (!name.equals(GitHelpers.MASTER_BRANCH) && !name.startsWith("patch-") && !name.startsWith("patches-") && !name.equals(HISTORY_BRANCH) && !name.equals(ADMIN_HISTORY_BRANCH)) {
answer.add(name);
}
}
}
versions.clear();
versions.addAll(answer);
if (answer.size() > 0) {
LOGGER.info("Initial versions cached");
initialVersionsAvailable.countDown();
}
return answer;
}
};
return executeRead(gitop);
} finally {
readLock.unlock();
}
}
use of io.fabric8.api.LockHandle in project fabric8 by jboss-fuse.
the class DummyBatchingProgressMonitor method createVersion.
@Override
public String createVersion(GitContext context, final String sourceId, final String targetId, final Map<String, String> attributes) {
IllegalStateAssertion.assertNotNull(sourceId, "sourceId");
IllegalStateAssertion.assertNotNull(targetId, "targetId");
LockHandle writeLock = aquireWriteLock();
try {
assertValid();
LOGGER.debug("Create version: {} => {}", sourceId, targetId);
GitOperation<String> gitop = new GitOperation<String>() {
public String call(Git git, GitContext context) throws Exception {
IllegalStateAssertion.assertNull(checkoutProfileBranch(git, context, targetId, null), "Version already exists: " + targetId);
checkoutRequiredProfileBranch(git, context, sourceId, null);
createOrCheckoutVersion(git, targetId);
if (attributes != null) {
setVersionAttributes(git, context, targetId, attributes);
}
context.commitMessage("Create version: " + sourceId + " => " + targetId);
return targetId;
}
};
return executeInternal(context, null, gitop);
} finally {
writeLock.unlock();
}
}
use of io.fabric8.api.LockHandle in project fabric8 by jboss-fuse.
the class DataStoreBootstrapTemplate method doWith.
@Override
public void doWith(ProfileRegistry profileRegistry, DataStore dataStore) throws Exception {
String versionId = options.getVersion();
int minimumPort = options.getMinimumPort();
int maximumPort = options.getMaximumPort();
String zooKeeperServerHost = options.getBindAddress();
int zooKeeperServerPort = options.getZooKeeperServerPort();
int zooKeeperServerConnectionPort = options.getZooKeeperServerConnectionPort();
int mappedPort = Ports.mapPortToRange(zooKeeperServerPort, minimumPort, maximumPort);
CuratorFramework curator = null;
try {
curator = createCuratorFramework(connectionUrl, options);
curator.start();
curator.getZookeeperClient().blockUntilConnectedOrTimedOut();
LockHandle writeLock = profileRegistry.aquireWriteLock();
try {
// Make the import path absolute
File importPath = new File(options.getImportPath());
if (!importPath.isAbsolute()) {
importPath = new File(homeDir, options.getImportPath());
}
// Import data into the DataStore
if (options.isAutoImportEnabled()) {
if (importPath.isDirectory()) {
profileRegistry.importFromFileSystem(importPath.getAbsolutePath());
} else {
LOGGER.warn("Profile import dir does not exist: {}", importPath);
}
}
// set the fabric configuration
ZooKeeperUtils.setData(curator, ZkPath.CONFIG_DEFAULT_VERSION.getPath(), versionId);
// Default JAAS config
Map<String, String> jaasConfig = Collections.singletonMap("encryption.enabled", "${zk:/fabric/authentication/encryption.enabled}");
// Default Zookeeper config
Properties zkProps = new Properties();
zkProps.setProperty("zookeeper.url", "${zk:" + ZkPath.CONFIG_ENSEMBLE_URL.getPath() + "}");
zkProps.setProperty("zookeeper.password", "${zk:" + ZkPath.CONFIG_ENSEMBLE_PASSWORD.getPath() + "}");
// Create or update default profile
Profile defaultProfile = profileRegistry.getProfile(versionId, "default");
if (defaultProfile == null) {
ProfileBuilder prfBuilder = ProfileBuilder.Factory.create(versionId, "default");
prfBuilder.addConfiguration("io.fabric8.jaas", jaasConfig);
prfBuilder.addFileConfiguration("io.fabric8.zookeeper.properties", DataStoreUtils.toBytes(zkProps));
Profile profile = prfBuilder.getProfile();
if (profileRegistry.hasVersion(versionId)) {
profileRegistry.createProfile(profile);
} else {
VersionBuilder verBuilder = VersionBuilder.Factory.create(versionId);
Version version = verBuilder.addProfile(profile).getVersion();
profileRegistry.createVersion(version);
}
} else {
ProfileBuilder builder = ProfileBuilder.Factory.createFrom(defaultProfile);
// be careful not to mess with existing *.properties files - for better "diffability"
// during git-based patching
Map<String, String> existingJaasConfig = builder.getConfiguration("io.fabric8.jaas");
Map<String, String> existingZkConfig = builder.getConfiguration("io.fabric8.zookeeper");
existingJaasConfig.putAll(jaasConfig);
existingZkConfig.put("zookeeper.url", zkProps.getProperty("zookeeper.url"));
existingZkConfig.put("zookeeper.password", zkProps.getProperty("zookeeper.password"));
builder.addConfiguration("io.fabric8.jaas", existingJaasConfig);
builder.addConfiguration("io.fabric8.zookeeper", existingZkConfig);
profileRegistry.updateProfile(builder.getProfile());
}
ZooKeeperUtils.setData(curator, ZkPath.CONFIG_ENSEMBLE_URL.getPath(), "${zk:" + name + "/ip}:" + zooKeeperServerConnectionPort);
ZooKeeperUtils.setData(curator, ZkPath.CONFIG_ENSEMBLE_PASSWORD.getPath(), PasswordEncoder.encode(options.getZookeeperPassword()));
// Ensemble properties
Properties ensembleProps = new Properties();
ensembleProps.put("tickTime", String.valueOf(options.getZooKeeperServerTickTime()));
ensembleProps.put("initLimit", String.valueOf(options.getZooKeeperServerInitLimit()));
ensembleProps.put("syncLimit", String.valueOf(options.getZooKeeperServerSyncLimit()));
ensembleProps.put("snapRetainCount", String.valueOf(options.getZookeeperSnapRetainCount()));
ensembleProps.put("purgeInterval", String.valueOf(options.getZookeeperPurgeInterval()));
ensembleProps.put("dataDir", options.getZooKeeperServerDataDir() + File.separator + "0000");
loadPropertiesFrom(ensembleProps, importPath + "/fabric/profiles/default.profile/io.fabric8.zookeeper.server.properties");
// Create ensemble profile
String profileId = "fabric-ensemble-0000";
IllegalStateAssertion.assertFalse(profileRegistry.hasProfile(versionId, profileId), "Profile already exists: " + versionId + "/" + profileId);
ProfileBuilder ensembleProfileBuilder = ProfileBuilder.Factory.create(versionId, profileId);
ensembleProfileBuilder.addAttribute(Profile.ABSTRACT, "true").addAttribute(Profile.HIDDEN, "true");
ensembleProfileBuilder.addFileConfiguration("io.fabric8.zookeeper.server-0000.properties", DataStoreUtils.toBytes(ensembleProps));
String ensembleProfileId = profileRegistry.createProfile(ensembleProfileBuilder.getProfile());
// Ensemble server properties
Properties serverProps = new Properties();
serverProps.put("clientPort", String.valueOf(mappedPort));
serverProps.put("clientPortAddress", zooKeeperServerHost);
// Create ensemble server profile
profileId = "fabric-ensemble-0000-1";
IllegalStateAssertion.assertFalse(profileRegistry.hasProfile(versionId, profileId), "Profile already exists: " + versionId + "/" + profileId);
ProfileBuilder serverProfileBuilder = ProfileBuilder.Factory.create(versionId, profileId);
serverProfileBuilder.addAttribute(Profile.HIDDEN, "true").addAttribute(Profile.PARENTS, ensembleProfileId);
serverProfileBuilder.addFileConfiguration("io.fabric8.zookeeper.server-0000.properties", DataStoreUtils.toBytes(serverProps));
profileRegistry.createProfile(serverProfileBuilder.getProfile());
ZooKeeperUtils.setData(curator, ZkPath.CONFIG_ENSEMBLES.getPath(), "0000");
ZooKeeperUtils.setData(curator, ZkPath.CONFIG_ENSEMBLE.getPath("0000"), name);
// configure fabric profile
Profile fabricProfile = profileRegistry.getProfile(versionId, "fabric");
if (fabricProfile == null) {
ProfileBuilder builder = ProfileBuilder.Factory.create(versionId, "fabric");
Properties agentProps = new Properties();
agentProps.put("feature.fabric-commands", "fabric-commands");
builder.addFileConfiguration("io.fabric8.agent.properties", DataStoreUtils.toBytes(agentProps));
String createdId = profileRegistry.createProfile(builder.getProfile());
fabricProfile = profileRegistry.getRequiredProfile(versionId, createdId);
} else {
ProfileBuilder builder = ProfileBuilder.Factory.createFrom(fabricProfile);
Map<String, String> agentProps = builder.getConfiguration(Constants.AGENT_PID);
agentProps.put("feature.fabric-commands", "fabric-commands");
builder.addConfiguration(Constants.AGENT_PID, agentProps);
String updatedId = profileRegistry.updateProfile(builder.getProfile());
fabricProfile = profileRegistry.getRequiredProfile(versionId, updatedId);
}
} finally {
writeLock.unlock();
}
ZooKeeperUtils.createDefault(curator, ZkPath.CONFIG_CONTAINER.getPath(name), versionId);
StringBuilder profilesBuilder = new StringBuilder();
Set<String> profiles = options.getProfiles();
profilesBuilder.append("fabric").append(" ").append("fabric-ensemble-0000-1");
for (String p : profiles) {
if (!(p.equals("fabric") || p.equals("fabric-ensemble-0000-1"))) {
profilesBuilder.append(" ").append(p);
}
}
if (!options.isAgentEnabled()) {
profilesBuilder.append(" ").append("unmanaged");
}
ZooKeeperUtils.createDefault(curator, ZkPath.CONFIG_VERSIONS_CONTAINER.getPath(versionId, name), profilesBuilder.toString());
// outside of the profile storage area, so we'll keep these in zk
EncryptionSupport encryption = addUsersToZookeeper(curator, options.getUsers());
ZooKeeperUtils.createDefault(curator, "/fabric/authentication/encryption.enabled", Boolean.valueOf(encryption != null).toString());
ZooKeeperUtils.createDefault(curator, "/fabric/authentication/domain", "karaf");
ZooKeeperUtils.createDefault(curator, ZkPath.AUTHENTICATION_CRYPT_ALGORITHM.getPath(), "PBEWithMD5AndDES");
ZooKeeperUtils.createDefault(curator, ZkPath.AUTHENTICATION_CRYPT_PASSWORD.getPath(), PasswordEncoder.encode(options.getZookeeperPassword()));
// Ensure ACLs are from the beggining of the fabric tree.
aclManager.fixAcl(curator, "/fabric", true);
} finally {
if (curator != null) {
curator.close();
}
}
}
Aggregations