Search in sources :

Example 56 with Container

use of io.fabric8.api.Container in project fabric8 by jboss-fuse.

the class FabricServiceImpl method validateProfileDependencies.

protected void validateProfileDependencies(CreateContainerOptions options) {
    Map<String, Map<String, String>> profileDependencies = Profiles.getOverlayFactoryConfigurations(this, options.getProfiles(), options.getVersion(), ProfileDependencyConfig.PROFILE_DEPENDENCY_CONFIG_PID);
    Set<Map.Entry<String, Map<String, String>>> entries = profileDependencies.entrySet();
    for (Map.Entry<String, Map<String, String>> entry : entries) {
        String configName = entry.getKey();
        Map<String, String> exportConfig = entry.getValue();
        if (exportConfig != null && !exportConfig.isEmpty()) {
            ProfileDependencyConfig config = new ProfileDependencyConfig();
            try {
                configurer.configure(exportConfig, config);
            } catch (Exception e) {
                throw new FabricException("Failed to load configuration for " + configName + " of " + config + " due to: " + e, e);
            }
            // Ensure dependent container exists
            if (ProfileDependencyKind.ZOOKEEPER_SERVICE.equals(config.getKind())) {
                try {
                    List<String> children = getChildren(this.curator.get(), config.getZookeeperPath());
                    if (children == null || children.isEmpty()) {
                        throw new ProfileDependencyException(options.getProfiles(), config.getProfileWildcards(), config.getProfileTags(), config.getSummary());
                    }
                    boolean dependencyFound = false;
                    Iterator<String> childIterator = children.iterator();
                    while (!dependencyFound && childIterator.hasNext()) {
                        String containerName = childIterator.next();
                        Container container = this.getContainer(containerName);
                        Profile[] profiles = container.getProfiles();
                        int profileCount = 0;
                        while (!dependencyFound && profileCount < profiles.length) {
                            Profile profile = profiles[profileCount];
                            if (config.getProfileWildcards() != null) {
                                for (String profileWildcard : config.getProfileWildcards()) {
                                    if (profile.getId().contains(profileWildcard)) {
                                        dependencyFound = true;
                                        break;
                                    }
                                }
                            }
                            if (!dependencyFound && config.getProfileTags() != null) {
                                List<String> profileTags = profile.getTags();
                                int foundTags = 0;
                                for (String configProfileTag : config.getProfileTags()) {
                                    if (profileTags.contains(configProfileTag)) {
                                        foundTags++;
                                    }
                                }
                                if (foundTags == config.getProfileTags().length) {
                                    dependencyFound = true;
                                }
                            }
                        }
                    }
                    if (!dependencyFound) {
                        throw new ProfileDependencyException(options.getProfiles(), config.getProfileWildcards(), config.getProfileTags(), config.getSummary());
                    }
                } catch (Exception e) {
                    throw new ProfileDependencyException(options.getProfiles(), config.getProfileWildcards(), config.getProfileTags(), config.getSummary(), e);
                }
            }
        }
    }
}
Also used : ProfileDependencyException(io.fabric8.api.ProfileDependencyException) FabricException(io.fabric8.api.FabricException) ProfileDependencyException(io.fabric8.api.ProfileDependencyException) EncryptionOperationNotPossibleException(org.jasypt.exceptions.EncryptionOperationNotPossibleException) FabricException(io.fabric8.api.FabricException) IOException(java.io.IOException) Profile(io.fabric8.api.Profile) Entry(java.util.Map.Entry) Container(io.fabric8.api.Container) ProfileDependencyConfig(io.fabric8.internal.ProfileDependencyConfig) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) SortedMap(java.util.SortedMap) HashMap(java.util.HashMap) TreeMap(java.util.TreeMap)

Example 57 with Container

use of io.fabric8.api.Container in project fabric8 by jboss-fuse.

the class FabricServiceImpl method getContainer.

@Override
public Container getContainer(String name) {
    assertValid();
    if (dataStore.get().hasContainer(name)) {
        Container parent = null;
        String parentId = dataStore.get().getContainerParent(name);
        if (parentId != null && !parentId.isEmpty()) {
            parent = getContainer(parentId);
        }
        return new ContainerImpl(parent, name, this);
    }
    throw new FabricException("Container '" + name + "' does not exist");
}
Also used : Container(io.fabric8.api.Container) ContainerImpl(io.fabric8.internal.ContainerImpl) FabricException(io.fabric8.api.FabricException)

Example 58 with Container

use of io.fabric8.api.Container in project fabric8 by jboss-fuse.

the class ProfileServiceImpl method deleteProfile.

@Override
public void deleteProfile(FabricService fabricService, String versionId, String profileId, boolean force) {
    assertValid();
    Profile profile = getRequiredProfile(versionId, profileId);
    LOGGER.info("deleteProfile: {}", profile);
    // TODO: what about child profiles ?
    Container[] containers = fabricService != null ? fabricService.getAssociatedContainers(versionId, profileId) : new Container[0];
    if (containers.length == 0) {
        profileRegistry.get().deleteProfile(versionId, profileId);
    } else if (force) {
        for (Container container : containers) {
            container.removeProfiles(profileId);
        }
        profileRegistry.get().deleteProfile(versionId, profileId);
    } else {
        StringBuilder sb = new StringBuilder();
        sb.append("Cannot delete profile:").append(profileId).append(".");
        sb.append("Profile has assigned ").append(containers.length).append(" container(s):");
        for (Container c : containers) {
            sb.append(" ").append(c.getId());
        }
        sb.append(". Use force option to also remove the profile from the containers.");
        throw new FabricException(sb.toString());
    }
    // lets remove any pending requirements on this profile
    FabricRequirements requirements = fabricService != null ? fabricService.getRequirements() : null;
    if (requirements != null && requirements.removeProfileRequirements(profileId)) {
        try {
            fabricService.setRequirements(requirements);
        } catch (IOException e) {
            throw new FabricException("Failed to update requirements after deleting profile " + profileId + ". " + e, e);
        }
    }
}
Also used : Container(io.fabric8.api.Container) FabricException(io.fabric8.api.FabricException) FabricRequirements(io.fabric8.api.FabricRequirements) IOException(java.io.IOException) Profile(io.fabric8.api.Profile)

Example 59 with Container

use of io.fabric8.api.Container in project fabric8 by jboss-fuse.

the class SshAutoScalerTest method assertMaximumContainerCountNotExceeded.

/**
 * lets assert that no host has more than its maximum number of containers
 */
public static void assertMaximumContainerCountNotExceeded(FabricRequirements requirements, Map<String, CountingMap> hostToProfileCounts) {
    for (Map.Entry<String, CountingMap> entry : hostToProfileCounts.entrySet()) {
        String hostName = entry.getKey();
        CountingMap counts = entry.getValue();
        int total = counts.total();
        SshConfiguration sshConfiguration = requirements.getSshConfiguration();
        assertNotNull("Should have a sshConfiguration!", sshConfiguration);
        SshHostConfiguration hostConfiguration = sshConfiguration.getHost(hostName);
        assertNotNull("Should have a hosts configuration for host " + hostName, hostConfiguration);
        Integer maximumContainerCount = hostConfiguration.getMaximumContainerCount();
        if (maximumContainerCount != null) {
            assertTrue("Host " + hostName + " has a maximum container count of " + maximumContainerCount + " but was " + total, total <= maximumContainerCount);
        }
    }
}
Also used : CountingMap(io.fabric8.utils.CountingMap) SshConfiguration(io.fabric8.api.SshConfiguration) SshHostConfiguration(io.fabric8.api.SshHostConfiguration) CountingMap(io.fabric8.utils.CountingMap) Map(java.util.Map)

Example 60 with Container

use of io.fabric8.api.Container in project fabric8 by jboss-fuse.

the class BeanUtils method convertContainerToMap.

public static Map<String, Object> convertContainerToMap(FabricService fabricService, Container container, List<String> fields) {
    Map<String, Object> answer = new TreeMap<String, Object>();
    for (String field : fields) {
        if (field.equalsIgnoreCase("profiles") || field.equalsIgnoreCase("profileIds")) {
            answer.put(field, Ids.getIds(container.getProfiles()));
        } else if (field.equalsIgnoreCase("childrenIds") || field.equalsIgnoreCase("children")) {
            answer.put(field, Ids.getIds(container.getChildren()));
        } else if (field.equalsIgnoreCase("parent") || field.equalsIgnoreCase("parentId")) {
            answer.put(field, Ids.getId(container.getParent()));
        } else if (field.equalsIgnoreCase("version") || field.equalsIgnoreCase("versionId")) {
            answer.put(field, container.getVersionId());
        } else if (field.equalsIgnoreCase("overlayProfile")) {
            Profile overlayProfile = container.getOverlayProfile();
            Profile effectiveProfile = Profiles.getEffectiveProfile(fabricService, overlayProfile);
            answer.put(field, convertProfileToMap(fabricService, effectiveProfile, getFields(Profile.class)));
        } else {
            addProperty(container, field, answer);
        }
    }
    return answer;
}
Also used : TreeMap(java.util.TreeMap) Profile(io.fabric8.api.Profile)

Aggregations

Container (io.fabric8.api.Container)139 Test (org.junit.Test)75 FabricService (io.fabric8.api.FabricService)56 ArrayList (java.util.ArrayList)39 Container (io.fabric8.kubernetes.api.model.Container)38 IOException (java.io.IOException)38 Profile (io.fabric8.api.Profile)37 HashMap (java.util.HashMap)34 Map (java.util.Map)30 FabricException (io.fabric8.api.FabricException)27 BundleContext (org.osgi.framework.BundleContext)24 Version (io.fabric8.api.Version)23 File (java.io.File)23 HashSet (java.util.HashSet)20 LinkedList (java.util.LinkedList)17 PodSpec (io.fabric8.kubernetes.api.model.PodSpec)16 ImageConfiguration (io.fabric8.maven.docker.config.ImageConfiguration)16 CreateContainerMetadata (io.fabric8.api.CreateContainerMetadata)15 Pod (io.fabric8.kubernetes.api.model.Pod)12 List (java.util.List)12