Cleaning up metainfo
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/5b1826e1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/5b1826e1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/5b1826e1 Branch: refs/heads/feature/packaging_improvements Commit: 5b1826e1b030383ea5e552ef3268334cc654ecff Parents: f3cab44 Author: Sumit Mohanty <smoha...@hortonworks.com> Authored: Sun Mar 1 00:34:35 2015 -0800 Committer: Sumit Mohanty <smoha...@hortonworks.com> Committed: Sun Mar 1 00:34:35 2015 -0800 ---------------------------------------------------------------------- .../providers/agent/AgentClientProvider.java | 40 +++-- .../providers/agent/AgentProviderService.java | 110 +++++++++--- .../slider/providers/agent/AgentUtils.java | 22 +-- .../providers/agent/ComponentCommandOrder.java | 2 +- .../agent/application/metadata/Application.java | 94 ++++++++-- .../application/metadata/CommandOrder.java | 9 +- .../application/metadata/CommandScript.java | 11 +- .../agent/application/metadata/Component.java | 97 ++++++++-- .../application/metadata/ComponentCommand.java | 72 ++++++++ .../agent/application/metadata/ConfigFile.java | 8 +- .../application/metadata/DockerContainer.java | 91 ++++++++++ .../metadata/DockerContainerMount.java | 59 ++++++ .../metadata/DockerContainerPort.java | 59 ++++++ .../agent/application/metadata/Export.java | 9 +- .../agent/application/metadata/ExportGroup.java | 11 +- .../agent/application/metadata/Metainfo.java | 32 ++-- .../application/metadata/MetainfoParser.java | 62 ++++++- .../agent/application/metadata/OSPackage.java | 9 +- .../agent/application/metadata/OSSpecific.java | 11 +- .../agent/application/metadata/Package.java | 60 +++++++ .../agent/application/metadata/Validate.java | 27 +++ .../application/metadata/json/Application.java | 123 ------------- .../application/metadata/json/CommandOrder.java | 57 ------ .../metadata/json/CommandScript.java | 66 ------- .../application/metadata/json/Component.java | 144 --------------- .../metadata/json/ComponentCommand.java | 79 -------- .../application/metadata/json/ConfigFile.java | 53 ------ .../application/metadata/json/Container.java | 79 -------- .../metadata/json/ContainerMount.java | 53 ------ .../metadata/json/ContainerPort.java | 53 ------ .../agent/application/metadata/json/Export.java | 57 ------ .../application/metadata/json/ExportGroup.java | 57 ------ .../application/metadata/json/MetaInfo.java | 178 ------------------- .../metadata/json/MetaInfoParser.java | 85 --------- .../application/metadata/json/Package.java | 54 ------ .../appmaster/web/rest/agent/Container.java | 82 --------- .../web/rest/agent/ContainerMount.java | 58 ------ .../appmaster/web/rest/agent/ContainerPort.java | 57 ------ .../web/rest/agent/ExecutionCommand.java | 25 +-- .../common/tools/TestWindowsSupport.groovy | 2 +- .../agent/TestAgentClientProvider2.java | 8 +- .../agent/TestAgentProviderService.java | 120 +++++++++---- .../agent/TestComponentCommandOrder.java | 2 +- .../metadata/TestMetainfoParser.java | 104 ++++++++++- .../metadata/json/TestMetaInfoParser.java | 134 -------------- 45 files changed, 1003 insertions(+), 1622 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java index 42ac47d..9978b0a 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java @@ -40,10 +40,10 @@ import org.apache.slider.core.launch.AbstractLauncher; import org.apache.slider.providers.AbstractClientProvider; import org.apache.slider.providers.ProviderRole; import org.apache.slider.providers.ProviderUtils; -import org.apache.slider.providers.agent.application.metadata.json.Application; -import org.apache.slider.providers.agent.application.metadata.json.Component; -import org.apache.slider.providers.agent.application.metadata.json.MetaInfo; -import org.apache.slider.providers.agent.application.metadata.json.MetaInfoParser; +import org.apache.slider.providers.agent.application.metadata.Application; +import org.apache.slider.providers.agent.application.metadata.Component; +import org.apache.slider.providers.agent.application.metadata.Metainfo; +import org.apache.slider.providers.agent.application.metadata.MetainfoParser; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; import org.slf4j.Logger; @@ -164,10 +164,10 @@ public class AgentClientProvider extends AbstractClientProvider names.remove(SliderKeys.COMPONENT_AM); Map<Integer, String> priorityMap = new HashMap<Integer, String>(); - MetaInfo metaInfo = null; + Metainfo metaInfo = null; if (fs != null) { try { - metaInfo = AgentUtils.getApplicationMetaInfo(fs, appDef); + metaInfo = AgentUtils.getApplicationMetainfo(fs, appDef); } catch (IOException ioe) { // Ignore missing metainfo file for now log.info("Missing metainfo {}", ioe.getMessage()); @@ -218,8 +218,8 @@ public class AgentClientProvider extends AbstractClientProvider MapOperations componentConfig = resources.getMandatoryComponent(name); int count = componentConfig.getMandatoryOptionInt(ResourceKeys.COMPONENT_INSTANCES); - int definedMinCount = componentDef.getMinInstanceCount(); - int definedMaxCount = componentDef.getMaxInstanceCount(); + int definedMinCount = componentDef.getMinInstanceCountInt(); + int definedMaxCount = componentDef.getMaxInstanceCountInt(); if (count < definedMinCount || count > definedMaxCount) { throw new BadConfigException("Component %s, %s value %d out of range. " + "Expected minimum is %d and maximum is %d", @@ -265,9 +265,9 @@ public class AgentClientProvider extends AbstractClientProvider public Set<String> getApplicationTags(SliderFileSystem fileSystem, String appDef) throws SliderException { Set<String> tags; - MetaInfo metainfo; + Metainfo metainfo; try { - metainfo = AgentUtils.getApplicationMetaInfo(fileSystem, appDef); + metainfo = AgentUtils.getApplicationMetainfo(fileSystem, appDef); } catch (IOException e) { log.error("Error retrieving metainfo from {}", appDef, e); throw new SliderException("Error retrieving metainfo", e); @@ -306,7 +306,7 @@ public class AgentClientProvider extends AbstractClientProvider File cmdDir = new File(tmpDir, "command"); cmdDir.mkdir(); - MetaInfo metaInfo = null; + Metainfo metaInfo = null; JSONObject defaultConfig = null; try { // expand app package into /app_pkg @@ -326,7 +326,19 @@ public class AgentClientProvider extends AbstractClientProvider while (offset < size) { offset += zipInputStream.read(content, offset, size - offset); } - metaInfo = new MetaInfoParser().fromInputStream(new ByteArrayInputStream(content)); + metaInfo = new MetainfoParser().fromXmlStream(new ByteArrayInputStream(content)); + } + } else if ("metainfo.json".equals(zipEntry.getName())) { + int size = (int) zipEntry.getSize(); + if (size != -1) { + log.info("Reading {} of size {}", zipEntry.getName(), + zipEntry.getSize()); + byte[] content = new byte[size]; + int offset = 0; + while (offset < size) { + offset += zipInputStream.read(content, offset, size - offset); + } + metaInfo = new MetainfoParser().fromJsonStream(new ByteArrayInputStream(content)); } } else if ("clientInstallConfig-default.json".equals(zipEntry.getName())) { int size = (int) zipEntry.getSize(); @@ -361,7 +373,7 @@ public class AgentClientProvider extends AbstractClientProvider } if (metaInfo == null) { - throw new SliderException("Not a valid app package. Could not read metainfo.xml."); + throw new SliderException("Not a valid app package. Could not read metainfo."); } expandAgentTar(agentPkgDir); @@ -502,7 +514,7 @@ public class AgentClientProvider extends AbstractClientProvider protected JSONObject getCommandJson(JSONObject defaultConfig, JSONObject inputConfig, - MetaInfo metainfo, + Metainfo metainfo, File clientInstallPath) throws SliderException { try { JSONObject pkgList = new JSONObject(); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java index b98795a..b624221 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java @@ -66,16 +66,19 @@ import org.apache.slider.providers.AbstractProviderService; import org.apache.slider.providers.ProviderCore; import org.apache.slider.providers.ProviderRole; import org.apache.slider.providers.ProviderUtils; -import org.apache.slider.providers.agent.application.metadata.json.Application; -import org.apache.slider.providers.agent.application.metadata.json.CommandScript; -import org.apache.slider.providers.agent.application.metadata.json.Component; -import org.apache.slider.providers.agent.application.metadata.json.ComponentCommand; -import org.apache.slider.providers.agent.application.metadata.json.ConfigFile; +import org.apache.slider.providers.agent.application.metadata.Application; +import org.apache.slider.providers.agent.application.metadata.CommandScript; +import org.apache.slider.providers.agent.application.metadata.Component; +import org.apache.slider.providers.agent.application.metadata.ComponentCommand; +import org.apache.slider.providers.agent.application.metadata.ComponentExport; +import org.apache.slider.providers.agent.application.metadata.ConfigFile; import org.apache.slider.providers.agent.application.metadata.DefaultConfig; -import org.apache.slider.providers.agent.application.metadata.json.Export; -import org.apache.slider.providers.agent.application.metadata.json.ExportGroup; -import org.apache.slider.providers.agent.application.metadata.json.MetaInfo; -import org.apache.slider.providers.agent.application.metadata.json.Package; +import org.apache.slider.providers.agent.application.metadata.Export; +import org.apache.slider.providers.agent.application.metadata.ExportGroup; +import org.apache.slider.providers.agent.application.metadata.Metainfo; +import org.apache.slider.providers.agent.application.metadata.OSPackage; +import org.apache.slider.providers.agent.application.metadata.OSSpecific; +import org.apache.slider.providers.agent.application.metadata.Package; import org.apache.slider.providers.agent.application.metadata.PropertyInfo; import org.apache.slider.server.appmaster.actions.ProviderReportedContainerLoss; import org.apache.slider.server.appmaster.actions.RegisterComponentInstance; @@ -155,7 +158,7 @@ public class AgentProviderService extends AbstractProviderService implements private int heartbeatMonitorInterval = 0; private AgentClientProvider clientProvider; private AtomicInteger taskId = new AtomicInteger(0); - private volatile MetaInfo metaInfo = null; + private volatile Metainfo metaInfo = null; private Map<String, DefaultConfig> defaultConfigs = null; private ComponentCommandOrder commandOrder = null; private HeartbeatMonitor monitor; @@ -240,8 +243,8 @@ public class AgentProviderService extends AbstractProviderService implements MapOperations componentConfig = resources.getMandatoryComponent(name); int count = componentConfig.getMandatoryOptionInt(ResourceKeys.COMPONENT_INSTANCES); - int definedMinCount = componentDef.getMinInstanceCount(); - int definedMaxCount = componentDef.getMaxInstanceCount(); + int definedMinCount = componentDef.getMinInstanceCountInt(); + int definedMaxCount = componentDef.getMaxInstanceCountInt(); if (count < definedMinCount || count > definedMaxCount) { throw new BadConfigException("Component %s, %s value %d out of range. " + "Expected minimum is %d and maximum is %d", @@ -272,8 +275,7 @@ public class AgentProviderService extends AbstractProviderService implements throw new SliderException( "metainfo.xml is required in app package."); } - commandOrder = new ComponentCommandOrder(metaInfo.getApplication() - .getCommandOrders()); + commandOrder = new ComponentCommandOrder(metaInfo.getApplication().getCommandOrders()); defaultConfigs = initializeDefaultConfigs(fileSystem, appDef, metaInfo); monitor = new HeartbeatMonitor(this, getHeartbeatMonitorInterval()); monitor.start(); @@ -891,6 +893,7 @@ public class AgentProviderService extends AbstractProviderService implements } } + processAndPublishComponentSpecificData(ports, containerId, fqdn, roleName); processAndPublishComponentSpecificExports(ports, containerId, fqdn, roleName); // and update registration entries @@ -1043,7 +1046,7 @@ public class AgentProviderService extends AbstractProviderService implements } @VisibleForTesting - protected MetaInfo getMetaInfo() { + protected Metainfo getMetaInfo() { return this.metaInfo; } @@ -1053,9 +1056,9 @@ public class AgentProviderService extends AbstractProviderService implements } @VisibleForTesting - protected MetaInfo getApplicationMetainfo(SliderFileSystem fileSystem, + protected Metainfo getApplicationMetainfo(SliderFileSystem fileSystem, String appDef) throws IOException, BadConfigException { - return AgentUtils.getApplicationMetaInfo(fileSystem, appDef); + return AgentUtils.getApplicationMetainfo(fileSystem, appDef); } @VisibleForTesting @@ -1075,7 +1078,7 @@ public class AgentProviderService extends AbstractProviderService implements * @throws IOException */ protected Map<String, DefaultConfig> initializeDefaultConfigs(SliderFileSystem fileSystem, - String appDef, MetaInfo metainfo) throws IOException { + String appDef, Metainfo metainfo) throws IOException { Map<String, DefaultConfig> defaultConfigMap = new HashMap<>(); if (SliderUtils.isNotEmpty(metainfo.getApplication().getConfigFiles())) { for (ConfigFile configFile : metainfo.getApplication().getConfigFiles()) { @@ -1392,6 +1395,56 @@ public class AgentProviderService extends AbstractProviderService implements } } + /** Publish component instance specific data if the component demands it */ + protected void processAndPublishComponentSpecificData(Map<String, String> ports, + String containerId, + String hostFqdn, + String componentName) { + String portVarFormat = "${site.%s}"; + String hostNamePattern = "${THIS_HOST}"; + Map<String, String> toPublish = new HashMap<String, String>(); + + Application application = getMetaInfo().getApplication(); + for (Component component : application.getComponents()) { + if (component.getName().equals(componentName)) { + if (component.getComponentExports().size() > 0) { + + for (ComponentExport export : component.getComponentExports()) { + String templateToExport = export.getValue(); + for (String portName : ports.keySet()) { + boolean publishData = false; + String portValPattern = String.format(portVarFormat, portName); + if (templateToExport.contains(portValPattern)) { + templateToExport = templateToExport.replace(portValPattern, ports.get(portName)); + publishData = true; + } + if (templateToExport.contains(hostNamePattern)) { + templateToExport = templateToExport.replace(hostNamePattern, hostFqdn); + publishData = true; + } + if (publishData) { + toPublish.put(export.getName(), templateToExport); + log.info("Publishing {} for name {} and container {}", + templateToExport, export.getName(), containerId); + } + } + } + } + } + } + + if (toPublish.size() > 0) { + Map<String, String> perContainerData = null; + if (!getComponentInstanceData().containsKey(containerId)) { + perContainerData = new ConcurrentHashMap<String, String>(); + } else { + perContainerData = getComponentInstanceData().get(containerId); + } + perContainerData.putAll(toPublish); + getComponentInstanceData().put(containerId, perContainerData); + publishComponentInstanceData(); + } + } /** Publish component instance specific data if the component demands it */ protected void processAndPublishComponentSpecificExports(Map<String, String> ports, @@ -1564,7 +1617,7 @@ public class AgentProviderService extends AbstractProviderService implements protected boolean isMarkedAutoRestart(String roleName) { Component component = getApplicationComponent(roleName); if (component != null) { - return component.getAutoStartOnFailure(); + return component.getAutoStartOnFailureBoolean(); } return false; } @@ -1692,9 +1745,22 @@ public class AgentProviderService extends AbstractProviderService implements String pkgListFormatString = "[%s]"; List<String> packages = new ArrayList(); if (application != null) { - List<Package> appPackages = application.getPackages(); - for (Package appPackage : appPackages){ - packages.add(String.format(pkgFormatString, appPackage.getType(), appPackage.getName())); + if (application.getPackages().size() > 0) { + List<Package> appPackages = application.getPackages(); + for (Package appPackage : appPackages) { + packages.add(String.format(pkgFormatString, appPackage.getType(), appPackage.getName())); + } + } else { + List<OSSpecific> osSpecifics = application.getOSSpecifics(); + if (osSpecifics != null && osSpecifics.size() > 0) { + for (OSSpecific osSpecific : osSpecifics) { + if (osSpecific.getOsType().equals("any")) { + for (OSPackage osPackage : osSpecific.getPackages()) { + packages.add(String.format(pkgFormatString, osPackage.getType(), osPackage.getName())); + } + } + } + } } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java index 2795692..6fe1161 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentUtils.java @@ -16,7 +16,6 @@ */ package org.apache.slider.providers.agent; -import org.apache.commons.io.IOUtils; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.slider.common.tools.SliderFileSystem; @@ -26,16 +25,12 @@ import org.apache.slider.providers.agent.application.metadata.DefaultConfig; import org.apache.slider.providers.agent.application.metadata.DefaultConfigParser; import org.apache.slider.providers.agent.application.metadata.Metainfo; import org.apache.slider.providers.agent.application.metadata.MetainfoParser; -import org.apache.slider.providers.agent.application.metadata.json.MetaInfo; -import org.apache.slider.providers.agent.application.metadata.json.MetaInfoParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileNotFoundException; -import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.StringWriter; /** * @@ -43,33 +38,32 @@ import java.io.StringWriter; public class AgentUtils { private static final Logger log = LoggerFactory.getLogger(AgentUtils.class); - public static MetaInfo getApplicationMetaInfo(SliderFileSystem fileSystem, - String appDef) throws IOException, BadConfigException { + public static Metainfo getApplicationMetainfo(SliderFileSystem fileSystem, + String appDef) throws IOException, BadConfigException { log.info("Reading metainfo at {}", appDef); FileSystem fs = fileSystem.getFileSystem(); Path appPath = new Path(appDef); - MetaInfo metaInfo = null; + Metainfo metainfo = null; + MetainfoParser metainfoParser = new MetainfoParser(); InputStream metainfoJsonStream = SliderUtils.getApplicationResourceInputStream( fs, appPath, "metainfo.json"); if (metainfoJsonStream == null) { InputStream metainfoXMLStream = SliderUtils.getApplicationResourceInputStream( fs, appPath, "metainfo.xml"); if (metainfoXMLStream != null) { - Metainfo metaInfoFromXML = new MetainfoParser().parse(metainfoXMLStream); - metaInfo = MetaInfo.upConverted(metaInfoFromXML); + metainfo = metainfoParser.fromXmlStream(metainfoXMLStream); } } else { - MetaInfoParser parser = new MetaInfoParser(); - metaInfo = parser.fromInputStream(metainfoJsonStream); + metainfo = metainfoParser.fromJsonStream(metainfoJsonStream); } - if (metaInfo == null) { + if (metainfo == null) { log.error("metainfo is unavailable at {}.", appDef); throw new FileNotFoundException("metainfo.xml/json is required in app package. " + appPath); } - return metaInfo; + return metainfo; } static DefaultConfig getDefaultConfig(SliderFileSystem fileSystem, http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java b/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java index 8e41b6b..194d6ff 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/ComponentCommandOrder.java @@ -18,7 +18,7 @@ package org.apache.slider.providers.agent; -import org.apache.slider.providers.agent.application.metadata.json.CommandOrder; +import org.apache.slider.providers.agent.application.metadata.CommandOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java index bc43d4b..cd5555f 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Application.java @@ -16,29 +16,31 @@ */ package org.apache.slider.providers.agent.application.metadata; +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.apache.slider.common.tools.SliderUtils; +import org.apache.slider.core.exceptions.BadCommandArgumentsException; +import org.apache.slider.core.exceptions.SliderException; +import org.codehaus.jackson.annotate.JsonProperty; + import java.util.ArrayList; import java.util.List; /** * Application type defined in the metainfo */ -public class Application { +public class Application implements Validate { String name; String comment; String version; String exportedConfigs; - List<Component> components; - List<ExportGroup> exportGroups; - List<OSSpecific> osSpecifics; - List<CommandOrder> commandOrders; - List<ConfigFile> configFiles; + List<Component> components = new ArrayList<>(); + List<ExportGroup> exportGroups = new ArrayList<>(); + List<OSSpecific> osSpecifics = new ArrayList<>(); + List<CommandOrder> commandOrders = new ArrayList<>(); + List<ConfigFile> configFiles = new ArrayList<>(); + List<Package> packages = new ArrayList<>(); public Application() { - exportGroups = new ArrayList<ExportGroup>(); - components = new ArrayList<Component>(); - osSpecifics = new ArrayList<OSSpecific>(); - commandOrders = new ArrayList<CommandOrder>(); - configFiles = new ArrayList<ConfigFile>(); } public String getName() { @@ -73,18 +75,20 @@ public class Application { this.exportedConfigs = exportedConfigs; } - public List<ConfigFile> getConfigFiles() { - return configFiles; - } - public void addConfigFile(ConfigFile configFile) { this.configFiles.add(configFile); } + @JsonProperty("configFiles") + public List<ConfigFile> getConfigFiles() { + return configFiles; + } + public void addComponent(Component component) { components.add(component); } + @JsonProperty("components") public List<Component> getComponents() { return components; } @@ -93,6 +97,7 @@ public class Application { exportGroups.add(exportGroup); } + @JsonProperty("exportGroups") public List<ExportGroup> getExportGroups() { return exportGroups; } @@ -101,6 +106,7 @@ public class Application { osSpecifics.add(osSpecific); } + @JsonIgnore public List<OSSpecific> getOSSpecifics() { return osSpecifics; } @@ -109,10 +115,16 @@ public class Application { commandOrders.add(commandOrder); } - public List<CommandOrder> getCommandOrder() { + @JsonProperty("commandOrders") + public List<CommandOrder> getCommandOrders() { return commandOrders; } + @JsonProperty("packages") + public List<Package> getPackages() { + return packages; + } + @Override public String toString() { final StringBuilder sb = @@ -128,4 +140,54 @@ public class Application { sb.append('}'); return sb.toString(); } + + public void validate(String version) throws SliderException { + if(SliderUtils.isUnset(version)) { + throw new BadCommandArgumentsException("schema version cannot be null"); + } + + Metainfo.checkNonNull(getName(), "name", "application"); + + Metainfo.checkNonNull(getVersion(), "version", "application"); + + if(getComponents().size() == 0) { + throw new SliderException("application must contain at least one component"); + } + + if(version.equals(Metainfo.VERSION_TWO_ZERO)) { + if(getPackages().size() > 0) { + throw new SliderException("packages is not supported in version " + version); + } + } + + if(version.equals(Metainfo.VERSION_TWO_ONE)) { + if(getOSSpecifics().size() > 0) { + throw new SliderException("osSpecifics is not supported in version " + version); + } + } + + for(CommandOrder co : getCommandOrders()) { + co.validate(version); + } + + for(Component comp : getComponents()) { + comp.validate(version); + } + + for(ConfigFile cf : getConfigFiles()) { + cf.validate(version); + } + + for(ExportGroup eg : getExportGroups()) { + eg.validate(version); + } + + for(Package pkg : getPackages()) { + pkg.validate(version); + } + + for(OSSpecific os : getOSSpecifics()) { + os.validate(version); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java index 825a104..40d8cc6 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandOrder.java @@ -16,10 +16,12 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + /** * */ -public class CommandOrder { +public class CommandOrder implements Validate { String command; String requires; @@ -51,4 +53,9 @@ public class CommandOrder { sb.append('}'); return sb.toString(); } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getCommand(), "command", "package"); + Metainfo.checkNonNull(getRequires(), "requires", "package"); + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java index 612322f..9915ba1 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/CommandScript.java @@ -16,10 +16,12 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + /** - * + * CommandScript that implements all component commands */ -public class CommandScript { +public class CommandScript implements Validate { String script; String scriptType; long timeout; @@ -62,4 +64,9 @@ public class CommandScript { sb.append('}'); return sb.toString(); } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getScript(), "script", "commandScript"); + Metainfo.checkNonNull(getScriptType(), "scriptType", "commandScript"); + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java index 418868c..9ed07e6 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Component.java @@ -19,6 +19,7 @@ package org.apache.slider.providers.agent.application.metadata; import org.apache.slider.common.tools.SliderUtils; import org.apache.slider.core.exceptions.BadConfigException; import org.apache.slider.core.exceptions.SliderException; +import org.codehaus.jackson.annotate.JsonProperty; import java.util.ArrayList; import java.util.List; @@ -26,21 +27,29 @@ import java.util.List; /** * */ -public class Component { +public class Component implements Validate { + + public static String TYPE_STANDARD = "STANDARD"; + public static String TYPE_DOCKER = "DOCKER"; + public static String CATEGORY_MASTER = "MASTER"; + public static String CATEGORY_SLAVE = "SLAVE"; + public static String CATEGORY_CLIENT = "CLIENT"; + String name; - String category; - String publishConfig; - String minInstanceCount; + String category = CATEGORY_MASTER; + String publishConfig = Boolean.FALSE.toString(); + String minInstanceCount = "1"; String maxInstanceCount; - String autoStartOnFailure; + String autoStartOnFailure = Boolean.FALSE.toString(); String appExports; String compExports; CommandScript commandScript; - List<ComponentExport> componentExports; + String type = TYPE_STANDARD; + List<ComponentExport> componentExports = new ArrayList<>(); + List<ComponentCommand> commands = new ArrayList<>(); + List<DockerContainer> dockerContainers = new ArrayList<>(); public Component() { - publishConfig = Boolean.FALSE.toString(); - componentExports = new ArrayList<ComponentExport>(); } public String getName() { @@ -51,6 +60,14 @@ public class Component { this.name = name; } + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + public String getCategory() { return category; } @@ -95,6 +112,14 @@ public class Component { return minInstanceCount; } + public Boolean getAutoStartOnFailureBoolean() { + if (SliderUtils.isUnset(getAutoStartOnFailure())) { + return Boolean.FALSE; + } + + return Boolean.parseBoolean(getAutoStartOnFailure()); + } + public int getMinInstanceCountInt() throws BadConfigException { if (SliderUtils.isUnset(minInstanceCount)) { return 0; @@ -151,6 +176,16 @@ public class Component { return Boolean.parseBoolean(this.autoStartOnFailure); } + @JsonProperty("commands") + public List<ComponentCommand> getCommands() { + return this.commands; + } + + @JsonProperty("dockerContainers") + public List<DockerContainer> getDockerContainers() { + return this.dockerContainers; + } + @Override public String toString() { final StringBuilder sb = @@ -162,9 +197,47 @@ public class Component { return sb.toString(); } - class AutoRestartSettings { - private boolean requiresAutoRestart; - private int maxFailures; - private int inThisManyMinutes; + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "component"); + Metainfo.checkNonNull(getCategory(), "category", "component"); + if (!getCategory().equals(CATEGORY_MASTER) + && !getCategory().equals(CATEGORY_SLAVE) + && !getCategory().equals(CATEGORY_CLIENT)) { + throw new SliderException("Invalid category for the component " + getCategory()); + } + + Metainfo.checkNonNull(getType(), "type", "component"); + if (!getType().equals(TYPE_DOCKER) + && !getType().equals(TYPE_STANDARD)) { + throw new SliderException("Invalid type for the component " + getType()); + } + + if (version.equals(Metainfo.VERSION_TWO_ZERO)) { + if (getType().equals(TYPE_DOCKER)) { + throw new SliderException(TYPE_DOCKER + " is not supported in version " + Metainfo.VERSION_TWO_ZERO); + } + + if (getCommands().size() > 0) { + throw new SliderException("commands are not supported in version " + Metainfo.VERSION_TWO_ZERO); + } + + if (getDockerContainers().size() > 0) { + throw new SliderException("containers are not supported in version " + Metainfo.VERSION_TWO_ZERO); + } + } + + if (commandScript != null) { + commandScript.validate(version); + } + + if (version.equals(Metainfo.VERSION_TWO_ONE)) { + for (DockerContainer dc : getDockerContainers()) { + dc.validate(version); + } + + for (ComponentCommand cc : getCommands()) { + cc.validate(version); + } + } } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java new file mode 100644 index 0000000..2724dbd --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ComponentCommand.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata; + +import org.apache.slider.core.exceptions.SliderException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Represents the metadata associated with the application. + */ +public class ComponentCommand implements Validate { + protected static final Logger + log = LoggerFactory.getLogger(ComponentCommand.class); + + + private String exec; + private String name = "START"; + private String type = "SHELL"; + + /** + * Creator. + */ + public ComponentCommand() { + } + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setExec(String exec) { + this.exec = exec; + } + + public String getExec() { + return exec; + } + + public void setType(String type) { + this.type = type; + } + + public String getType() { + return type; + } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "componentCommand"); + + Metainfo.checkNonNull(getType(), "version", "application"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java index b9dfb4e..cb47512 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ConfigFile.java @@ -16,10 +16,12 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + /** * */ -public class ConfigFile { +public class ConfigFile implements Validate { String type; String fileName; String dictionaryName; @@ -50,4 +52,8 @@ public class ConfigFile { public void setDictionaryName(String dictionaryName) { this.dictionaryName = dictionaryName; } + + public void validate(String version) throws SliderException { + + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java new file mode 100644 index 0000000..3117f3b --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainer.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata; + +import org.apache.slider.core.exceptions.SliderException; +import org.codehaus.jackson.annotate.JsonProperty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * Represents a docker container + */ +public class DockerContainer implements Validate { + protected static final Logger + log = LoggerFactory.getLogger(DockerContainer.class); + + + private String name; + private String image; + private String options; + private List<DockerContainerMount> mounts = new ArrayList<>(); + private List<DockerContainerPort> ports = new ArrayList<>(); + + + public DockerContainer() { + } + + @JsonProperty("mounts") + public List<DockerContainerMount> getMounts() { + return this.mounts; + } + + @JsonProperty("ports") + public List<DockerContainerPort> getPorts() { + return this.ports; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getOptions() { + return options; + } + + public void setOptions(String options) { + this.options = options; + } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "dockerContainer"); + Metainfo.checkNonNull(getImage(), "image", "dockerContainer"); + for (DockerContainerMount dcm : getMounts()) { + dcm.validate(version); + } + for (DockerContainerPort dcp : getPorts()) { + dcp.validate(version); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java new file mode 100644 index 0000000..760e15e --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerMount.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata; + +import org.apache.slider.core.exceptions.SliderException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Represents a docker container mount + */ +public class DockerContainerMount implements Validate { + protected static final Logger + log = LoggerFactory.getLogger(DockerContainerMount.class); + + + private String containerMount; + private String hostMount; + + public DockerContainerMount() { + } + + public String getContainerMount() { + return containerMount; + } + + public void setContainerMount(String containerMount) { + this.containerMount = containerMount; + } + + public String getHostMount() { + return hostMount; + } + + public void setHostMount(String hostMount) { + this.hostMount = hostMount; + } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getContainerMount(), "containerMount", "dockerContainerMount"); + Metainfo.checkNonNull(getHostMount(), "hostMount", "dockerContainerMount"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java new file mode 100644 index 0000000..7e717f1 --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/DockerContainerPort.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata; + +import org.apache.slider.core.exceptions.SliderException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Represents a docker container port + */ +public class DockerContainerPort implements Validate { + protected static final Logger + log = LoggerFactory.getLogger(DockerContainerPort.class); + + + private String containerPort; + private String hostPort; + + public DockerContainerPort() { + } + + public String getContainerPort() { + return containerPort; + } + + public void setContainerPort(String containerPort) { + this.containerPort = containerPort; + } + + public String getHostPort() { + return hostPort; + } + + public void setHostPort(String hostPort) { + this.hostPort = hostPort; + } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getContainerPort(), "containerPort", "dockerContainerPort"); + Metainfo.checkNonNull(getHostPort(), "hostPort", "dockerContainerPort"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java index 17326a3..5e0fb24 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Export.java @@ -16,10 +16,12 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + /** * */ -public class Export { +public class Export implements Validate { String name; String value; @@ -51,4 +53,9 @@ public class Export { sb.append('}'); return sb.toString(); } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "export"); + Metainfo.checkNonNull(getValue(), "value", "export"); + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java index d2e20a4..3d9f34c 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/ExportGroup.java @@ -16,13 +16,15 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + import java.util.ArrayList; import java.util.List; /** * */ -public class ExportGroup { +public class ExportGroup implements Validate { String name; List<Export> exports; @@ -59,4 +61,11 @@ public class ExportGroup { sb.append('}'); return sb.toString(); } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "exportGroup"); + for(Export exp : getExports()) { + exp.validate(version); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java index ea23678..f89846e 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Metainfo.java @@ -16,7 +16,8 @@ */ package org.apache.slider.providers.agent.application.metadata; -import org.apache.slider.providers.agent.application.metadata.json.MetaInfo; +import org.apache.slider.common.tools.SliderUtils; +import org.apache.slider.core.exceptions.SliderException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,19 +27,11 @@ import org.slf4j.LoggerFactory; public class Metainfo { protected static final Logger log = LoggerFactory.getLogger(Metainfo.class); + public static String VERSION_TWO_ZERO = "2.0"; + public static String VERSION_TWO_ONE = "2.1"; String schemaVersion; Application application; - MetaInfo jsonEncoded; - - public Metainfo() { - } - - // TODO: Temporary code - the plan is to move to the json parsed MetaInfo - public Metainfo(MetaInfo jsonEncoded) { - jsonEncoded = jsonEncoded; - // initialize the class - } public String getSchemaVersion() { return schemaVersion; @@ -58,7 +51,7 @@ public class Metainfo { public Component getApplicationComponent(String roleName) { if (application == null) { - log.error("Malformed app definition: Expect application as the top level element for metainfo.xml"); + log.error("Malformed app definition: Expect application as the top level element for metainfo"); } else { for (Component component : application.getComponents()) { if (component.getName().equals(roleName)) { @@ -69,7 +62,18 @@ public class Metainfo { return null; } - public static Metainfo fromJsonObject(MetaInfo jsonEncoded) { - return new Metainfo(jsonEncoded); + public void validate() throws SliderException { + if (!VERSION_TWO_ONE.equals(schemaVersion) || + !VERSION_TWO_ZERO.equals(schemaVersion)) { + throw new SliderException("Unsupported version " + getSchemaVersion()); + } + + application.validate(schemaVersion); + } + + public static void checkNonNull(String value, String field, String type) throws SliderException { + if (SliderUtils.isUnset(value)) { + throw new SliderException(type + "." + field + " cannot be null"); + } } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java index 1d8403f..12af586 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/MetainfoParser.java @@ -16,18 +16,78 @@ */ package org.apache.slider.providers.agent.application.metadata; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import org.apache.commons.digester.Digester; +import org.apache.commons.io.IOUtils; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; +import java.io.StringWriter; /** * */ public class MetainfoParser { + private final GsonBuilder gsonBuilder = new GsonBuilder(); + private final Gson gson; - public Metainfo parse(InputStream metainfoStream) throws IOException { + public MetainfoParser() { + gson = gsonBuilder.create(); + } + + /** + * Convert to a JSON string + * + * @return a JSON string description + * + * @throws IOException Problems mapping/writing the object + */ + public String toJsonString(Metainfo metaInfo) throws IOException { + return gson.toJson(metaInfo); + } + + /** + * Convert from JSON + * + * @param json input + * + * @return the parsed JSON + * + * @throws IOException IO + */ + public Metainfo fromJsonString(String json) + throws IOException { + return gson.fromJson(json, Metainfo.class); + } + + /** + * Parse metainfo from an IOStream + * + * @param is + * + * @return + * + * @throws IOException + */ + public Metainfo fromJsonStream(InputStream is) throws IOException { + StringWriter writer = new StringWriter(); + IOUtils.copy(is, writer); + return fromJsonString(writer.toString()); + } + + + /** + * Parse metainfo from an XML formatted IOStream + * + * @param metainfoStream + * + * @return + * + * @throws IOException + */ + public Metainfo fromXmlStream(InputStream metainfoStream) throws IOException { Digester digester = new Digester(); digester.setValidating(false); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java index 334f96b..32b4890 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSPackage.java @@ -16,10 +16,12 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + /** * */ -public class OSPackage { +public class OSPackage implements Validate { String type; String name; @@ -41,4 +43,9 @@ public class OSPackage { public void setName(String name) { this.name = name; } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "osPackage"); + Metainfo.checkNonNull(getType(), "type", "osPackage"); + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java index 7c36e8e..c06d498 100644 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/OSSpecific.java @@ -16,13 +16,15 @@ */ package org.apache.slider.providers.agent.application.metadata; +import org.apache.slider.core.exceptions.SliderException; + import java.util.ArrayList; import java.util.List; /** * */ -public class OSSpecific { +public class OSSpecific implements Validate { String osType; List<OSPackage> packages; @@ -45,4 +47,11 @@ public class OSSpecific { public List<OSPackage> getPackages() { return packages; } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getOsType(), "osType", "osSpecific"); + for (OSPackage opkg : getPackages()) { + opkg.validate(version); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java new file mode 100644 index 0000000..b88f77d --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Package.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata; + +import org.apache.slider.core.exceptions.SliderException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Represents package description. + */ +public class Package implements Validate { + protected static final Logger + log = LoggerFactory.getLogger(Package.class); + + + private String name; + private String type; + + public Package() { + } + + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public void validate(String version) throws SliderException { + Metainfo.checkNonNull(getName(), "name", "package"); + Metainfo.checkNonNull(getType(), "type", "package"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java new file mode 100644 index 0000000..ef03dcd --- /dev/null +++ b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/Validate.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.slider.providers.agent.application.metadata; + +import org.apache.slider.core.exceptions.SliderException; + +/** + * Implementer provides a validate method + */ +public interface Validate { + + public void validate(String version) throws SliderException; +} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java deleted file mode 100644 index 4dfa18d..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Application.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.codehaus.jackson.JsonParseException; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.JsonMappingException; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Represents the metadata associated with the application. - */ -public class Application { - protected static final Logger - log = LoggerFactory.getLogger(Application.class); - - - private String name; - private List<Component> components = new ArrayList<>(); - private String comment; - private String version; - private String exportedConfigs; - private List<ExportGroup> exportGroups = new ArrayList<>(); - private List<Package> packages = new ArrayList<>(); - private List<CommandOrder> commandOrders = new ArrayList<>(); - private List<ConfigFile> configFiles = new ArrayList<>(); - - public Application() { - } - - @JsonProperty("components") - public List<Component> getComponents() { - return this.components; - } - - @JsonProperty("exportGroups") - public List<ExportGroup> getExportGroups() { - return this.exportGroups; - } - - @JsonProperty("packages") - public List<Package> getPackages() { - return this.packages; - } - - @JsonProperty("commandOrders") - public List<CommandOrder> getCommandOrders() { - return this.commandOrders; - } - - @JsonProperty("configFiles") - public List<ConfigFile> getConfigFiles() { - return this.configFiles; - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - @JsonIgnore - public Component getApplicationComponent(String name) { - for (Component component : components) { - if (name.equals(component.getName())) { - return component; - } - } - return null; - } - - public String getComment() { - return comment; - } - - public void setComment(String comment) { - this.comment = comment; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getExportedConfigs() { - return exportedConfigs; - } - - public void setExportedConfigs(String exportedConfigs) { - this.exportedConfigs = exportedConfigs; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java deleted file mode 100644 index 1ac12aa..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandOrder.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Represents package description. - */ -public class CommandOrder { - protected static final Logger - log = LoggerFactory.getLogger(CommandOrder.class); - - - private String command; - private String requires; - - /** - * Creator. - */ - public CommandOrder() { - } - - - public void setCommand(String name) { - command = command; - } - - public String getCommand() { - return command; - } - - public void setRequires(String type) { - requires = requires; - } - - public String getRequires() { - return requires; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java deleted file mode 100644 index 51869a0..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/CommandScript.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Represents package description. - */ -public class CommandScript { - protected static final Logger - log = LoggerFactory.getLogger(CommandScript.class); - - - private String script; - private String scriptType; - private long timeout; - - /** - * Creator. - */ - public CommandScript() { - } - - - public void setScript(String script) { - this.script = script; - } - - public String getScript() { - return script; - } - - public String getScriptType() { - return scriptType; - } - - public void setScriptType(String scriptType) { - this.scriptType = scriptType; - } - - public long getTimeout() { - return timeout; - } - - public void setTimeout(long timeout) { - this.timeout = timeout; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java deleted file mode 100644 index 84147a3..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Component.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents the metadata associated with the application. - */ -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) -public class Component { - protected static final Logger - log = LoggerFactory.getLogger(Component.class); - - private String name; - private String compExports; - private String category = "MASTER"; - private String publishConfig; - private String type; - private int minInstanceCount = 1; - private int maxInstanceCount = Integer.MAX_VALUE; - private Boolean autoStartOnFailure = false; - private String appExports; - private CommandScript commandScript; - private List<ComponentCommand> commands = new ArrayList<ComponentCommand>(); - private List<Container> containers = new ArrayList<Container>(); - - public Component() { - } - - @JsonProperty("commands") - public List<ComponentCommand> getCommands() { - return this.commands; - } - - @JsonProperty("containers") - public List<Container> getContainers() { - return this.containers; - } - - public CommandScript getCommandScript() { - return commandScript; - } - - public void setCommandScript(CommandScript commandScript) { - this.commandScript = commandScript; - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public String getCompExports() { - return compExports; - } - - public void setCompExports(String compExports) { - this.compExports = compExports; - } - - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - - public String getPublishConfig() { - return publishConfig; - } - - public void setPublishConfig(String publishConfig) { - this.publishConfig = publishConfig; - } - - public int getMinInstanceCount() { - return minInstanceCount; - } - - public void setMinInstanceCount(int minInstanceCount) { - this.minInstanceCount = minInstanceCount; - } - - public int getMaxInstanceCount() { - return maxInstanceCount; - } - - public void setMaxInstanceCount(int maxInstanceCount) { - this.maxInstanceCount = maxInstanceCount; - } - - public Boolean getAutoStartOnFailure() { - return autoStartOnFailure; - } - - public void setAutoStartOnFailure(Boolean autoStartOnFailure) { - this.autoStartOnFailure = autoStartOnFailure; - } - - public String getAppExports() { - return appExports; - } - - public void setAppExports(String appExports) { - this.appExports = appExports; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java deleted file mode 100644 index aa7f3c3..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ComponentCommand.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.codehaus.jackson.JsonParseException; -import org.codehaus.jackson.annotate.JsonIgnore; -import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.annotate.JsonProperty; -import org.codehaus.jackson.map.JsonMappingException; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.map.SerializationConfig; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Represents the metadata associated with the application. - */ -@JsonIgnoreProperties(ignoreUnknown = true) -@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) -public class ComponentCommand { - protected static final Logger - log = LoggerFactory.getLogger(ComponentCommand.class); - - - private String exec; - private String name = "START"; - private String type = "SHELL"; - - /** - * Creator. - */ - public ComponentCommand() { - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setExec(String exec) { - this.exec = exec; - } - - public String getExec() { - return exec; - } - - public void setType(String type) { - this.type = type; - } - - public String getType() { - return type; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java deleted file mode 100644 index 9a83f35..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ConfigFile.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -/** - * - */ -public class ConfigFile { - String type; - String fileName; - String dictionaryName; - - public ConfigFile() { - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getDictionaryName() { - return dictionaryName; - } - - public void setDictionaryName(String dictionaryName) { - this.dictionaryName = dictionaryName; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java deleted file mode 100644 index e95406e..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/Container.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.codehaus.jackson.annotate.JsonProperty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a docker container - */ -public class Container { - protected static final Logger - log = LoggerFactory.getLogger(Container.class); - - - private String name; - private String image; - private String options; - private List<ContainerMount> mounts = new ArrayList<>(); - private List<ContainerPort> ports = new ArrayList<>(); - - - public Container() { - } - - @JsonProperty("mounts") - public List<ContainerMount> getMounts() { - return this.mounts; - } - - @JsonProperty("ports") - public List<ContainerPort> getPorts() { - return this.ports; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - public String getOptions() { - return options; - } - - public void setOptions(String options) { - this.options = options; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java deleted file mode 100644 index b31b602..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerMount.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Represents a docker container mount - */ -public class ContainerMount { - protected static final Logger - log = LoggerFactory.getLogger(ContainerMount.class); - - - private String containerMount; - private String hostMount; - - public ContainerMount() { - } - - public String getContainerMount() { - return containerMount; - } - - public void setContainerMount(String containerMount) { - this.containerMount = containerMount; - } - - public String getHostMount() { - return hostMount; - } - - public void setHostMount(String hostMount) { - this.hostMount = hostMount; - } -} http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/5b1826e1/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java b/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java deleted file mode 100644 index d2dcb09..0000000 --- a/slider-core/src/main/java/org/apache/slider/providers/agent/application/metadata/json/ContainerPort.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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 org.apache.slider.providers.agent.application.metadata.json; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Represents a docker container port - */ -public class ContainerPort { - protected static final Logger - log = LoggerFactory.getLogger(ContainerPort.class); - - - private String containerPort; - private String hostPort; - - public ContainerPort() { - } - - public String getContainerPort() { - return containerPort; - } - - public void setContainerPort(String containerPort) { - this.containerPort = containerPort; - } - - public String getHostPort() { - return hostPort; - } - - public void setHostPort(String hostPort) { - this.hostPort = hostPort; - } -}