Package io.fabric8.container.process

Source Code of io.fabric8.container.process.ProcessContainerConfig

/**
*  Copyright 2005-2014 Red Hat, Inc.
*
*  Red Hat 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 io.fabric8.container.process;

import io.fabric8.api.Container;
import io.fabric8.api.CreateChildContainerMetadata;
import io.fabric8.api.CreateChildContainerOptions;
import io.fabric8.api.FabricService;
import io.fabric8.api.Profile;
import io.fabric8.api.ProfileService;
import io.fabric8.api.Profiles;
import io.fabric8.api.scr.support.Strings;
import io.fabric8.utils.Objects;
import io.fabric8.process.manager.DownloadStrategy;
import io.fabric8.process.manager.InstallOptions;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;

import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* Represents the configuration of a {@link io.fabric8.process.manager.ProcessManager} based child container
*/
@Component(name = "io.fabric8.container.process",
        label = "Fabric8 Child Process Container",
        description = "Configures how to download, unpack and run a software distribution as a Child Process Container",
        immediate = true, metatype = true)
public class ProcessContainerConfig {
    @Property(label = "Process name", description = "The descriptive name to refer to this process when listing the processes on this machine.")
    private String processName;

    @Property(label = "Process version", description = "The descriptive version to refer to the version of the distribution.")
    private String processVersion;

    @Property(label = "Distribution URL", cardinality = 1,
            description = "The URL (usually using maven coordinates) for the distribution to download and unpack.")
    private String url;

    @Property(name = "extractCmd", label = "Extract distribution command", value = InstallOptions.DEFAULT_EXTRACT_CMD,
            description = "The command line command to unpack/unzip the distribution.")
    private String extractCmd = InstallOptions.DEFAULT_EXTRACT_CMD;
    @Property(name = "postUnpackCmds", label = "Post unpack commands", cardinality = Integer.MAX_VALUE,
            description = "The commands ran in the unpacked distribution folder after the distro is unzipped/untarred.")
    private String[] postUnpackCmds;

    @Property(name = "postUnpackRemoveFiles", label = "Post unpack remove files", cardinality = Integer.MAX_VALUE,
            description = "The list of files removed from unpacking the distribution.")
    private String[] postUnpackRemoveFiles;

    @Property(name = "controllerPath", label = "Controller JSON Path", value = "controller.json",
            description = "The name of the JSON file in the Profile which is used to control the distribution; starting and stopping the process.")
    private String controllerPath = "controller.json";

    @Property(name = "overlayFolder", label = "Overlay folder path", value = "overlayFiles",
            description = "The folder path inside the profile used to contain files and MVEL templates which are then overlayed ontop of the process installation; for customizing the configuration of the process with configuration files maintained inside the profile; possibly with dynamically resolved values.")
    private String overlayFolder;
    @Property(name = "postInstallCmds", label = "Post install commands", cardinality = Integer.MAX_VALUE,
            description = "The commands ran in the distribution folder after the distro is unzipped/untarred and the overlay has been applied.")
    private String[] postInstallCmds;
    @Property(name = "disableDynamicPorts", label = "Disable dynamic port resolving", cardinality = Integer.MAX_VALUE,
            description = "The list of port names which should not be dynamically resolved.")
    private String[] disableDynamicPorts;
    @Property(name = "createLocalContainerAddress", label = "Create Local Container Address",
            description = "Whether or not a local address such as 127.0.0.1, 127.0.0.2 should be created for each container instance; so it can create its own custom network interfaces while sharing the same ports (such as for creating local Cassandra clusters).")
    private boolean createLocalContainerAddress;
    @Property(name = "internalAgent", label = "Is there an internal fabric8 agent", boolValue = false,
            description = "If there is an internal fabric8 agent this will copy artifacts into the installation; otherwise we can do it externally as we provision containers.")
    private boolean internalAgent;
    @Property(name = "containerHttpUrl", label = "HTTP URL",
            value = "http://${env:FABRIC8_LISTEN_ADDRESS}:${env:FABRIC8_HTTP_PROXY_PORT}/",
            description = "The URL for HTTP access to the running container.")
    private String containerHttpUrl;

    public InstallOptions createProcessInstallOptions(FabricService fabricService, Container container, CreateChildContainerMetadata metadata, CreateChildContainerOptions options, Map<String, String> environmentVariables, DownloadStrategy downloadStrategy) throws MalformedURLException {
        byte[] jsonData = null;
        Set<String> profileIds = options.getProfiles();
        String versionId = options.getVersion();
        List<Profile> profiles = Profiles.getProfiles(fabricService, profileIds, versionId);
        for (Profile profile : profiles) {
            ProfileService profileService = fabricService.adapt(ProfileService.class);
            Profile overlay = profileService.getOverlayProfile(profile);
            jsonData = overlay.getFileConfiguration(controllerPath);
            if (jsonData != null) {
                break;
            }
        }
        Objects.notNull(jsonData, "No JSON file found for path " + controllerPath + " in profiles: " + profileIds + " version: " + versionId);
        String controllerJson = new String(jsonData);
        String installName = getProcessName();
        if (Strings.isNullOrBlank(installName)) {
            if (profiles.size() > 0) {
                installName = profiles.get(0).getId();
            }
        }
        metadata.setContainerType(installName);
        return InstallOptions.builder().id(options.getName()).name(installName).
                container(container).url(url).
                extractCmd(extractCmd).
                postUnpackCmds(postUnpackCmds).
                postInstallCmds(postInstallCmds).
                controllerJson(controllerJson).
                downloadStrategy(downloadStrategy).
                environment(environmentVariables).build();
    }

    /**
     * Returns the set of port names which should not have dynamic ports allocated
     */
    public Set<String>  getDisableDynamicPortSet() {
        Set<String> answer = new HashSet<String>();
        if (disableDynamicPorts != null){
            answer.addAll(Arrays.asList(disableDynamicPorts));
        }
        return answer;
    }

    public String getProcessName() {
        return processName;
    }

    public void setProcessName(String processName) {
        this.processName = processName;
    }

    public String getProcessVersion() {
        return processVersion;
    }

    public void setProcessVersion(String processVersion) {
        this.processVersion = processVersion;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getControllerPath() {
        return controllerPath;
    }

    public void setControllerPath(String controllerPath) {
        this.controllerPath = controllerPath;
    }

    public String getOverlayFolder() {
        return overlayFolder;
    }

    public void setOverlayFolder(String overlayFolder) {
        this.overlayFolder = overlayFolder;
    }

    public String[] getDisableDynamicPorts() {
        return disableDynamicPorts;
    }

    public void setDisableDynamicPorts(String[] disableDynamicPorts) {
        this.disableDynamicPorts = disableDynamicPorts;
    }

    public boolean isCreateLocalContainerAddress() {
        return createLocalContainerAddress;
    }

    public void setCreateLocalContainerAddress(boolean createLocalContainerAddress) {
        this.createLocalContainerAddress = createLocalContainerAddress;
    }

    public boolean isInternalAgent() {
        return internalAgent;
    }

    public void setInternalAgent(boolean internalAgent) {
        this.internalAgent = internalAgent;
    }

    public String getExtractCmd() {
        return extractCmd;
    }

    public void setExtractCmd(String extractCmd) {
        this.extractCmd = extractCmd;
    }

    public String[] getPostUnpackCmds() {
        return postUnpackCmds;
    }

    public void setPostUnpackCmds(String[] postUnpackCmds) {
        this.postUnpackCmds = postUnpackCmds;
    }

    public String[] getPostInstallCmds() {
        return postInstallCmds;
    }

    public void setPostInstallCmds(String[] postInstallCmds) {
        this.postInstallCmds = postInstallCmds;
    }

    public String getContainerHttpUrl() {
        return containerHttpUrl;
    }

    public void setContainerHttpUrl(String containerHttpUrl) {
        this.containerHttpUrl = containerHttpUrl;
    }

    public String[] getPostUnpackRemoveFiles() {
        return postUnpackRemoveFiles;
    }

    public void setPostUnpackRemoveFiles(String[] postUnpackRemoveFiles) {
        this.postUnpackRemoveFiles = postUnpackRemoveFiles;
    }
}
TOP

Related Classes of io.fabric8.container.process.ProcessContainerConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.