use of io.fabric8.api.FabricRequirements in project fabric8 by jboss-fuse.
the class MQManager method createOrUpdateProfile.
/**
* Creates or updates the broker profile for the given DTO and updates the requirements so that the
* minimum number of instances of the profile is updated
*/
public static Profile createOrUpdateProfile(MQBrokerConfigDTO dto, FabricService fabricService, RuntimeProperties runtimeProperties) throws IOException {
FabricRequirements requirements = fabricService.getRequirements();
MQService mqService = createMQService(fabricService, runtimeProperties);
Map<String, String> configuration = new HashMap<String, String>();
List<String> properties = dto.getProperties();
String version = dto.version();
boolean changeInCurrentVersion = requirements.getVersion().equals(dto.getVersion());
if (properties != null) {
for (String entry : properties) {
String[] parts = entry.split("=", 2);
if (parts.length == 2) {
configuration.put(parts[0], parts[1]);
} else {
configuration.put(parts[0], "");
}
}
}
String data = dto.getData();
String profileName = dto.profile();
try {
FabricValidations.validateProfileName(profileName);
} catch (IllegalArgumentException e) {
// we do not want exception in the server log, so print the error message to the console
System.out.println(e.getMessage());
return null;
}
String brokerName = dto.getBrokerName();
if (data == null) {
// lets use a relative path so we work on any karaf container
data = "${runtime.data}" + brokerName;
}
configuration.put(DATA, data);
for (Map.Entry<String, String> port : dto.getPorts().entrySet()) {
configuration.put(port.getKey() + "-port", port.getValue());
}
BrokerKind kind = dto.kind();
configuration.put(KIND, kind.toString());
String config = dto.getConfigUrl();
if (config != null) {
configuration.put(CONFIG_URL, mqService.getConfig(version, config));
}
String group = dto.getGroup();
if (group != null) {
configuration.put(GROUP, group);
}
Maps.setStringValues(configuration, NETWORKS, dto.getNetworks());
String networksUserName = dto.getNetworksUserName();
if (networksUserName != null) {
configuration.put(NETWORK_USER_NAME, networksUserName);
}
String networksPassword = dto.getNetworksPassword();
if (networksPassword != null) {
configuration.put(NETWORK_PASSWORD, networksPassword);
}
String parentProfile = dto.getParentProfile();
if (parentProfile != null) {
configuration.put(PARENT, parentProfile);
}
Boolean ssl = dto.getSsl();
if (ssl != null) {
configuration.put(SSL, ssl.toString());
}
Integer replicas = dto.getReplicas();
if (replicas != null) {
configuration.put(REPLICAS, replicas.toString());
}
Integer minInstances = dto.getMinimumInstances();
if (minInstances != null) {
configuration.put(MINIMUM_INSTANCES, minInstances.toString());
}
Profile profile = mqService.createOrUpdateMQProfile(version, profileName, brokerName, configuration, dto.kind().equals(BrokerKind.Replicated));
String profileId = profile.getId();
ProfileRequirements profileRequirement = requirements.getOrCreateProfileRequirement(profileId);
Integer minimumInstances = profileRequirement.getMinimumInstances();
// lets reload the DTO as we may have inherited some values from the parent profile
List<MQBrokerConfigDTO> list = createConfigDTOs(mqService, profile);
// lets assume 2 required instances for master/slave unless folks use
// N+1 or replicated
int requiredInstances = 2;
if (list.size() == 1) {
MQBrokerConfigDTO loadedDTO = list.get(0);
requiredInstances = loadedDTO.requiredInstances();
} else {
// assume N+1 broker as there's more than one broker in the profile; so lets set the required size to N+1
requiredInstances = list.size() + 1;
}
if (changeInCurrentVersion && (minimumInstances == null || minimumInstances.intValue() < requiredInstances)) {
profileRequirement.setMinimumInstances(requiredInstances);
fabricService.setRequirements(requirements);
}
String clientProfile = dto.clientProfile();
if (Strings.isNotBlank(clientProfile)) {
String clientParentProfile = dto.getClientParentProfile();
if (Strings.isNullOrBlank(clientParentProfile)) {
clientParentProfile = "mq-client-base";
}
mqService.createOrUpdateMQClientProfile(version, clientProfile, group, clientParentProfile);
}
return profile;
}
use of io.fabric8.api.FabricRequirements in project fabric8 by jboss-fuse.
the class ZkDataStoreImpl method getRequirements.
@Override
public FabricRequirements getRequirements() {
assertValid();
try {
FabricRequirements answer = null;
if (configCache.getCurrentData(REQUIREMENTS_JSON_PATH) != null) {
String json = getStringData(configCache, REQUIREMENTS_JSON_PATH);
answer = RequirementsJson.fromJSON(json);
}
if (answer == null) {
answer = new FabricRequirements();
}
return answer;
} catch (Exception e) {
throw FabricException.launderThrowable(e);
}
}
use of io.fabric8.api.FabricRequirements in project fabric8 by jboss-fuse.
the class AutoScaleSingleMessageBrokerTest method createProvisionedFabric.
@Test
public void createProvisionedFabric() throws Exception {
System.out.println("The fabric has now been created somewhere and we have a controller for it, so lets define our requirements");
FabricRequirements requirements = new FabricRequirements();
requirements.profile("mq-default").minimumInstances(1);
FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
// now lets ensure that the autoscaler can scale back down again, stopping the broker
requirements.profile("mq-default").minimumInstances(0).maximumInstances(0);
FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
}
use of io.fabric8.api.FabricRequirements in project fabric8 by jboss-fuse.
the class ArchetypeTest method testCreateArchetype.
@Test
public void testCreateArchetype() throws Exception {
ArchetypeInfo archetype = archetypeIdToArchetypeInfoMap.get(archetypeId);
assertNotNull("No archetype found for id: " + archetypeId, archetype);
File mavenSettingsFile = getMavenSettingsFile();
assertFileExists(mavenSettingsFile);
// create a fabric
// generate and deploy archetypes
File workDir = new File(System.getProperty("basedir", "."), "target/generated-projects");
workDir.mkdirs();
String profileId = assertGenerateArchetype(archetype, workDir, mavenSettingsFile);
assertNotNull("Should have a profile ID for " + archetype, profileId);
FabricRequirements requirements = fabricController.getRequirements();
if (!addedBroker) {
addedBroker = true;
requirements.profile("mq-default").minimumInstances(1);
FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
}
// deploying each profile should have caused the requirements to be updated to add them all now
// so lets load the requirements and assert they are satisfied
requirements.profile(profileId).minimumInstances(1);
FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
System.out.println();
System.out.println("Managed to create a container for " + profileId + ". Now lets stop it");
System.out.println();
// now lets force the container to be stopped
requirements.profile(profileId).minimumInstances(0).maximumInstances(0);
FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
System.out.println();
System.out.println("Stopped a container for " + profileId + ". Now lets clear requirements");
System.out.println();
requirements.removeProfileRequirements(profileId);
FabricAssertions.assertRequirementsSatisfied(fabricController, requirements);
System.out.println();
System.out.println("Removed requirements for profile " + profileId);
System.out.println();
}
use of io.fabric8.api.FabricRequirements in project fabric8 by jboss-fuse.
the class ProfileScalingTest method doAssertProfileMinimumSize.
protected void doAssertProfileMinimumSize(FabricService fabricService, String profile, Integer expected) throws IOException {
// lests add a little but of time to make sure that the ZK / Git cache has updated correctly
try {
Thread.sleep(2000);
} catch (Exception e) {
// ignore
}
FabricRequirements requirements = fabricService.getRequirements();
ProfileRequirements profileRequirements = requirements.getOrCreateProfileRequirement(profile);
Assert.assertNotNull("Should have profile requirements for profile " + profile, profileRequirements);
Assert.assertEquals("profile " + profile + " minimum instances", expected, profileRequirements.getMinimumInstances());
System.out.println("Profile " + profile + " now has requirements " + profileRequirements);
}
Aggregations