Search in sources :

Example 21 with FabricRequirements

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;
}
Also used : MQService(io.fabric8.api.MQService) ProfileRequirements(io.fabric8.api.ProfileRequirements) BrokerKind(io.fabric8.api.jmx.BrokerKind) HashMap(java.util.HashMap) Profile(io.fabric8.api.Profile) MQBrokerConfigDTO(io.fabric8.api.jmx.MQBrokerConfigDTO) FabricRequirements(io.fabric8.api.FabricRequirements) Map(java.util.Map) HashMap(java.util.HashMap)

Example 22 with FabricRequirements

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);
    }
}
Also used : FabricRequirements(io.fabric8.api.FabricRequirements) FabricException(io.fabric8.api.FabricException) InvalidClassException(java.io.InvalidClassException) KeeperException(org.apache.zookeeper.KeeperException) IOException(java.io.IOException)

Example 23 with FabricRequirements

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);
}
Also used : FabricRequirements(io.fabric8.api.FabricRequirements) Test(org.junit.Test)

Example 24 with FabricRequirements

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();
}
Also used : FabricRequirements(io.fabric8.api.FabricRequirements) File(java.io.File) Test(org.junit.Test)

Example 25 with FabricRequirements

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);
}
Also used : ProfileRequirements(io.fabric8.api.ProfileRequirements) FabricRequirements(io.fabric8.api.FabricRequirements) IOException(java.io.IOException)

Aggregations

FabricRequirements (io.fabric8.api.FabricRequirements)21 ProfileRequirements (io.fabric8.api.ProfileRequirements)13 Container (io.fabric8.api.Container)8 FabricService (io.fabric8.api.FabricService)5 Profile (io.fabric8.api.Profile)5 HostProfileCounter (io.fabric8.internal.autoscale.HostProfileCounter)5 ArrayList (java.util.ArrayList)5 Test (org.junit.Test)5 IOException (java.io.IOException)4 Map (java.util.Map)4 ProfileService (io.fabric8.api.ProfileService)3 CountingMap (io.fabric8.utils.CountingMap)3 HashSet (java.util.HashSet)3 AutoScaleProfileStatus (io.fabric8.api.AutoScaleProfileStatus)2 AutoScaleRequest (io.fabric8.api.AutoScaleRequest)2 ContainerAutoScaler (io.fabric8.api.ContainerAutoScaler)2 FabricException (io.fabric8.api.FabricException)2 SshHostConfiguration (io.fabric8.api.SshHostConfiguration)2 Version (io.fabric8.api.Version)2 MQBrokerConfigDTO (io.fabric8.api.jmx.MQBrokerConfigDTO)2