diff --git a/jar-connector/src/main/java/com/sixsq/slipstream/connector/CliConnectorBase.java b/jar-connector/src/main/java/com/sixsq/slipstream/connector/CliConnectorBase.java index b1d1eed1e..847a2cfa0 100644 --- a/jar-connector/src/main/java/com/sixsq/slipstream/connector/CliConnectorBase.java +++ b/jar-connector/src/main/java/com/sixsq/slipstream/connector/CliConnectorBase.java @@ -164,7 +164,7 @@ public void terminate(Run run, User user) throws SlipStreamException { validateCredentials(user); - List instanceIds = getCloudNodeInstanceIds(run); + List instanceIds = getCloudNodeInstanceIds(run); //TODO KB extract ids for each cloud service for terminate if(instanceIds.isEmpty()){ throw new SlipStreamClientException("There is no instances to terminate"); } diff --git a/jar-connector/src/main/java/com/sixsq/slipstream/util/Terminator.java b/jar-connector/src/main/java/com/sixsq/slipstream/util/Terminator.java index 8ebc259d6..dbc0a7c84 100644 --- a/jar-connector/src/main/java/com/sixsq/slipstream/util/Terminator.java +++ b/jar-connector/src/main/java/com/sixsq/slipstream/util/Terminator.java @@ -25,7 +25,7 @@ import com.sixsq.slipstream.persistence.Run; import com.sixsq.slipstream.persistence.User; import com.sixsq.slipstream.persistence.UserParameter; -import com.sixsq.slipstream.statemachine.StateMachine; +//import com.sixsq.slipstream.statemachine.StateMachine; import com.sixsq.slipstream.statemachine.States; public class Terminator { @@ -44,7 +44,7 @@ public static int purge() throws ConfigurationException, ValidationException { u = User.loadByName(u.getName()); int timeout = u.getTimeout(); - List old = Run.listOldTransient(u, timeout); + List old = Run.listOldTransient(u, timeout); //TODO kb search for timeout on ssclj deployment for (Run r : old) { EntityManager em = PersistenceUtil.createEntityManager(); try { @@ -68,7 +68,7 @@ public static int purge() throws ConfigurationException, ValidationException { public static void purgeRun(Run run) throws SlipStreamException { Run.abort("The run has timed out", run.getUuid()); - boolean isGarbageCollected = Run.isGarbageCollected(run); + boolean isGarbageCollected = Run.isGarbageCollected(run); //TODO kb Garbage collected run Run.setGarbageCollected(run); run = run.store(); @@ -94,18 +94,20 @@ public static void terminate(String runResourceUri) throws SlipStreamException { Run run = Run.load(runResourceUri, em); User user = User.loadByName(run.getUser()); - StateMachine sc = StateMachine.createStateMachine(run); + //StateMachine sc = StateMachine.createStateMachine(run); - if (sc.canCancel()) { - sc.tryAdvanceToCancelled(); - terminateInstances(run, user); - } else { - if (sc.getState() == States.Ready) { - sc.tryAdvanceToFinalizing(); - } - terminateInstances(run, user); - sc.tryAdvanceState(true); - } + //if (sc.canCancel()) { + // sc.tryAdvanceToCancelled(); + // terminateInstances(run, user); + //} else { + // if (sc.getState() == States.Ready) { + // sc.tryAdvanceToFinalizing(); + // } + // terminateInstances(run, user); + // sc.tryAdvanceState(true); + //} + + terminateInstances(run, user); em.close(); } diff --git a/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Deployment.java b/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Deployment.java new file mode 100644 index 000000000..cbb683312 --- /dev/null +++ b/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Deployment.java @@ -0,0 +1,180 @@ +package com.sixsq.slipstream.persistence; + +import com.google.gson.annotations.SerializedName; +import com.sixsq.slipstream.acl.TypePrincipal; +import com.sixsq.slipstream.acl.TypePrincipalRight; +import com.sixsq.slipstream.util.SscljProxy; +import com.sixsq.slipstream.acl.ACL; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class Deployment { + private static final String DEPLOYMENT_RESOURCE = "api/deployment"; + + @SuppressWarnings("unused") + private String id; + + @SuppressWarnings("unused") + @SerializedName("module-resource-uri") + private String moduleResourceUri; + + @SuppressWarnings("unused") + private String type; + + @SuppressWarnings("unused") + private String category; + + @SuppressWarnings("unused") + private boolean mutable; + + @SuppressWarnings("unused") + @SerializedName("keep-running") + private boolean keepRunning; + + @SuppressWarnings("unused") + private ArrayList tags; + + @SuppressWarnings("unused") + private ACL acl; + + @SuppressWarnings("unused") + private String state; + + @SuppressWarnings("unused") + private HashMap nodes = new HashMap<>(); + + public void setId(String id) { + this.id = id; + } + + public void setModuleResourceUri(String moduleResourceUri) { + this.moduleResourceUri = moduleResourceUri; + } + + public void setType(String type) { + this.type = type; + } + + public void setCategory(String category) { + this.category = category; + } + + public void setMutable(boolean mutable) { + this.mutable = mutable; + } + + public void setAcl(ACL acl) { + this.acl = acl; + } + + public void setState(String state) { + this.state = state; + } + + public void setKeepRunning(boolean keepRunning) { + this.keepRunning = keepRunning; + } + + public void setNodes(HashMap nodes) { + this.nodes = nodes; + } + + public void setTags(ArrayList tags) { + this.tags = tags; + } + + public String getId() { + return id; + } + + public String getModuleResourceUri() { + return moduleResourceUri; + } + + public String getType() { + return type; + } + + public String getCategory() { + return category; + } + + public boolean isMutable() { + return mutable; + } + + public ACL getAcl() { + return acl; + } + + public String getState() { + return state; + } + + public boolean isKeepRunning() { + return keepRunning; + } + + public ArrayList getTags() { + return tags; + } + + public HashMap getNodes() { + return nodes; + } + + class Node { + class Parameter { + String description; + String value; + + Parameter (String value, String description) { + this.value = value; + this.description = description; + } + } + @SerializedName("runtime-parameters") + HashMap runtimeParameters = new HashMap<>(); + + Node (String nodeName, Run run) { + for (RuntimeParameter rp : run.getRuntimeParameters().values()) { + if (rp.getGroup().equals(nodeName)) { + runtimeParameters.put(rp.getName(), new Parameter(rp.getValue(), rp.getDescription())); + } + } + } + } + + public Deployment(Run run) { + this.id = "deployment/" + run.getUuid(); + this.moduleResourceUri = run.getRefqname(); + this.type = run.getType().name(); + this.category = run.getCategory().name(); + this.mutable = run.isMutable(); + this.state = run.getState().name(); + + for (String nodeName: run.getNodeNamesList()) { + this.nodes.put(nodeName, new Node(nodeName, run)); + } + + try { + this.tags = new ArrayList<>(Arrays.asList(run.getRuntimeParameterValue("ss:tags").split(","))); + } catch (Exception ignored) { } + + TypePrincipal owner = new TypePrincipal(TypePrincipal.PrincipalType.USER, run.getUser()); + List rules = new ArrayList(); + rules.add(new TypePrincipalRight(TypePrincipal.PrincipalType.USER, run.getUser(), TypePrincipalRight.Right.MODIFY)); + this.acl = new ACL(owner, rules); + } + + public String toJson() { + return SscljProxy.toJson(this); + } + + public static void post(Deployment deployment) { + SscljProxy.post(DEPLOYMENT_RESOURCE, "internal ADMIN", deployment); + } +} diff --git a/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Run.java b/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Run.java index b7ed16cde..3b2e90519 100644 --- a/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Run.java +++ b/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/Run.java @@ -128,7 +128,7 @@ public class Run extends Parameterized { private static final Set STOP_ACCOUNTING_STATES = new HashSet(Arrays.asList(STOP_VALUES)); - public static Run abortOrReset(String abortMessage, String nodename, + public static Run abortOrReset(String abortMessage, String nodename, //TODO kb String uuid) { EntityManager em = PersistenceUtil.createEntityManager(); EntityTransaction transaction = em.getTransaction(); @@ -142,7 +142,7 @@ public static Run abortOrReset(String abortMessage, String nodename, return run; } - public static Run abortOrReset(String abortMessage, String nodename, + public static Run abortOrReset(String abortMessage, String nodename, //TODO kb EntityManager em, String uuid) { Run run = Run.loadFromUuid(uuid, em); @@ -177,7 +177,7 @@ public static Run abortOrReset(String abortMessage, String nodename, return run; } - private static void setGlobalAbortState(String abortMessage, + private static void setGlobalAbortState(String abortMessage, //TODO kb RuntimeParameter globalAbort) { globalAbort.setValue(abortMessage); globalAbort.store(); @@ -192,7 +192,7 @@ public static Run abort(String abortMessage, String uuid) { if (!globalAbort.isSet()) { setGlobalAbortState(abortMessage, globalAbort); } - if (run.state == States.Provisioning) { + if (run.state == States.Provisioning) { //TODO kb recovery mode setRecoveryMode(run); } em.close(); @@ -210,7 +210,7 @@ private static String getNodeAbortKey(String nodeName) { + RuntimeParameter.ABORT_KEY; } - private static RuntimeParameter getRecoveryModeParameter(Run run) { + private static RuntimeParameter getRecoveryModeParameter(Run run) { //TODO kb return run.getRuntimeParameters().get( RuntimeParameter.GLOBAL_RECOVERY_MODE_KEY); } @@ -331,7 +331,7 @@ private static List convertRunsToRunViews(List runs, Map vmCountPerRun) { + private static RunView convertRunToRunView(Run run, Map vmCountPerRun) { //TODO kb UI if (run == null) { return null; @@ -480,7 +480,7 @@ public static List listOldTransient(User user) throws ConfigurationExceptio } @SuppressWarnings("unchecked") - public static List listOldTransient(User user, int timeout) throws ConfigurationException, + public static List listOldTransient(User user, int timeout) throws ConfigurationException, //TODO kb search for old transient deployment on ssclj ValidationException { if (timeout <= 0) { timeout = DEFAULT_TIMEOUT; @@ -1135,7 +1135,7 @@ public void addGroup(String group, String serviceName) { @Attribute @Column(length = 1024) public String getGroups() { - getRuntimeParameters().get(RuntimeParameter.GLOBAL_NODE_GROUPS_KEY).setValue(groups); + getRuntimeParameters().get(RuntimeParameter.GLOBAL_NODE_GROUPS_KEY).setInitValue(groups); return groups; } diff --git a/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/RuntimeParameter.java b/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/RuntimeParameter.java index 5bb24c7c9..3169e045d 100644 --- a/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/RuntimeParameter.java +++ b/jar-persistence/src/main/java/com/sixsq/slipstream/persistence/RuntimeParameter.java @@ -20,9 +20,7 @@ * -=================================================================- */ -import java.util.Arrays; -import java.util.List; -import java.util.Properties; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -36,11 +34,18 @@ import javax.persistence.NoResultException; import javax.persistence.Query; +import com.google.gson.JsonObject; +import org.restlet.Response; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Text; import com.sixsq.slipstream.exceptions.ValidationException; + +import com.sixsq.slipstream.util.SscljProxy; + +import static com.sixsq.slipstream.util.ServiceOffersUtil.parseJson; + /** * Unit tests: * @@ -349,7 +354,7 @@ private void init() { if (GLOBAL_NAMESPACE.equals(group_)) { group_ = "Global"; } - setValue(value); + setInitValue(value); } public boolean isMappedValue() { @@ -390,13 +395,49 @@ public String getResourceUri() { return resourceUri; } + public static String getSScljDeploymentParameterUri(RuntimeParameter rp) { + String deploymentParameterId = "deployment-parameter/" + rp.container.getUuid() + "_"; + String paramName = rp.name_.replace(".", "-"); + if (!rp.group_.equals("Global")) { + String nodeIndex = rp.key_.replaceAll("^" + rp.group_ + ":", ""); + nodeIndex = nodeIndex.replaceAll(":" + paramName +"$", ""); + if (!nodeIndex.isEmpty()) { + deploymentParameterId = deploymentParameterId + String.join("_", rp.group_, "1", paramName); + } else { + deploymentParameterId = deploymentParameterId + + String.join("_", rp.group_, nodeIndex, paramName); + } + } else { + paramName = paramName.replaceAll("^ss:", ""); + deploymentParameterId = deploymentParameterId + paramName; + } + return SscljProxy.BASE_RESOURCE + deploymentParameterId; + } + public String getValue() { + /*Response response; + JsonObject res = new JsonObject(); + response = SscljProxy.get(getSScljDeploymentParameterUri(this), "super ADMIN"); + if (response != null && response.getStatus().getCode() == 200) { + res = parseJson(response.getEntityAsText()); + return res.get("value").toString(); + }*/ return value; } + public void setInitValue(String value) { + setIsSet(!isNullOrEmpty(value)); + this.value = value; + processValue(); + } + public void setValue(String value) { setIsSet(!isNullOrEmpty(value)); this.value = value; + + Map mapValue = new HashMap(); + mapValue.put("value", value);SscljProxy.put(getSScljDeploymentParameterUri(this), + "super ADMIN", mapValue, true); processValue(); } diff --git a/jar-persistence/src/main/java/com/sixsq/slipstream/util/SscljProxy.java b/jar-persistence/src/main/java/com/sixsq/slipstream/util/SscljProxy.java index 376dd4f93..97cb5a620 100644 --- a/jar-persistence/src/main/java/com/sixsq/slipstream/util/SscljProxy.java +++ b/jar-persistence/src/main/java/com/sixsq/slipstream/util/SscljProxy.java @@ -85,6 +85,10 @@ public static Response put(String resource, String username, Object obj) { return request(Method.PUT, resource, obj, username, null, null, null); } + public static Response put(String resource, String username, Object obj, Boolean throwException) { + return request(Method.PUT, resource, obj, username, null, null, throwException); + } + public static Response post(String resource, Object obj) { return request(Method.POST, resource, obj, null, null, null, null); } diff --git a/jar-service/src/main/java/com/sixsq/slipstream/application/RootApplication.java b/jar-service/src/main/java/com/sixsq/slipstream/application/RootApplication.java index ce62e3aa9..75b284eb1 100644 --- a/jar-service/src/main/java/com/sixsq/slipstream/application/RootApplication.java +++ b/jar-service/src/main/java/com/sixsq/slipstream/application/RootApplication.java @@ -24,12 +24,7 @@ import com.sixsq.slipstream.action.ActionRouter; import com.sixsq.slipstream.attribute.AttributeRouter; -import com.sixsq.slipstream.authn.BasicAuthenticator; -import com.sixsq.slipstream.authn.CookieAuthenticator; -import com.sixsq.slipstream.authn.LoginResource; -import com.sixsq.slipstream.authn.LogoutResource; -import com.sixsq.slipstream.authn.RegistrationResource; -import com.sixsq.slipstream.authn.ResetPasswordResource; +import com.sixsq.slipstream.authn.*; import com.sixsq.slipstream.authz.SuperEnroler; import com.sixsq.slipstream.cloudusage.CloudUsageRouter; import com.sixsq.slipstream.configuration.Configuration; @@ -61,6 +56,7 @@ import com.sixsq.slipstream.resource.configuration.ServiceConfigurationResource; import com.sixsq.slipstream.resource.NuvlaboxAdminRouter; import com.sixsq.slipstream.resource.NuvlaboxAdminResource; +import com.sixsq.slipstream.run.RunResource; import com.sixsq.slipstream.run.RunRouter; import com.sixsq.slipstream.run.VmsRouter; import com.sixsq.slipstream.serviceinfo.ServiceInfoRouter; @@ -381,14 +377,21 @@ private Authenticators getAuthenticators(Application application) { Authenticator basicAuthenticator = new BasicAuthenticator(getContext()); basicAuthenticator.setEnroler(new SuperEnroler(application)); + Authenticator headerAuthenticator = new HeaderAuthenticator(getContext()); + headerAuthenticator.setEnroler(new SuperEnroler(application)); + Authenticator cookieAuthenticator = new CookieAuthenticator(getContext()); cookieAuthenticator.setOptional(true); cookieAuthenticator.setNext(basicAuthenticator); cookieAuthenticator.setEnroler(new SuperEnroler(application)); + basicAuthenticator.setOptional(true); + basicAuthenticator.setNext(headerAuthenticator); + authenticators.add(cookieAuthenticator); authenticators.add(basicAuthenticator); + authenticators.add(headerAuthenticator); return authenticators; } diff --git a/jar-service/src/main/java/com/sixsq/slipstream/authn/HeaderAuthenticator.java b/jar-service/src/main/java/com/sixsq/slipstream/authn/HeaderAuthenticator.java new file mode 100644 index 000000000..f6678cd5e --- /dev/null +++ b/jar-service/src/main/java/com/sixsq/slipstream/authn/HeaderAuthenticator.java @@ -0,0 +1,121 @@ +package com.sixsq.slipstream.authn; + +/* + * +=================================================================+ + * SlipStream Server (WAR) + * ===== + * Copyright (C) 2013 SixSq Sarl (sixsq.com) + * ===== + * Licensed 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. + * -=================================================================- + */ + +import com.sixsq.slipstream.cookie.CookieUtils; +import com.sixsq.slipstream.exceptions.ConfigurationException; +import com.sixsq.slipstream.exceptions.ValidationException; +import com.sixsq.slipstream.util.RequestUtil; +import com.sixsq.slipstream.util.ResourceUriUtil; +import org.restlet.Context; +import org.restlet.Request; +import org.restlet.Response; +import org.restlet.data.MediaType; +import org.restlet.data.Reference; +import org.restlet.data.Status; +import org.restlet.engine.header.Header; +import org.restlet.security.User; +import org.restlet.util.Series; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +public class HeaderAuthenticator extends AuthenticatorBase { + + private static final Logger logger = Logger.getLogger(HeaderAuthenticator.class.getName()); + + public HeaderAuthenticator(Context context) { + super(context, false); + } + + @Override + protected boolean authenticate(Request request, Response response) { + if (request.getClientInfo().isAuthenticated()) { + return true; + } + + Series
series = (Series
) request.getAttributes().get("org.restlet.http.headers"); + Header authnInfo = series.getFirst("slipstream-authn-info"); + if (authnInfo != null) { + String username = series.getFirst("slipstream-authn-info").getValue(); + if (username != null && !username.isEmpty()) { + return handleValid(request, username); + } + } + return handleNotValid(request, response); + } + + private boolean handleValid(Request request, String username) { + + setClientInfo(request, username); + + com.sixsq.slipstream.persistence.User user = null; + try { + user = com.sixsq.slipstream.persistence.User.loadByName(username); + } catch (ConfigurationException e) { + return false; + } catch (ValidationException e) { + return false; + } + if (user == null) { + return false; + } + + setUserInRequest(user, request); + + return true; + } + + private boolean handleNotValid(Request request, Response response) { + + List supported = new ArrayList(); + supported.add(MediaType.APPLICATION_XML); + supported.add(MediaType.TEXT_HTML); + MediaType prefered = request.getClientInfo().getPreferredMediaType(supported); + + if (prefered != null && prefered.isCompatible(MediaType.TEXT_HTML)) { + Reference baseRef = ResourceUriUtil.getBaseRef(request); + + Reference redirectRef = new Reference(baseRef, LoginResource.getResourceRoot()); + redirectRef.setQuery("redirectURL=" + request.getResourceRef().getPath()); + + String absolutePath = RequestUtil.constructAbsolutePath(request, redirectRef.toString()); + + response.redirectTemporary(absolutePath); + } else { + response.setStatus(Status.CLIENT_ERROR_UNAUTHORIZED); + } + + return false; + } + + private String setClientInfo(Request request, String username) { + request.getClientInfo().setAuthenticated(true); + + logger.info("setClientInfo, username = '" + username + "'"); + + User user = new User(username); + request.getClientInfo().setUser(user); + return username; + } + +} diff --git a/jar-service/src/main/java/com/sixsq/slipstream/run/RunListResource.java b/jar-service/src/main/java/com/sixsq/slipstream/run/RunListResource.java index 47ff30476..350d52f60 100644 --- a/jar-service/src/main/java/com/sixsq/slipstream/run/RunListResource.java +++ b/jar-service/src/main/java/com/sixsq/slipstream/run/RunListResource.java @@ -34,7 +34,11 @@ import javax.persistence.RollbackException; import com.sixsq.slipstream.dashboard.DashboardResource; +import com.sixsq.slipstream.persistence.*; +import com.sixsq.slipstream.util.*; import org.hibernate.StaleObjectStateException; +import org.json.JSONObject; +import org.json.XML; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Status; @@ -55,24 +59,7 @@ import com.sixsq.slipstream.exceptions.SlipStreamException; import com.sixsq.slipstream.exceptions.ValidationException; import com.sixsq.slipstream.factory.RunFactory; -import com.sixsq.slipstream.persistence.Module; -import com.sixsq.slipstream.persistence.ModuleCategory; -import com.sixsq.slipstream.persistence.ModuleParameter; -import com.sixsq.slipstream.persistence.NodeParameter; -import com.sixsq.slipstream.persistence.Parameter; -import com.sixsq.slipstream.persistence.Run; -import com.sixsq.slipstream.persistence.RunParameter; -import com.sixsq.slipstream.persistence.RunType; -import com.sixsq.slipstream.persistence.RuntimeParameter; -import com.sixsq.slipstream.persistence.ServiceConfiguration; -import com.sixsq.slipstream.persistence.User; -import com.sixsq.slipstream.persistence.UserParameter; -import com.sixsq.slipstream.persistence.Vm; import com.sixsq.slipstream.resource.BaseResource; -import com.sixsq.slipstream.util.ConfigurationUtil; -import com.sixsq.slipstream.util.HtmlUtil; -import com.sixsq.slipstream.util.RequestUtil; -import com.sixsq.slipstream.util.SerializationUtil; /** * Unit test: @@ -185,8 +172,6 @@ public void createRun(Representation entity) run.store(); - launch(run); - setLastExecute(user); run.postEventCreated(); @@ -266,7 +251,7 @@ private void validateUserPublicKey(User user, RunType type, Form form) throws Va private void setTags(Run run, Form form) { RuntimeParameter rp = run.getRuntimeParameters().get(RuntimeParameter.GLOBAL_TAGS_KEY); if (rp != null){ - rp.setValue(form.getFirstValue(TAGS_KEY, "")); + rp.setInitValue(form.getFirstValue(TAGS_KEY, "")); } } @@ -362,13 +347,6 @@ private RunType parseType(Form form, Module module) { } } - private Run launch(Run run) throws SlipStreamException { - User user = getUser(); - user.addSystemParametersIntoUser(Configuration.getInstance().getParameters()); - slipstream.async.Launcher.launch(run, user); - return run; - } - private Run addCredentials(Run run) throws ConfigurationException, ServerExecutionEnginePluginException, ValidationException { diff --git a/jar-service/src/main/java/com/sixsq/slipstream/run/RunNodeResource.java b/jar-service/src/main/java/com/sixsq/slipstream/run/RunNodeResource.java index 0ccef9b8c..2e43a2f90 100644 --- a/jar-service/src/main/java/com/sixsq/slipstream/run/RunNodeResource.java +++ b/jar-service/src/main/java/com/sixsq/slipstream/run/RunNodeResource.java @@ -122,7 +122,7 @@ public Representation addNodeInstances(Representation entity) return result; } - private Representation addNodeInstancesInTransaction(Representation entity) + private Representation addNodeInstancesInTransaction(Representation entity) //TODO kb scaling throws Exception { EntityManager em = PersistenceUtil.createEntityManager(); @@ -180,7 +180,7 @@ public void deleteNodeInstances(Representation entity) throws Exception { } } - private void deleteNodeInstancesInTransaction(Representation entity) throws Exception { + private void deleteNodeInstancesInTransaction(Representation entity) throws Exception { //TODO kb scaling EntityManager em = PersistenceUtil.createEntityManager(); EntityTransaction transaction = em.getTransaction(); diff --git a/jar-service/src/main/java/com/sixsq/slipstream/run/RunResource.java b/jar-service/src/main/java/com/sixsq/slipstream/run/RunResource.java index a07bcac83..474bd03b1 100644 --- a/jar-service/src/main/java/com/sixsq/slipstream/run/RunResource.java +++ b/jar-service/src/main/java/com/sixsq/slipstream/run/RunResource.java @@ -22,7 +22,9 @@ import javax.persistence.EntityManager; +import com.sixsq.slipstream.configuration.Configuration; import com.sixsq.slipstream.exceptions.*; +import com.sixsq.slipstream.persistence.User; import org.json.JSONObject; import org.json.XML; import org.restlet.data.MediaType; @@ -31,6 +33,7 @@ import org.restlet.representation.StringRepresentation; import org.restlet.resource.Delete; import org.restlet.resource.Get; +import org.restlet.resource.Post; import org.restlet.resource.ResourceException; import com.sixsq.slipstream.factory.RunFactory; @@ -162,6 +165,18 @@ private Run constructRun(EntityManager em) throws SlipStreamClientException { return run; } + private Run launch(Run run) throws SlipStreamException { + User user = getUser(); + user.addSystemParametersIntoUser(Configuration.getInstance().getParameters()); + slipstream.async.Launcher.launch(run, user); + return run; + } + + @Post + public void startRun() throws SlipStreamException { + launch(this.run); + } + @Delete public void terminate() { String errorMessage = "Failed terminating VMs"; diff --git a/jar-service/src/main/java/com/sixsq/slipstream/run/RuntimeParameterResource.java b/jar-service/src/main/java/com/sixsq/slipstream/run/RuntimeParameterResource.java index 443e08a2f..b3989514a 100644 --- a/jar-service/src/main/java/com/sixsq/slipstream/run/RuntimeParameterResource.java +++ b/jar-service/src/main/java/com/sixsq/slipstream/run/RuntimeParameterResource.java @@ -114,7 +114,7 @@ private void abortOrReset(String abortMessage, EntityManager em) { } @Delete - public void resetRuntimeParameter() throws ResourceException { + public void resetRuntimeParameter() throws ResourceException { //TODO kb should no more be used with new client runtimeParameter.setValue(""); runtimeParameter.setIsSet(false); @@ -137,7 +137,7 @@ public void resetRuntimeParameter() throws ResourceException { } @Get - public String represent() throws ResourceException, NotFoundException, + public String represent() throws ResourceException, NotFoundException, //TODO kb should no more be used with new client ValidationException { getMetricsTimer().start(); try { @@ -166,7 +166,7 @@ private String truncateMiddle(int maxLength, String text, String truncateMessage } @Put - public void update(Representation entity) throws ResourceException, + public void update(Representation entity) throws ResourceException, //TODO kb should no more be used with new client NotFoundException, ValidationException { EntityManager em = PersistenceUtil.createEntityManager(); @@ -281,7 +281,7 @@ private States attemptChangeGlobalStateToProvisioning() { @Post - public void completeCurrentNodeStateOrChangeGlobalState(Representation entity) { + public void completeCurrentNodeStateOrChangeGlobalState(Representation entity) { //TODO kb should be no more used, new client will talk to ssclj deployment String nodeName = runtimeParameter.getNodeName(); States newState = attemptCompleteCurrentNodeState(nodeName); getResponse().setEntity(newState.toString(), MediaType.TEXT_PLAIN); diff --git a/ssclj/jar/build.boot b/ssclj/jar/build.boot index 7d33a2c22..a0b0f3caf 100644 --- a/ssclj/jar/build.boot +++ b/ssclj/jar/build.boot @@ -24,6 +24,7 @@ '[[org.clojure/clojure] [aleph] + [manifold] [cheshire] ;; newer version needed for ring-json [compojure] [com.jcraft/jsch] @@ -37,6 +38,8 @@ [metrics-clojure-jvm] [metrics-clojure-graphite] [me.raynes/fs] + [org.clojure/core.async :exclusions []] + [org.clojure/tools.reader "1.0.0-beta4"] [org.clojure/data.json] [org.clojure/java.classpath] [org.clojure/tools.cli] @@ -46,6 +49,7 @@ [ring/ring-core] [ring/ring-json] [superstring] + [zookeeper-clj] [com.sixsq.slipstream/utils] [com.sixsq.slipstream/auth] @@ -64,6 +68,8 @@ [honeysql] [org.clojure/test.check] [org.slf4j/slf4j-log4j12 :scope "test"] + [org.apache.curator/curator-test :scope "test"] + [clj-http-fake/clj-http-fake :scope "test"] ;; boot tasks [boot-environ] diff --git a/ssclj/jar/resources/log4j.properties b/ssclj/jar/resources/log4j.properties index a65e9952d..4a759462f 100644 --- a/ssclj/jar/resources/log4j.properties +++ b/ssclj/jar/resources/log4j.properties @@ -1,8 +1,12 @@ # Root logger and StratusLab logger set to INFO level of debugging. -log4j.rootLogger=INFO, A1 +log4j.rootLogger=DEBUG, console log4j.logger.com.sixsq.slipstream.ssclj=INFO log4j.logger.com.mchange=WARN +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%-5p %c: %m%n + # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.RollingFileAppender log4j.appender.A1.File=logs/ssclj-${logfile.path}.log diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/app/server.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/app/server.clj index 6a75f355a..7cfb4585d 100644 --- a/ssclj/jar/src/com/sixsq/slipstream/ssclj/app/server.clj +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/app/server.clj @@ -24,7 +24,8 @@ [com.sixsq.slipstream.ssclj.app.graphite :as graphite] [com.sixsq.slipstream.db.impl :as db] [com.sixsq.slipstream.db.es.binding :as esb] - [com.sixsq.slipstream.ssclj.resources.common.dynamic-load :as resources])) + [com.sixsq.slipstream.ssclj.resources.common.dynamic-load :as resources] + [com.sixsq.slipstream.ssclj.util.zookeeper :as zku])) (defn- set-persistence-impl [] @@ -72,6 +73,8 @@ (esb/set-client! (esb/create-client)) + (zku/set-client! (zku/create-client)) + (set-persistence-impl) (resources/initialize) (let [handler (create-ring-handler)] diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/schema.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/schema.clj index 7bf8da80a..de800146b 100644 --- a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/schema.clj +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/schema.clj @@ -16,7 +16,7 @@ ;; additional resource actions have a URI prefix (def ^:const action-prefix (str cimi-schema-uri "action/")) (def ^:const prefixed-actions - #{:start :stop :restart :pause :suspend + #{:start :stop :restart :pause :suspend :terminate :export :import :capture :snapshot :forceSync :swapBackup :restore :enable :disable}) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/utils.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/utils.clj index 63272aee1..be123190a 100644 --- a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/utils.clj +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/common/utils.clj @@ -62,6 +62,17 @@ [m] (dissoc m :id :created :updated :resourceURI :operations)) +(defn time-now [] (time-fmt/unparse (:date-time time-fmt/formatters) (time/now))) + +(defn update-timestamps + "Sets the updated attribute and optionally the created attribute + in the request. The created attribute is only set if the existing value + is missing or evaluates to false." + [data] + (let [updated (time-now) + created (or (:created data) updated)] + (assoc data :created created :updated updated))) + (defn unparse-timestamp-datetime "Returns the string representation of the given timestamp." [^DateTime timestamp] diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment.clj new file mode 100644 index 000000000..91b9a24a3 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment.clj @@ -0,0 +1,214 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment + (:require + [clojure.spec.alpha :as s] + [com.sixsq.slipstream.ssclj.resources.spec.deployment] + [com.sixsq.slipstream.ssclj.resources.common.std-crud :as std-crud] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [com.sixsq.slipstream.ssclj.resources.common.crud :as crud] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.ssclj.resources.deployment-parameter :as dp] + [com.sixsq.slipstream.ssclj.middleware.authn-info-header :refer [create-identity-map]] + [com.sixsq.slipstream.ssclj.resources.deployment.state-machine :as dsm] + [com.sixsq.slipstream.ssclj.resources.deployment.utils :as du] + [com.sixsq.slipstream.auth.acl :as a] + [superstring.core :as str] + [ring.util.response :as r] + [com.sixsq.slipstream.util.response :as sr] + [com.sixsq.slipstream.db.impl :as db] + [clojure.tools.logging :as log] + [clojure.core.async :as async] + [clj-time.core :as time] + [com.sixsq.slipstream.ssclj.util.log :as logu] + [clj-http.client :as http]) + (:import (clojure.lang ExceptionInfo))) + +(def ^:const resource-name du/deployment-resource-name) + +(def ^:const resource-tag (keyword (str (str/camel-case resource-name) "s"))) + +(def ^:const resource-url du/deployment-resource-url) + +(def ^:const collection-name "DeploymentCollection") + +(def ^:const resource-uri (str c/slipstream-schema-uri resource-name)) + +(def ^:const collection-uri (str c/slipstream-schema-uri collection-name)) + +(def ^:const create-uri (str c/slipstream-schema-uri resource-name "Create")) + +(def collection-acl {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal "USER" + :type "ROLE" + :right "MODIFY"}]}) + +;; +;; multimethods for validation and operations +;; + +(def validate-fn (u/create-spec-validation-fn :cimi/deployment)) +(defmethod crud/validate resource-uri + [resource] + (validate-fn resource)) + +(defmethod crud/add-acl resource-uri + [resource request] + (a/add-acl resource request)) + +;; +;; validate create requests for subclasses of users +;; different create (registration) requests may take different inputs +;; +(defn dispatch-on-registration-method [resource] + (get-in resource [:deploymentTemplate :method])) + +(defmulti create-validate-subtype dispatch-on-registration-method) + +(defmethod create-validate-subtype :default + [resource] + (logu/log-and-throw-400 "missing or invalid DeploymentTemplate reference")) + +(defmethod crud/validate create-uri + [resource] + (create-validate-subtype resource)) + +;; +;; template processing +;; + +(defn dispatch-conversion + [resource _] + (:method resource)) + +(defmulti tpl->deployment dispatch-conversion) + +;; default implementation throws if the registration method is unknown +(defmethod tpl->deployment :default + [resource request] + (logu/log-and-throw-400 "missing or invalid DeploymentTemplate reference")) + +;; +;; CRUD operations +;; + +(defmethod crud/new-identifier resource-name + [json _] + json) + +(defn add-impl [{body :body :as request}] + (a/can-modify? {:acl collection-acl} request) + (let [new-deployment (-> body + (dissoc :created :updated :resourceURI :operations) + (crud/new-identifier resource-name) + (assoc :resourceURI resource-uri) + u/update-timestamps + (crud/add-acl request) + (assoc :state dsm/initializing-state)) + response (db/add resource-name (crud/validate new-deployment) {})] + response)) + + +(defmethod crud/add resource-name + [{:keys [body] :as request}] + (let [idmap {:identity (:identity request)} + desc-attrs (u/select-desc-keys body) + {:keys [id] :as body} (-> body + (assoc :resourceURI create-uri) + (update-in [:deploymentTemplate] dissoc :method) ;; forces use of template reference + (std-crud/resolve-hrefs idmap) + (update-in [:deploymentTemplate] merge desc-attrs) ;; validate desc attrs + (crud/validate) + (:deploymentTemplate) + (tpl->deployment request) + (merge desc-attrs))] ;; ensure desc attrs are added + (add-impl (assoc request :id id :body body)))) + +(def retrieve-impl (std-crud/retrieve-fn resource-name)) + +(defmethod crud/retrieve resource-name + [request] + (retrieve-impl request)) + +(def delete-impl (std-crud/delete-fn resource-name)) + +(defmethod crud/delete resource-name + [request] + (delete-impl request)) ;TODO cleanup of deployment parameter and in zk should also be done + +(def query-impl (std-crud/query-fn resource-name collection-acl collection-uri resource-tag)) + +(defmethod crud/query resource-name + [request] + (query-impl request)) + +;; +;; override the operations method to add describe action +;; + +(defmethod crud/set-operations resource-uri + [{:keys [id resourceURI] :as resource} request] + (let [href-start (str id "/start") + href-terminate (str id "/terminate") + start-op {:rel (:start c/action-uri) :href href-start} + terminate-op {:rel (:terminate c/action-uri) :href href-terminate}] + (try + (a/can-modify? resource request) + (let [ops (if (.endsWith resourceURI "Collection") + [{:rel (:add c/action-uri) :href id}] + [{:rel (:delete c/action-uri) :href id} + start-op + terminate-op])] + (assoc resource :operations ops)) + (catch Exception e + (if (.endsWith resourceURI "Collection") + (dissoc resource :operations) + (assoc resource :operations [start-op terminate-op])))))) + +;; +;; actions +;; + +(defn add-start-time [deployment] + (let [now (u/time-now)] + (assoc deployment :start-time now))) + +(defn add-end-time [deployment] + (let [now (u/time-now)] + (assoc deployment :end-time now))) + +(defmethod crud/do-action [resource-url "start"] + [{{uuid :uuid} :params identity :identity username :user-name :as request}] + (try + (let [current (-> (str (u/de-camelcase resource-name) "/" uuid) + (db/retrieve request) + (a/can-modify? request)) + deployment (-> current + (add-start-time) + (u/update-timestamps) + (crud/validate))] + (du/create-parameters identity current) + (http/post (str du/slipstream-java-endpoint "/run/" uuid) {:headers {"slipstream-authn-info" username} + "Accept" "application/json"}) + (db/edit deployment request)) + (catch ExceptionInfo ei + (ex-data ei)))) + +(defmethod crud/do-action [resource-url "terminate"] + [{{uuid :uuid} :params identity :identity username :user-name :as request}] + (try + (let [{current-state :state :as current} (-> (str (u/de-camelcase resource-name) "/" uuid) + (db/retrieve request) + (a/can-modify? request)) + {id :id new-state :state :as deployment} (-> current + (add-end-time) + (update :state (constantly dsm/cancelled-state)) + (u/update-timestamps) + (crud/validate))] + (http/delete (str du/slipstream-java-endpoint "/run/" uuid) {:headers {"slipstream-authn-info" username + "Accept" "application/json"}}) + (if (dsm/can-terminate? current-state) + (du/move-deployment-next-state id new-state) + (du/set-global-deployment-parameter id "state" dsm/cancelled-state)) ;TODO delete znode of deployment, to be done also for done state, fetch runtime-param of old run should not fetch from zookeeper + (db/edit deployment request)) + (catch ExceptionInfo ei + (ex-data ei)))) \ No newline at end of file diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/java_to_clj_deployment.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/java_to_clj_deployment.clj new file mode 100644 index 000000000..a7c93ec01 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/java_to_clj_deployment.clj @@ -0,0 +1,106 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment.java-to-clj-deployment + (:require [clojure.string :as str])) + + + +(defn is-category-image? [category] + (= category "Image")) + +(defn get-nodes-name [{{nodes-entry :entry} :nodes category :category :as module}] + (if (is-category-image? category) ["machine"] + (map (fn [{{name :name :as node} :node}] name) nodes-entry) + )) + +(defn extract-keep-running-value [{parameters :entry}] + (let [parameter-keep-running (filter #(= (:string %) "General.keep-running") parameters) + {{value :value} :parameter} (first parameter-keep-running)] + (when (some? value) value))) + +(defn extract-runtime-parameters-for-node [node-name {runtime-parameters :entry}] + (let [runtime-parameters-for-node (filter #(or (str/starts-with? (:string %) (str node-name ":")) + (str/starts-with? (:string %) (str node-name ".1:"))) + runtime-parameters) + runtime-parameters-for-node (filter #(not (contains? #{"cloudservice" "max-provisioning-failures" + "service-offer" "cpu.nb" "disk.GB" "ram.GB" + "multiplicity"} + (get-in % [:runtimeParameter :name]))) + runtime-parameters-for-node) + runtime-parameters-for-node-useful-data + (map + (fn [{{name :name description :description value + :content mapped-to :mappedRuntimeParameterNames} + :runtimeParameter :as runtime-parameter}] + (let [runtime-parameter (if (str/blank? mapped-to) + {:description description + :value value} + {:description description + :value value + :mapped-to (str/split mapped-to #",")})] + (list (keyword name) runtime-parameter))) runtime-parameters-for-node) + runtime-parameters-map (->> runtime-parameters-for-node-useful-data + (apply concat) + (apply assoc {}))] + {:runtime-parameters runtime-parameters-map})) + +(defn extract-parameters-for-node [node-name {parameters :entry}] + (let [parameters-for-node (filter #(str/starts-with? (:string %) (str node-name ":")) + parameters) + parameters-for-node (filter #(contains? #{"cloudservice" "max-provisioning-failures" + "service-offer" "cpu.nb" "disk.GB" "ram.GB" + "multiplicity" "run-build-recipes" "node.increment"} + (-> (get-in % [:parameter :name]) + (str/replace (re-pattern (str "^" node-name ":")) ""))) + parameters-for-node) + parameters-for-node-useful-data + (map + (fn [{{name :name description :description value :value} + :parameter :as parameter}] + (let [parameter {:description description + :value value} + name (str/replace name (re-pattern (str "^" node-name ":")) "")] + (list (keyword name) parameter))) parameters-for-node) + parameters-map (->> parameters-for-node-useful-data + (apply concat) + (apply assoc {}))] + {:parameters parameters-map})) + +(defn transform [{{uuid :uuid + state :state + type :type + category :category + module-resource-uri :moduleResourceUri + mutable :mutable + cloudservices :cloudservices + module :module + cloud-service-names :cloudServiceNames + runtime-parameters :runtimeParameters + parameters :parameters + } :run :as java-run}] + + (let [deployment {:id (str "deployment/" uuid) + :state state + :type type + :category category + :module-resource-uri module-resource-uri + :mutable mutable + :keep-running (extract-keep-running-value parameters)} + nodes-name (get-nodes-name module) + orchestrators-name (map #(str "orchestrator-" %) (str/split cloud-service-names #",")) + orchestrators-info (if (is-category-image? category) + nil + (->> orchestrators-name + (map #(list (keyword %) (extract-runtime-parameters-for-node + % runtime-parameters))) + (apply concat) + (apply assoc {}))) + nodes-info (->> nodes-name + (map #(list (keyword %) (conj (extract-runtime-parameters-for-node + % runtime-parameters) + (extract-parameters-for-node + % parameters) + ))) + (apply concat) + (apply assoc {})) + nodes-info (conj nodes-info orchestrators-info)] + + (assoc deployment :nodes nodes-info))) \ No newline at end of file diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/state_machine.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/state_machine.clj new file mode 100644 index 000000000..cf7b8acbb --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/state_machine.clj @@ -0,0 +1,62 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment.state-machine + "This namespace uses ZooKeeper to create a distributed system to host the state of a run. Each VM is represented + by an index node under its corresponding node. As each VM reports its current state completed, the corresponding + index znode (i.e. ZooKeeper node) is removed from the structure. When no node remains, it means all VMs have + reported, which means the state machine can move to its next state. + + This design includes the following important goals: + 1. state completion should be idem potent. This is important such that if the client has a doubt about the + completness of its call to report completion, it can be performed again, without risk in changing the the state + machine (e.g. reporting as completed the next state in the run) + 2. no pulling is required to get the next state transition, since the system includes a notification mechanism. + 3. the system is fast, with no loops nor expensive state investigation. It is even constant wrt the size of the run + 4. works in a share nothing pattern, meaning that this namespace can be distributed over the network. For this, the + new buddy-circle namespace is used to ensure automatic recovery of partial transition, is case of failure. This + means this namespace can be packaged as a micro-service, and deployed/removed as required, with no special + coordination required. + + The topology of the run is persisted as an edn structure inside the ./topology znode. This can be changed as nodes + come and go, for scalable deployments.") + +(def initializing-state "Initializing") +(def provisioning-state "Provisioning") +(def executing-state "Executing") +(def sending-report-state "SendingReports") +(def ready-state "Ready") +(def finalyzing-state "Finalizing") +(def done-state "Done") + +(def cancelled-state "Cancelled") +(def aborted-state "Aborted") +(def unknown-state "Unknown") + +(def state-machine + {initializing-state {:next-state provisioning-state + :valid-transition #{provisioning-state cancelled-state}} + provisioning-state {:next-state executing-state + :valid-transition #{executing-state cancelled-state}} + executing-state {:next-state sending-report-state + :valid-transition #{sending-report-state cancelled-state}} + sending-report-state {:next-state ready-state + :valid-transition #{ready-state cancelled-state}} + ready-state {:next-state provisioning-state + :valid-transition #{provisioning-state}} + finalyzing-state {:next-state done-state + :valid-transition #{done-state}} + done-state {:valid-transition #{done-state}}}) + +(defn is-completed? [current-state] + (contains? #{cancelled-state aborted-state done-state unknown-state} current-state)) + +(defn can-terminate? [current-state] + (contains? #{cancelled-state aborted-state done-state ready-state} current-state)) + +(defn get-next-state [current-state] + (-> (get state-machine current-state) + :next-state)) + +(defn is-valid-transition? [current-state next-state] + (-> (get state-machine current-state) + :valid-transition + (contains? next-state))) + diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/utils.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/utils.clj new file mode 100644 index 000000000..848d51e2e --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment/utils.clj @@ -0,0 +1,194 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment.utils + (:require + [com.sixsq.slipstream.auth.acl :as a] + [com.sixsq.slipstream.db.impl :as db] + [clojure.tools.logging :as log] + [clojure.stacktrace :as st] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [com.sixsq.slipstream.ssclj.resources.common.crud :as crud] + [com.sixsq.slipstream.ssclj.resources.common.std-crud :as std-crud] + [com.sixsq.slipstream.ssclj.middleware.authn-info-header :refer [create-identity-map]] + [com.sixsq.slipstream.ssclj.resources.zk.deployment.utils :as zdu] + [com.sixsq.slipstream.ssclj.resources.deployment.state-machine :as dsm] + [com.sixsq.slipstream.ssclj.util.zookeeper :as uzk] + [clojure.string :as string] + [environ.core :as env]) + (:import (clojure.lang ExceptionInfo))) + +(def ^:const deployment-resource-name "Deployment") + +(def ^:const deployment-resource-url (u/de-camelcase deployment-resource-name)) + +(def ^:const deployment-parameter-resource-name "DeploymentParameter") + +(def ^:const deployment-parameter-resource-url (u/de-camelcase deployment-parameter-resource-name)) + +(def ^:const deployment-parameter-resource-uri (str c/slipstream-schema-uri deployment-parameter-resource-name)) + +(def deployment-parameter-collection-acl {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal "USER" + :type "ROLE" + :right "MODIFY"}]}) + +(def slipstream-java-endpoint (or (env/env :slipstream-java-endpoint) "http://localhost:8182")) + +(def deployment-parameter-id-separator "_") + +(defn deployment-href-to-uuid [href] (string/replace-first href #"^deployment/" "")) + +(defn deployment-parameter-href + [{{deployment-href :href} :deployment node-name :node-name node-index + :node-index name :name :as deployment-parameter}] + (let [deployment-uuid (deployment-href-to-uuid deployment-href) + deployment-parameter-element (cond + (and deployment-uuid node-name node-index) [deployment-uuid node-name + node-index name] + (and deployment-uuid node-name) [deployment-uuid node-name name] + deployment-uuid [deployment-uuid name]) + deployment-parameter-path (string/join deployment-parameter-id-separator deployment-parameter-element)] + (string/join "/" [deployment-parameter-resource-url deployment-parameter-path]))) + +(defn set-global-deployment-parameter + [deployment-href parameter-name value] + (try + (let [deployment-parameter {:deployment {:href deployment-href} + :name parameter-name + :value value} + current (db/retrieve (deployment-parameter-href deployment-parameter) {}) + merged (-> current + (merge deployment-parameter) + (u/update-timestamps) + (crud/validate))] + (uzk/set-data (zdu/deployment-parameter-path merged) value) + (-> merged + (db/edit {}) + :body)) + (catch ExceptionInfo ei + (ex-data ei)))) + +(defn set-deployment-attribute + [deployment-href attribute-name value] + (try + (let [current-deployment (db/retrieve deployment-href {}) + merged-deployment (-> current-deployment + (merge {(keyword attribute-name) value}) + (u/update-timestamps) + (crud/validate))] + (set-global-deployment-parameter deployment-href attribute-name value) + (-> merged-deployment + (db/edit {}) + :body)) + (catch ExceptionInfo ei + (ex-data ei)))) + +(defn move-deployment-next-state [deployment-href current-state] + (zdu/check-deployment-lock-and-throw! deployment-href) + (zdu/lock-deployment-path deployment-href) + (let [next-state (dsm/get-next-state current-state) ;TODO final state what should be done? + deployment (set-deployment-attribute deployment-href "state" next-state)] + (doseq [n (:nodes deployment)] + (let [node-name (name (key n)) + multiplicity (read-string (get-in (val n) [:parameters :multiplicity :value] "1"))] + (doseq [i (range 1 (inc multiplicity))] + (uzk/create-all + (zdu/deployment-parameter-node-instance-state-path + deployment-href node-name i "complete") :persistent? true))))) + (zdu/unlock-deployment deployment-href)) + +(defn cancel-deployment [deployment-href] + (zdu/check-deployment-lock-and-throw! deployment-href) + (zdu/lock-deployment-path deployment-href) + (set-global-deployment-parameter deployment-href "state" dsm/cancelled-state) + () + (let [deployment (set-deployment-attribute deployment-href "state" dsm/cancelled-state)] + (zdu/unlock-deployment deployment-href) + deployment + )) + +(defn abort-deployment [deployment-href current-state] + (zdu/check-deployment-lock-and-throw! deployment-href) + (zdu/lock-deployment-path deployment-href) + (set-deployment-attribute deployment-href "abort" current-state) + (set-deployment-attribute deployment-href "state" dsm/aborted-state) + (zdu/unlock-deployment deployment-href)) + +(defn create-deployment-parameter [deployment-parameter] + (let [deployment-parameter (-> deployment-parameter + u/strip-service-attrs + (crud/new-identifier deployment-parameter-resource-name) + (assoc :resourceURI deployment-parameter-resource-uri) + u/update-timestamps + (crud/add-acl {}) + crud/validate) + value (:value deployment-parameter) + node-path (zdu/deployment-parameter-path deployment-parameter)] + (uzk/create-all node-path :persistent? true) + (uzk/set-data node-path value) + (when (and (= "complete" (:name deployment-parameter)) + (= "node-instance" (:type deployment-parameter))) + (uzk/create-all + (zdu/deployment-parameter-node-instance-state-path deployment-parameter) :persistent? true)) + (-> (db/add deployment-parameter-resource-name deployment-parameter {}) + :body))) + +(defn edit-deployment-parameter-impl + [{{uuid :uuid} :params body :body :as request}] + (let [current (-> (str deployment-parameter-resource-url "/" uuid) + (db/retrieve request) + (a/can-modify? request)) + merged (->> (dissoc body :type :deployment :node-name :node-index) + (merge current)) + value (:value merged) + parameter-name (:name merged) + deployment-href (get-in merged [:deployment :href]) + deployment-parameter (-> merged + (u/update-timestamps) + (crud/validate))] + (when value + (case (:type deployment-parameter) + "deployment" (set-deployment-attribute deployment-href parameter-name value) + "node-instance" (case parameter-name + "complete" (do + (zdu/check-deployment-lock-and-throw! deployment-href) + (zdu/check-same-state-and-throw! deployment-href value) + (zdu/complete-node-instance-state merged) + (when (zdu/all-nodes-completed-current-state? deployment-href) + (move-deployment-next-state deployment-href value))) + "abort" (do + (zdu/check-deployment-lock-and-throw! deployment-href) + (uzk/set-data (zdu/deployment-parameter-path deployment-parameter) value) + (abort-deployment deployment-href value)) + (uzk/set-data (zdu/deployment-parameter-path deployment-parameter) value)))) + (db/edit deployment-parameter request))) + +(defn create-parameters [identity {nodes :nodes deployment-href :id state :state category :category}] + (let [user (:current identity)] + (doseq [[gp-key gp-body] {:category {:description "Module category" :value category} + :complete {:description "Global complete flag, set when run completed" :value ""} + :abort {:description "Run abort flag, set when aborting" :value ""} + :state {:description "Global execution state" :value state} + :url-service {:description "Optional service URL for the deployment" :value ""} + :tags {:description "Tags (comma separated) or annotations for this VM" :value ""} + :recovery-mode {:description "Run abort flag, set when aborting" :value "false"}}] + (create-deployment-parameter + {:deployment {:href deployment-href} :name (name gp-key) :value (:value gp-body) :type "deployment" + :acl {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal user + :type "USER" + :right "VIEW"}]}})) + (doseq [[node-key node-params] nodes] + (let [multiplicity (read-string (get-in node-params [:parameters :multiplicity :value] "1"))] + (doseq [i (range 1 (inc multiplicity))] + (doseq [[rp-key rp-body] (:runtime-parameters node-params)] + (create-deployment-parameter + {:deployment {:href deployment-href} :node-name (name node-key) :node-index i :type "node-instance" + :name (clojure.string/replace (name rp-key) #"\." "-") :value (or (:value rp-body) "") + :description (:description rp-body) :acl {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal user + :type "USER" + :right "MODIFY"}]}}))))) + )) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_parameter.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_parameter.clj new file mode 100644 index 000000000..954853f1b --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_parameter.clj @@ -0,0 +1,141 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-parameter + (:require + [clojure.spec.alpha :as s] + [clojure.string :as string] + [com.sixsq.slipstream.ssclj.resources.spec.deployment-parameter] + [com.sixsq.slipstream.ssclj.resources.common.std-crud :as std-crud] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [com.sixsq.slipstream.ssclj.resources.common.crud :as crud] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.auth.acl :as a] + [superstring.core :as str] + [com.sixsq.slipstream.util.response :as r] + [com.sixsq.slipstream.db.impl :as db] + [clojure.tools.logging :as log] + [com.sixsq.slipstream.ssclj.util.log :as logu] + [com.sixsq.slipstream.ssclj.util.sse :as sse] + [clojure.core.async :as async] + [com.sixsq.slipstream.ssclj.util.zookeeper :as uzk] + [com.sixsq.slipstream.ssclj.resources.zk.deployment.utils :as zdu] + [com.sixsq.slipstream.ssclj.resources.deployment.utils :as du] + [cheshire.core :as json]) + (:import (clojure.lang ExceptionInfo))) + +(def ^:const resource-name du/deployment-parameter-resource-name) + +(def ^:const resource-tag (keyword (str (str/camel-case resource-name) "s"))) + +(def ^:const resource-url du/deployment-parameter-resource-url) + +(def ^:const collection-name "DeploymentParameterCollection") + +(def ^:const resource-uri du/deployment-parameter-resource-uri) + +(def ^:const collection-uri (str c/slipstream-schema-uri collection-name)) + +(def collection-acl du/deployment-parameter-collection-acl) + +;; +;; multimethods for validation and operations +;; + +(def validate-fn (u/create-spec-validation-fn :cimi/deployment-parameter)) +(defmethod crud/validate resource-uri + [resource] + (validate-fn resource)) + +(defmethod crud/add-acl resource-uri + [resource request] + (a/add-acl resource request)) + +;; +;; CRUD operations +;; + +(defmethod crud/new-identifier resource-name + [json resource-name] + (let [new-id (du/deployment-parameter-href json)] + (assoc json :id new-id))) + +(defn deployment-parameter-watch-fn [is-transiant] + (fn [event-ch id name {:keys [event-type path :as zk-event]}] + (when (= event-type :NodeDataChanged) + (let [deployment-parameter (db/retrieve id {}) + value (if is-transiant + (zdu/get-deployment-parameter-value deployment-parameter) + (zdu/get-deployment-parameter-value + deployment-parameter :watcher + (partial (deployment-parameter-watch-fn is-transiant) event-ch id name))) + deployment-parameter (assoc deployment-parameter :value value)] + (sse/send-event id name (json/generate-string deployment-parameter) event-ch) + (when is-transiant (async/close! event-ch)))))) + +(defn send-event-and-set-watcher + [event-ch watch-fn {id :id name :name :as deployment-parameter}] + (let [value (zdu/get-deployment-parameter-value deployment-parameter :watcher (partial watch-fn event-ch id name)) + deployment-parameter (assoc deployment-parameter :value value)] + (sse/send-event id name (json/generate-string deployment-parameter) event-ch))) + +(defn retrieve-deployment-parameter + [{{uuid :uuid} :params :as request}] + (try + (-> (str (u/de-camelcase resource-name) "/" uuid) + (db/retrieve request) + (a/can-view? request) + (crud/set-operations request)) + (catch ExceptionInfo ei + (ex-data ei)))) + +(def retrieve-sse-impl + (sse/event-channel-handler + (fn [request response raise event-ch] + (let [{id :id name :name :as deployment-parameter} (retrieve-deployment-parameter request) + node-path (zdu/deployment-parameter-path deployment-parameter)] + (send-event-and-set-watcher event-ch (deployment-parameter-watch-fn true) deployment-parameter))) + {:on-client-disconnect #(log/debug "sse/on-client-disconnect: " %)})) + +(def retrieve-json-impl (std-crud/retrieve-fn resource-name)) + +(defmethod crud/retrieve resource-name + [{{accept :accept} :headers :as request}] + (let [accept (if accept (-> accept + (string/replace #"\s" "") + (string/split #",") + set) #{}) + accept-json? (contains? accept "application/json") + accept-sse? (contains? accept "text/event-stream")] + (cond + (and accept-json? accept-sse?) retrieve-sse-impl + accept-json? retrieve-json-impl + accept-sse? retrieve-sse-impl + :else retrieve-json-impl))) + +(defmethod crud/edit resource-name + [request] + (du/edit-deployment-parameter-impl request)) + +(def delete-impl (std-crud/delete-fn resource-name)) + +(defmethod crud/delete resource-name + [request] + (delete-impl request)) + +(def query-sse-impl + (sse/event-channel-handler + (fn [request response raise event-ch] + (a/can-view? {:acl collection-acl} request) + (let [options (select-keys request [:identity :query-params :cimi-params :user-name :user-roles]) + [count-before-pagination entries] (db/query resource-name options) + transient-deployment-parameter-watch (deployment-parameter-watch-fn false) + send-event-and-set-watcher-partial (partial send-event-and-set-watcher + event-ch transient-deployment-parameter-watch)] + (doall (map send-event-and-set-watcher-partial entries)))) + {:on-client-disconnect #(log/debug "sse/on-client-disconnect: " %) :heartbeat-delay 10})) + +(def query-json-impl (std-crud/query-fn resource-name collection-acl collection-uri resource-tag)) + +(defmethod crud/query resource-name + [{{accept :accept} :headers :as request}] + (case accept + "text/event-stream" query-sse-impl + query-json-impl)) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_std.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_std.clj new file mode 100644 index 000000000..baed77b92 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_std.clj @@ -0,0 +1,37 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-std + (:require + [com.sixsq.slipstream.ssclj.resources.spec.deployment] + [com.sixsq.slipstream.ssclj.resources.spec.deployment-template-std] + [com.sixsq.slipstream.ssclj.resources.deployment.java-to-clj-deployment :as java-to-clj-deployment] + [com.sixsq.slipstream.ssclj.resources.deployment :as d] + [com.sixsq.slipstream.ssclj.resources.deployment-template-std :as dtpl] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [clj-http.client :as http] + [clojure.data.json :as json] + [com.sixsq.slipstream.ssclj.resources.deployment.utils :as du])) + +;; +;; validate the create resource +;; +(def create-validate-fn (u/create-spec-validation-fn :cimi/deployment-template.std-create)) +(defmethod d/create-validate-subtype dtpl/method + [resource] + (create-validate-fn resource)) + +;; +;; transform template into deployment resource +;; just strips method attribute and updates the resource URI +;; +(defmethod d/tpl->deployment dtpl/method + [{module :module :as resource} {username :user-name :as request}] + (let [java-deployment-location (-> (http/post (str du/slipstream-java-endpoint "/run") + {:headers {"slipstream-authn-info" username + "Accept" "application/json"} + :form-params {:refqname module :bypass-ssh-check true}}) + (get-in [:headers "Location"])) + java-deployment-json (-> (http/get java-deployment-location {:headers {"slipstream-authn-info" username + "Accept" "application/json"}}) + :body + (json/read-str :key-fn keyword))] + (java-to-clj-deployment/transform java-deployment-json))) + diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_template.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_template.clj new file mode 100644 index 000000000..19db6221e --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_template.clj @@ -0,0 +1,177 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-template + (:require + [clojure.spec.alpha :as s] + [clojure.tools.logging :as log] + [com.sixsq.slipstream.ssclj.resources.spec.deployment-template] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [com.sixsq.slipstream.ssclj.resources.common.crud :as crud] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.auth.acl :as a] + [com.sixsq.slipstream.util.response :as r]) + (:import (clojure.lang ExceptionInfo))) + +(def ^:const resource-tag :deploymentTemplates) + +(def ^:const resource-name "DeploymentTemplate") + +(def ^:const resource-url (u/de-camelcase resource-name)) + +(def ^:const collection-name "DeploymentTemplateCollection") + +(def ^:const resource-uri (str c/slipstream-schema-uri resource-name)) + +(def ^:const collection-uri (str c/slipstream-schema-uri collection-name)) + +(def collection-acl {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal "USER" + :type "ROLE" + :right "VIEW"}]}) + +;; +;; atom to keep track of the loaded DeploymentTemplate resources +;; +(def templates (atom {})) +(def descriptions (atom {})) + +(defn collection-wrapper-fn + "Specialized version of this function that removes the adding + of operations to the collection and entries. These are already + part of the stored resources." + [resource-name collection-acl collection-uri collection-key] + (fn [request entries] + (let [skeleton {:acl collection-acl + :resourceURI collection-uri + :id (u/de-camelcase resource-name)}] + (-> skeleton + (crud/set-operations request) + (assoc collection-key entries))))) + +(defn complete-resource + "Completes the given document with server-managed information: + resourceURI, timestamps, and operations. NOTE: The subtype + MUST provide an ACL for the template." + [{:keys [method] :as resource}] + (when method + (let [id (str resource-url "/" method) + href (str id "/describe") + ops [{:rel (:describe c/action-uri) :href href}]] + (-> resource + (merge {:id id + :resourceURI resource-uri + :operations ops}) + u/update-timestamps)))) + +(defn register + "Registers a given DeploymentTemplate resource and its description + with the server. The resource document (resource) and the description + (desc) must be valid. The key will be used to create the id of + the resource as 'deployment-template/key'." + [resource desc] + (when-let [{:keys [id] :as full-resource} (complete-resource resource)] + (swap! templates assoc id full-resource) + (log/info "loaded DeploymentTemplate" id) + (when desc + (let [acl (:acl full-resource) + full-desc (assoc desc :acl acl)] + (swap! descriptions assoc id full-desc)) + (log/info "loaded DeploymentTemplate description" id)))) + +;; +;; schemas +;; + +(def DeploymentTemplateDescription + (merge c/CommonParameterDescription + {:method {:displayName "Module reference URI" + :category "general" + :description "module to be used for the creation of a deployment" + :type "string" + :mandatory true + :readOnly true + :order 10}})) +;; +;; multimethods for validation +;; + +(defmulti validate-subtype + "Validates the given resource against the specific + DeploymentTemplate subtype schema." + :method) + +(defmethod validate-subtype :default + [resource] + (throw (ex-info (str "unknown DeploymentTemplate type: " (:method resource)) resource))) + +(defmethod crud/validate + resource-uri + [resource] + (validate-subtype resource)) + +;; +;; CRUD operations +;; + +(defmethod crud/add resource-name + [request] + (throw (r/ex-bad-method request))) + +(defmethod crud/retrieve resource-name + [{{uuid :uuid} :params :as request}] + (try + (let [id (str resource-url "/" uuid)] + (-> (get @templates id) + (a/can-view? request) + (r/json-response))) + (catch ExceptionInfo ei + (ex-data ei)))) + +;; must override the default implementation so that the +;; data can be pulled from the atom rather than the database +(defmethod crud/retrieve-by-id resource-url + [id] + (try + (get @templates id) + (catch ExceptionInfo ei + (ex-data ei)))) + +(defmethod crud/edit resource-name + [request] + (throw (r/ex-bad-method request))) + +(defmethod crud/delete resource-name + [request] + (throw (r/ex-bad-method request))) + +(defn- viewable? [request {:keys [acl] :as entry}] + (try + (a/can-view? {:acl acl} request) + (catch Exception _ + false))) + +(defmethod crud/query resource-name + [request] + (a/can-view? {:acl collection-acl} request) + (let [wrapper-fn (collection-wrapper-fn resource-name collection-acl collection-uri resource-tag) + entries (or (filter (partial viewable? request) (vals @templates)) []) + ;; FIXME: At least the paging options should be supported. + options (select-keys request [:identity :query-params :cimi-params :deployment-name :deployment-roles]) + count-before-pagination (count entries) + wrapped-entries (wrapper-fn request entries) + entries-and-count (assoc wrapped-entries :count count-before-pagination)] + (r/json-response entries-and-count))) + +;; +;; actions +;; +(defmethod crud/do-action [resource-url "describe"] + [{{uuid :uuid} :params :as request}] + (try + (let [id (str resource-url "/" uuid)] + (-> (get @descriptions id) + (a/can-view? request) + (r/json-response))) + (catch ExceptionInfo ei + (ex-data ei)))) + + diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_template_std.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_template_std.clj new file mode 100644 index 000000000..9e9d682bf --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/deployment_template_std.clj @@ -0,0 +1,59 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-template-std + (:require + [clojure.spec.alpha :as s] + [com.sixsq.slipstream.ssclj.resources.deployment-template :as p] + [com.sixsq.slipstream.ssclj.resources.spec.deployment-template] + [com.sixsq.slipstream.ssclj.resources.spec.deployment-template-std] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u])) + +(def ^:const method "standard") + +(def resource-acl {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal "ADMIN" + :type "ROLE" + :right "VIEW"} + {:principal "USER" + :type "ROLE" + :right "VIEW"} + ]}) + +;; +;; resource +;; +(def ^:const resource + {:method method + :name "Standard deployment" + :description "Direct creation of deployment" + :module "module" + :acl resource-acl}) + +;; +;; description +;; +(def ^:const desc + (merge p/DeploymentTemplateDescription + {:module {:displayName "Module" + :category "general" + :description "module" + :type "string" + :mandatory true + :readOnly false + :order 20}})) + +;; +;; initialization: register this User template +;; +(defn initialize + [] + (p/register resource desc)) + +;; +;; multimethods for validation +;; + +(def validate-fn (u/create-spec-validation-fn :cimi/deployment-template.std)) +(defmethod p/validate-subtype method + [resource] + (validate-fn resource)) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/common.cljc b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/common.cljc index 4022b0231..de006321d 100644 --- a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/common.cljc +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/common.cljc @@ -50,6 +50,8 @@ (s/def :cimi.core/resource-type :cimi.core/kebab-identifier) +(s/def :cimi.core/zero-or-pos-int #(and (int? %) (> % -1))) + ;; ;; A resource href is the concatenation of a resource type and resource identifier separated ;; with a slash. The later part is optional for singleton resources like the cloud-entry-point. diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment.cljc b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment.cljc new file mode 100644 index 000000000..1775ba591 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment.cljc @@ -0,0 +1,81 @@ +(ns com.sixsq.slipstream.ssclj.resources.spec.deployment + (:require + [clojure.spec.alpha :as s] + [clojure.spec.gen.alpha :as gen] + [clojure.string :as str] + [com.sixsq.slipstream.ssclj.util.spec :as su] + [com.sixsq.slipstream.ssclj.resources.spec.common :as c] + [clojure.spec.alpha :as s])) + +(s/def :cimi.deployment/id :cimi.core/resource-href) +(s/def :cimi.deployment/module-resource-uri :cimi.core/uri) +(s/def :cimi.deployment/type #{"Run" "Orchestration" "Machine"}) ;TODO rename +(s/def :cimi.deployment/category #{"Image" "Deployment"}) +(s/def :cimi.deployment/start-time :cimi.core/timestamp) +(s/def :cimi.deployment/end-time :cimi.core/timestamp) +(s/def :cimi.deployment/last-state-change-time :cimi.core/timestamp) +(s/def :cimi.deployment/mutable boolean?) +(s/def :cimi.deployment/keep-running (s/nilable string?)) +(s/def :cimi.deployment/tags (s/coll-of string?)) +(s/def :cimi.deployment/state #{"Initializing" "Provisioning" "Executing" "SendingReports" "Ready" "Finalizing" "Done" + "Cancelled" "Aborted" "Unknown"}) +(s/def :cimi.deployment/abort string?) + +(s/def :cimi.deployment.parameter/description string?) +(s/def :cimi.deployment.parameter/value (s/nilable string?)) + +(s/def :cimi.deployment/parameter (su/only-keys-maps {:opt-un [:cimi.deployment.parameter/description + :cimi.deployment.parameter/value]})) + +(s/def :cimi.deployment.node/cpu.nb :cimi.deployment/parameter) +(s/def :cimi.deployment.node/ram.GB :cimi.deployment/parameter) +(s/def :cimi.deployment.node/disk.GB :cimi.deployment/parameter) +(s/def :cimi.deployment.node/multiplicity :cimi.deployment/parameter) +(s/def :cimi.deployment.node/max-provisioning-failures :cimi.deployment/parameter) +(s/def :cimi.deployment.node/cloudservice :cimi.deployment/parameter) +(s/def :cimi.deployment.node/run-build-recipes :cimi.deployment/parameter) +(s/def :cimi.deployment.node/node.increment :cimi.deployment/parameter) +(s/def :cimi.deployment.node/service-offer :cimi.deployment/parameter) + +(s/def :cimi.deployment/parameters + (su/only-keys-maps + {:req-un [:cimi.deployment.node/cloudservice] + :opt-un [:cimi.deployment.node/multiplicity + :cimi.deployment.node/max-provisioning-failures + :cimi.deployment.node/cpu.nb + :cimi.deployment.node/ram.GB + :cimi.deployment.node/disk.GB + :cimi.deployment.node/run-build-recipes + :cimi.deployment.node/node.increment + :cimi.deployment.node/service-offer]})) + +(s/def :cimi.deployment.runtime-parameter/mapped-to (s/coll-of string?)) + +(s/def :cimi.deployment.node/runtime-parameter (su/only-keys-maps + {:opt-un [:cimi.deployment.parameter/description + :cimi.deployment.parameter/value + :cimi.deployment.runtime-parameter/mapped-to]})) + +(s/def :cimi.deployment/runtime-parameters + (su/constrained-map keyword? :cimi.deployment.node/runtime-parameter)) + +(s/def :cimi.deployment/node (su/only-keys-maps {:opt-un [:cimi.deployment/parameters + :cimi.deployment/runtime-parameters]})) + +(s/def :cimi.deployment/nodes (su/constrained-map keyword? :cimi.deployment/node)) + +(def deployment-attrs {:req-un [:cimi.deployment/id + :cimi.deployment/module-resource-uri + :cimi.deployment/type + :cimi.deployment/category + :cimi.deployment/mutable + :cimi.deployment/nodes + :cimi.deployment/state] + :opt-un [:cimi.deployment/start-time + :cimi.deployment/end-time + :cimi.deployment/last-state-change-time + :cimi.deployment/tags + :cimi.deployment/abort + :cimi.deployment/keep-running]}) + +(s/def :cimi/deployment (su/only-keys-maps c/common-attrs deployment-attrs)) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_parameter.cljc b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_parameter.cljc new file mode 100644 index 000000000..8dbb14945 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_parameter.cljc @@ -0,0 +1,25 @@ +(ns com.sixsq.slipstream.ssclj.resources.spec.deployment-parameter + (:require + [clojure.spec.alpha :as s] + [clojure.spec.gen.alpha :as gen] + [clojure.string :as str] + [com.sixsq.slipstream.ssclj.util.spec :as su] + [com.sixsq.slipstream.ssclj.resources.spec.common :as c])) + +(s/def :cimi.deployment-parameter/deployment :cimi.common/resource-link) +(s/def :cimi.deployment-parameter/name :cimi.core/nonblank-string) +(s/def :cimi.deployment-parameter/value string?) +(s/def :cimi.deployment-parameter/node-name :cimi.core/nonblank-string) +(s/def :cimi.deployment-parameter/node-index pos-int?) +(s/def :cimi.deployment-parameter/description string?) +(s/def :cimi.deployment-parameter/type #{"deployment" "node" "node-instance"}) + +(s/def :cimi/deployment-parameter + (su/only-keys-maps c/common-attrs + {:req-un [:cimi.deployment-parameter/deployment + :cimi.deployment-parameter/name + :cimi.deployment-parameter/type] + :opt-un [:cimi.deployment-parameter/node-name + :cimi.deployment-parameter/node-index + :cimi.deployment-parameter/description + :cimi.deployment-parameter/value]})) \ No newline at end of file diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_template.cljc b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_template.cljc new file mode 100644 index 000000000..58da230f3 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_template.cljc @@ -0,0 +1,36 @@ +(ns com.sixsq.slipstream.ssclj.resources.spec.deployment-template + (:require + [clojure.spec.alpha :as s] + [clojure.spec.gen.alpha :as gen] + [clojure.string :as str] + [com.sixsq.slipstream.ssclj.util.spec :as su] + [com.sixsq.slipstream.ssclj.resources.spec.common :as c])) + +;; All deployment templates must indicate the method used to create the deployment. +(s/def :cimi.deployment-template/method :cimi.core/identifier) + +(def deployment-template-regex #"^deployment-template/[a-zA-Z0-9]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$") +(s/def :cimi.deployment-template/href (s/and string? #(re-matches deployment-template-regex %))) + +;; +;; Keys specifications for deploymentTemplate resources. +;; As this is a "base class" for deploymentTemplate resources, there +;; is no sense in defining map resources for the resource itself. +;; + +(def deployment-template-keys-spec {:req-un [:cimi.deployment-template/method]}) + +(def deployment-template-keys-spec-opt {:opt-un [:cimi.deployment-template/method]}) + +(def resource-keys-spec + (su/merge-keys-specs [c/common-attrs + deployment-template-keys-spec])) + +(def create-keys-spec + (su/merge-keys-specs [c/create-attrs])) + +;; subclasses MUST provide the href to the template to use +(def template-keys-spec + (su/merge-keys-specs [c/template-attrs + deployment-template-keys-spec-opt])) + diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_template_std.cljc b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_template_std.cljc new file mode 100644 index 000000000..1ecd2571e --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/spec/deployment_template_std.cljc @@ -0,0 +1,28 @@ +(ns com.sixsq.slipstream.ssclj.resources.spec.deployment-template-std + (:require + [clojure.spec.alpha :as s] + [com.sixsq.slipstream.ssclj.util.spec :as su] + [com.sixsq.slipstream.ssclj.resources.spec.deployment-template :as ps])) + +(s/def :cimi.deployment-template.std/module :cimi.core/nonblank-string) + +(def deployment-template-keys-spec-req + {:req-un [:cimi.deployment-template.std/module]}) + +(def deployment-template-create-keys-spec-req + {:req-un [:cimi.deployment-template.std/module]}) + +;; Defines the contents of the std deploymentTemplate resource itself. +(s/def :cimi/deployment-template.std + (su/only-keys-maps ps/resource-keys-spec + deployment-template-keys-spec-req)) + +;; Defines the contents of the std template used in a create resource. +;; NOTE: The name must match the key defined by the resource, :deploymentTemplate here. +(s/def :cimi.deployment-template.std/deploymentTemplate + (su/only-keys-maps ps/template-keys-spec + deployment-template-create-keys-spec-req)) + +(s/def :cimi/deployment-template.std-create + (su/only-keys-maps ps/create-keys-spec + {:opt-un [:cimi.deployment-template.std/deploymentTemplate]})) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/zk/deployment/utils.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/zk/deployment/utils.clj new file mode 100644 index 000000000..d7fdab0a4 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/resources/zk/deployment/utils.clj @@ -0,0 +1,83 @@ +(ns com.sixsq.slipstream.ssclj.resources.zk.deployment.utils + (:require [com.sixsq.slipstream.ssclj.util.zookeeper :as uzk] + [clojure.string :as string] + [clojure.tools.logging :as log])) + +(def separator "/") +(def nodes-name "nodes") +(def lock-name "lock") + +(defn deployment-path [deployment-href] + (str separator deployment-href)) + +(defn lock-deployment-path [deployment-href] + (str (deployment-path deployment-href) separator lock-name)) + +(defn deployment-parameter-path + [{{deployment-href :href} :deployment node-name :node-name node-index :node-index name :name :as deployment-parameter}] + (->> (cond + (and node-name node-index) + (string/join separator [nodes-name node-name node-index name]) + (and deployment-href node-name) + (string/join separator [nodes-name node-name name]) + deployment-href name) + (str (deployment-path deployment-href) separator))) + + + +(defn deployment-parameter-node-instance-state-path + ([deployment-href node-name node-index parameter-name] + (let [node-instance-state-znode-id (string/join "_" [node-name node-index name])] + (str separator + (string/join separator [deployment-href "state" node-instance-state-znode-id])))) + ([{{deployment-href :href} :deployment node-name :node-name node-index :node-index name :name + :as deployment-parameter}] + (deployment-parameter-node-instance-state-path deployment-href node-name node-index name))) + +(defn lock-deployment + "Create a lock for the deployment. This should be used each time multi-operations on zookeeper are needed to complete + a request on deployment or deployment-parameter HTTP resource." + [deployment-href] + (uzk/create (lock-deployment-path deployment-href) :persistent? false)) + +(defn unlock-deployment + "Release the lock for the specified deployment." + [deployment-href] + (uzk/delete (lock-deployment-path deployment-href))) + +(defn is-deployment-locked? + "Check if the deployment is locked." + [deployment-href] + (not (nil? (uzk/exists (lock-deployment-path deployment-href))))) + +(defn check-deployment-lock-and-throw! + "Throw if deployment is locked." + [deployment-href] + (when (is-deployment-locked? deployment-href) ; TODO throw well known error code + (throw (Exception. "Deployment is locked, come back later!")))) + +(defn get-deployment-parameter-value [deployment-parameter & {:keys [watcher]}] + (if watcher + (uzk/get-data (deployment-parameter-path deployment-parameter) :watcher watcher) + (uzk/get-data (deployment-parameter-path deployment-parameter)))) + +(defn deployment-state-path [deployment-href] + (deployment-parameter-path {:deployment {:href deployment-href} :name "state"})) + +(defn get-deployment-state [deployment-href] + (uzk/get-data (deployment-state-path deployment-href))) + +(defn check-same-state-and-throw! + [deployment-href node-state] + (let [current-deployment-state (get-deployment-state deployment-href)] + (when-not (= node-state current-deployment-state) + (throw (Exception. + (str "State machine (state = " node-state + ") in different state from deployment state = " current-deployment-state "!")))))) + +(defn complete-node-instance-state [{state :value :as deployment-parameter}] + (uzk/delete (deployment-parameter-node-instance-state-path deployment-parameter)) + (uzk/set-data (deployment-parameter-path deployment-parameter) state)) + +(defn all-nodes-completed-current-state? [deployment-href] + (not (uzk/children (deployment-state-path deployment-href)))) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/util/sse.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/util/sse.clj new file mode 100644 index 000000000..76fffc8b5 --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/util/sse.clj @@ -0,0 +1,145 @@ +(ns com.sixsq.slipstream.ssclj.util.sse + (:require [clojure.core.async :as async] + [clojure.java.io :as io] + [clojure.string :as string] + [ring.core.protocols :as ring] + [ring.util.response :as ring-response] + [manifold.stream :as s] + [manifold.deferred :as d])) + +(def CRLF "\r\n") +(def EVENT_FIELD "event: ") +(def DATA_FIELD "data: ") +(def ID_FIELD "id: ") + +(defn mk-data + ([name data] + (mk-data name data nil)) + ([name data id] + (let [sb (StringBuilder.)] + (when name + (.append sb EVENT_FIELD) + (.append sb name) + (.append sb CRLF)) + + (doseq [part (string/split data #"\r?\n")] + (.append sb DATA_FIELD) + (.append sb part) + (.append sb CRLF)) + + (when (not-empty id) + (.append sb ID_FIELD) + (.append sb id) + (.append sb CRLF)) + + (.append sb CRLF) + (str sb)))) + +(defn send-event [id name data event-ch] + (let [event {:id id + :name name + :data data}] + (async/>!! event-ch event))) + +(defn- send-event-on-response-ch + [channel name data id put-fn raise] + (try + (put-fn channel (mk-data name data id)) + (catch Throwable t + (async/close! channel) + (raise t) + nil))) + +(defn- start-dispatch-loop + "Kicks off the loop that transfers data provided by the application + on `event-channel` to the HTTP infrastructure via + `response-channel`." + [{:keys [event-channel response-channel heartbeat-delay on-client-disconnect raise] :as opts}] + (async/go + (loop [] + (let [hb-timeout (async/timeout (* 1000 heartbeat-delay)) + [event port] (async/alts! [event-channel hb-timeout])] + (cond + (= port hb-timeout) + (when (async/>! response-channel CRLF) + (recur)) + + (and (some? event) (= port event-channel)) + (let [{event-name :name + event-data :data + event-id :id} + (if (map? event) + (reduce (fn [agg [k v]] (assoc agg k (str v))) {} event) + {:data (str event)})] + (when (send-event-on-response-ch response-channel event-name event-data event-id async/put! raise) + (recur)))))) + (async/close! event-channel) + (async/close! response-channel) + (when on-client-disconnect (on-client-disconnect)) + :done)) + +(defn- start-stream + "Starts an SSE event stream and initiates a heartbeat to keep the + connection alive. `stream-ready-fn` will be called with a core.async + channel and the initial response map. The application can then put + maps with keys :id, :name, and :data on that channel to cause SSE + events to be sent to the client. Either the client or the + application may close the channel to terminate and clean up the + event stream; the client closes it by closing the connection. The + SSE's core.async buffer can either be a fixed buffer (n) or a + 0-arity function that returns a buffer." + [{:keys [stream-ready-fn request respond raise heartbeat-delay bufferfn-or-n on-client-disconnect]}] + (let [heartbeat-delay (or heartbeat-delay 10) + bufferfn-or-n (or bufferfn-or-n 10) + response-channel (async/chan (if (fn? bufferfn-or-n) (bufferfn-or-n) bufferfn-or-n)) + response (-> (ring-response/response (s/->source response-channel)) + (ring-response/content-type "text/event-stream") ;; TODO: content negotiation? "text/event-stream+json"? + (ring-response/charset "UTF-8") + (ring-response/header "Connection" "close") + (ring-response/header "Cache-Control" "no-cache") + (ring-response/header "X-Accel-Buffering" "no")) ; X-Accel-Buffering needed to disable nginx buffering + ;; TODO: re-create CORS support as per original: (update-in [:headers] merge (:cors-headers context)) + event-channel (async/chan (if (fn? bufferfn-or-n) (bufferfn-or-n) bufferfn-or-n))] + (respond response) + (async/thread + (stream-ready-fn request response raise event-channel) + :done) + (start-dispatch-loop (merge {:event-channel event-channel + :response-channel response-channel + :heartbeat-delay heartbeat-delay + :raise raise} + (when on-client-disconnect + {:on-client-disconnect #(on-client-disconnect response)}))))) + +(defn ring->aleph [handler] + (fn [request] + (let [response (d/deferred)] + (handler request #(d/success! response %) #(d/error! response %)) + response))) + +(defn event-channel-handler + "Returns a Ring async handler which will start a Server Sent Event + stream with the requesting client. `stream-ready-fn` will be called + in a future, and will be passed the original request, the initial + response, the raise fn, and the event channel. + + Options: + + :buffer - either an integer buffer size, or a 0-arity function that + returns a buffer. + :heartbeat-delay - An integer number of seconds between heartbeat + messages + :on-client-disconnect - A function of one argument (the initial response) + which will be called when the client permanently disconnects." + ([stream-ready-fn] + (event-channel-handler stream-ready-fn {})) + ([stream-ready-fn {:keys [buffer heartbeat-delay on-client-disconnect]}] + (ring->aleph + (fn [request respond raise] + (start-stream {:stream-ready-fn stream-ready-fn + :request request + :respond respond + :raise raise + :heartbeat-delay heartbeat-delay + :bufferfn-or-n buffer + :on-client-disconnect on-client-disconnect}))))) diff --git a/ssclj/jar/src/com/sixsq/slipstream/ssclj/util/zookeeper.clj b/ssclj/jar/src/com/sixsq/slipstream/ssclj/util/zookeeper.clj new file mode 100644 index 000000000..aac9396eb --- /dev/null +++ b/ssclj/jar/src/com/sixsq/slipstream/ssclj/util/zookeeper.clj @@ -0,0 +1,64 @@ +(ns com.sixsq.slipstream.ssclj.util.zookeeper + (:require + [environ.core :as env] + [clojure.tools.logging :as log] + [zookeeper :as zk])) + +(def ^:dynamic *client*) + +(defn set-client! + [client] + (alter-var-root #'*client* (constantly client))) + +(defn create-client + "Creates a client connecting to an instance of Zookeeper + Parameters (host and port) are taken from environment variables." + [] + (let [zk-endpoints (or (env/env :zk-endpoints) "localhost:2181")] + + (log/info "creating zookeeper client:" zk-endpoints) + (zk/connect zk-endpoints :timeout-msec 60000))) + +(defn close-client [] + (zk/close *client*)) + +(defn create-all [path & options] + (apply zk/create-all *client* path options)) + +(defn create [path & options] + (apply zk/create *client* path options)) + +(defn get-znode [path & options] + (let [result (apply zk/data *client* path options) + data (:data result) + value (when (-> data nil? not) (String. data))] + (assoc result :data value))) + +(defn get-data [path & options] + (-> (apply get-znode path options) + :data)) + +(defn get-stat [path & options] + (-> (apply get-znode path options) + :stat)) + +(defn get-version + [path] + (-> (get-znode path) :stat :version)) + +(defn set-data [path value & options] + (let [version (get-version path) + data (.getBytes (str value) "UTF-8")] + (apply zk/set-data *client* path data version options))) + +(defn exists [path & options] + (apply zk/exists *client* path options)) + +(defn children [path & options] + (apply zk/children *client* path options)) + +(defn delete-all [path & options] + (apply zk/delete-all *client* path options)) + +(defn delete [path & options] + (apply zk/delete *client* path options)) diff --git a/ssclj/jar/test-resources/deployment-build-apache-testing.json b/ssclj/jar/test-resources/deployment-build-apache-testing.json new file mode 100644 index 000000000..8c1f6a413 --- /dev/null +++ b/ssclj/jar/test-resources/deployment-build-apache-testing.json @@ -0,0 +1,3242 @@ +{ + "run": { + "cloudServiceNamesList": { + "string": "nuvlabox-stanley-cohen", + "length": 1 + }, + "module": { + "outputParametersExpanded": { + "entry": [ + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "port", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "8080", + "name": "port", + "description": "Port", + "category": "Output", + "type": "String", + "mandatory": false, + "value": "8080", + "order_": 0, + "order": 0 + } + }, + { + "string": "ready", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ready", + "description": "Server ready to recieve connections", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + } + ], + "class": "java.util.HashMap" + }, + "cloudImageIdentifiers": { + "cloudImageIdentifier": { + "cloudImageIdentifier": 17, + "resourceUri": "module/examples/tutorials/service-testing/apache/5071/nuvlabox-stanley-cohen", + "cloudServiceName": "nuvlabox-stanley-cohen" + }, + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "notes": { + "length": 0 + }, + "parentUri": "module/examples/tutorials/service-testing", + "commit": { + "author": "sixsq", + "comment": "Allow to \"Build or run single image\" for public." + }, + "recipe": "#!/bin/sh -xe\r\n\r\napt-get update -y\r\napt-get install -y apache2", + "packagesExpanded": { + "class": "java.util.HashSet" + }, + "description": "Apache web server appliance with custom landing page.", + "moduleReferenceUri": "module/examples/images/ubuntu-14.04", + "targets": { + "class": "org.hibernate.collection.internal.PersistentSet", + "target": [ + { + "name": "onvmadd" + }, + { + "name": "report", + "content": "#!/bin/sh -x\r\ncp /var/log/apache2/access.log $SLIPSTREAM_REPORT_DIR\r\ncp /var/log/apache2/error.log $SLIPSTREAM_REPORT_DIR" + }, + { + "name": "execute", + "content": "#!/bin/sh -xe\r\n\r\ndefault_site_location='/etc/apache2/sites-available/default'\r\nif [ ! -f $default_site_location ]; then\r\n default_site_location='/etc/apache2/sites-available/000-default.conf'\r\nfi\r\n\r\nhttp_root_location='/var/www/html'\r\nif [ ! -d $http_root_location ]; then\r\n http_root_location='/var/www'\r\nfi\r\n\r\necho 'Hello from Apache deployed by SlipStream!' > $http_root_location/data.txt\r\n\r\nservice apache2 stop\r\nport=$(ss-get port)\r\n\r\nsed -i -e 's/^Listen.*$/Listen '$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^NameVirtualHost.*$/NameVirtualHost *:'$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^/' $default_site_location\r\nservice apache2 start\r\nss-set ready true\r\nurl=\"http://$(ss-get hostname):$port\"\r\nss-set url.service $url\r\nss-set ss:url.service $url\r\n" + }, + { + "name": "onvmremove" + } + ] + }, + "platform": "ubuntu", + "loginUser": "root", + "logoLink": "https://nuv.la/images/modules-logos/apache-httpd.svg", + "targetsExpanded": { + "targetExpanded": [ + { + "name": "report", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "report", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071", + "content": "#!/bin/sh -x\r\ncp /var/log/apache2/access.log $SLIPSTREAM_REPORT_DIR\r\ncp /var/log/apache2/error.log $SLIPSTREAM_REPORT_DIR", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "report", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "onvmremove", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmremove", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "onvmremove", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071", + "order": 2 + } + ] + }, + { + "name": "prerecipe", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "prerecipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "prerecipe", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071", + "order": 2 + } + ] + }, + { + "name": "recipe", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "recipe", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071", + "content": "#!/bin/sh -xe\r\n\r\napt-get update -y\r\napt-get install -y apache2", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "recipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "onvmadd", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmadd", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "onvmadd", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071", + "order": 2 + } + ] + }, + { + "name": "execute", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "execute", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071", + "content": "#!/bin/sh -xe\r\n\r\ndefault_site_location='/etc/apache2/sites-available/default'\r\nif [ ! -f $default_site_location ]; then\r\n default_site_location='/etc/apache2/sites-available/000-default.conf'\r\nfi\r\n\r\nhttp_root_location='/var/www/html'\r\nif [ ! -d $http_root_location ]; then\r\n http_root_location='/var/www'\r\nfi\r\n\r\necho 'Hello from Apache deployed by SlipStream!' > $http_root_location/data.txt\r\n\r\nservice apache2 stop\r\nport=$(ss-get port)\r\n\r\nsed -i -e 's/^Listen.*$/Listen '$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^NameVirtualHost.*$/NameVirtualHost *:'$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^/' $default_site_location\r\nservice apache2 start\r\nss-set ready true\r\nurl=\"http://$(ss-get hostname):$port\"\r\nss-set url.service $url\r\nss-set ss:url.service $url\r\n", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "execute", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "content": "#!/bin/bash -xe\r\n\r\n# set the service url to SSH url\r\nurl=$(ss-get --timeout=180 url.ssh)\r\nss-set url.service \"${url}\"\r\nss-set ss:url.service \"${url}\"\r\n\r\n", + "order": 1 + } + ] + } + ], + "class": "java.util.HashSet" + }, + "class": "com.sixsq.slipstream.persistence.ImageModule", + "creation": "2013-12-03 16:04:03.426 UTC", + "authz": { + "owner": "sixsq", + "groupMembers": { + "string": [ + "elegoff", + "khaled", + "konstan", + "lionel", + "loomis", + "meb", + "cjdcsixsq" + ], + "class": "java.util.ArrayList" + }, + "ownerGet": true, + "ownerDelete": true, + "groupPost": true, + "publicPost": true, + "publicCreateChildren": false, + "ownerCreateChildren": true, + "publicGet": true, + "inheritedGroupMembers": true, + "ownerPost": true, + "groupCreateChildren": false, + "publicPut": false, + "groupGet": true, + "groupDelete": false, + "ownerPut": true, + "publicDelete": false, + "groupPut": true + }, + "buildStates": { + "class": "java.util.HashSet", + "buildState": [ + { + "builtOn": "", + "moduleUri": "module/examples/images/ubuntu-14.04/13947" + }, + { + "builtOn": "nuvlabox-stanley-cohen", + "moduleUri": "module/examples/tutorials/service-testing/apache/5071" + } + ] + }, + "isLatestVersion": false, + "prerecipe": "", + "resourceUri": "module/examples/tutorials/service-testing/apache/5071", + "packages": { + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "version": 5071, + "inputParametersExpanded": { + "class": "java.util.HashMap" + }, + "deleted": false, + "name": "examples/tutorials/service-testing/apache", + "lastModified": "2016-08-05 08:32:47.92 UTC", + "isBase": false, + "category": "Image", + "shortName": "apache", + "parameters": { + "entry": [ + { + "string": "nuvlabox-albert-einstein.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-albert-einstein.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-albert-einstein", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-demo.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-demo.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-de1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-de1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr1.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "cyclone-fr1.disks.bus.type", + "description": "VM disks bus type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-arthur-harden.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-arthur-harden.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "exoscale-ch-gva.disk", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "10G", + "name": "exoscale-ch-gva.disk", + "description": "Size of the root disk", + "category": "exoscale-ch-gva", + "type": "Enum", + "mandatory": true, + "value": "10G", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G" + ], + "length": 5 + } + } + }, + { + "string": "nuvlabox-demo.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-demo.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-max-born.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-born.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-arthur-harden.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-arthur-harden.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-arthur-harden", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "cyclone-fr1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr1.instance.type", + "description": "Cloud instance type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "m1.small", + "c1.medium", + "m1.large", + "m1.xlarge", + "c1.xlarge", + "t1.micro", + "standard.xsmall" + ], + "length": 7 + } + } + }, + { + "string": "ec2-ap-northeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-northeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-northeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "ec2-us-west-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-southeast-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-arthur-harden.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-cecil-powell.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-cecil-powell.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-stanley-cohen.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "ec2-sa-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-sa-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-sa-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "ultimum-cz1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ultimum-cz1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-northeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-northeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-northeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-carl-cori.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-bertil-ohlin.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-bertil-ohlin.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-cecil-powell.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-cecil-powell.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-stanley-cohen.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-stanley-cohen.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-max-planck.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-planck.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-max-planck", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-christiane-nusslein-volhard.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-fr2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-fr2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-henry-dunant.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-henry-dunant.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "ec2-ap-southeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-james-chadwick.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-henry-dunant.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-henry-dunant.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-bertil-ohlin.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-bertil-ohlin.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-bertil-ohlin", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ec2-us-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-born.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-born.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "cyclone-fr1.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "exoscale-ch-gva.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-gva.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-gva", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-planck.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-max-planck.instance.type", + "description": "Instance type", + "category": "nuvlabox-max-planck", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-james-chadwick.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "nuvlabox-james-chadwick.disks.bus.type", + "description": "VM disks bus type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-max-born.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-born.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-max-born", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ec2-eu-central-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-central-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-central-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-james-chadwick.instance.type", + "description": "Instance type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-max-planck.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-planck.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ultimum-cz1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic", + "name": "ultimum-cz1.instance.type", + "description": "Instance type (flavor)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "Basic", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-carl-cori.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-carl-cori.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-carl-cori", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-henry-dunant.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-henry-dunant.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-henry-dunant", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-james-chadwick.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-james-chadwick.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "ec2-sa-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-sa-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-sa-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-james-chadwick.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-james-chadwick", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-carl-cori.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-carl-cori.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-albert-einstein.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-us-west-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "nuvlabox-demo.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-demo.instance.type", + "description": "Instance type", + "category": "nuvlabox-demo", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "azure-west-europe.forwarded.ports", + "parameter": { + "instructions": "Ports that will be forwarded from the public IP of the Azure cloud service. The port 22 (SSH) on Linux machines and the port 3389 (RDP) on Windows machines are already forwarded", + "readonly": false, + "isSet": false, + "name": "azure-west-europe.forwarded.ports", + "description": "Forwarded ports (comma separated list)", + "category": "azure-west-europe", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-stanley-cohen.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-stanley-cohen.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-stanley-cohen", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "exoscale-ch-gva.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Small", + "name": "exoscale-ch-gva.instance.type", + "description": "Cloud instance type", + "category": "exoscale-ch-gva", + "type": "Enum", + "mandatory": true, + "value": "Small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge", + "Mega", + "Titan" + ], + "length": 9 + } + } + }, + { + "string": "extra.disk.volatile", + "parameter": { + "readonly": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-arthur-harden.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "port", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "8080", + "name": "port", + "description": "Port", + "category": "Output", + "type": "String", + "mandatory": false, + "value": "8080", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-demo.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-demo.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-demo", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-albert-einstein.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-albert-einstein.instance.type", + "description": "Instance type", + "category": "nuvlabox-albert-einstein", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "cyclone-fr2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr2.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-demo.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-demo.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-christiane-nusslein-volhard.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-albert-einstein.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-stanley-cohen.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-stanley-cohen.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-cecil-powell.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-cecil-powell.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-cecil-powell", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-max-born.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-born.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-fr1.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.ram", + "description": "Amount of RAM, in GB", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-dk.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-dk.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-dk", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-de1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small_Linux", + "name": "cyclone-de1.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "m1.small_Linux", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-carl-cori.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-ap-southeast-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "cyfronet-pl1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyfronet-pl1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "network", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Public", + "name": "network", + "description": "Network type", + "category": "Cloud", + "type": "Enum", + "mandatory": true, + "value": "Public", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Public", + "Private" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-henry-dunant.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-henry-dunant.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "azure-west-europe.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic_A0", + "name": "azure-west-europe.instance.type", + "description": "Machine size", + "category": "azure-west-europe", + "type": "Enum", + "mandatory": true, + "value": "Basic_A0", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Basic_A0", + "Basic_A1", + "Basic_A2", + "Basic_A3", + "Basic_A4", + "ExtraSmall", + "Small", + "Medium", + "Large", + "ExtraLarge", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "Standard_D1", + "Standard_D2", + "Standard_D3", + "Standard_D4", + "Standard_D11", + "Standard_D12", + "Standard_D13", + "Standard_D14" + ], + "length": 25 + } + } + }, + { + "string": "ready", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ready", + "description": "Server ready to recieve connections", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ec2-us-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "nuvlabox-bertil-ohlin.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-bertil-ohlin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-cecil-powell.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-cecil-powell.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-james-chadwick.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-james-chadwick.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ec2-eu-west.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-west.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-west", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "exoscale-ch-dk.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Micro", + "name": "exoscale-ch-dk.instance.type", + "description": "Cloud instance type", + "category": "exoscale-ch-dk", + "type": "Enum", + "mandatory": true, + "value": "Micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge", + "Mega", + "Titan" + ], + "length": 9 + } + } + }, + { + "string": "nuvlabox-max-planck.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-planck.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "softlayer-it-mil01.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "2 CPU, 2GB ram, 100GB", + "name": "softlayer-it-mil01.instance.type", + "description": "Instance type (flavor)", + "category": "softlayer-it-mil01", + "type": "String", + "mandatory": true, + "value": "2 CPU, 2GB ram, 100GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-southeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "cyfronet-pl1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "CPU-1.RAM-512MB.DISK-10GB", + "name": "cyfronet-pl1.instance.type", + "description": "Instance type (flavor)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "CPU-1.RAM-512MB.DISK-10GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-west.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-west", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-planck.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-planck.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-eu-central-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-central-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-central-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "exoscale-ch-dk.disk", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "10G", + "name": "exoscale-ch-dk.disk", + "description": "Size of the root disk", + "category": "exoscale-ch-dk", + "type": "Enum", + "mandatory": true, + "value": "10G", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G" + ], + "length": 5 + } + } + }, + { + "string": "ec2-us-west-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-us-west-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + } + }, + "lastStateChangeTime": "2017-03-20 13:38:17.66 UTC", + "groups": "nuvlabox-stanley-cohen:machine", + "resourceUri": "run/380798cb-bb04-41e4-8498-d8ee090e1643", + "type": "Machine", + "uuid": "380798cb-bb04-41e4-8498-d8ee090e1643", + "nodeNames": "machine,orchestrator-nuvlabox-stanley-cohen", + "deleted": false, + "moduleResourceUri": "module/examples/tutorials/service-testing/apache/5071", + "mutable": false, + "runtimeParameters": { + "entry": [ + { + "string": "machine:disk.detach.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.detach.device", + "description": "Name of the block device to detach from the VM during vertical scaling", + "type": "String", + "key": "machine:disk.detach.device", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:instanceid", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "instanceid", + "description": "Cloud instance id", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:instanceid", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "119", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "machine:cloudservice", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "cloudservice", + "description": "Cloud Service where the node resides", + "type": "String", + "key": "machine:cloudservice", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "nuvlabox-stanley-cohen", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:ready", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "ready", + "description": "Server ready to recieve connections", + "type": "String", + "key": "machine:ready", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Run abort flag, set when aborting", + "type": "String", + "key": "ss:abort", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-stanley-cohen.custom.vm.template", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.custom.vm.template", + "description": "Additional custom VM template", + "type": "String", + "key": "machine:nuvlabox-stanley-cohen.custom.vm.template", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:scale.state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.state", + "description": "Defined scalability state", + "type": "String", + "key": "machine:scale.state", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "creating", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:cloudservice", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "cloudservice", + "description": "Cloud Service where the node resides", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:cloudservice", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "nuvlabox-stanley-cohen", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "machine:disk.attached.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attached.device", + "description": "Attached device name after the VM's vertical scaling", + "type": "String", + "key": "machine:disk.attached.device", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:scale.iaas.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.iaas.done", + "description": "Orchestrator sets to 'true' after scaling the node instance", + "type": "String", + "key": "machine:scale.iaas.done", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:vmstate", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "vmstate", + "description": "State of the VM, according to the cloud layer", + "type": "String", + "key": "machine:vmstate", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Unknown", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:vmstate", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "vmstate", + "description": "State of the VM, according to the cloud layer", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:vmstate", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Unknown", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "machine:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "complete", + "description": "'true' when current state is completed", + "type": "String", + "key": "machine:complete", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:port", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "port", + "description": "Port", + "type": "String", + "key": "machine:port", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "8080", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "complete", + "description": "Global complete flag, set when run completed", + "type": "String", + "key": "ss:complete", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "url.service", + "description": "Optional service URL for the deployment", + "type": "String", + "key": "ss:url.service", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "url.service", + "description": "Optional service URL for virtual machine", + "type": "String", + "key": "machine:url.service", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:image.platform", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.platform", + "description": "Platform (eg: ubuntu, windows)", + "type": "String", + "key": "machine:image.platform", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "ubuntu", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "complete", + "description": "'true' when current state is completed", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:complete", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "url.service", + "description": "Optional service URL for virtual machine", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:url.service", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-stanley-cohen.cpu", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-stanley-cohen.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "type": "String", + "key": "machine:nuvlabox-stanley-cohen.cpu", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "1", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:url.ssh", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.ssh", + "description": "SSH URL to connect to virtual machine", + "type": "String", + "key": "machine:url.ssh", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "ssh://root@172.16.0.15", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "state", + "description": "Global execution state", + "type": "String", + "key": "ss:state", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Done", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:is.orchestrator", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "is.orchestrator", + "description": "True if it's an orchestrator", + "type": "String", + "key": "machine:is.orchestrator", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:groups", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "groups", + "description": "Comma separated node groups", + "type": "String", + "key": "ss:groups", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "nuvlabox-stanley-cohen:machine", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:tags", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "tags", + "description": "Comma separated tag values", + "type": "String", + "key": "ss:tags", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:url.ssh", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.ssh", + "description": "SSH URL to connect to virtual machine", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:url.ssh", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "ssh://root@172.16.0.14", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:is.orchestrator", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "is.orchestrator", + "description": "True if it's an orchestrator", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:is.orchestrator", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "true", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "ss:category", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "category", + "description": "Module category", + "type": "String", + "key": "ss:category", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Image", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-stanley-cohen.is.firewall", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-stanley-cohen.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "type": "String", + "key": "machine:nuvlabox-stanley-cohen.is.firewall", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:statecustom", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "statecustom", + "description": "Custom state", + "type": "String", + "key": "machine:statecustom", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Image saved !", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "hostname", + "description": "hostname/ip of the image", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:hostname", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "172.16.0.14", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-stanley-cohen.network.specific.name", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.network.specific.name", + "description": "Network name", + "type": "String", + "key": "machine:nuvlabox-stanley-cohen.network.specific.name", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:recovery.mode", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "recovery.mode", + "description": "Run abort flag, set when aborting", + "type": "String", + "key": "ss:recovery.mode", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:disk.attach.size", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attach.size", + "description": "Size of the extra disk to attach to the VM during vertical scaling", + "type": "String", + "key": "machine:disk.attach.size", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:pre.scale.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "pre.scale.done", + "description": "Node instance sets to 'true' after running pre-scale script", + "type": "String", + "key": "machine:pre.scale.done", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:instanceid", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "instanceid", + "description": "Cloud instance id", + "type": "String", + "key": "machine:instanceid", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "120", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:network", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "network", + "description": "Network type", + "type": "String", + "key": "machine:network", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Public", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-stanley-cohen.ram", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-stanley-cohen.ram", + "description": "Amount of RAM, in GB", + "type": "String", + "key": "machine:nuvlabox-stanley-cohen.ram", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "0.5", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:max.iaas.workers", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "max.iaas.workers", + "description": "Max number of concurrently provisioned VMs by orchestrator", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:max.iaas.workers", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "7", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Machine abort flag, set when aborting", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:abort", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + }, + { + "string": "machine:hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "hostname", + "description": "hostname/ip of the image", + "type": "String", + "key": "machine:hostname", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "172.16.0.15", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Machine abort flag, set when aborting", + "type": "String", + "key": "machine:abort", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:extra.disk.volatile", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "type": "String", + "key": "machine:extra.disk.volatile", + "creation": "2017-03-20 13:36:04.970 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:image.id", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.id", + "description": "Cloud image id", + "type": "String", + "key": "machine:image.id", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "d88f85a9489e5c05aa2f06a4a878826f", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-stanley-cohen:statecustom", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "statecustom", + "description": "Custom state", + "type": "String", + "key": "orchestrator-nuvlabox-stanley-cohen:statecustom", + "creation": "2017-03-20 13:36:04.970 UTC", + "content": "Provisioning of node instances requested [2017-03-20T13:37:01Z]. Time took to provision 0h00m10s.", + "group": "orchestrator-nuvlabox-stanley-cohen", + "mapsOthers": false + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "cloudServiceNames": "nuvlabox-stanley-cohen", + "startTime": "2017-03-20 13:36:04.904 UTC", + "state": "Done", + "endTime": "2017-03-20 13:38:17.66 UTC", + "category": "Image", + "user": "khaled", + "parameters": { + "entry": [ + { + "string": "machine:cloudservice", + "parameter": { + "readonly": false, + "name": "machine:cloudservice", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "nuvlabox-stanley-cohen", + "order_": 0, + "order": 0 + } + }, + { + "string": "General.keep-running", + "parameter": { + "readonly": false, + "name": "General.keep-running", + "description": "Keep running after deployment", + "category": "General", + "type": "String", + "mandatory": false, + "value": "always", + "order_": 0, + "order": 0 + } + }, + { + "string": "garbage_collected", + "parameter": { + "readonly": false, + "name": "garbage_collected", + "description": "true if the Run was already garbage collected", + "category": "General", + "type": "String", + "mandatory": false, + "value": "false", + "order_": 0, + "order": 0 + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "creation": "2017-03-20 13:36:04.904 UTC" + } +} \ No newline at end of file diff --git a/ssclj/jar/test-resources/deployment-image-wordpress-testing.json b/ssclj/jar/test-resources/deployment-image-wordpress-testing.json new file mode 100644 index 000000000..2d4ef8d26 --- /dev/null +++ b/ssclj/jar/test-resources/deployment-image-wordpress-testing.json @@ -0,0 +1,3271 @@ +{ + "run": { + "cloudServiceNamesList": { + "string": "nuvlabox-bertil-ohlin", + "length": 1 + }, + "module": { + "outputParametersExpanded": { + "entry": [ + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "admin_password", + "parameter": { + "readonly": false, + "isSet": false, + "name": "admin_password", + "description": "admin password", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "mysql_password", + "parameter": { + "readonly": false, + "isSet": false, + "name": "mysql_password", + "description": "MySQL password", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + } + ], + "class": "java.util.HashMap" + }, + "cloudImageIdentifiers": { + "cloudImageIdentifier": [ + { + "cloudImageIdentifier": 4, + "resourceUri": "module/apps/WordPress/wordpress/3842/nuvlabox-demo", + "cloudServiceName": "nuvlabox-demo" + }, + { + "cloudImageIdentifier": 8, + "resourceUri": "module/apps/WordPress/wordpress/3842/nuvlabox-bertil-ohlin", + "cloudServiceName": "nuvlabox-bertil-ohlin" + } + ], + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "notes": { + "length": 0 + }, + "parentUri": "module/apps/WordPress", + "commit": { + "author": "lionel", + "comment": "Fixed the path to the php module" + }, + "recipe": "#!/bin/bash -x\r\n\r\nfunction ss-display {\r\n $(which ss-display) \"$1\" || echo \"$1\"\r\n}\r\n\r\nset -e\r\n\r\nss-display \"Updating package index\"\r\napt-get clean\r\napt-get update\r\n\r\nss-display \"Installing WordPress manifest\"\r\npuppet module install hunner-wordpress\r\npuppet module install puppetlabs-apache\r\n\r\ncat > httpd.pp << 'EOF'\r\nclass { 'apache': \r\n mpm_module => 'prefork',\r\n}\r\n\r\napache::vhost { 'wordpres':\r\n vhost_name => '*',\r\n port => 8080,\r\n docroot => '/opt/wordpress',\r\n}\r\n\r\napache::mod { 'php5': }\r\n\r\nEOF\r\n\r\nss-display \"Configuring Apache\"\r\npuppet apply -v httpd.pp\r\n\r\nln -s ../mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf\r\necho 'LoadModule php5_module /usr/lib/apache2/modules/libphp5.so' > /etc/apache2/mods-available/php5.load \r\n\r\nservice apache2 restart\r\n\r\n", + "packagesExpanded": { + "packageExpanded": [ + { + "name": "curl" + }, + { + "name": "libapache2-mod-php5" + }, + { + "name": "php5-mcrypt" + }, + { + "name": "mysql-server" + }, + { + "name": "puppet-common" + }, + { + "name": "php5" + }, + { + "name": "php5-mysql" + }, + { + "name": "mysql-client" + } + ], + "class": "java.util.HashSet" + }, + "description": "Installs and configures WordPress using Puppet", + "moduleReferenceUri": "module/examples/images/ubuntu-14.04", + "targets": { + "class": "org.hibernate.collection.internal.PersistentSet", + "target": [ + { + "name": "onvmremove" + }, + { + "name": "report" + }, + { + "name": "onvmadd" + }, + { + "name": "execute", + "content": "#!/bin/bash -x\r\n\r\nset -e\r\nset -x\r\n\r\nexport admin_username=admin\r\nexport admin_password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12)\r\nexport admin_email=$(ss-get admin_email)\r\nexport wordpress_title=$(ss-get wordpress_title)\r\nexport mysql_password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12)\r\nexport public_hostname=$(ss-get hostname)\r\n\r\nss-set -- mysql_password $mysql_password\r\nss-set -- admin_password $admin_password\r\n\r\ncat > wp.pp << EOF\r\nclass { 'wordpress':\r\n wp_owner => 'www-data',\r\n wp_group => 'www-data',\r\n db_user => 'wordpress',\r\n db_password => '$(mysql_password)'\r\n}\r\nEOF\r\n\r\nss-display \"Installing WordPress\"\r\npuppet apply -v wp.pp\r\n\r\nss-display \"Configuring WordPress\"\r\n\r\nbase_url=\"http://${public_hostname}:8080\"\r\nurl=\"${base_url}/wp-admin/install.php?step=2\"\r\n\r\n# quote the title since it can contain spaces\r\n/usr/bin/curl \\\r\n --data-urlencode \"weblog_title=${wordpress_title}\" \\\r\n -d \"user_name=${admin_username}\" \\\r\n -d \"admin_password=${admin_password}\" \\\r\n -d \"admin_password2=${admin_password}\" \\\r\n -d \"admin_email=${admin_email}\" \\\r\n -d \"blog_public=1\" -v ${url} >> /tmp/curl.out\r\n\r\nss-set ss:url.service \"${base_url}\"\r\nss-set url.service \"${base_url}\"\r\n\r\nss-display \"WordPress ready to go!\"\r\n\r\n" + } + ] + }, + "platform": "ubuntu", + "loginUser": "root", + "logoLink": "https://nuv.la/images/modules-logos/wordpress.svg", + "targetsExpanded": { + "targetExpanded": [ + { + "name": "report", + "subTarget": [ + { + "moduleShortName": "wordpress", + "name": "report", + "moduleUri": "module/apps/WordPress/wordpress/3842", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "report", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "prerecipe", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "prerecipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "wordpress", + "name": "prerecipe", + "moduleUri": "module/apps/WordPress/wordpress/3842", + "order": 2 + } + ] + }, + { + "name": "onvmadd", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmadd", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "wordpress", + "name": "onvmadd", + "moduleUri": "module/apps/WordPress/wordpress/3842", + "order": 2 + } + ] + }, + { + "name": "recipe", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "recipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "wordpress", + "name": "recipe", + "moduleUri": "module/apps/WordPress/wordpress/3842", + "content": "#!/bin/bash -x\r\n\r\nfunction ss-display {\r\n $(which ss-display) \"$1\" || echo \"$1\"\r\n}\r\n\r\nset -e\r\n\r\nss-display \"Updating package index\"\r\napt-get clean\r\napt-get update\r\n\r\nss-display \"Installing WordPress manifest\"\r\npuppet module install hunner-wordpress\r\npuppet module install puppetlabs-apache\r\n\r\ncat > httpd.pp << 'EOF'\r\nclass { 'apache': \r\n mpm_module => 'prefork',\r\n}\r\n\r\napache::vhost { 'wordpres':\r\n vhost_name => '*',\r\n port => 8080,\r\n docroot => '/opt/wordpress',\r\n}\r\n\r\napache::mod { 'php5': }\r\n\r\nEOF\r\n\r\nss-display \"Configuring Apache\"\r\npuppet apply -v httpd.pp\r\n\r\nln -s ../mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf\r\necho 'LoadModule php5_module /usr/lib/apache2/modules/libphp5.so' > /etc/apache2/mods-available/php5.load \r\n\r\nservice apache2 restart\r\n\r\n", + "order": 2 + } + ] + }, + { + "name": "execute", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "execute", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "content": "#!/bin/bash -xe\r\n\r\n# set the service url to SSH url\r\nurl=$(ss-get --timeout=180 url.ssh)\r\nss-set url.service \"${url}\"\r\nss-set ss:url.service \"${url}\"\r\n\r\n", + "order": 1 + }, + { + "moduleShortName": "wordpress", + "name": "execute", + "moduleUri": "module/apps/WordPress/wordpress/3842", + "content": "#!/bin/bash -x\r\n\r\nset -e\r\nset -x\r\n\r\nexport admin_username=admin\r\nexport admin_password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12)\r\nexport admin_email=$(ss-get admin_email)\r\nexport wordpress_title=$(ss-get wordpress_title)\r\nexport mysql_password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12)\r\nexport public_hostname=$(ss-get hostname)\r\n\r\nss-set -- mysql_password $mysql_password\r\nss-set -- admin_password $admin_password\r\n\r\ncat > wp.pp << EOF\r\nclass { 'wordpress':\r\n wp_owner => 'www-data',\r\n wp_group => 'www-data',\r\n db_user => 'wordpress',\r\n db_password => '$(mysql_password)'\r\n}\r\nEOF\r\n\r\nss-display \"Installing WordPress\"\r\npuppet apply -v wp.pp\r\n\r\nss-display \"Configuring WordPress\"\r\n\r\nbase_url=\"http://${public_hostname}:8080\"\r\nurl=\"${base_url}/wp-admin/install.php?step=2\"\r\n\r\n# quote the title since it can contain spaces\r\n/usr/bin/curl \\\r\n --data-urlencode \"weblog_title=${wordpress_title}\" \\\r\n -d \"user_name=${admin_username}\" \\\r\n -d \"admin_password=${admin_password}\" \\\r\n -d \"admin_password2=${admin_password}\" \\\r\n -d \"admin_email=${admin_email}\" \\\r\n -d \"blog_public=1\" -v ${url} >> /tmp/curl.out\r\n\r\nss-set ss:url.service \"${base_url}\"\r\nss-set url.service \"${base_url}\"\r\n\r\nss-display \"WordPress ready to go!\"\r\n\r\n", + "order": 2 + } + ] + }, + { + "name": "onvmremove", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmremove", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "wordpress", + "name": "onvmremove", + "moduleUri": "module/apps/WordPress/wordpress/3842", + "order": 2 + } + ] + } + ], + "class": "java.util.HashSet" + }, + "class": "com.sixsq.slipstream.persistence.ImageModule", + "creation": "2013-11-16 07:43:14.5 UTC", + "authz": { + "owner": "sixsq", + "groupMembers": { + "string": [ + "khaled", + "konstan", + "lionel", + "loomis", + "meb", + "rob", + "stef", + "cjdcsixsq" + ], + "class": "java.util.ArrayList" + }, + "ownerGet": true, + "ownerDelete": true, + "groupPost": true, + "publicPost": true, + "publicCreateChildren": false, + "ownerCreateChildren": true, + "publicGet": true, + "inheritedGroupMembers": true, + "ownerPost": true, + "groupCreateChildren": false, + "publicPut": false, + "groupGet": true, + "groupDelete": false, + "ownerPut": true, + "publicDelete": false, + "groupPut": true + }, + "buildStates": { + "class": "java.util.HashSet", + "buildState": [ + { + "builtOn": "nuvlabox-demo,nuvlabox-bertil-ohlin", + "moduleUri": "module/apps/WordPress/wordpress/3842" + }, + { + "builtOn": "", + "moduleUri": "module/examples/images/ubuntu-14.04/13947" + } + ] + }, + "isLatestVersion": true, + "prerecipe": "", + "resourceUri": "module/apps/WordPress/wordpress/3842", + "published": { + "publicationDate": "2016-06-16 08:39:13.172 UTC" + }, + "packages": { + "package": [ + { + "name": "curl" + }, + { + "name": "libapache2-mod-php5" + }, + { + "name": "php5-mcrypt" + }, + { + "name": "mysql-server" + }, + { + "name": "puppet-common" + }, + { + "name": "php5" + }, + { + "name": "php5-mysql" + }, + { + "name": "mysql-client" + } + ], + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "version": 3842, + "inputParametersExpanded": { + "entry": [ + { + "string": "admin_email", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "admin@example.com", + "name": "admin_email", + "description": "admin email", + "category": "Input", + "type": "String", + "mandatory": false, + "value": "admin@example.com", + "order_": 0, + "order": 0 + } + }, + { + "string": "wordpress_title", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Change Me Please", + "name": "wordpress_title", + "description": "Title (name) to give to the WordPress instance", + "category": "Input", + "type": "String", + "mandatory": false, + "value": "Change Me Please", + "order_": 0, + "order": 0 + } + } + ], + "class": "java.util.HashMap" + }, + "deleted": false, + "name": "apps/WordPress/wordpress", + "lastModified": "2016-06-16 08:39:13.172 UTC", + "isBase": false, + "category": "Image", + "shortName": "wordpress", + "parameters": { + "entry": [ + { + "string": "nuvlabox-albert-einstein.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-albert-einstein.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-albert-einstein", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-demo.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-demo.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-de1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-de1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "admin_email", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "admin@example.com", + "name": "admin_email", + "description": "admin email", + "category": "Input", + "type": "String", + "mandatory": false, + "value": "admin@example.com", + "order_": 0, + "order": 0 + } + }, + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr1.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "cyclone-fr1.disks.bus.type", + "description": "VM disks bus type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-arthur-harden.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-arthur-harden.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "exoscale-ch-gva.disk", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "10G", + "name": "exoscale-ch-gva.disk", + "description": "Size of the root disk", + "category": "exoscale-ch-gva", + "type": "Enum", + "mandatory": true, + "value": "10G", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G" + ], + "length": 5 + } + } + }, + { + "string": "nuvlabox-demo.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-demo.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-born.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-born.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-arthur-harden.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-arthur-harden.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-arthur-harden", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "cyclone-fr1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr1.instance.type", + "description": "Cloud instance type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "m1.small", + "c1.medium", + "m1.large", + "m1.xlarge", + "c1.xlarge", + "t1.micro", + "standard.xsmall" + ], + "length": 7 + } + } + }, + { + "string": "ec2-us-west-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-northeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-northeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-northeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "ec2-ap-southeast-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-arthur-harden.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-cecil-powell.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-cecil-powell.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-stanley-cohen.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "ec2-sa-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-sa-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-sa-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "ultimum-cz1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ultimum-cz1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-northeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-northeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-northeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-carl-cori.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-bertil-ohlin.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-bertil-ohlin.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-cecil-powell.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-cecil-powell.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-stanley-cohen.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-stanley-cohen.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-max-planck.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-planck.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-max-planck", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-christiane-nusslein-volhard.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-fr2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-fr2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-henry-dunant.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-henry-dunant.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "ec2-ap-southeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-james-chadwick.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-henry-dunant.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-henry-dunant.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-bertil-ohlin.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-bertil-ohlin.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-bertil-ohlin", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ec2-us-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-born.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-born.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "cyclone-fr1.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "exoscale-ch-gva.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-gva.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-gva", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-planck.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-max-planck.instance.type", + "description": "Instance type", + "category": "nuvlabox-max-planck", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-james-chadwick.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "nuvlabox-james-chadwick.disks.bus.type", + "description": "VM disks bus type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-max-born.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-born.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-max-born", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ec2-eu-central-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-central-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-central-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-james-chadwick.instance.type", + "description": "Instance type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-max-planck.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-planck.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ultimum-cz1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic", + "name": "ultimum-cz1.instance.type", + "description": "Instance type (flavor)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "Basic", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-carl-cori.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-carl-cori.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-carl-cori", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-henry-dunant.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-henry-dunant.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-henry-dunant", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-james-chadwick.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-james-chadwick.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "ec2-sa-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-sa-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-sa-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-james-chadwick.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-james-chadwick", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-carl-cori.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-carl-cori.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-albert-einstein.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-us-west-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "nuvlabox-demo.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-demo.instance.type", + "description": "Instance type", + "category": "nuvlabox-demo", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "mysql_password", + "parameter": { + "readonly": false, + "isSet": false, + "name": "mysql_password", + "description": "MySQL password", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "azure-west-europe.forwarded.ports", + "parameter": { + "instructions": "Ports that will be forwarded from the public IP of the Azure cloud service. The port 22 (SSH) on Linux machines and the port 3389 (RDP) on Windows machines are already forwarded", + "readonly": false, + "isSet": false, + "name": "azure-west-europe.forwarded.ports", + "description": "Forwarded ports (comma separated list)", + "category": "azure-west-europe", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-stanley-cohen.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-stanley-cohen.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-stanley-cohen", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "exoscale-ch-gva.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Small", + "name": "exoscale-ch-gva.instance.type", + "description": "Cloud instance type", + "category": "exoscale-ch-gva", + "type": "Enum", + "mandatory": true, + "value": "Small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge" + ], + "length": 7 + } + } + }, + { + "string": "extra.disk.volatile", + "parameter": { + "readonly": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "admin_password", + "parameter": { + "readonly": false, + "isSet": false, + "name": "admin_password", + "description": "admin password", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-arthur-harden.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-demo.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-demo.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-demo", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-albert-einstein.instance.type", + "description": "Instance type", + "category": "nuvlabox-albert-einstein", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "cyclone-fr2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr2.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-demo.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-demo.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-christiane-nusslein-volhard.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-albert-einstein.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "nuvlabox-stanley-cohen.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-stanley-cohen.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-cecil-powell.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-cecil-powell.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-cecil-powell", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-max-born.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-born.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-fr1.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.ram", + "description": "Amount of RAM, in GB", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-dk.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-dk.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-dk", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-de1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-de1.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-carl-cori.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-ap-southeast-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "cyfronet-pl1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyfronet-pl1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "network", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Public", + "name": "network", + "description": "Network type", + "category": "Cloud", + "type": "Enum", + "mandatory": true, + "value": "Public", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Public", + "Private" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-henry-dunant.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-henry-dunant.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "azure-west-europe.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic_A0", + "name": "azure-west-europe.instance.type", + "description": "Machine size", + "category": "azure-west-europe", + "type": "Enum", + "mandatory": true, + "value": "Basic_A0", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Basic_A0", + "Basic_A1", + "Basic_A2", + "Basic_A3", + "Basic_A4", + "ExtraSmall", + "Small", + "Medium", + "Large", + "ExtraLarge", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "Standard_D1", + "Standard_D2", + "Standard_D3", + "Standard_D4", + "Standard_D11", + "Standard_D12", + "Standard_D13", + "Standard_D14" + ], + "length": 25 + } + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ec2-us-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "nuvlabox-bertil-ohlin.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-bertil-ohlin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-cecil-powell.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-cecil-powell.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-eu-west.security.group", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west.security.group", + "description": "Security groups (comma separated list)", + "category": "ec2-eu-west", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-james-chadwick.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ec2-eu-west.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-west.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-west", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "exoscale-ch-dk.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Micro", + "name": "exoscale-ch-dk.instance.type", + "description": "Cloud instance type", + "category": "exoscale-ch-dk", + "type": "Enum", + "mandatory": true, + "value": "Micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge" + ], + "length": 7 + } + } + }, + { + "string": "nuvlabox-max-planck.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-planck.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "order_": 100, + "order": 100 + } + }, + { + "string": "softlayer-it-mil01.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "2 CPU, 2GB ram, 100GB", + "name": "softlayer-it-mil01.instance.type", + "description": "Instance type (flavor)", + "category": "softlayer-it-mil01", + "type": "String", + "mandatory": true, + "value": "2 CPU, 2GB ram, 100GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-southeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "cyfronet-pl1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "CPU-1.RAM-512MB.DISK-10GB", + "name": "cyfronet-pl1.instance.type", + "description": "Instance type (flavor)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "CPU-1.RAM-512MB.DISK-10GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-west.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-west", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-planck.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-planck.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-eu-central-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-central-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-central-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "exoscale-ch-dk.disk", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "10G", + "name": "exoscale-ch-dk.disk", + "description": "Size of the root disk", + "category": "exoscale-ch-dk", + "type": "Enum", + "mandatory": true, + "value": "10G", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G" + ], + "length": 5 + } + } + }, + { + "string": "ec2-us-west-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed<\/code> to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-us-west-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.micro", + "t2.small", + "t2.medium", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "g2.2xlarge", + "g2.8xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 42 + } + } + }, + { + "string": "wordpress_title", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Change Me Please", + "name": "wordpress_title", + "description": "Title (name) to give to the WordPress instance", + "category": "Input", + "type": "String", + "mandatory": false, + "value": "Change Me Please", + "order_": 0, + "order": 0 + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + } + }, + "lastStateChangeTime": "2017-04-04 06:46:58.571 UTC", + "groups": "nuvlabox-bertil-ohlin:machine", + "resourceUri": "run/0e0fca32-1bbb-40e3-b2cd-2d97a318694a", + "type": "Run", + "uuid": "0e0fca32-1bbb-40e3-b2cd-2d97a318694a", + "nodeNames": "machine", + "deleted": false, + "moduleResourceUri": "module/apps/WordPress/wordpress/3842", + "mutable": false, + "runtimeParameters": { + "entry": [ + { + "string": "machine:disk.detach.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.detach.device", + "description": "Name of the block device to detach from the VM during vertical scaling", + "type": "String", + "key": "machine:disk.detach.device", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:cloudservice", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "cloudservice", + "description": "Cloud Service where the node resides", + "type": "String", + "key": "machine:cloudservice", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "nuvlabox-bertil-ohlin", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-bertil-ohlin.cpu", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-bertil-ohlin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "type": "String", + "key": "machine:nuvlabox-bertil-ohlin.cpu", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "1", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Run abort flag, set when aborting", + "type": "String", + "key": "ss:abort", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:scale.state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.state", + "description": "Defined scalability state", + "type": "String", + "key": "machine:scale.state", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "operational", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:disk.attached.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attached.device", + "description": "Attached device name after the VM's vertical scaling", + "type": "String", + "key": "machine:disk.attached.device", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:scale.iaas.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.iaas.done", + "description": "Orchestrator sets to 'true' after scaling the node instance", + "type": "String", + "key": "machine:scale.iaas.done", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:vmstate", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "vmstate", + "description": "State of the VM, according to the cloud layer", + "type": "String", + "key": "machine:vmstate", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "Unknown", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "complete", + "description": "'true' when current state is completed", + "type": "String", + "key": "machine:complete", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "complete", + "description": "Global complete flag, set when run completed", + "type": "String", + "key": "ss:complete", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.service", + "description": "Optional service URL for the deployment", + "type": "String", + "key": "ss:url.service", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "http://172.16.0.13:8080", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.service", + "description": "Optional service URL for virtual machine", + "type": "String", + "key": "machine:url.service", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "http://172.16.0.13:8080", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:image.platform", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.platform", + "description": "Platform (eg: ubuntu, windows)", + "type": "String", + "key": "machine:image.platform", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "ubuntu", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-bertil-ohlin.is.firewall", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-bertil-ohlin.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "type": "String", + "key": "machine:nuvlabox-bertil-ohlin.is.firewall", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:admin_email", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "admin_email", + "description": "admin email", + "type": "String", + "key": "machine:admin_email", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "admin@example.com", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:url.ssh", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.ssh", + "description": "SSH URL to connect to virtual machine", + "type": "String", + "key": "machine:url.ssh", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "ssh://root@172.16.0.13", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:wordpress_title", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "wordpress_title", + "description": "Title (name) to give to the WordPress instance", + "type": "String", + "key": "machine:wordpress_title", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "Change Me Please 2", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "state", + "description": "Global execution state", + "type": "String", + "key": "ss:state", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "Done", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:is.orchestrator", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "is.orchestrator", + "description": "True if it's an orchestrator", + "type": "String", + "key": "machine:is.orchestrator", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-bertil-ohlin.network.specific.name", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.network.specific.name", + "description": "Network name", + "type": "String", + "key": "machine:nuvlabox-bertil-ohlin.network.specific.name", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:groups", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "groups", + "description": "Comma separated node groups", + "type": "String", + "key": "ss:groups", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "nuvlabox-bertil-ohlin:machine", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:tags", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "tags", + "description": "Comma separated tag values", + "type": "String", + "key": "ss:tags", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:category", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "category", + "description": "Module category", + "type": "String", + "key": "ss:category", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "Image", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:statecustom", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "statecustom", + "description": "Custom state", + "type": "String", + "key": "machine:statecustom", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "WordPress ready to go!", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-bertil-ohlin.custom.vm.template", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.custom.vm.template", + "description": "Additional custom VM template", + "type": "String", + "key": "machine:nuvlabox-bertil-ohlin.custom.vm.template", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "ss:recovery.mode", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "recovery.mode", + "description": "Run abort flag, set when aborting", + "type": "String", + "key": "ss:recovery.mode", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "false", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "machine:admin_password", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "admin_password", + "description": "admin password", + "type": "String", + "key": "machine:admin_password", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "8rsBZBM659jK", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:disk.attach.size", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attach.size", + "description": "Size of the extra disk to attach to the VM during vertical scaling", + "type": "String", + "key": "machine:disk.attach.size", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:nuvlabox-bertil-ohlin.ram", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-bertil-ohlin.ram", + "description": "Amount of RAM, in GB", + "type": "String", + "key": "machine:nuvlabox-bertil-ohlin.ram", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "0.5", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:pre.scale.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "pre.scale.done", + "description": "Node instance sets to 'true' after running pre-scale script", + "type": "String", + "key": "machine:pre.scale.done", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "false", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:instanceid", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "instanceid", + "description": "Cloud instance id", + "type": "String", + "key": "machine:instanceid", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "23", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:network", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "network", + "description": "Network type", + "type": "String", + "key": "machine:network", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "Public", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "hostname", + "description": "hostname/ip of the image", + "type": "String", + "key": "machine:hostname", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "172.16.0.13", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Machine abort flag, set when aborting", + "type": "String", + "key": "machine:abort", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:mysql_password", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "mysql_password", + "description": "MySQL password", + "type": "String", + "key": "machine:mysql_password", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "AX9ytTh2vWF4", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:extra.disk.volatile", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "type": "String", + "key": "machine:extra.disk.volatile", + "creation": "2017-04-03 12:15:08.626 UTC", + "group": "machine", + "mapsOthers": false + } + }, + { + "string": "machine:image.id", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.id", + "description": "Cloud image id", + "type": "String", + "key": "machine:image.id", + "creation": "2017-04-03 12:15:08.626 UTC", + "content": "8", + "group": "machine", + "mapsOthers": false + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "cloudServiceNames": "nuvlabox-bertil-ohlin", + "startTime": "2017-04-03 12:15:08.539 UTC", + "state": "Done", + "endTime": "2017-04-04 06:46:58.571 UTC", + "category": "Image", + "user": "khaled", + "parameters": { + "entry": [ + { + "string": "machine:wordpress_title", + "parameter": { + "readonly": false, + "name": "machine:wordpress_title", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "Change Me Please 2", + "order_": 0, + "order": 0 + } + }, + { + "string": "machine:run-build-recipes", + "parameter": { + "readonly": false, + "name": "machine:run-build-recipes", + "description": "Define if the SlipStream executor should run build recipes.", + "category": "General", + "type": "String", + "mandatory": false, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "machine:cloudservice", + "parameter": { + "readonly": false, + "name": "machine:cloudservice", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "nuvlabox-bertil-ohlin", + "order_": 0, + "order": 0 + } + }, + { + "string": "General.keep-running", + "parameter": { + "readonly": false, + "name": "General.keep-running", + "description": "Keep running after deployment", + "category": "General", + "type": "String", + "mandatory": false, + "value": "always", + "order_": 0, + "order": 0 + } + }, + { + "string": "garbage_collected", + "parameter": { + "readonly": false, + "name": "garbage_collected", + "description": "true if the Run was already garbage collected", + "category": "General", + "type": "String", + "mandatory": false, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "machine:admin_email", + "parameter": { + "readonly": false, + "name": "machine:admin_email", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "admin@example.com", + "order_": 0, + "order": 0 + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "creation": "2017-04-03 12:15:08.539 UTC" + } +} \ No newline at end of file diff --git a/ssclj/jar/test-resources/deployment-service-testing.json b/ssclj/jar/test-resources/deployment-service-testing.json new file mode 100644 index 000000000..ff17af395 --- /dev/null +++ b/ssclj/jar/test-resources/deployment-service-testing.json @@ -0,0 +1,11271 @@ +{ + "run": { + "cloudServiceNamesList": { + "string": "nuvlabox-carl-cori", + "length": 1 + }, + "module": { + "isLatestVersion": true, + "parentUri": "module/examples/tutorials/service-testing", + "commit": { + "author": "super", + "comment": "update image ids" + }, + "description": "Deployment binding the apache server and the test client node(s).", + "resourceUri": "module/examples/tutorials/service-testing/system/1940", + "version": 1940, + "targets": { + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "deleted": false, + "logoLink": "", + "nodes": { + "entry": [ + { + "node": { + "multiplicity": 1, + "image": { + "outputParametersExpanded": { + "entry": [ + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "port", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "8080", + "name": "port", + "description": "Port", + "category": "Output", + "type": "String", + "mandatory": false, + "value": "8080", + "order_": 0, + "order": 0 + } + }, + { + "string": "ready", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ready", + "description": "Server ready to recieve connections", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + } + ], + "class": "java.util.HashMap" + }, + "cloudImageIdentifiers": { + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "notes": { + "length": 0 + }, + "parentUri": "module/examples/tutorials/service-testing", + "commit": { + "author": "lionel", + "comment": "Updated instance type for cyclone-de1" + }, + "recipe": "#!/bin/sh -xe\r\n\r\napt-get update -y\r\napt-get install -y apache2\r\n", + "packagesExpanded": { + "class": "java.util.HashSet" + }, + "description": "Apache web server appliance with custom landing page.", + "moduleReferenceUri": "module/examples/images/ubuntu-14.04", + "targets": { + "class": "org.hibernate.collection.internal.PersistentSet", + "target": [ + { + "name": "report", + "content": "#!/bin/sh -x\r\ncp /var/log/apache2/access.log $SLIPSTREAM_REPORT_DIR\r\ncp /var/log/apache2/error.log $SLIPSTREAM_REPORT_DIR" + }, + { + "name": "onvmremove" + }, + { + "name": "execute", + "content": "#!/bin/sh -xe\r\n\r\ndefault_site_location='/etc/apache2/sites-available/default'\r\nif [ ! -f $default_site_location ]; then\r\n default_site_location='/etc/apache2/sites-available/000-default.conf'\r\nfi\r\n\r\nhttp_root_location='/var/www/html'\r\nif [ ! -d $http_root_location ]; then\r\n http_root_location='/var/www'\r\nfi\r\n\r\necho 'Hello from Apache deployed by SlipStream!' > $http_root_location/data.txt\r\n\r\nservice apache2 stop\r\nport=$(ss-get port)\r\n\r\nsed -i -e 's/^Listen.*$/Listen '$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^NameVirtualHost.*$/NameVirtualHost *:'$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^/' $default_site_location\r\nservice apache2 start\r\nss-set ready true\r\nurl=\"http://$(ss-get hostname):$port\"\r\nss-set url.service $url\r\nss-set ss:url.service $url\r\n" + }, + { + "name": "prescale" + }, + { + "name": "onvmadd" + }, + { + "name": "postscale" + } + ] + }, + "platform": "ubuntu", + "loginUser": "root", + "logoLink": "https://nuv.la/images/modules-logos/apache-httpd.svg", + "targetsExpanded": { + "targetExpanded": [ + { + "name": "report", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "report", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "report", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "content": "#!/bin/sh -x\r\ncp /var/log/apache2/access.log $SLIPSTREAM_REPORT_DIR\r\ncp /var/log/apache2/error.log $SLIPSTREAM_REPORT_DIR", + "order": 2 + } + ] + }, + { + "name": "postscale", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "postscale", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "postscale", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "order": 2 + } + ] + }, + { + "name": "execute", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "execute", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "content": "#!/bin/sh -xe\r\n\r\ndefault_site_location='/etc/apache2/sites-available/default'\r\nif [ ! -f $default_site_location ]; then\r\n default_site_location='/etc/apache2/sites-available/000-default.conf'\r\nfi\r\n\r\nhttp_root_location='/var/www/html'\r\nif [ ! -d $http_root_location ]; then\r\n http_root_location='/var/www'\r\nfi\r\n\r\necho 'Hello from Apache deployed by SlipStream!' > $http_root_location/data.txt\r\n\r\nservice apache2 stop\r\nport=$(ss-get port)\r\n\r\nsed -i -e 's/^Listen.*$/Listen '$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^NameVirtualHost.*$/NameVirtualHost *:'$port'/' /etc/apache2/ports.conf\r\nsed -i -e 's/^/' $default_site_location\r\nservice apache2 start\r\nss-set ready true\r\nurl=\"http://$(ss-get hostname):$port\"\r\nss-set url.service $url\r\nss-set ss:url.service $url\r\n", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "execute", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "content": "#!/bin/bash -xe\r\n\r\n# set the service url to SSH url\r\nurl=$(ss-get --timeout=180 url.ssh)\r\nss-set url.service \"${url}\"\r\nss-set ss:url.service \"${url}\"\r\n\r\n", + "order": 1 + } + ] + }, + { + "name": "prescale", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "prescale", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "prescale", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "prerecipe", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "prerecipe", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "prerecipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "onvmadd", + "subTarget": [ + { + "moduleShortName": "apache", + "name": "onvmadd", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmadd", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "recipe", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "recipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "recipe", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "content": "#!/bin/sh -xe\r\n\r\napt-get update -y\r\napt-get install -y apache2\r\n", + "order": 2 + } + ] + }, + { + "name": "onvmremove", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmremove", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "apache", + "name": "onvmremove", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791", + "order": 2 + } + ] + } + ], + "class": "java.util.HashSet" + }, + "creation": "2013-12-03 16:04:03.426 UTC", + "authz": { + "owner": "sixsq", + "groupMembers": { + "string": [ + "elegoff", + "khaled", + "konstan", + "lionel", + "loomis", + "meb", + "cjdcsixsq" + ], + "class": "java.util.ArrayList" + }, + "ownerGet": true, + "ownerDelete": true, + "groupPost": true, + "publicPost": true, + "publicCreateChildren": false, + "ownerCreateChildren": true, + "publicGet": true, + "inheritedGroupMembers": true, + "ownerPost": true, + "groupCreateChildren": false, + "publicPut": false, + "groupGet": true, + "groupDelete": false, + "ownerPut": true, + "publicDelete": false, + "groupPut": true + }, + "buildStates": { + "class": "java.util.HashSet", + "buildState": [ + { + "builtOn": "", + "moduleUri": "module/examples/images/ubuntu-14.04/13947" + }, + { + "builtOn": "", + "moduleUri": "module/examples/tutorials/service-testing/apache/13791" + } + ] + }, + "isLatestVersion": true, + "prerecipe": "", + "resourceUri": "module/examples/tutorials/service-testing/apache/13791", + "packages": { + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "version": 13791, + "inputParametersExpanded": { + "class": "java.util.HashMap" + }, + "deleted": false, + "name": "examples/tutorials/service-testing/apache", + "placementPolicy": "", + "lastModified": "2017-07-23 19:41:17.760 UTC", + "isBase": false, + "category": "Image", + "shortName": "apache", + "parameters": { + "entry": [ + { + "string": "nuvlabox-albert-einstein.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-albert-einstein.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-albert-einstein", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-scissor2.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-scissor2.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-scissor2", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "scissor-fr3.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "scissor-fr3.ram", + "description": "Amount of RAM, in GB", + "category": "scissor-fr3", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-de1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-de1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr1.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "cyclone-fr1.disks.bus.type", + "description": "VM disks bus type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-arthur-harden.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-arthur-harden.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-arthur-harden", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-demo.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-demo.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-arthur-harden.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-arthur-harden", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ifb-bird-stack.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-bird-stack.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-bird-stack", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-us-west-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-west-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-west-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "scissor-fr3.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "scissor-fr3.contextualization.type", + "description": "Contextualization type", + "category": "scissor-fr3", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-cecil-powell.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-cecil-powell.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-cecil-powell", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "ec2-sa-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-sa-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-sa-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "nuvlabox-stanley-cohen.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-stanley-cohen", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-max-born.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-born.network.specific.name", + "description": "Network name", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "scissor-fr2.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "scissor-fr2.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "scissor-fr2", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-n-volhard.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-christiane-n-volhard", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "teidehpc-es-tfs1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "teidehpc-es-tfs1.ram", + "description": "Amount of RAM, in GB", + "category": "teidehpc-es-tfs1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ec2-ap-northeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-northeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-northeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-carl-cori.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-bertil-ohlin.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-bertil-ohlin.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "eo-cesnet-cz1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "eo-cesnet-cz1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "eo-cesnet-cz1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-cecil-powell.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-cecil-powell.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-max-planck.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-planck.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-max-planck", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-christiane-nusslein-volhard.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-fr2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-yves-chauvin.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-yves-chauvin.network.specific.name", + "description": "Network name", + "category": "nuvlabox-yves-chauvin", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-cecil-powell.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-cecil-powell.network.specific.name", + "description": "Network name", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ec2-ap-southeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-henry-dunant.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-henry-dunant.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "eo-cesnet-cz1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "eo-cesnet-cz1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "eo-cesnet-cz1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-max-born.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-max-born.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-max-born", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-felix-bloch.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-felix-bloch.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-felix-bloch", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.network.specific.name", + "description": "Network name", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ifb-genouest-genostack.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-genouest-genostack.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-genouest-genostack", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "nuvlabox-james-chadwick.disks.bus.type", + "description": "VM disks bus type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-cecil-powell.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-cecil-powell.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-cecil-powell", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-scissor2.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor2.network.specific.name", + "description": "Network name", + "category": "nuvlabox-scissor2", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-max-born.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-born.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-max-born", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-arthur-harden.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-arthur-harden.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-arthur-harden", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-yves-chauvin.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-yves-chauvin.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-yves-chauvin", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ifb-genouest-genostack.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-genouest-genostack.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-genouest-genostack", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-core-pilot.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-core-pilot.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-core-pilot", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor2.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-scissor2.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-scissor2", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "ultimum-cz1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic", + "name": "ultimum-cz1.instance.type", + "description": "Instance type (flavor)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "Basic", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-bertil-ohlin", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-yves-chauvin.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-yves-chauvin.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-yves-chauvin", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-james-chadwick.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-james-chadwick.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-james-chadwick", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "atos-es1.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "atos-es1.ram", + "description": "Amount of RAM, in GB", + "category": "atos-es1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "open-telekom-de1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "open-telekom-de1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "open-telekom-de1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-us-west-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "scissor-fr3.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "scissor-fr3.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "scissor-fr3", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-demo.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-demo.instance.type", + "description": "Instance type", + "category": "nuvlabox-demo", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-yves-chauvin.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-yves-chauvin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-yves-chauvin", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ifb-bird-stack.instance.type", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ifb-bird-stack.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-bird-stack", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-bistro-iphc.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-bistro-iphc.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-bistro-iphc", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "port", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "8080", + "name": "port", + "description": "Port", + "category": "Output", + "type": "String", + "mandatory": false, + "value": "8080", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-demo.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-demo.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-demo", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-prabi-girofle.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-prabi-girofle.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-prabi-girofle", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "teidehpc-es-tfs1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "teidehpc-es-tfs1.contextualization.type", + "description": "Contextualization type", + "category": "teidehpc-es-tfs1", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "cyclone-fr2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr2.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "ram.GB", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ram.GB", + "description": "RAM in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-albert-einstein", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-stanley-cohen.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-stanley-cohen.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-stanley-cohen", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-cecil-powell.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-cecil-powell.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-cecil-powell", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-max-born.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-born.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-fr1.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.ram", + "description": "Amount of RAM, in GB", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-de1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "small", + "name": "cyclone-de1.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "small", + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-dk.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-dk.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-dk", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "scissor-fr1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "scissor-fr1.network.specific.name", + "description": "Network name", + "category": "scissor-fr1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-christiane-n-volhard.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-christiane-n-volhard", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-henry-dunant.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-henry-dunant.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-us-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "nuvlabox-stanley-cohen.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.network.specific.name", + "description": "Network name", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-felix-bloch.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-felix-bloch.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-felix-bloch", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-max-planck.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-planck.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-max-planck", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "teidehpc-es-tfs1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "teidehpc-es-tfs1.network.specific.name", + "description": "Network name", + "category": "teidehpc-es-tfs1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "eo-cloudferro-pl1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "eo1.small", + "name": "eo-cloudferro-pl1.instance.type", + "description": "Instance type (flavor)", + "category": "eo-cloudferro-pl1", + "type": "String", + "mandatory": true, + "value": "eo1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor1.network.specific.name", + "description": "Network name", + "category": "nuvlabox-scissor1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "softlayer-it-mil01.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "2 CPU, 2GB ram, 100GB", + "name": "softlayer-it-mil01.instance.type", + "description": "Instance type (flavor)", + "category": "softlayer-it-mil01", + "type": "String", + "mandatory": true, + "value": "2 CPU, 2GB ram, 100GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-felix-bloch.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-felix-bloch.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-felix-bloch", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "cyfronet-pl1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "CPU-1.RAM-512MB.DISK-10GB", + "name": "cyfronet-pl1.instance.type", + "description": "Instance type (flavor)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "CPU-1.RAM-512MB.DISK-10GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-west.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-west", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.network.specific.name", + "description": "Network name", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-max-planck.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-planck.network.specific.name", + "description": "Network name", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "atos-es1.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "atos-es1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "atos-es1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cpu.nb", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cpu.nb", + "description": "Number of CPUs", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-central-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-central-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-central-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "ec2-us-west-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "eo-cesnet-cz1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "cloud-init", + "name": "eo-cesnet-cz1.contextualization.type", + "description": "Contextualization type", + "category": "eo-cesnet-cz1", + "type": "Enum", + "mandatory": true, + "value": "cloud-init", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-felix-bloch.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-felix-bloch.network.specific.name", + "description": "Network name", + "category": "nuvlabox-felix-bloch", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-christiane-n-volhard.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-christiane-n-volhard", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-demo.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-demo.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-scissor1.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-scissor1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 11, + "order": 11 + } + }, + { + "string": "scissor-fr2.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "scissor-fr2.contextualization.type", + "description": "Contextualization type", + "category": "scissor-fr2", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-scissor1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-scissor1.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-scissor1", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "exoscale-ch-gva.disk", + "parameter": { + "instructions": "Some disk sizes might not be available with all operating system and all instance type", + "isSet": true, + "defaultValue": "10G", + "description": "Size of the root disk", + "type": "Enum", + "mandatory": true, + "order_": 20, + "readonly": false, + "name": "exoscale-ch-gva.disk", + "category": "exoscale-ch-gva", + "value": "10G", + "order": 20, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G", + "800G", + "1600G" + ], + "length": 7 + } + } + }, + { + "string": "nuvlabox-yves-chauvin.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-yves-chauvin.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-yves-chauvin", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-albert-einstein.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-albert-einstein", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-max-born.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-born.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-max-born", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "ec2-eu-west-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-west-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-west-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "nuvlabox-james-chadwick.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-james-chadwick.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "cyclone-fr1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr1.instance.type", + "description": "Cloud instance type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "m1.small", + "c1.medium", + "m1.large", + "m1.xlarge", + "c1.xlarge", + "t1.micro", + "standard.xsmall" + ], + "length": 7 + } + } + }, + { + "string": "scissor-fr1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "scissor-fr1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "scissor-fr1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "ec2-ap-northeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-northeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-northeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "ec2-ap-southeast-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "teidehpc-es-tfs1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "teidehpc-es-tfs1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "teidehpc-es-tfs1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-arthur-harden.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-arthur-harden.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-scissor2.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-scissor2.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-scissor2", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-scissor1.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-scissor1.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-scissor1", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-henry-dunant.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-henry-dunant.network.specific.name", + "description": "Network name", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "atos-es1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "atos-es1.instance.type", + "description": "Cloud instance type", + "category": "atos-es1", + "type": "Enum", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "m1.small", + "c1.medium", + "m1.large", + "m1.xlarge", + "c1.xlarge", + "t1.micro", + "standard.xsmall" + ], + "length": 7 + } + } + }, + { + "string": "scissor-fr1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "scissor-fr1.ram", + "description": "Amount of RAM, in GB", + "category": "scissor-fr1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ultimum-cz1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ultimum-cz1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-christiane-n-volhard.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-christiane-n-volhard", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-stanley-cohen.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-stanley-cohen.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-henry-dunant.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-henry-dunant.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-henry-dunant", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-henry-dunant.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-henry-dunant.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-henry-dunant", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "advania-se1.instance.type", + "parameter": { + "readonly": false, + "isSet": false, + "name": "advania-se1.instance.type", + "description": "Instance type (flavor)", + "category": "advania-se1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-core-pilot.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-core-pilot.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-core-pilot", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-james-chadwick.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-bertil-ohlin.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-bertil-ohlin.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-bertil-ohlin", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-bertil-ohlin.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-bertil-ohlin.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-bertil-ohlin", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "eo-cesnet-cz1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "eo-cesnet-cz1.network.specific.name", + "description": "Network name", + "category": "eo-cesnet-cz1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ec2-us-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr1.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-born.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-born.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ifb-bistro-iphc.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-bistro-iphc.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-bistro-iphc", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-gva.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-gva.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-gva", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "disk.GB", + "parameter": { + "readonly": false, + "isSet": false, + "name": "disk.GB", + "description": "Disk in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-planck.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-max-planck.instance.type", + "description": "Instance type", + "category": "nuvlabox-max-planck", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "ec2-eu-central-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-central-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-central-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-james-chadwick.instance.type", + "description": "Instance type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-max-planck.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-planck.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-carl-cori.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-carl-cori.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-carl-cori", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-henry-dunant.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-henry-dunant.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-henry-dunant", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-christiane-n-volhard.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-christiane-n-volhard", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-sa-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-sa-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-sa-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-yves-chauvin.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-yves-chauvin.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-yves-chauvin", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-james-chadwick.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-james-chadwick.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-james-chadwick", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "open-telekom-de1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "c1.medium", + "name": "open-telekom-de1.instance.type", + "description": "Instance type (flavor)", + "category": "open-telekom-de1", + "type": "String", + "mandatory": true, + "value": "c1.medium", + "order_": 0, + "order": 0 + } + }, + { + "string": "advania-se1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "advania-se1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "advania-se1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-scissor1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-scissor1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-carl-cori.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-carl-cori.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-carl-cori", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-scissor1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-scissor1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-scissor2.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-scissor2.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-scissor2", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "scissor-fr2.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "scissor-fr2.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "scissor-fr2", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "azure-west-europe.forwarded.ports", + "parameter": { + "instructions": "Ports that will be forwarded from the public IP of the Azure cloud service. The port 22 (SSH) on Linux machines and the port 3389 (RDP) on Windows machines are already forwarded", + "readonly": false, + "isSet": false, + "name": "azure-west-europe.forwarded.ports", + "description": "Forwarded ports (comma separated list)", + "category": "azure-west-europe", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-stanley-cohen.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-stanley-cohen.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-stanley-cohen", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "scissor-fr3.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "scissor-fr3.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "scissor-fr3", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-felix-bloch.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-felix-bloch.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-felix-bloch", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "exoscale-ch-gva.instance.type", + "parameter": { + "instructions": "You might have to request access to Exoscale for some instance types", + "isSet": true, + "defaultValue": "Small", + "description": "Cloud instance type", + "type": "Enum", + "mandatory": true, + "order_": 10, + "readonly": false, + "name": "exoscale-ch-gva.instance.type", + "category": "exoscale-ch-gva", + "value": "Small", + "order": 10, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge", + "Mega", + "Titan", + "GPU-small", + "GPU-huge" + ], + "length": 11 + } + } + }, + { + "string": "atos-es1.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "atos-es1.disks.bus.type", + "description": "VM disks bus type", + "category": "atos-es1", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "scissor-fr3.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "scissor-fr3.network.specific.name", + "description": "Network name", + "category": "scissor-fr3", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "extra.disk.volatile", + "parameter": { + "readonly": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-arthur-harden.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-albert-einstein.instance.type", + "description": "Instance type", + "category": "nuvlabox-albert-einstein", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-christiane-n-volhard.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-n-volhard.network.specific.name", + "description": "Network name", + "category": "nuvlabox-christiane-n-volhard", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-max-planck.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-max-planck.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-max-planck", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "scissor-fr2.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "scissor-fr2.ram", + "description": "Amount of RAM, in GB", + "category": "scissor-fr2", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "teidehpc-es-tfs1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "teidehpc-es-tfs1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "teidehpc-es-tfs1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-demo.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-demo.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 0, + "order": 0 + } + }, + { + "string": "scissor-fr2.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "scissor-fr2.network.specific.name", + "description": "Network name", + "category": "scissor-fr2", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "eo-cloudferro-pl1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "eo-cloudferro-pl1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "eo-cloudferro-pl1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-james-chadwick.network.specific.name", + "description": "Network name", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "scissor-fr1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "scissor-fr1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "scissor-fr1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-arthur-harden.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-arthur-harden.network.specific.name", + "description": "Network name", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-christiane-nusslein-volhard.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-stanley-cohen.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-stanley-cohen.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ifb-prabi-girofle.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-prabi-girofle.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-prabi-girofle", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-carl-cori.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-ap-southeast-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "cyfronet-pl1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyfronet-pl1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "network", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Public", + "name": "network", + "description": "Network type", + "category": "Cloud", + "type": "Enum", + "mandatory": true, + "value": "Public", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Public", + "Private" + ], + "length": 2 + } + } + }, + { + "string": "azure-west-europe.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic_A0", + "name": "azure-west-europe.instance.type", + "description": "Machine size", + "category": "azure-west-europe", + "type": "Enum", + "mandatory": true, + "value": "Basic_A0", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Basic_A0", + "Basic_A1", + "Basic_A2", + "Basic_A3", + "Basic_A4", + "ExtraSmall", + "Small", + "Medium", + "Large", + "ExtraLarge", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "Standard_D1", + "Standard_D2", + "Standard_D3", + "Standard_D4", + "Standard_D11", + "Standard_D12", + "Standard_D13", + "Standard_D14" + ], + "length": 25 + } + } + }, + { + "string": "nuvlabox-carl-cori.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-carl-cori.network.specific.name", + "description": "Network name", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ready", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ready", + "description": "Server ready to recieve connections", + "category": "Output", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-bertil-ohlin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-scissor2.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor2.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-scissor2", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-cecil-powell.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-cecil-powell.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "eo-cesnet-cz1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "eo-cesnet-cz1.ram", + "description": "Amount of RAM, in GB", + "category": "eo-cesnet-cz1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-james-chadwick.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-james-chadwick.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ec2-eu-west.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-west.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-west", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "cyclone-tb-it1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "os.1", + "name": "cyclone-tb-it1.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-tb-it1", + "type": "String", + "mandatory": true, + "value": "os.1", + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-dk.instance.type", + "parameter": { + "instructions": "You might have to request access to Exoscale for some instance types", + "isSet": true, + "defaultValue": "Micro", + "description": "Cloud instance type", + "type": "Enum", + "mandatory": true, + "order_": 10, + "readonly": false, + "name": "exoscale-ch-dk.instance.type", + "category": "exoscale-ch-dk", + "value": "Micro", + "order": 10, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge", + "Mega", + "Titan", + "GPU-small", + "GPU-huge" + ], + "length": 11 + } + } + }, + { + "string": "nuvlabox-carl-cori.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-carl-cori.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-carl-cori", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "cyclone-tb-it1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-tb-it1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-tb-it1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-southeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "scissor-fr1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "scissor-fr1.contextualization.type", + "description": "Contextualization type", + "category": "scissor-fr1", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-max-planck.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-planck.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "exoscale-ch-dk.disk", + "parameter": { + "instructions": "Some disk sizes might not be available with all operating system and all instance type", + "isSet": true, + "defaultValue": "10G", + "description": "Size of the root disk", + "type": "Enum", + "mandatory": true, + "order_": 20, + "readonly": false, + "name": "exoscale-ch-dk.disk", + "category": "exoscale-ch-dk", + "value": "10G", + "order": 20, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G", + "800G", + "1600G" + ], + "length": 7 + } + } + }, + { + "string": "ec2-us-west-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-felix-bloch.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-felix-bloch.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-felix-bloch", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + } + }, + "imageUri": "module/examples/tutorials/service-testing/apache", + "deleted": false, + "notes": { + "length": 0 + }, + "parameterMappings": { + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "name": "apache", + "maxProvisioningFailures": 0, + "parameters": { + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "creation": "2015-10-20 08:40:43.893 UTC", + "cloudService": "default", + "network": "Public" + }, + "string": "apache" + }, + { + "node": { + "multiplicity": 1, + "image": { + "outputParametersExpanded": { + "entry": [ + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + } + ], + "class": "java.util.HashMap" + }, + "cloudImageIdentifiers": { + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "notes": { + "length": 0 + }, + "parentUri": "module/examples/tutorials/service-testing", + "commit": { + "author": "lionel", + "comment": "Updated instance type for cyclone-de1" + }, + "recipe": "", + "packagesExpanded": { + "class": "java.util.HashSet" + }, + "description": "Web client tests server connectivity and verifies content.", + "moduleReferenceUri": "module/examples/images/ubuntu-14.04", + "targets": { + "class": "org.hibernate.collection.internal.PersistentSet", + "target": [ + { + "name": "postscale" + }, + { + "name": "report", + "content": "#!/bin/sh -x\r\ncp /tmp/data.txt $SLIPSTREAM_REPORT_DIR" + }, + { + "name": "onvmadd", + "content": "#!/bin/bash\r\nset -e\r\nset -x\r\n\r\nfunction on_apache() {\r\n for INSTANCE_NAME in $SLIPSTREAM_SCALING_VMS; do\r\n echo Processing $INSTANCE_NAME\r\n ss-get --timeout 360 $INSTANCE_NAME:ready\r\n host_name=$(ss-get $INSTANCE_NAME:hostname)\r\n echo \"New instance of $SLIPSTREAM_SCALING_NODE: $INSTANCE_NAME, $host_name\"\r\n done\r\n}\r\n\r\nfunction on_testclient() {\r\n for NAME in $SLIPSTREAM_SCALING_VMS; do\r\n echo \"test client $NAME was added\"\r\n done\r\n}\r\n\r\ncase $SLIPSTREAM_SCALING_NODE in\r\n \"apache\" )\r\n on_apache ;;\r\n \"testclient\" )\r\n on_testclient ;;\r\nesac" + }, + { + "name": "onvmremove" + }, + { + "name": "execute", + "content": "#!/bin/sh -xe\r\n\r\n[ \"$(ss-get apache:multiplicity)\" = \"0\" ] && { echo \"No web servers to test.\"; exit 0; }\r\n\r\n# Wait for the metadata to be resolved\r\nweb_server_ip=$(ss-get --timeout 360 webserver.hostname)\r\nweb_server_port=$(ss-get --timeout 360 webserver.port)\r\nss-get --timeout 360 webserver.ready\r\n\r\n# Execute the test\r\nENDPOINT=http://${web_server_ip}:${web_server_port}/data.txt\r\nwget -t 2 -O /tmp/data.txt ${ENDPOINT}\r\n[ \"$?\" = \"0\" ] && ss-set statecustom \"OK: $(cat /tmp/data.txt)\" || ss-abort \"Could not get the test file: ${ENDPOINT}\"\r\n" + }, + { + "name": "prescale" + } + ] + }, + "platform": "ubuntu", + "loginUser": "root", + "logoLink": "", + "targetsExpanded": { + "targetExpanded": [ + { + "name": "prerecipe", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "prerecipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "client", + "name": "prerecipe", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "order": 2 + } + ] + }, + { + "name": "recipe", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "recipe", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "client", + "name": "recipe", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "order": 2 + } + ] + }, + { + "name": "onvmadd", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmadd", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "client", + "name": "onvmadd", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "content": "#!/bin/bash\r\nset -e\r\nset -x\r\n\r\nfunction on_apache() {\r\n for INSTANCE_NAME in $SLIPSTREAM_SCALING_VMS; do\r\n echo Processing $INSTANCE_NAME\r\n ss-get --timeout 360 $INSTANCE_NAME:ready\r\n host_name=$(ss-get $INSTANCE_NAME:hostname)\r\n echo \"New instance of $SLIPSTREAM_SCALING_NODE: $INSTANCE_NAME, $host_name\"\r\n done\r\n}\r\n\r\nfunction on_testclient() {\r\n for NAME in $SLIPSTREAM_SCALING_VMS; do\r\n echo \"test client $NAME was added\"\r\n done\r\n}\r\n\r\ncase $SLIPSTREAM_SCALING_NODE in\r\n \"apache\" )\r\n on_apache ;;\r\n \"testclient\" )\r\n on_testclient ;;\r\nesac", + "order": 2 + } + ] + }, + { + "name": "report", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "report", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "client", + "name": "report", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "content": "#!/bin/sh -x\r\ncp /tmp/data.txt $SLIPSTREAM_REPORT_DIR", + "order": 2 + } + ] + }, + { + "name": "execute", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "execute", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "content": "#!/bin/bash -xe\r\n\r\n# set the service url to SSH url\r\nurl=$(ss-get --timeout=180 url.ssh)\r\nss-set url.service \"${url}\"\r\nss-set ss:url.service \"${url}\"\r\n\r\n", + "order": 1 + }, + { + "moduleShortName": "client", + "name": "execute", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "content": "#!/bin/sh -xe\r\n\r\n[ \"$(ss-get apache:multiplicity)\" = \"0\" ] && { echo \"No web servers to test.\"; exit 0; }\r\n\r\n# Wait for the metadata to be resolved\r\nweb_server_ip=$(ss-get --timeout 360 webserver.hostname)\r\nweb_server_port=$(ss-get --timeout 360 webserver.port)\r\nss-get --timeout 360 webserver.ready\r\n\r\n# Execute the test\r\nENDPOINT=http://${web_server_ip}:${web_server_port}/data.txt\r\nwget -t 2 -O /tmp/data.txt ${ENDPOINT}\r\n[ \"$?\" = \"0\" ] && ss-set statecustom \"OK: $(cat /tmp/data.txt)\" || ss-abort \"Could not get the test file: ${ENDPOINT}\"\r\n", + "order": 2 + } + ] + }, + { + "name": "prescale", + "subTarget": [ + { + "moduleShortName": "client", + "name": "prescale", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "prescale", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + }, + { + "name": "postscale", + "subTarget": [ + { + "moduleShortName": "ubuntu-14.04", + "name": "postscale", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + }, + { + "moduleShortName": "client", + "name": "postscale", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "order": 2 + } + ] + }, + { + "name": "onvmremove", + "subTarget": [ + { + "moduleShortName": "client", + "name": "onvmremove", + "moduleUri": "module/examples/tutorials/service-testing/client/13790", + "order": 2 + }, + { + "moduleShortName": "ubuntu-14.04", + "name": "onvmremove", + "moduleUri": "module/examples/images/ubuntu-14.04/13947", + "order": 1 + } + ] + } + ], + "class": "java.util.HashSet" + }, + "creation": "2013-12-03 15:39:52.706 UTC", + "authz": { + "owner": "sixsq", + "groupMembers": { + "string": [ + "elegoff", + "khaled", + "konstan", + "lionel", + "loomis", + "meb", + "cjdcsixsq" + ], + "class": "java.util.ArrayList" + }, + "ownerGet": true, + "ownerDelete": true, + "groupPost": true, + "publicPost": true, + "publicCreateChildren": false, + "ownerCreateChildren": true, + "publicGet": true, + "inheritedGroupMembers": true, + "ownerPost": true, + "groupCreateChildren": false, + "publicPut": false, + "groupGet": true, + "groupDelete": false, + "ownerPut": true, + "publicDelete": false, + "groupPut": true + }, + "buildStates": { + "class": "java.util.HashSet", + "buildState": [ + { + "builtOn": "", + "moduleUri": "module/examples/images/ubuntu-14.04/13947" + }, + { + "builtOn": "", + "moduleUri": "module/examples/tutorials/service-testing/client/13790" + } + ] + }, + "isLatestVersion": true, + "prerecipe": "", + "resourceUri": "module/examples/tutorials/service-testing/client/13790", + "packages": { + "class": "org.hibernate.collection.internal.PersistentSet" + }, + "version": 13790, + "inputParametersExpanded": { + "entry": [ + { + "string": "webserver.port", + "parameter": { + "readonly": false, + "isSet": false, + "name": "webserver.port", + "description": "Port on which the web server listens", + "category": "Input", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.ready", + "parameter": { + "readonly": false, + "isSet": false, + "name": "webserver.ready", + "description": "Server ready to recieve connections", + "category": "Input", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "webserver.hostname", + "description": "Server hostname", + "category": "Input", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + } + ], + "class": "java.util.HashMap" + }, + "deleted": false, + "name": "examples/tutorials/service-testing/client", + "placementPolicy": "", + "lastModified": "2017-07-23 19:40:30.190 UTC", + "isBase": false, + "category": "Image", + "shortName": "client", + "parameters": { + "entry": [ + { + "string": "nuvlabox-albert-einstein.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-albert-einstein.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-albert-einstein", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-scissor2.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-scissor2.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-scissor2", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "scissor-fr3.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "scissor-fr3.ram", + "description": "Amount of RAM, in GB", + "category": "scissor-fr3", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-de1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-de1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "hostname", + "description": "hostname/ip of the image", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr1.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "cyclone-fr1.disks.bus.type", + "description": "VM disks bus type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-arthur-harden.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-arthur-harden.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-arthur-harden", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-demo.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-demo.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-arthur-harden.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-arthur-harden", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ifb-bird-stack.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-bird-stack.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-bird-stack", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-henry-dunant.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-henry-dunant.instance.type", + "description": "Instance type", + "category": "nuvlabox-henry-dunant", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "ec2-us-west-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-west-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-west-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "scissor-fr3.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "scissor-fr3.contextualization.type", + "description": "Contextualization type", + "category": "scissor-fr3", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-cecil-powell.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-cecil-powell.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-cecil-powell", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "ec2-sa-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-sa-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-sa-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "nuvlabox-stanley-cohen.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-stanley-cohen", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-max-born.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-born.network.specific.name", + "description": "Network name", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "scissor-fr2.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "scissor-fr2.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "scissor-fr2", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-n-volhard.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-christiane-n-volhard", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "teidehpc-es-tfs1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "teidehpc-es-tfs1.ram", + "description": "Amount of RAM, in GB", + "category": "teidehpc-es-tfs1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ec2-ap-northeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-northeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-northeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-carl-cori.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-bertil-ohlin.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-bertil-ohlin.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "eo-cesnet-cz1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "eo-cesnet-cz1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "eo-cesnet-cz1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-cecil-powell.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-cecil-powell.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-max-planck.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-planck.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-max-planck", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-christiane-nusslein-volhard.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-fr2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-yves-chauvin.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-yves-chauvin.network.specific.name", + "description": "Network name", + "category": "nuvlabox-yves-chauvin", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-cecil-powell.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-cecil-powell.network.specific.name", + "description": "Network name", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ec2-ap-southeast-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-henry-dunant.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-henry-dunant.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "eo-cesnet-cz1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "eo-cesnet-cz1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "eo-cesnet-cz1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-max-born.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-max-born.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-max-born", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-nusslein-volhard.custom.vm.template", + "description": "Additional custom VM template", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-felix-bloch.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-felix-bloch.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-felix-bloch", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.network.specific.name", + "description": "Network name", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ifb-genouest-genostack.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-genouest-genostack.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-genouest-genostack", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "nuvlabox-james-chadwick.disks.bus.type", + "description": "VM disks bus type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-cecil-powell.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-cecil-powell.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-cecil-powell", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-scissor2.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor2.network.specific.name", + "description": "Network name", + "category": "nuvlabox-scissor2", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-max-born.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-max-born.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-max-born", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-arthur-harden.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-arthur-harden.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-arthur-harden", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-yves-chauvin.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-yves-chauvin.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-yves-chauvin", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "ifb-genouest-genostack.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-genouest-genostack.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-genouest-genostack", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-core-pilot.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-core-pilot.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-core-pilot", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor2.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-scissor2.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-scissor2", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "ultimum-cz1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic", + "name": "ultimum-cz1.instance.type", + "description": "Instance type (flavor)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "Basic", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-bertil-ohlin", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-yves-chauvin.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-yves-chauvin.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-yves-chauvin", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-james-chadwick.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-james-chadwick.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-james-chadwick", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "atos-es1.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "atos-es1.ram", + "description": "Amount of RAM, in GB", + "category": "atos-es1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "open-telekom-de1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "open-telekom-de1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "open-telekom-de1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-us-west-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "scissor-fr3.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "scissor-fr3.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "scissor-fr3", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-demo.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-demo.instance.type", + "description": "Instance type", + "category": "nuvlabox-demo", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-yves-chauvin.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-yves-chauvin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-yves-chauvin", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ifb-bird-stack.instance.type", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ifb-bird-stack.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-bird-stack", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-bistro-iphc.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-bistro-iphc.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-bistro-iphc", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-demo.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-demo.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-demo", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-prabi-girofle.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-prabi-girofle.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-prabi-girofle", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "teidehpc-es-tfs1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "teidehpc-es-tfs1.contextualization.type", + "description": "Contextualization type", + "category": "teidehpc-es-tfs1", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "cyclone-fr2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr2.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-fr2", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "ram.GB", + "parameter": { + "readonly": false, + "isSet": false, + "name": "ram.GB", + "description": "RAM in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-albert-einstein", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-stanley-cohen.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-stanley-cohen.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-stanley-cohen", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-cecil-powell.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-cecil-powell.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-cecil-powell", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-max-born.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-born.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "cyclone-fr1.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.ram", + "description": "Amount of RAM, in GB", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-de1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "small", + "name": "cyclone-de1.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-de1", + "type": "String", + "mandatory": true, + "value": "small", + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-dk.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-dk.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-dk", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.ready", + "parameter": { + "readonly": false, + "isSet": false, + "name": "webserver.ready", + "description": "Server ready to recieve connections", + "category": "Input", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "scissor-fr1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "scissor-fr1.network.specific.name", + "description": "Network name", + "category": "scissor-fr1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-christiane-n-volhard.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-christiane-n-volhard", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-henry-dunant.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-henry-dunant.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-christiane-nusslein-volhard.is.firewall", + "description": "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-us-east-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-east-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-east-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "nuvlabox-stanley-cohen.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-stanley-cohen.network.specific.name", + "description": "Network name", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-felix-bloch.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-felix-bloch.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-felix-bloch", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-max-planck.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-planck.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-max-planck", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "teidehpc-es-tfs1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "teidehpc-es-tfs1.network.specific.name", + "description": "Network name", + "category": "teidehpc-es-tfs1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "eo-cloudferro-pl1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "eo1.small", + "name": "eo-cloudferro-pl1.instance.type", + "description": "Instance type (flavor)", + "category": "eo-cloudferro-pl1", + "type": "String", + "mandatory": true, + "value": "eo1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor1.network.specific.name", + "description": "Network name", + "category": "nuvlabox-scissor1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "softlayer-it-mil01.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "2 CPU, 2GB ram, 100GB", + "name": "softlayer-it-mil01.instance.type", + "description": "Instance type (flavor)", + "category": "softlayer-it-mil01", + "type": "String", + "mandatory": true, + "value": "2 CPU, 2GB ram, 100GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-felix-bloch.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-felix-bloch.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-felix-bloch", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "cyfronet-pl1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "CPU-1.RAM-512MB.DISK-10GB", + "name": "cyfronet-pl1.instance.type", + "description": "Instance type (flavor)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "CPU-1.RAM-512MB.DISK-10GB", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-west.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-west.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-west", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-bertil-ohlin.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-bertil-ohlin.network.specific.name", + "description": "Network name", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-max-planck.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-planck.network.specific.name", + "description": "Network name", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "atos-es1.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "atos-es1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "atos-es1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "cpu.nb", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cpu.nb", + "description": "Number of CPUs", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-eu-central-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-central-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-central-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "webserver.hostname", + "parameter": { + "readonly": false, + "isSet": false, + "name": "webserver.hostname", + "description": "Server hostname", + "category": "Input", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-us-west-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-us-west-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-us-west-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "eo-cesnet-cz1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "cloud-init", + "name": "eo-cesnet-cz1.contextualization.type", + "description": "Contextualization type", + "category": "eo-cesnet-cz1", + "type": "Enum", + "mandatory": true, + "value": "cloud-init", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-felix-bloch.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-felix-bloch.network.specific.name", + "description": "Network name", + "category": "nuvlabox-felix-bloch", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-christiane-n-volhard.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-christiane-n-volhard", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-demo.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-demo.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-scissor1.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-scissor1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.ram", + "parameter": { + "readonly": false, + "isSet": false, + "name": "nuvlabox-albert-einstein.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-albert-einstein", + "type": "String", + "mandatory": true, + "order_": 11, + "order": 11 + } + }, + { + "string": "scissor-fr2.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "scissor-fr2.contextualization.type", + "description": "Contextualization type", + "category": "scissor-fr2", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-scissor1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-scissor1.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-scissor1", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "exoscale-ch-gva.disk", + "parameter": { + "instructions": "Some disk sizes might not be available with all operating system and all instance type", + "isSet": true, + "defaultValue": "10G", + "description": "Size of the root disk", + "type": "Enum", + "mandatory": true, + "order_": 20, + "readonly": false, + "name": "exoscale-ch-gva.disk", + "category": "exoscale-ch-gva", + "value": "10G", + "order": 20, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G", + "800G", + "1600G" + ], + "length": 7 + } + } + }, + { + "string": "nuvlabox-yves-chauvin.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-yves-chauvin.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-yves-chauvin", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-albert-einstein.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-albert-einstein.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-albert-einstein", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-max-born.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-max-born.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-max-born", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "ec2-eu-west-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-west-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-west-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "nuvlabox-james-chadwick.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-james-chadwick.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "cyclone-fr1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "cyclone-fr1.instance.type", + "description": "Cloud instance type", + "category": "cyclone-fr1", + "type": "Enum", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "m1.small", + "c1.medium", + "m1.large", + "m1.xlarge", + "c1.xlarge", + "t1.micro", + "standard.xsmall" + ], + "length": 7 + } + } + }, + { + "string": "scissor-fr1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "scissor-fr1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "scissor-fr1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "ec2-ap-northeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-northeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-northeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "ec2-ap-southeast-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-ap-southeast-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-ap-southeast-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "teidehpc-es-tfs1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "teidehpc-es-tfs1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "teidehpc-es-tfs1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-arthur-harden.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-arthur-harden.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-scissor2.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-scissor2.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-scissor2", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-scissor1.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-scissor1.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-scissor1", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-henry-dunant.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-henry-dunant.network.specific.name", + "description": "Network name", + "category": "nuvlabox-henry-dunant", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "atos-es1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "atos-es1.instance.type", + "description": "Cloud instance type", + "category": "atos-es1", + "type": "Enum", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "m1.small", + "c1.medium", + "m1.large", + "m1.xlarge", + "c1.xlarge", + "t1.micro", + "standard.xsmall" + ], + "length": 7 + } + } + }, + { + "string": "scissor-fr1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "scissor-fr1.ram", + "description": "Amount of RAM, in GB", + "category": "scissor-fr1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ultimum-cz1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ultimum-cz1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ultimum-cz1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-christiane-n-volhard.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-christiane-n-volhard", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-stanley-cohen.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-stanley-cohen.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-henry-dunant.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-henry-dunant.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-henry-dunant", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-henry-dunant.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-henry-dunant.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-henry-dunant", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "advania-se1.instance.type", + "parameter": { + "readonly": false, + "isSet": false, + "name": "advania-se1.instance.type", + "description": "Instance type (flavor)", + "category": "advania-se1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "ifb-core-pilot.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "m1.small", + "name": "ifb-core-pilot.instance.type", + "description": "Instance type (flavor)", + "category": "ifb-core-pilot", + "type": "String", + "mandatory": true, + "value": "m1.small", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-james-chadwick.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-bertil-ohlin.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-bertil-ohlin.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-bertil-ohlin", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-bertil-ohlin.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-bertil-ohlin.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-bertil-ohlin", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "eo-cesnet-cz1.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "eo-cesnet-cz1.network.specific.name", + "description": "Network name", + "category": "eo-cesnet-cz1", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "ec2-us-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "cyclone-fr1.cpu", + "parameter": { + "readonly": false, + "isSet": false, + "name": "cyclone-fr1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "cyclone-fr1", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-born.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-born.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-born", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ifb-bistro-iphc.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-bistro-iphc.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-bistro-iphc", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-gva.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "exoscale-ch-gva.security.groups", + "description": "Security Groups (comma separated list)", + "category": "exoscale-ch-gva", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "disk.GB", + "parameter": { + "readonly": false, + "isSet": false, + "name": "disk.GB", + "description": "Disk in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-max-planck.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-max-planck.instance.type", + "description": "Instance type", + "category": "nuvlabox-max-planck", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "ec2-eu-central-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-eu-central-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-eu-central-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-james-chadwick.instance.type", + "description": "Instance type", + "category": "nuvlabox-james-chadwick", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-max-planck.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-max-planck.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-carl-cori.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-carl-cori.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-carl-cori", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-henry-dunant.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-henry-dunant.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-henry-dunant", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "nuvlabox-christiane-n-volhard.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-christiane-n-volhard.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-christiane-n-volhard", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-sa-east-1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-sa-east-1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-sa-east-1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-yves-chauvin.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-yves-chauvin.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-yves-chauvin", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-james-chadwick.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-james-chadwick.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-james-chadwick", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "open-telekom-de1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "c1.medium", + "name": "open-telekom-de1.instance.type", + "description": "Instance type (flavor)", + "category": "open-telekom-de1", + "type": "String", + "mandatory": true, + "value": "c1.medium", + "order_": 0, + "order": 0 + } + }, + { + "string": "advania-se1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "advania-se1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "advania-se1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-scissor1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-scissor1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-carl-cori.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-carl-cori.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-carl-cori", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "webserver.port", + "parameter": { + "readonly": false, + "isSet": false, + "name": "webserver.port", + "description": "Port on which the web server listens", + "category": "Input", + "type": "String", + "mandatory": false, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-scissor1.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor1.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-scissor1", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-scissor2.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-scissor2.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-scissor2", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "scissor-fr2.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "scissor-fr2.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "scissor-fr2", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "azure-west-europe.forwarded.ports", + "parameter": { + "instructions": "Ports that will be forwarded from the public IP of the Azure cloud service. The port 22 (SSH) on Linux machines and the port 3389 (RDP) on Windows machines are already forwarded", + "readonly": false, + "isSet": false, + "name": "azure-west-europe.forwarded.ports", + "description": "Forwarded ports (comma separated list)", + "category": "azure-west-europe", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-stanley-cohen.is.firewall", + "parameter": { + "instructions": "Instance will be started with two network interfaces, the first one will be connected to the public VM network and the other to the private VM network.", + "readonly": false, + "isSet": true, + "defaultValue": "false", + "name": "nuvlabox-stanley-cohen.is.firewall", + "description": "Firewalling", + "category": "nuvlabox-stanley-cohen", + "type": "Boolean", + "mandatory": true, + "value": "false", + "order_": 20, + "order": 20 + } + }, + { + "string": "scissor-fr3.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "scissor-fr3.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "scissor-fr3", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-felix-bloch.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-felix-bloch.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-felix-bloch", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "exoscale-ch-gva.instance.type", + "parameter": { + "instructions": "You might have to request access to Exoscale for some instance types", + "isSet": true, + "defaultValue": "Small", + "description": "Cloud instance type", + "type": "Enum", + "mandatory": true, + "order_": 10, + "readonly": false, + "name": "exoscale-ch-gva.instance.type", + "category": "exoscale-ch-gva", + "value": "Small", + "order": 10, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge", + "Mega", + "Titan", + "GPU-small", + "GPU-huge" + ], + "length": 11 + } + } + }, + { + "string": "atos-es1.disks.bus.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "virtio", + "name": "atos-es1.disks.bus.type", + "description": "VM disks bus type", + "category": "atos-es1", + "type": "Enum", + "mandatory": true, + "value": "virtio", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "virtio", + "scsi" + ], + "length": 2 + } + } + }, + { + "string": "scissor-fr3.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "scissor-fr3.network.specific.name", + "description": "Network name", + "category": "scissor-fr3", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "extra.disk.volatile", + "parameter": { + "readonly": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "category": "Cloud", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-arthur-harden.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-arthur-harden.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "instanceid", + "parameter": { + "readonly": false, + "isSet": false, + "name": "instanceid", + "description": "Cloud instance id", + "category": "Output", + "type": "String", + "mandatory": true, + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-albert-einstein.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "micro", + "name": "nuvlabox-albert-einstein.instance.type", + "description": "Instance type", + "category": "nuvlabox-albert-einstein", + "type": "Enum", + "mandatory": true, + "value": "micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "micro", + "small", + "medium", + "large" + ], + "length": 4 + } + } + }, + { + "string": "nuvlabox-christiane-n-volhard.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-christiane-n-volhard.network.specific.name", + "description": "Network name", + "category": "nuvlabox-christiane-n-volhard", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-max-planck.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-max-planck.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-max-planck", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "scissor-fr2.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "scissor-fr2.ram", + "description": "Amount of RAM, in GB", + "category": "scissor-fr2", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "teidehpc-es-tfs1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "teidehpc-es-tfs1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "teidehpc-es-tfs1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-demo.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-demo.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-demo", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 0, + "order": 0 + } + }, + { + "string": "scissor-fr2.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "scissor-fr2.network.specific.name", + "description": "Network name", + "category": "scissor-fr2", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "eo-cloudferro-pl1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "eo-cloudferro-pl1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "eo-cloudferro-pl1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-james-chadwick.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-james-chadwick.network.specific.name", + "description": "Network name", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "scissor-fr1.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "scissor-fr1.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "scissor-fr1", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-arthur-harden.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-arthur-harden.network.specific.name", + "description": "Network name", + "category": "nuvlabox-arthur-harden", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-christiane-nusslein-volhard.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-christiane-nusslein-volhard.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-christiane-nusslein-volhard", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-stanley-cohen.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-stanley-cohen.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-stanley-cohen", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ifb-prabi-girofle.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ifb-prabi-girofle.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ifb-prabi-girofle", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-carl-cori.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-carl-cori.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "ec2-ap-southeast-2.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-2.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-2", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "cyfronet-pl1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyfronet-pl1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyfronet-pl1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "network", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Public", + "name": "network", + "description": "Network type", + "category": "Cloud", + "type": "Enum", + "mandatory": true, + "value": "Public", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Public", + "Private" + ], + "length": 2 + } + } + }, + { + "string": "azure-west-europe.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "Basic_A0", + "name": "azure-west-europe.instance.type", + "description": "Machine size", + "category": "azure-west-europe", + "type": "Enum", + "mandatory": true, + "value": "Basic_A0", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "Basic_A0", + "Basic_A1", + "Basic_A2", + "Basic_A3", + "Basic_A4", + "ExtraSmall", + "Small", + "Medium", + "Large", + "ExtraLarge", + "A5", + "A6", + "A7", + "A8", + "A9", + "A10", + "A11", + "Standard_D1", + "Standard_D2", + "Standard_D3", + "Standard_D4", + "Standard_D11", + "Standard_D12", + "Standard_D13", + "Standard_D14" + ], + "length": 25 + } + } + }, + { + "string": "nuvlabox-carl-cori.network.specific.name", + "parameter": { + "instructions": "Override network in Cloud configuration section! Connect VM network interface on specified virtual network name. Format: NETWORK_NAME or NETWORK_NAME;NETWORK_UNAME", + "readonly": false, + "isSet": false, + "name": "nuvlabox-carl-cori.network.specific.name", + "description": "Network name", + "category": "nuvlabox-carl-cori", + "type": "String", + "mandatory": true, + "order_": 12, + "order": 12 + } + }, + { + "string": "nuvlabox-bertil-ohlin.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-bertil-ohlin.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-bertil-ohlin", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "nuvlabox-scissor2.custom.vm.template", + "parameter": { + "instructions": "Example: GRAPHICS = [ TYPE = VNC, LISTEN = 0.0.0.0, PORT = 5900 ]", + "readonly": false, + "isSet": false, + "name": "nuvlabox-scissor2.custom.vm.template", + "description": "Additional custom textual VM template", + "category": "nuvlabox-scissor2", + "type": "RestrictedText", + "mandatory": true, + "order_": 101, + "order": 101 + } + }, + { + "string": "nuvlabox-cecil-powell.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-cecil-powell.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-cecil-powell", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "eo-cesnet-cz1.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "eo-cesnet-cz1.ram", + "description": "Amount of RAM, in GB", + "category": "eo-cesnet-cz1", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "nuvlabox-james-chadwick.ram", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "0.5", + "name": "nuvlabox-james-chadwick.ram", + "description": "Amount of RAM, in GB", + "category": "nuvlabox-james-chadwick", + "type": "String", + "mandatory": true, + "value": "0.5", + "order_": 11, + "order": 11 + } + }, + { + "string": "ec2-eu-west.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-eu-west.instance.type", + "description": "Cloud instance type", + "category": "ec2-eu-west", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "cyclone-tb-it1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "os.1", + "name": "cyclone-tb-it1.instance.type", + "description": "Instance type (flavor)", + "category": "cyclone-tb-it1", + "type": "String", + "mandatory": true, + "value": "os.1", + "order_": 0, + "order": 0 + } + }, + { + "string": "exoscale-ch-dk.instance.type", + "parameter": { + "instructions": "You might have to request access to Exoscale for some instance types", + "isSet": true, + "defaultValue": "Micro", + "description": "Cloud instance type", + "type": "Enum", + "mandatory": true, + "order_": 10, + "readonly": false, + "name": "exoscale-ch-dk.instance.type", + "category": "exoscale-ch-dk", + "value": "Micro", + "order": 10, + "enumValues": { + "string": [ + "Micro", + "Tiny", + "Small", + "Medium", + "Large", + "Extra-large", + "Huge", + "Mega", + "Titan", + "GPU-small", + "GPU-huge" + ], + "length": 11 + } + } + }, + { + "string": "nuvlabox-carl-cori.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-carl-cori.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-carl-cori", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "cyclone-tb-it1.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "cyclone-tb-it1.security.groups", + "description": "Security Groups (comma separated list)", + "category": "cyclone-tb-it1", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "ec2-ap-southeast-1.instance.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "t2.micro", + "name": "ec2-ap-southeast-1.instance.type", + "description": "Cloud instance type", + "category": "ec2-ap-southeast-1", + "type": "Enum", + "mandatory": true, + "value": "t2.micro", + "order_": 0, + "order": 0, + "enumValues": { + "string": [ + "t2.nano", + "t2.micro", + "t2.small", + "t2.medium", + "t2.large", + "t2.xlarge", + "t2.2xlarge", + "m3.medium", + "m3.large", + "m3.xlarge", + "m3.2xlarge", + "m4.large", + "m4.xlarge", + "m4.2xlarge", + "m4.4xlarge", + "m4.10xlarge", + "m4.16xlarge", + "c4.large", + "c4.xlarge", + "c4.2xlarge", + "c4.4xlarge", + "c4.8xlarge", + "c3.large", + "c3.xlarge", + "c3.2xlarge", + "c3.4xlarge", + "c3.8xlarge", + "r3.large", + "r3.xlarge", + "r3.2xlarge", + "r3.4xlarge", + "r3.8xlarge", + "r4.large", + "r4.xlarge", + "r4.2xlarge", + "r4.4xlarge", + "r4.8xlarge", + "r4.16xlarge", + "x1.16xlarge", + "x1.32xlarge", + "i2.xlarge", + "i2.2xlarge", + "i2.4xlarge", + "i2.8xlarge", + "i3.large", + "i3.xlarge", + "i3.2xlarge", + "i3.4xlarge", + "i3.8xlarge", + "i3.16xlarge", + "d2.xlarge", + "d2.2xlarge", + "d2.4xlarge", + "d2.8xlarge", + "p2.xlarge", + "p2.8xlarge", + "p2.16xlarge", + "g2.2xlarge", + "g2.8xlarge", + "f1.2xlarge", + "f1.16xlarge", + "t1.micro", + "m1.small", + "m1.large", + "m1.xlarge", + "c1.medium", + "c1.xlarge", + "m2.xlarge", + "m2.2xlarge", + "m2.4xlarge", + "cc1.4xlarge" + ], + "length": 71 + } + } + }, + { + "string": "scissor-fr1.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "scissor-fr1.contextualization.type", + "description": "Contextualization type", + "category": "scissor-fr1", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + }, + { + "string": "nuvlabox-max-planck.cpu", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "1", + "name": "nuvlabox-max-planck.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "category": "nuvlabox-max-planck", + "type": "String", + "mandatory": true, + "value": "1", + "order_": 10, + "order": 10 + } + }, + { + "string": "exoscale-ch-dk.disk", + "parameter": { + "instructions": "Some disk sizes might not be available with all operating system and all instance type", + "isSet": true, + "defaultValue": "10G", + "description": "Size of the root disk", + "type": "Enum", + "mandatory": true, + "order_": 20, + "readonly": false, + "name": "exoscale-ch-dk.disk", + "category": "exoscale-ch-dk", + "value": "10G", + "order": 20, + "enumValues": { + "string": [ + "10G", + "50G", + "100G", + "200G", + "400G", + "800G", + "1600G" + ], + "length": 7 + } + } + }, + { + "string": "ec2-us-west-2.security.groups", + "parameter": { + "instructions": "If you don't know what is a security group or if you don't want to take care of them, you can use the special value slipstream_managed to let SlipStream generate a security group with everything allowed.", + "readonly": false, + "isSet": true, + "defaultValue": "slipstream_managed", + "name": "ec2-us-west-2.security.groups", + "description": "Security Groups (comma separated list)", + "category": "ec2-us-west-2", + "type": "String", + "mandatory": true, + "value": "slipstream_managed", + "order_": 0, + "order": 0 + } + }, + { + "string": "nuvlabox-felix-bloch.contextualization.type", + "parameter": { + "readonly": false, + "isSet": true, + "defaultValue": "one-context", + "name": "nuvlabox-felix-bloch.contextualization.type", + "description": "Contextualization type", + "category": "nuvlabox-felix-bloch", + "type": "Enum", + "mandatory": true, + "value": "one-context", + "order_": 100, + "order": 100, + "enumValues": { + "string": [ + "one-context", + "cloud-init" + ], + "length": 2 + } + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + } + }, + "imageUri": "module/examples/tutorials/service-testing/client", + "deleted": false, + "notes": { + "length": 0 + }, + "parameterMappings": { + "entry": [ + { + "string": "webserver.port", + "parameter": { + "readonly": false, + "isMappedValue": true, + "name": "webserver.port", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "apache:port", + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.ready", + "parameter": { + "readonly": false, + "isMappedValue": true, + "name": "webserver.ready", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "apache:ready", + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.hostname", + "parameter": { + "readonly": false, + "isMappedValue": true, + "name": "webserver.hostname", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "apache:hostname", + "order_": 0, + "order": 0 + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "name": "testclient", + "maxProvisioningFailures": 0, + "parameters": { + "entry": [ + { + "string": "webserver.port", + "parameter": { + "readonly": false, + "isMappedValue": true, + "name": "webserver.port", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "apache:port", + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.ready", + "parameter": { + "readonly": false, + "isMappedValue": true, + "name": "webserver.ready", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "apache:ready", + "order_": 0, + "order": 0 + } + }, + { + "string": "webserver.hostname", + "parameter": { + "readonly": false, + "isMappedValue": true, + "name": "webserver.hostname", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "apache:hostname", + "order_": 0, + "order": 0 + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "creation": "2015-10-20 08:40:43.893 UTC", + "cloudService": "default", + "network": "Public" + }, + "string": "testclient" + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "targetsExpanded": { + "class": "java.util.HashSet" + }, + "name": "examples/tutorials/service-testing/system", + "lastModified": "2016-08-24 09:52:20.481 UTC", + "category": "Deployment", + "shortName": "system", + "class": "com.sixsq.slipstream.persistence.DeploymentModule", + "parameters": { + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "creation": "2013-10-30 09:54:53.989 UTC", + "authz": { + "owner": "sixsq", + "groupMembers": { + "string": [ + "elegoff", + "khaled", + "konstan", + "lionel", + "loomis", + "meb", + "cjdcsixsq" + ], + "class": "java.util.ArrayList" + }, + "ownerGet": true, + "ownerDelete": true, + "groupPost": true, + "publicPost": true, + "publicCreateChildren": false, + "ownerCreateChildren": true, + "publicGet": true, + "inheritedGroupMembers": true, + "ownerPost": true, + "groupCreateChildren": false, + "publicPut": false, + "groupGet": true, + "groupDelete": false, + "ownerPut": true, + "publicDelete": false, + "groupPut": true + } + }, + "lastStateChangeTime": "2017-09-14 08:18:38.882 UTC", + "groups": "nuvlabox-carl-cori:apache,nuvlabox-carl-cori:testclient", + "resourceUri": "run/97089b96-5d99-4ccd-9bfe-99ba3ca21ae2", + "type": "Orchestration", + "uuid": "97089b96-5d99-4ccd-9bfe-99ba3ca21ae2", + "nodeNames": "apache.1,testclient.1,orchestrator-nuvlabox-carl-cori", + "deleted": false, + "moduleResourceUri": "module/examples/tutorials/service-testing/system/1940", + "mutable": false, + "runtimeParameters": { + "entry": [ + { + "string": "testclient.1:nuvlabox-carl-cori.cpu", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "type": "String", + "key": "testclient.1:nuvlabox-carl-cori.cpu", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "1", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:vmstate", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "vmstate", + "description": "State of the VM, according to the cloud layer", + "type": "String", + "key": "testclient.1:vmstate", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "Unknown", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:image.id", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.id", + "description": "Cloud image id", + "type": "String", + "key": "apache.1:image.id", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "d88f85a9489e5c05aa2f06a4a878826f", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:cpu.nb", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "cpu.nb", + "description": "Number of CPUs", + "type": "String", + "key": "apache.1:cpu.nb", + "creation": "2017-09-14 08:12:23.614 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "ss:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Run abort flag, set when aborting", + "type": "String", + "key": "ss:abort", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:vmstate", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "vmstate", + "description": "State of the VM, according to the cloud layer", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:vmstate", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "Unknown", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:nuvlabox-carl-cori.contextualization.type", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.contextualization.type", + "description": "Contextualization type", + "type": "Enum", + "key": "apache.1:nuvlabox-carl-cori.contextualization.type", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "one-context", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:vmstate", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "vmstate", + "description": "State of the VM, according to the cloud layer", + "type": "String", + "key": "apache.1:vmstate", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "Unknown", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:scale.iaas.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.iaas.done", + "description": "Orchestrator sets to 'true' after scaling the node instance", + "type": "String", + "key": "testclient.1:scale.iaas.done", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "false", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:nuvlabox-carl-cori.is.firewall", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.is.firewall", + "description": "Firewalling", + "type": "Boolean", + "key": "testclient.1:nuvlabox-carl-cori.is.firewall", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "false", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:disk.detach.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.detach.device", + "description": "Name of the block device to detach from the VM during vertical scaling", + "type": "String", + "key": "testclient.1:disk.detach.device", + "creation": "2017-09-14 08:12:23.628 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.service", + "description": "Optional service URL for virtual machine", + "type": "String", + "key": "testclient.1:url.service", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "ssh://root@172.16.0.11", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:statecustom", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "statecustom", + "description": "Custom state", + "type": "String", + "key": "testclient.1:statecustom", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "OK: Hello from Apache deployed by SlipStream!", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:ram.GB", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "ram.GB", + "description": "RAM in GB", + "type": "String", + "key": "testclient.1:ram.GB", + "creation": "2017-09-14 08:12:23.666 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:nodename", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nodename", + "description": "Nodename", + "type": "String", + "key": "testclient.1:nodename", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "testclient", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:disk.attached.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attached.device", + "description": "Attached device name after the VM's vertical scaling", + "type": "String", + "key": "testclient.1:disk.attached.device", + "creation": "2017-09-14 08:12:23.628 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:instanceid", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "instanceid", + "description": "Cloud instance id", + "type": "String", + "key": "apache.1:instanceid", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "282", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "ss:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "complete", + "description": "Global complete flag, set when run completed", + "type": "String", + "key": "ss:complete", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "apache.1:ready", + "runtimeParameter": { + "mappedRuntimeParameterNames": "testclient.1:webserver.ready,", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "ready", + "description": "Server ready to recieve connections", + "type": "String", + "key": "apache.1:ready", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "true", + "group": "apache.1", + "mapsOthers": true + } + }, + { + "string": "ss:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.service", + "description": "Optional service URL for the deployment", + "type": "String", + "key": "ss:url.service", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "http://172.16.0.16:8080", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "testclient.1:hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "hostname", + "description": "hostname/ip of the image", + "type": "String", + "key": "testclient.1:hostname", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "172.16.0.11", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:pre.scale.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "pre.scale.done", + "description": "Node instance sets to 'true' after running pre-scale script", + "type": "String", + "key": "apache.1:pre.scale.done", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "false", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:instanceid", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "instanceid", + "description": "Cloud instance id", + "type": "String", + "key": "testclient.1:instanceid", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "281", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient:multiplicity", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "multiplicity", + "description": "Multiplicity number", + "type": "String", + "key": "testclient:multiplicity", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "1", + "group": "testclient", + "mapsOthers": false + } + }, + { + "string": "testclient.1:image.platform", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.platform", + "description": "Platform (eg: ubuntu, windows)", + "type": "String", + "key": "testclient.1:image.platform", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "ubuntu", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:service-offer", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "service-offer", + "description": "Service Offer Id", + "type": "String", + "key": "apache.1:service-offer", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "service-offer/7327d738-f2f8-4925-9277-64dc72d6a283", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:pre.scale.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "pre.scale.done", + "description": "Node instance sets to 'true' after running pre-scale script", + "type": "String", + "key": "testclient.1:pre.scale.done", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "false", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:extra.disk.volatile", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "type": "String", + "key": "apache.1:extra.disk.volatile", + "creation": "2017-09-14 08:12:23.614 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:is.orchestrator", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "is.orchestrator", + "description": "True if it's an orchestrator", + "type": "String", + "key": "apache.1:is.orchestrator", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "false", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:disk.GB", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.GB", + "description": "Disk in GB", + "type": "String", + "key": "testclient.1:disk.GB", + "creation": "2017-09-14 08:12:23.666 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:nuvlabox-carl-cori.cpu", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.cpu", + "description": "Number of CPUs (i.e. virtual cores)", + "type": "String", + "key": "apache.1:nuvlabox-carl-cori.cpu", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "1", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:disk.GB", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.GB", + "description": "Disk in GB", + "type": "String", + "key": "apache.1:disk.GB", + "creation": "2017-09-14 08:12:23.614 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "complete", + "description": "'true' when current state is completed", + "type": "String", + "key": "testclient.1:complete", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "false", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:url.ssh", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.ssh", + "description": "SSH URL to connect to virtual machine", + "type": "String", + "key": "testclient.1:url.ssh", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "ssh://root@172.16.0.11", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:ram.GB", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "ram.GB", + "description": "RAM in GB", + "type": "String", + "key": "apache.1:ram.GB", + "creation": "2017-09-14 08:12:23.614 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:nuvlabox-carl-cori.ram", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.ram", + "description": "Amount of RAM, in GB", + "type": "String", + "key": "apache.1:nuvlabox-carl-cori.ram", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "0.5", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:port", + "runtimeParameter": { + "mappedRuntimeParameterNames": "testclient.1:webserver.port,", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "port", + "description": "Port", + "type": "String", + "key": "apache.1:port", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "8080", + "group": "apache.1", + "mapsOthers": true + } + }, + { + "string": "testclient.1:webserver.port", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "webserver.port", + "description": "Port on which the web server listens", + "type": "String", + "key": "testclient.1:webserver.port", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "8080", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:nuvlabox-carl-cori.network.specific.name", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-carl-cori.network.specific.name", + "description": "Network name", + "type": "String", + "key": "testclient.1:nuvlabox-carl-cori.network.specific.name", + "creation": "2017-09-14 08:12:23.666 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:cloudservice", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "cloudservice", + "description": "Cloud Service where the node resides", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:cloudservice", + "creation": "2017-09-14 08:12:23.680 UTC", + "content": "nuvlabox-carl-cori", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:scale.state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.state", + "description": "Defined scalability state", + "type": "String", + "key": "apache.1:scale.state", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "operational", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:is.orchestrator", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "is.orchestrator", + "description": "True if it's an orchestrator", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:is.orchestrator", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "true", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:nuvlabox-carl-cori.custom.vm.template", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-carl-cori.custom.vm.template", + "description": "Additional custom textual VM template", + "type": "RestrictedText", + "key": "apache.1:nuvlabox-carl-cori.custom.vm.template", + "creation": "2017-09-14 08:12:23.614 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:extra.disk.volatile", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "extra.disk.volatile", + "description": "Volatile extra disk in GB", + "type": "String", + "key": "testclient.1:extra.disk.volatile", + "creation": "2017-09-14 08:12:23.666 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:webserver.ready", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "webserver.ready", + "description": "Server ready to recieve connections", + "type": "String", + "key": "testclient.1:webserver.ready", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "true", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:cpu.nb", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "cpu.nb", + "description": "Number of CPUs", + "type": "String", + "key": "testclient.1:cpu.nb", + "creation": "2017-09-14 08:12:23.666 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:cloudservice", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "cloudservice", + "description": "Cloud Service where the node resides", + "type": "String", + "key": "apache.1:cloudservice", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "nuvlabox-carl-cori", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "url.service", + "description": "Optional service URL for virtual machine", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:url.service", + "creation": "2017-09-14 08:12:23.679 UTC", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:disk.attached.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attached.device", + "description": "Attached device name after the VM's vertical scaling", + "type": "String", + "key": "apache.1:disk.attached.device", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:nuvlabox-carl-cori.custom.vm.template", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-carl-cori.custom.vm.template", + "description": "Additional custom textual VM template", + "type": "RestrictedText", + "key": "testclient.1:nuvlabox-carl-cori.custom.vm.template", + "creation": "2017-09-14 08:12:23.666 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:network", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "network", + "description": "Network type", + "type": "Enum", + "key": "apache.1:network", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "Public", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:max.iaas.workers", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "max.iaas.workers", + "description": "Max number of concurrently provisioned VMs by orchestrator", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:max.iaas.workers", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "7", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "testclient.1:network", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "network", + "description": "Network type", + "type": "Enum", + "key": "testclient.1:network", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "Public", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "testclient.1:webserver.hostname,", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "hostname", + "description": "hostname/ip of the image", + "type": "String", + "key": "apache.1:hostname", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "172.16.0.16", + "group": "apache.1", + "mapsOthers": true + } + }, + { + "string": "apache:ids", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "ids", + "description": "IDs of the machines in a mutable deployment.", + "type": "String", + "key": "apache:ids", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "1", + "group": "apache", + "mapsOthers": false + } + }, + { + "string": "apache.1:disk.attach.size", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attach.size", + "description": "Size of the extra disk to attach to the VM during vertical scaling", + "type": "String", + "key": "apache.1:disk.attach.size", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:scale.iaas.done", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.iaas.done", + "description": "Orchestrator sets to 'true' after scaling the node instance", + "type": "String", + "key": "apache.1:scale.iaas.done", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "false", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:cloudservice", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "cloudservice", + "description": "Cloud Service where the node resides", + "type": "String", + "key": "testclient.1:cloudservice", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "nuvlabox-carl-cori", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "complete", + "description": "'true' when current state is completed", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:complete", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "false", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache:multiplicity", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "multiplicity", + "description": "Multiplicity number", + "type": "String", + "key": "apache:multiplicity", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "1", + "group": "apache", + "mapsOthers": false + } + }, + { + "string": "testclient:ids", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "ids", + "description": "IDs of the machines in a mutable deployment.", + "type": "String", + "key": "testclient:ids", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "1", + "group": "testclient", + "mapsOthers": false + } + }, + { + "string": "testclient.1:image.id", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.id", + "description": "Cloud image id", + "type": "String", + "key": "testclient.1:image.id", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "d88f85a9489e5c05aa2f06a4a878826f", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:disk.detach.device", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.detach.device", + "description": "Name of the block device to detach from the VM during vertical scaling", + "type": "String", + "key": "apache.1:disk.detach.device", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:url.ssh", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.ssh", + "description": "SSH URL to connect to virtual machine", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:url.ssh", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "ssh://root@172.16.0.18", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:complete", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "complete", + "description": "'true' when current state is completed", + "type": "String", + "key": "apache.1:complete", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "false", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient:max-provisioning-failures", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "max-provisioning-failures", + "description": "Max provisioning failures", + "type": "String", + "key": "testclient:max-provisioning-failures", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "0", + "group": "testclient", + "mapsOthers": false + } + }, + { + "string": "apache.1:url.ssh", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.ssh", + "description": "SSH URL to connect to virtual machine", + "type": "String", + "key": "apache.1:url.ssh", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "ssh://root@172.16.0.16", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:instanceid", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "instanceid", + "description": "Cloud instance id", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:instanceid", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "280", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:nodename", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nodename", + "description": "Nodename", + "type": "String", + "key": "apache.1:nodename", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "apache", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Machine abort flag, set when aborting", + "type": "String", + "key": "testclient.1:abort", + "creation": "2017-09-14 08:12:23.628 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "ss:state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "state", + "description": "Global execution state", + "type": "String", + "key": "ss:state", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "Done", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:groups", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "groups", + "description": "Comma separated node groups", + "type": "String", + "key": "ss:groups", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "nuvlabox-carl-cori:apache,nuvlabox-carl-cori:testclient", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "ss:tags", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "tags", + "description": "Comma separated tag values", + "type": "String", + "key": "ss:tags", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "apache.1:statecustom", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "statecustom", + "description": "Custom state", + "type": "String", + "key": "apache.1:statecustom", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "Executing script 'module/examples/tutorials/service-testing/apache/13791:Deployment'", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:scale.state", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "scale.state", + "description": "Defined scalability state", + "type": "String", + "key": "testclient.1:scale.state", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "operational", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:url.service", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "url.service", + "description": "Optional service URL for virtual machine", + "type": "String", + "key": "apache.1:url.service", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "http://172.16.0.16:8080", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "ss:category", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "category", + "description": "Module category", + "type": "String", + "key": "ss:category", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "Deployment", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "apache.1:id", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "id", + "description": "Node instance id", + "type": "String", + "key": "apache.1:id", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "1", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:id", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "id", + "description": "Node instance id", + "type": "String", + "key": "testclient.1:id", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "1", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "ss:recovery.mode", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "recovery.mode", + "description": "Run abort flag, set when aborting", + "type": "String", + "key": "ss:recovery.mode", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "false", + "group": "Global", + "mapsOthers": false + } + }, + { + "string": "testclient.1:is.orchestrator", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "is.orchestrator", + "description": "True if it's an orchestrator", + "type": "String", + "key": "testclient.1:is.orchestrator", + "creation": "2017-09-14 08:12:23.628 UTC", + "content": "false", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:statecustom", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "statecustom", + "description": "Custom state", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:statecustom", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "No node instances to stop [2017-09-14T08:14:34Z].", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:image.platform", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "image.platform", + "description": "Platform (eg: ubuntu, windows)", + "type": "String", + "key": "apache.1:image.platform", + "creation": "2017-09-14 08:12:23.613 UTC", + "content": "ubuntu", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:disk.attach.size", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "disk.attach.size", + "description": "Size of the extra disk to attach to the VM during vertical scaling", + "type": "String", + "key": "testclient.1:disk.attach.size", + "creation": "2017-09-14 08:12:23.628 UTC", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:nuvlabox-carl-cori.contextualization.type", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.contextualization.type", + "description": "Contextualization type", + "type": "Enum", + "key": "testclient.1:nuvlabox-carl-cori.contextualization.type", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "one-context", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "hostname", + "description": "hostname/ip of the image", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:hostname", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "172.16.0.18", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "testclient.1:webserver.hostname", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "webserver.hostname", + "description": "Server hostname", + "type": "String", + "key": "testclient.1:webserver.hostname", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "172.16.0.16", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:service-offer", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "service-offer", + "description": "Service Offer Id", + "type": "String", + "key": "testclient.1:service-offer", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "service-offer/7327d738-f2f8-4925-9277-64dc72d6a283", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "apache:max-provisioning-failures", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "max-provisioning-failures", + "description": "Max provisioning failures", + "type": "String", + "key": "apache:max-provisioning-failures", + "creation": "2017-09-14 08:12:23.679 UTC", + "content": "0", + "group": "apache", + "mapsOthers": false + } + }, + { + "string": "apache.1:nuvlabox-carl-cori.is.firewall", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.is.firewall", + "description": "Firewalling", + "type": "Boolean", + "key": "apache.1:nuvlabox-carl-cori.is.firewall", + "creation": "2017-09-14 08:12:23.614 UTC", + "content": "false", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "testclient.1:nuvlabox-carl-cori.ram", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": true, + "name": "nuvlabox-carl-cori.ram", + "description": "Amount of RAM, in GB", + "type": "String", + "key": "testclient.1:nuvlabox-carl-cori.ram", + "creation": "2017-09-14 08:12:23.666 UTC", + "content": "0.5", + "group": "testclient.1", + "mapsOthers": false + } + }, + { + "string": "orchestrator-nuvlabox-carl-cori:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Machine abort flag, set when aborting", + "type": "String", + "key": "orchestrator-nuvlabox-carl-cori:abort", + "creation": "2017-09-14 08:12:23.679 UTC", + "group": "orchestrator-nuvlabox-carl-cori", + "mapsOthers": false + } + }, + { + "string": "apache.1:abort", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "abort", + "description": "Machine abort flag, set when aborting", + "type": "String", + "key": "apache.1:abort", + "creation": "2017-09-14 08:12:23.613 UTC", + "group": "apache.1", + "mapsOthers": false + } + }, + { + "string": "apache.1:nuvlabox-carl-cori.network.specific.name", + "runtimeParameter": { + "mappedRuntimeParameterNames": "", + "deleted": false, + "isMappedValue": false, + "isSet": false, + "name": "nuvlabox-carl-cori.network.specific.name", + "description": "Network name", + "type": "String", + "key": "apache.1:nuvlabox-carl-cori.network.specific.name", + "creation": "2017-09-14 08:12:23.614 UTC", + "group": "apache.1", + "mapsOthers": false + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "cloudServiceNames": "nuvlabox-carl-cori", + "startTime": "2017-09-14 08:12:23.474 UTC", + "state": "Done", + "endTime": "2017-09-14 08:18:38.882 UTC", + "category": "Deployment", + "user": "khaled", + "parameters": { + "entry": [ + { + "string": "testclient:run-build-recipes", + "parameter": { + "readonly": false, + "name": "testclient:run-build-recipes", + "description": "Define if the SlipStream executor should run build recipes.", + "category": "General", + "type": "String", + "mandatory": false, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:service-offer", + "parameter": { + "readonly": false, + "name": "apache:service-offer", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "service-offer/7327d738-f2f8-4925-9277-64dc72d6a283", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:disk.GB", + "parameter": { + "readonly": false, + "name": "testclient:disk.GB", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "", + "order_": 0, + "order": 0 + } + }, + { + "string": "garbage_collected", + "parameter": { + "readonly": false, + "name": "garbage_collected", + "description": "true if the Run was already garbage collected", + "category": "General", + "type": "String", + "mandatory": false, + "value": "false", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:ram.GB", + "parameter": { + "readonly": false, + "name": "testclient:ram.GB", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:cloudservice", + "parameter": { + "readonly": false, + "name": "apache:cloudservice", + "description": "Cloud Service where the node resides", + "category": "General", + "type": "String", + "mandatory": false, + "value": "nuvlabox-carl-cori", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:cpu.nb", + "parameter": { + "readonly": false, + "name": "apache:cpu.nb", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:service-offer", + "parameter": { + "readonly": false, + "name": "testclient:service-offer", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "service-offer/7327d738-f2f8-4925-9277-64dc72d6a283", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:cloudservice", + "parameter": { + "readonly": false, + "name": "testclient:cloudservice", + "description": "Cloud Service where the node resides", + "category": "General", + "type": "String", + "mandatory": false, + "value": "nuvlabox-carl-cori", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:multiplicity", + "parameter": { + "readonly": false, + "name": "apache:multiplicity", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "1", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:run-build-recipes", + "parameter": { + "readonly": false, + "name": "apache:run-build-recipes", + "description": "Define if the SlipStream executor should run build recipes.", + "category": "General", + "type": "String", + "mandatory": false, + "value": "true", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:cpu.nb", + "parameter": { + "readonly": false, + "name": "testclient:cpu.nb", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "", + "order_": 0, + "order": 0 + } + }, + { + "string": "General.keep-running", + "parameter": { + "readonly": false, + "name": "General.keep-running", + "description": "Keep running after deployment", + "category": "General", + "type": "String", + "mandatory": false, + "value": "always", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:max-provisioning-failures", + "parameter": { + "readonly": false, + "name": "apache:max-provisioning-failures", + "description": "Max provisioning failures", + "category": "General", + "type": "String", + "mandatory": false, + "value": "0", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:max-provisioning-failures", + "parameter": { + "readonly": false, + "name": "testclient:max-provisioning-failures", + "description": "Max provisioning failures", + "category": "General", + "type": "String", + "mandatory": false, + "value": "0", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:disk.GB", + "parameter": { + "readonly": false, + "name": "apache:disk.GB", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:node.increment", + "parameter": { + "readonly": false, + "name": "apache:node.increment", + "description": "Current increment value for node instances ids", + "category": "General", + "type": "String", + "mandatory": false, + "value": "2", + "order_": 0, + "order": 0 + } + }, + { + "string": "apache:ram.GB", + "parameter": { + "readonly": false, + "name": "apache:ram.GB", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:node.increment", + "parameter": { + "readonly": false, + "name": "testclient:node.increment", + "description": "Current increment value for node instances ids", + "category": "General", + "type": "String", + "mandatory": false, + "value": "2", + "order_": 0, + "order": 0 + } + }, + { + "string": "testclient:multiplicity", + "parameter": { + "readonly": false, + "name": "testclient:multiplicity", + "description": "", + "category": "General", + "type": "String", + "mandatory": false, + "value": "1", + "order_": 0, + "order": 0 + } + } + ], + "class": "org.hibernate.collection.internal.PersistentMap" + }, + "creation": "2017-09-14 08:12:23.474 UTC" + } +} \ No newline at end of file diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment/java_to_clj_deployment_test.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment/java_to_clj_deployment_test.clj new file mode 100644 index 000000000..f0dcee898 --- /dev/null +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment/java_to_clj_deployment_test.clj @@ -0,0 +1,451 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment.java-to-clj-deployment-test + (:require [com.sixsq.slipstream.ssclj.resources.deployment.java-to-clj-deployment :refer :all] + [clojure.test :refer :all] + [clojure.data.json :as json] + [clojure.data :as data])) + + +(def test-deployment-application-json + (-> "test-resources/deployment-service-testing.json" + slurp + (json/read-str :key-fn keyword))) + +(def test-deployment-build-json + (-> "test-resources/deployment-build-apache-testing.json" + slurp + (json/read-str :key-fn keyword))) + +(def test-deployment-image-json + (-> "test-resources/deployment-image-wordpress-testing.json" + slurp + (json/read-str :key-fn keyword))) + +(def deployment-application-result-edn + {:id "deployment/97089b96-5d99-4ccd-9bfe-99ba3ca21ae2", + :state "Done", + :type "Orchestration", + :category "Deployment", + :module-resource-uri + "module/examples/tutorials/service-testing/system/1940", + :mutable false, + :keep-running "always", + :nodes + {:apache + {:runtime-parameters + {:scale.iaas.done + {:description + "Orchestrator sets to 'true' after scaling the node instance", + :value "false"}, + :nuvlabox-carl-cori.custom.vm.template + {:description "Additional custom textual VM template", :value nil}, + :ready + {:description "Server ready to recieve connections", + :value "true", + :mapped-to ["testclient.1:webserver.ready"]}, + :nuvlabox-carl-cori.is.firewall + {:description "Firewalling", :value "false"}, + :vmstate + {:description "State of the VM, according to the cloud layer", + :value "Unknown"}, + :pre.scale.done + {:description + "Node instance sets to 'true' after running pre-scale script", + :value "false"}, + :nuvlabox-carl-cori.cpu + {:description "Number of CPUs (i.e. virtual cores)", :value "1"}, + :disk.attached.device + {:description + "Attached device name after the VM's vertical scaling", + :value nil}, + :instanceid {:description "Cloud instance id", :value "282"}, + :extra.disk.volatile + {:description "Volatile extra disk in GB", :value nil}, + :statecustom + {:description "Custom state", + :value + "Executing script 'module/examples/tutorials/service-testing/apache/13791:Deployment'"}, + :ids + {:description "IDs of the machines in a mutable deployment.", + :value "1"}, + :hostname + {:description "hostname/ip of the image", + :value "172.16.0.16", + :mapped-to ["testclient.1:webserver.hostname"]}, + :port + {:description "Port", + :value "8080", + :mapped-to ["testclient.1:webserver.port"]}, + :abort + {:description "Machine abort flag, set when aborting", :value nil}, + :nuvlabox-carl-cori.network.specific.name + {:description "Network name", :value nil}, + :image.id + {:description "Cloud image id", + :value "d88f85a9489e5c05aa2f06a4a878826f"}, + :scale.state + {:description "Defined scalability state", :value "operational"}, + :disk.detach.device + {:description + "Name of the block device to detach from the VM during vertical scaling", + :value nil}, + :is.orchestrator + {:description "True if it's an orchestrator", :value "false"}, + :nuvlabox-carl-cori.ram + {:description "Amount of RAM, in GB", :value "0.5"}, + :id {:description "Node instance id", :value "1"}, + :url.ssh + {:description "SSH URL to connect to virtual machine", + :value "ssh://root@172.16.0.16"}, + :complete + {:description "'true' when current state is completed", + :value "false"}, + :network {:description "Network type", :value "Public"}, + :url.service + {:description "Optional service URL for virtual machine", + :value "http://172.16.0.16:8080"}, + :nuvlabox-carl-cori.contextualization.type + {:description "Contextualization type", :value "one-context"}, + :nodename {:description "Nodename", :value "apache"}, + :image.platform + {:description "Platform (eg: ubuntu, windows)", :value "ubuntu"}, + :disk.attach.size + {:description + "Size of the extra disk to attach to the VM during vertical scaling", + :value nil}}, + :parameters + {:service-offer + {:description "", + :value "service-offer/7327d738-f2f8-4925-9277-64dc72d6a283"}, + :cloudservice + {:description "Cloud Service where the node resides", + :value "nuvlabox-carl-cori"}, + :cpu.nb {:description "", :value ""}, + :multiplicity {:description "", :value "1"}, + :run-build-recipes + {:description + "Define if the SlipStream executor should run build recipes.", + :value "true"}, + :max-provisioning-failures + {:description "Max provisioning failures", :value "0"}, + :disk.GB {:description "", :value ""}, + :node.increment + {:description "Current increment value for node instances ids", + :value "2"}, + :ram.GB {:description "", :value ""}}}, + :testclient + {:runtime-parameters + {:scale.iaas.done + {:description + "Orchestrator sets to 'true' after scaling the node instance", + :value "false"}, + :nuvlabox-carl-cori.custom.vm.template + {:description "Additional custom textual VM template", :value nil}, + :nuvlabox-carl-cori.is.firewall + {:description "Firewalling", :value "false"}, + :vmstate + {:description "State of the VM, according to the cloud layer", + :value "Unknown"}, + :pre.scale.done + {:description + "Node instance sets to 'true' after running pre-scale script", + :value "false"}, + :nuvlabox-carl-cori.cpu + {:description "Number of CPUs (i.e. virtual cores)", :value "1"}, + :webserver.port + {:description "Port on which the web server listens", + :value "8080"}, + :disk.attached.device + {:description + "Attached device name after the VM's vertical scaling", + :value nil}, + :instanceid {:description "Cloud instance id", :value "281"}, + :extra.disk.volatile + {:description "Volatile extra disk in GB", :value nil}, + :statecustom + {:description "Custom state", + :value "OK: Hello from Apache deployed by SlipStream!"}, + :ids + {:description "IDs of the machines in a mutable deployment.", + :value "1"}, + :hostname + {:description "hostname/ip of the image", :value "172.16.0.11"}, + :abort + {:description "Machine abort flag, set when aborting", :value nil}, + :nuvlabox-carl-cori.network.specific.name + {:description "Network name", :value nil}, + :image.id + {:description "Cloud image id", + :value "d88f85a9489e5c05aa2f06a4a878826f"}, + :scale.state + {:description "Defined scalability state", :value "operational"}, + :disk.detach.device + {:description + "Name of the block device to detach from the VM during vertical scaling", + :value nil}, + :webserver.hostname + {:description "Server hostname", :value "172.16.0.16"}, + :is.orchestrator + {:description "True if it's an orchestrator", :value "false"}, + :nuvlabox-carl-cori.ram + {:description "Amount of RAM, in GB", :value "0.5"}, + :id {:description "Node instance id", :value "1"}, + :url.ssh + {:description "SSH URL to connect to virtual machine", + :value "ssh://root@172.16.0.11"}, + :complete + {:description "'true' when current state is completed", + :value "false"}, + :webserver.ready + {:description "Server ready to recieve connections", + :value "true"}, + :network {:description "Network type", :value "Public"}, + :url.service + {:description "Optional service URL for virtual machine", + :value "ssh://root@172.16.0.11"}, + :nuvlabox-carl-cori.contextualization.type + {:description "Contextualization type", :value "one-context"}, + :nodename {:description "Nodename", :value "testclient"}, + :image.platform + {:description "Platform (eg: ubuntu, windows)", :value "ubuntu"}, + :disk.attach.size + {:description + "Size of the extra disk to attach to the VM during vertical scaling", + :value nil}}, + :parameters + {:run-build-recipes + {:description + "Define if the SlipStream executor should run build recipes.", + :value "false"}, + :disk.GB {:description "", :value ""}, + :ram.GB {:description "", :value ""}, + :service-offer + {:description "", + :value "service-offer/7327d738-f2f8-4925-9277-64dc72d6a283"}, + :cloudservice + {:description "Cloud Service where the node resides", + :value "nuvlabox-carl-cori"}, + :cpu.nb {:description "", :value ""}, + :max-provisioning-failures + {:description "Max provisioning failures", :value "0"}, + :node.increment + {:description "Current increment value for node instances ids", + :value "2"}, + :multiplicity {:description "", :value "1"}}}, + :orchestrator-nuvlabox-carl-cori + {:runtime-parameters + {:vmstate + {:description "State of the VM, according to the cloud layer", + :value "Unknown"}, + :instanceid {:description "Cloud instance id", :value "280"}, + :max.iaas.workers + {:description + "Max number of concurrently provisioned VMs by orchestrator", + :value "7"}, + :statecustom + {:description "Custom state", + :value "No node instances to stop [2017-09-14T08:14:34Z]."}, + :hostname + {:description "hostname/ip of the image", :value "172.16.0.18"}, + :abort + {:description "Machine abort flag, set when aborting", :value nil}, + :is.orchestrator + {:description "True if it's an orchestrator", :value "true"}, + :url.ssh + {:description "SSH URL to connect to virtual machine", + :value "ssh://root@172.16.0.18"}, + :complete + {:description "'true' when current state is completed", + :value "false"}, + :url.service + {:description "Optional service URL for virtual machine", + :value nil}}}}} + ) + +(def deployment-build-image-result-edn + {:id "deployment/380798cb-bb04-41e4-8498-d8ee090e1643", + :state "Done", + :type "Machine", + :category "Image", + :module-resource-uri + "module/examples/tutorials/service-testing/apache/5071", + :mutable false, + :keep-running "always", + :nodes + {:machine + {:runtime-parameters + {:scale.iaas.done + {:description + "Orchestrator sets to 'true' after scaling the node instance", + :value "false"}, + :ready + {:description "Server ready to recieve connections", :value nil}, + :vmstate + {:description "State of the VM, according to the cloud layer", + :value "Unknown"}, + :pre.scale.done + {:description + "Node instance sets to 'true' after running pre-scale script", + :value "false"}, + :disk.attached.device + {:description + "Attached device name after the VM's vertical scaling", + :value nil}, + :nuvlabox-stanley-cohen.is.firewall + {:description + "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + :value "false"}, + :instanceid {:description "Cloud instance id", :value "120"}, + :extra.disk.volatile + {:description "Volatile extra disk in GB", :value nil}, + :statecustom {:description "Custom state", :value "Image saved !"}, + :hostname + {:description "hostname/ip of the image", :value "172.16.0.15"}, + :port {:description "Port", :value "8080"}, + :abort + {:description "Machine abort flag, set when aborting", :value nil}, + :image.id + {:description "Cloud image id", + :value "d88f85a9489e5c05aa2f06a4a878826f"}, + :scale.state + {:description "Defined scalability state", :value "creating"}, + :disk.detach.device + {:description + "Name of the block device to detach from the VM during vertical scaling", + :value nil}, + :is.orchestrator + {:description "True if it's an orchestrator", :value "false"}, + :nuvlabox-stanley-cohen.cpu + {:description "Number of CPUs (i.e. virtual cores)", :value "1"}, + :nuvlabox-stanley-cohen.custom.vm.template + {:description "Additional custom VM template", :value nil}, + :url.ssh + {:description "SSH URL to connect to virtual machine", + :value "ssh://root@172.16.0.15"}, + :nuvlabox-stanley-cohen.ram + {:description "Amount of RAM, in GB", :value "0.5"}, + :complete + {:description "'true' when current state is completed", + :value "false"}, + :network {:description "Network type", :value "Public"}, + :url.service + {:description "Optional service URL for virtual machine", + :value nil}, + :nuvlabox-stanley-cohen.network.specific.name + {:description "Network name", :value nil}, + :image.platform + {:description "Platform (eg: ubuntu, windows)", :value "ubuntu"}, + :disk.attach.size + {:description + "Size of the extra disk to attach to the VM during vertical scaling", + :value nil}}, + :parameters + {:cloudservice {:description "", :value "nuvlabox-stanley-cohen"}}}}} + ) + +(def deployment-image-result-edn + {:id "deployment/0e0fca32-1bbb-40e3-b2cd-2d97a318694a", + :state "Done", + :type "Run", + :category "Image", + :module-resource-uri "module/apps/WordPress/wordpress/3842", + :mutable false, + :keep-running "always", + :nodes + {:machine + {:runtime-parameters + {:admin_password + {:description "admin password", :value "8rsBZBM659jK"}, + :wordpress_title + {:description "Title (name) to give to the WordPress instance", + :value "Change Me Please 2"}, + :scale.iaas.done + {:description + "Orchestrator sets to 'true' after scaling the node instance", + :value "false"}, + :vmstate + {:description "State of the VM, according to the cloud layer", + :value "Unknown"}, + :pre.scale.done + {:description + "Node instance sets to 'true' after running pre-scale script", + :value "false"}, + :disk.attached.device + {:description + "Attached device name after the VM's vertical scaling", + :value nil}, + :instanceid {:description "Cloud instance id", :value "23"}, + :extra.disk.volatile + {:description "Volatile extra disk in GB", :value nil}, + :statecustom + {:description "Custom state", :value "WordPress ready to go!"}, + :hostname + {:description "hostname/ip of the image", :value "172.16.0.13"}, + :abort + {:description "Machine abort flag, set when aborting", :value nil}, + :nuvlabox-bertil-ohlin.ram + {:description "Amount of RAM, in GB", :value "0.5"}, + :image.id {:description "Cloud image id", :value "8"}, + :scale.state + {:description "Defined scalability state", :value "operational"}, + :disk.detach.device + {:description + "Name of the block device to detach from the VM during vertical scaling", + :value nil}, + :nuvlabox-bertil-ohlin.cpu + {:description "Number of CPUs (i.e. virtual cores)", :value "1"}, + :is.orchestrator + {:description "True if it's an orchestrator", :value "false"}, + :nuvlabox-bertil-ohlin.network.specific.name + {:description "Network name", :value nil}, + :admin_email + {:description "admin email", :value "admin@example.com"}, + :mysql_password + {:description "MySQL password", :value "AX9ytTh2vWF4"}, + :url.ssh + {:description "SSH URL to connect to virtual machine", + :value "ssh://root@172.16.0.13"}, + :complete + {:description "'true' when current state is completed", + :value "false"}, + :network {:description "Network type", :value "Public"}, + :url.service + {:description "Optional service URL for virtual machine", + :value "http://172.16.0.13:8080"}, + :image.platform + {:description "Platform (eg: ubuntu, windows)", :value "ubuntu"}, + :nuvlabox-bertil-ohlin.custom.vm.template + {:description "Additional custom VM template", :value nil}, + :disk.attach.size + {:description + "Size of the extra disk to attach to the VM during vertical scaling", + :value nil}, + :nuvlabox-bertil-ohlin.is.firewall + {:description + "If this flag is set, the instance will be started on the internal network and on the natted network so it can act as a firewall for instances on the internal network.", + :value "false"}}, + :parameters + {:run-build-recipes + {:description + "Define if the SlipStream executor should run build recipes.", + :value "false"}, + :cloudservice {:description "", :value "nuvlabox-bertil-ohlin"}}}}} + ) + +(deftest load-deployment-application-transform + (let [result (transform test-deployment-application-json) + diff-result (data/diff result deployment-application-result-edn)] + (is (and (-> diff-result first nil?) (-> diff-result second nil?))))) + + +(deftest load-deployment-build-transform + (let [result (transform test-deployment-build-json) + diff-result (data/diff result deployment-build-image-result-edn)] + (clojure.pprint/pprint result) + (is (and (-> diff-result first nil?) (-> diff-result second nil?))))) + +(deftest load-deployment-image-transform + (let [result (transform test-deployment-image-json) + diff-result (data/diff result deployment-image-result-edn)] + (is (and (-> diff-result first nil?) (-> diff-result second nil?))))) + + diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment/state_machine_test.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment/state_machine_test.clj new file mode 100644 index 000000000..a407fb9fe --- /dev/null +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment/state_machine_test.clj @@ -0,0 +1,22 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment.state-machine-test + (:require [clojure.test :refer [deftest are is]] + [com.sixsq.slipstream.ssclj.resources.deployment.state-machine :refer :all])) + +(deftest next-state + (is (= executing-state (get-next-state provisioning-state)))) + +(deftest competed-run + (is (is-completed? done-state)) + (is (is-completed? cancelled-state)) + (is (not (is-completed? executing-state)))) + +(deftest can-terminate + (is (can-terminate? ready-state)) + (is (can-terminate? aborted-state)) + (is (can-terminate? cancelled-state)) + (is (not (can-terminate? executing-state)))) + +(deftest is-valid-transition + (is (is-valid-transition? initializing-state cancelled-state)) + (is (is-valid-transition? executing-state cancelled-state)) + (is (not (is-valid-transition? done-state cancelled-state)))) \ No newline at end of file diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_lifecycle_test.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_lifecycle_test.clj new file mode 100644 index 000000000..0512d0555 --- /dev/null +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_lifecycle_test.clj @@ -0,0 +1,447 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-lifecycle-test + (:require + [clojure.test :refer :all] + [clojure.data.json :as json] + [peridot.core :refer :all] + [ring.util.codec :as rc] + [com.sixsq.slipstream.ssclj.resources.deployment :refer :all] + [com.sixsq.slipstream.ssclj.resources.deployment-template :as dt] + [com.sixsq.slipstream.ssclj.resources.deployment-parameter :as dp] + [com.sixsq.slipstream.ssclj.resources.lifecycle-test-utils :as ltu] + [com.sixsq.slipstream.ssclj.middleware.authn-info-header :refer [authn-info-header]] + [com.sixsq.slipstream.ssclj.app.routes :as routes] + [com.sixsq.slipstream.ssclj.app.params :as p] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.ssclj.util.zookeeper :as uzk] + [com.sixsq.slipstream.ssclj.resources.zk.deployment.utils :as zdu] + [com.sixsq.slipstream.ssclj.resources.deployment.utils :as du] + [com.sixsq.slipstream.ssclj.resources.deployment.state-machine :as dsm] + [com.sixsq.slipstream.ssclj.resources.deployment-template-std :as std] + [com.sixsq.slipstream.ssclj.resources.deployment-std :as dstd] + [com.sixsq.slipstream.ssclj.resources.lifecycle-test-utils :as ltu] + [com.sixsq.slipstream.ssclj.resources.common.dynamic-load :as dyn] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [clj-http.fake :refer [with-fake-routes]])) + +(use-fixtures :once ltu/setup-embedded-zk) + +(defn fake-http-java-server [f] + (with-fake-routes + {"http://localhost:8182/run" (fn + [request] + {:status 201 + :headers + {"Location" + "http://localhost:8182/run/97089b96-5d99-4ccd-9bfe-99ba3ca21ae2"}}) + "http://localhost:8182/run/97089b96-5d99-4ccd-9bfe-99ba3ca21ae2" + {:get (fn [request] {:status 200 + :body (slurp "test-resources/deployment-service-testing.json")}) + :post (fn [request] {:status 200}) + :delete (fn [request] {:status 200})}} + (f))) + +(use-fixtures :each (join-fixtures [ltu/with-test-es-client-fixture ltu/cleanup-all-zk-nodes fake-http-java-server])) + +(def base-uri (str p/service-context resource-url)) + +(defn ring-app [] + (ltu/make-ring-app (ltu/concat-routes routes/final-routes))) + +;; initialize must to called to pull in SessionTemplate test examples +(dyn/initialize) + +(defn strip-unwanted-attrs [m] + (let [unwanted #{:id :resourceURI :acl :operations + :created :updated :name :description}] + (into {} (remove #(unwanted (first %)) m)))) + +(deftest create-deployment + + (let [href (str dt/resource-url "/" std/method) + template-url (str p/service-context dt/resource-url "/" std/method) + session-admin (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "super ADMIN")) + session-user (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "test USER ANON")) + session-anon (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "unknown ANON")) + template (-> session-admin + (request template-url) + (ltu/body->edn) + (ltu/is-status 200) + (get-in [:response :body])) + + no-href-create {:deploymentTemplate (strip-unwanted-attrs + (assoc template + :module "module/examples/tutorials/service-testing/system/1940"))} + href-create {:deploymentTemplate {:href href + :module "module/examples/tutorials/service-testing/system/1940"}} + invalid-create (assoc-in href-create [:deploymentTemplate :href] "deployment-template/unknown-template")] + + ;; create a deployment via user + (let [create-req href-create + resp (-> session-user + (request base-uri + :request-method :post + :body (json/write-str create-req)) + (ltu/body->edn) + (ltu/is-status 201)) + id (get-in resp [:response :body :resource-id]) + uri (-> resp + (ltu/location)) + abs-uri (str p/service-context (u/de-camelcase uri))] + + ;; user should be able to see and start, terminate and delete deployment + (-> session-user + (request abs-uri) + (ltu/body->edn) + (ltu/is-status 200) + (ltu/is-operation-present "delete") + (ltu/is-operation-absent "edit") + (ltu/is-operation-present "start") + (ltu/is-operation-present "terminate")) + + ;; admin can delete resource + (-> session-admin + (request abs-uri + :request-method :delete) + (ltu/body->edn) + (ltu/is-status 200))) + (let [create-req href-create + resp (-> session-user + (request base-uri + :request-method :post + :body (json/write-str create-req)) + (ltu/body->edn) + (ltu/is-status 201)) + id (get-in resp [:response :body :resource-id]) + uri (-> resp + (ltu/location)) + abs-uri (str p/service-context (u/de-camelcase uri))] + + ;; admin should be able to see and start, terminate and delete deployment + (-> session-admin + (request abs-uri) + (ltu/body->edn) + (ltu/is-status 200) + (ltu/is-operation-present "delete") + (ltu/is-operation-absent "edit") + (ltu/is-operation-present "start") + (ltu/is-operation-present "terminate")) + + ;; user can delete resource + (-> session-user + (request abs-uri + :request-method :delete) + (ltu/body->edn) + (ltu/is-status 200))))) + +(deftest start-deployment + + (let [href (str dt/resource-url "/" std/method) + template-url (str p/service-context dt/resource-url "/" std/method) + session-admin (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "super ADMIN")) + session-user (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "test USER ANON")) + session-anon (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "unknown ANON")) + template (-> session-admin + (request template-url) + (ltu/body->edn) + (ltu/is-status 200) + (get-in [:response :body])) + + href-create {:deploymentTemplate {:href href + :module "module/examples/tutorials/service-testing/system/1940"}}] + + (let [create-req href-create + resp (-> session-user + (request base-uri + :request-method :post + :body (json/write-str create-req)) + (ltu/body->edn) + (ltu/is-status 201)) + id (get-in resp [:response :body :resource-id]) + uri (-> resp + (ltu/location)) + abs-uri (str p/service-context (u/de-camelcase uri)) + deployment (-> session-user + (request abs-uri) + (ltu/body->edn)) + start-uri (str p/service-context + (ltu/get-op deployment "http://schemas.dmtf.org/cimi/2/action/start")) + started-deployment (-> session-user + (request start-uri :request-method :post) + (ltu/body->edn) + (ltu/is-status 200))] + + (is (not (get-in deployment [:body :start-time]))) + (is (get-in started-deployment [:response :body :start-time])) + + (is (= dsm/initializing-state (get-in started-deployment [:response :body :state]))) + + (are [expected value] + (= expected value) + dsm/initializing-state (uzk/get-data (str zdu/separator uri "/state")) + "Unknown" (uzk/get-data + (str zdu/separator uri "/" zdu/nodes-name "/apache/1/" "vmstate")))))) + + +(deftest update-deployment-state + + (let [href (str dt/resource-url "/" std/method) + template-url (str p/service-context dt/resource-url "/" std/method) + session-admin (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "super ADMIN")) + session-user (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "test USER ANON")) + session-anon (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "unknown ANON")) + template (-> session-admin + (request template-url) + (ltu/body->edn) + (ltu/is-status 200) + (get-in [:response :body])) + + href-create {:deploymentTemplate {:href href + :module "module/examples/tutorials/service-testing/system/1940"}}] + + (let [create-req href-create + resp (-> session-user + (request base-uri + :request-method :post + :body (json/write-str create-req)) + (ltu/body->edn) + (ltu/is-status 201)) + id (get-in resp [:response :body :resource-id]) + uri (-> resp + (ltu/location)) + abs-uri (str p/service-context (u/de-camelcase uri)) + deployment (-> session-user + (request abs-uri) + (ltu/body->edn)) + start-uri (str p/service-context + (ltu/get-op deployment "http://schemas.dmtf.org/cimi/2/action/start")) + started-deployment (-> session-user + (request start-uri :request-method :post) + (ltu/body->edn) + (ltu/is-status 200)) + abs-uri-deployment-parameter-state (str p/service-context dp/resource-url + "/" (du/deployment-href-to-uuid uri) "_state") + update-deployment-parameter-state + (-> session-user + (request abs-uri-deployment-parameter-state :request-method :put + :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 403)) + update-deployment-parameter-state + (-> session-admin + (request abs-uri-deployment-parameter-state :request-method :put + :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + provisioning-deployment (-> session-user + (request abs-uri) + (ltu/body->edn) + (ltu/is-status 200))] + + (is (= dsm/provisioning-state (get-in provisioning-deployment [:response :body :state]))) + + (is (= dsm/provisioning-state (uzk/get-data (str zdu/separator uri "/state")))) + ))) + +(deftest update-deployment-move-states-abort + + (let [href (str dt/resource-url "/" std/method) + template-url (str p/service-context dt/resource-url "/" std/method) + session-admin (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "super ADMIN")) + session-user (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "test USER ANON")) + session-anon (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "unknown ANON")) + template (-> session-admin + (request template-url) + (ltu/body->edn) + (ltu/is-status 200) + (get-in [:response :body])) + + href-create {:deploymentTemplate {:href href + :module "module/examples/tutorials/service-testing/system/1940"}}] + + (let [create-req href-create + resp (-> session-user + (request base-uri + :request-method :post + :body (json/write-str create-req)) + (ltu/body->edn) + (ltu/is-status 201)) + id (get-in resp [:response :body :resource-id]) + uri (-> resp + (ltu/location)) + abs-uri (str p/service-context (u/de-camelcase uri)) + deployment (-> session-user + (request abs-uri) + (ltu/body->edn)) + start-uri (str p/service-context + (ltu/get-op deployment "http://schemas.dmtf.org/cimi/2/action/start")) + started-deployment (-> session-user + (request start-uri :request-method :post) + (ltu/body->edn) + (ltu/is-status 200)) + abs-uri-deployment-parameter-state (str p/service-context dp/resource-url + "/" (du/deployment-href-to-uuid uri) "_state") + update-deployment-parameter-state + (-> session-user + (request abs-uri-deployment-parameter-state :request-method :put + :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 403)) + update-deployment-parameter-state + (-> session-admin + (request abs-uri-deployment-parameter-state :request-method :put + :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + provisioning-deployment (-> session-user + (request abs-uri) + (ltu/body->edn) + (ltu/is-status 200))] + + (-> session-admin + (request (str p/service-context (du/deployment-parameter-href + {:deployment {:href uri} :node-name "testclient" + :node-index 1 :name "complete"})) + :request-method :put :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + (-> session-admin + (request (str p/service-context (du/deployment-parameter-href + {:deployment {:href uri} :node-name "apache" + :node-index 1 :name "complete"})) + :request-method :put :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + + (-> session-admin + (request (str p/service-context (du/deployment-parameter-href + {:deployment {:href uri} :node-name "apache" + :node-index 1 :name "abort"})) + :request-method :put :body (json/write-str {:value "Error in node 1 abort the run"})) + (ltu/body->edn) + (ltu/is-status 200)) + + (is (= 1 (count (uzk/children + (zdu/deployment-state-path uri))))) + + (is (= dsm/aborted-state (uzk/get-data (str zdu/separator uri "/state")))) + + (is (= dsm/aborted-state (-> session-user + (request (str p/service-context uri)) + (ltu/body->edn) + (get-in [:response :body :state])))) + ))) + +(deftest update-deployment-move-states-cancel + + (let [href (str dt/resource-url "/" std/method) + template-url (str p/service-context dt/resource-url "/" std/method) + session-admin (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "super ADMIN")) + session-user (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "test USER ANON")) + session-anon (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "unknown ANON")) + template (-> session-admin + (request template-url) + (ltu/body->edn) + (ltu/is-status 200) + (get-in [:response :body])) + + href-create {:deploymentTemplate {:href href + :module "module/examples/tutorials/service-testing/system/1940"}}] + + (let [create-req href-create + resp (-> session-user + (request base-uri + :request-method :post + :body (json/write-str create-req)) + (ltu/body->edn) + (ltu/is-status 201)) + id (get-in resp [:response :body :resource-id]) + uri (-> resp + (ltu/location)) + abs-uri (str p/service-context (u/de-camelcase uri)) + deployment (-> session-user + (request abs-uri) + (ltu/body->edn)) + start-uri (str p/service-context + (ltu/get-op deployment "http://schemas.dmtf.org/cimi/2/action/start")) + terminate-uri (str p/service-context + (ltu/get-op deployment "http://schemas.dmtf.org/cimi/2/action/terminate")) + started-deployment (-> session-user + (request start-uri :request-method :post) + (ltu/body->edn) + (ltu/is-status 200)) + abs-uri-deployment-parameter-state (str p/service-context dp/resource-url + "/" (du/deployment-href-to-uuid uri) "_state") + + update-deployment-parameter-state + (-> session-admin + (request abs-uri-deployment-parameter-state :request-method :put + :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + provisioning-deployment (-> session-user + (request abs-uri) + (ltu/body->edn) + (ltu/is-status 200))] + + (-> session-admin + (request (str p/service-context (du/deployment-parameter-href + {:deployment {:href uri} :node-name "testclient" + :node-index 1 :name "complete"})) + :request-method :put :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + (-> session-admin + (request (str p/service-context (du/deployment-parameter-href + {:deployment {:href uri} :node-name "apache" + :node-index 1 :name "complete"})) + :request-method :put :body (json/write-str {:value dsm/provisioning-state})) + (ltu/body->edn) + (ltu/is-status 200)) + + (-> session-user + (request terminate-uri :request-method :post) + (ltu/body->edn) + (ltu/is-status 200)) + + (is (= dsm/cancelled-state (uzk/get-data (str zdu/separator uri "/state")))) + + + (is (= dsm/cancelled-state (-> session-user + (request (str p/service-context uri)) + (ltu/body->edn) + (get-in [:response :body :state])))) + + ))) + + + diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_parameter_lifecycle_test.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_parameter_lifecycle_test.clj new file mode 100644 index 000000000..0b88b0006 --- /dev/null +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_parameter_lifecycle_test.clj @@ -0,0 +1,89 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-parameter-lifecycle-test + (:require + [clojure.test :refer :all] + [clojure.data.json :as json] + [peridot.core :refer :all] + [ring.util.codec :as rc] + [com.sixsq.slipstream.ssclj.resources.deployment-parameter :refer :all] + [com.sixsq.slipstream.ssclj.resources.lifecycle-test-utils :as t] + [com.sixsq.slipstream.ssclj.middleware.authn-info-header :refer [authn-info-header create-identity-map]] + [com.sixsq.slipstream.ssclj.app.routes :as routes] + [com.sixsq.slipstream.ssclj.app.params :as p] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.ssclj.util.zookeeper :as uzk] + [com.sixsq.slipstream.ssclj.resources.zk.deployment.utils :as zdu] + [com.sixsq.slipstream.ssclj.resources.deployment.utils :as du] + [zookeeper :as zk])) + +(use-fixtures :each (join-fixtures [t/with-test-es-client-fixture t/cleanup-all-zk-nodes])) + +(use-fixtures :once t/setup-embedded-zk) + +(def base-uri (str p/service-context resource-url)) + +(defn ring-app [] + (t/make-ring-app (t/concat-routes routes/final-routes))) + +(def session-user-jane (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "jane USER ANON"))) + +(def session-user-albert (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "albert USER ANON"))) + +(def identity-admin (create-identity-map ["super" #{"ADMIN"}])) + +(def resource-acl-jane {:owner {:principal "ADMIN" + :type "ROLE"} + :rules [{:principal "jane" + :type "USER" + :right "MODIFY"}]}) + +(deftest create-deployment-parameter-xyz + (let [deployment-href "deployment/abc34916-6ede-47f7-aaeb-a30ddecbba5b" + valid-entry {:deployment {:href deployment-href} :node-name "machine" :node-index 1 :type "node-instance" + :name "xyz" :value "XYZ" :acl resource-acl-jane} + znode-path (zdu/deployment-parameter-path valid-entry) + deployment-parameter-href (-> valid-entry + du/create-deployment-parameter + :resource-id) + abs-uri (str p/service-context (u/de-camelcase deployment-parameter-href)) + created-deployment-parameter (-> session-user-jane + (request abs-uri) + (t/body->edn) + (t/is-status 200))] + + (is (= "XYZ" (uzk/get-data znode-path))) + + (-> session-user-jane + (request abs-uri :request-method :put + :body (json/write-str {:value "newvalue"})) + (t/body->edn) + (t/is-status 200)) + + (is (= "newvalue" (uzk/get-data znode-path)) "deployment parameter can be updated") + + (-> session-user-jane + (request abs-uri :request-method :get) + (t/body->edn) + (t/is-status 200) + (t/is-key-value :value "newvalue") + ) + + (-> session-user-albert + (request abs-uri :request-method :put + :body (json/write-str {:value "newvalue-albert"})) + (t/body->edn) + (t/is-status 403)) + + (is (not (= "newvalue-albert" (uzk/get-data znode-path))) "deployment parameter can be updated") + + + ;type should not be updated + (-> session-user-jane + (request abs-uri :request-method :put + :body (json/write-str {:type "deployment"})) + (t/body->edn) + (t/is-status 200) + (t/is-key-value :type "node-instance")))) diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_template_lifecycle_test.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_template_lifecycle_test.clj new file mode 100644 index 000000000..f5640fd91 --- /dev/null +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/deployment_template_lifecycle_test.clj @@ -0,0 +1,98 @@ +(ns com.sixsq.slipstream.ssclj.resources.deployment-template-lifecycle-test + (:require + [clojure.test :refer :all] + [clojure.set :as set] + [clojure.data.json :as json] + [peridot.core :refer :all] + [com.sixsq.slipstream.ssclj.resources.common.crud :as crud] + [com.sixsq.slipstream.ssclj.resources.common.dynamic-load :as dyn] + [com.sixsq.slipstream.ssclj.resources.deployment-template :refer :all] + [com.sixsq.slipstream.ssclj.resources.deployment-template-std :as std] + [com.sixsq.slipstream.ssclj.resources.lifecycle-test-utils :as ltu] + [com.sixsq.slipstream.ssclj.middleware.authn-info-header :refer [authn-info-header]] + [com.sixsq.slipstream.ssclj.app.params :as p] + [com.sixsq.slipstream.ssclj.app.routes :as routes] + [com.sixsq.slipstream.ssclj.resources.common.utils :as u] + [com.sixsq.slipstream.ssclj.resources.common.schema :as c] + [com.sixsq.slipstream.ssclj.resources.common.debug-utils :as du])) + +(use-fixtures :each ltu/with-test-es-client-fixture) + +(def base-uri (str p/service-context (u/de-camelcase resource-name))) + +(defn ring-app [] + (ltu/make-ring-app (ltu/concat-routes [(routes/get-main-routes)]))) + +;; initialize must to called to pull in DeploymentTemplate resources +(dyn/initialize) + +(deftest check-retrieve-by-id + (doseq [registration-method [std/method]] + (let [id (str resource-url "/" registration-method) + doc (crud/retrieve-by-id id)] + (is (= id (:id doc)))))) + +;; check that all templates are visible as administrator +(deftest lifecycle-admin + (let [session (-> (session (ring-app)) + (content-type "application/json") + (header authn-info-header "root ADMIN")) + entries (-> session + (request base-uri) + (ltu/body->edn) + (ltu/is-status 200) + (ltu/is-resource-uri collection-uri) + (ltu/is-count pos?) + (ltu/is-operation-present "add") ;; should really be absent, but admin always has all rights + (ltu/is-operation-absent "delete") + (ltu/is-operation-absent "edit") + (ltu/is-operation-absent "describe") + (ltu/entries resource-tag)) + ids (set (map :id entries)) + types (set (map :method entries))] + (is (= #{(str resource-url "/" std/method)} + ids)) + (is (= #{std/method} + types)) + + (doseq [entry entries] + (let [ops (ltu/operations->map entry) + href (get ops (c/action-uri :describe)) + entry-url (str p/service-context (:id entry)) + describe-url (str p/service-context href) + + entry-resp (-> session + (request entry-url) + (ltu/is-status 200) + (ltu/body->edn)) + + entry-body (get-in entry-resp [:response :body]) + + desc (-> session + (request describe-url) + (ltu/body->edn) + (ltu/is-status 200)) + desc-body (get-in desc [:response :body])] + (is (nil? (get ops (c/action-uri :add)))) + (is (nil? (get ops (c/action-uri :edit)))) + (is (nil? (get ops (c/action-uri :delete)))) + (is (:method desc-body)) + (is (:acl desc-body)) + + (is (crud/validate entry-body)))))) + +(deftest bad-methods + (let [resource-uri (str p/service-context (u/new-resource-id resource-name))] + (doall + (for [[uri method] [[base-uri :options] + [base-uri :post] + [base-uri :delete] + [resource-uri :options] + [resource-uri :put] + [resource-uri :post] + [resource-uri :delete]]] + (-> (session (ring-app)) + (request uri + :request-method method + :body (json/write-str {:dummy "value"})) + (ltu/is-status 405)))))) diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/lifecycle_test_utils.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/lifecycle_test_utils.clj index 7d1a7c49a..fe37d94dd 100644 --- a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/lifecycle_test_utils.clj +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/lifecycle_test_utils.clj @@ -19,7 +19,11 @@ [com.sixsq.slipstream.ssclj.middleware.exception-handler :refer [wrap-exceptions]] [com.sixsq.slipstream.ssclj.middleware.authn-info-header :refer [wrap-authn-info-header]] [com.sixsq.slipstream.db.es.binding :as esb] - [com.sixsq.slipstream.db.es.utils :as esu])) + [com.sixsq.slipstream.db.es.utils :as esu] + [com.sixsq.slipstream.ssclj.util.zookeeper :as uzk] + [zookeeper :as zk] + [zookeeper.server :as zks]) + (:import [org.apache.curator.test TestingServer])) (defn serialize-cookie-value "replaces the map cookie value with a serialized string" @@ -212,3 +216,20 @@ [f] (with-test-es-client (f))) + +(defn setup-embedded-zk [f] + (let [port 21810 + server (TestingServer. port)] + (uzk/set-client! (zk/connect (str "127.0.0.1:" port))) + (try + (f) + (uzk/close-client) ; in case server already closed ignore exceptions + (catch Exception e) + (finally + (.close server))))) + +(defn cleanup-all-zk-nodes [f] + (f) + (let [nodes (->> (uzk/children "/") + (remove #{"zookeeper"}))] + (doall (map #(uzk/delete-all (str "/" %)) nodes)))) diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/spec/common_test.cljc b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/spec/common_test.cljc index 59eed649c..c8b28a84a 100644 --- a/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/spec/common_test.cljc +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/resources/spec/common_test.cljc @@ -137,3 +137,14 @@ true? (dissoc maximal :description) true? (dissoc maximal :properties) false? (assoc maximal :bad "BAD")))) + +(deftest check-zero-or-pos-int + (are [expect-fn arg] (expect-fn (s/valid? :cimi.core/zero-or-pos-int arg)) + true? 0 + true? 1 + true? 1000 + false? -1 + false? -1000 + false? 1.2 + false? "" + false? {})) diff --git a/ssclj/jar/test/com/sixsq/slipstream/ssclj/util/sse_test.clj b/ssclj/jar/test/com/sixsq/slipstream/ssclj/util/sse_test.clj new file mode 100644 index 000000000..94c14396b --- /dev/null +++ b/ssclj/jar/test/com/sixsq/slipstream/ssclj/util/sse_test.clj @@ -0,0 +1,26 @@ +(ns com.sixsq.slipstream.ssclj.util.sse-test + (:require [clojure.test :refer [deftest is]] + [ring.mock.request :as mock] + [com.sixsq.slipstream.ssclj.util.sse :as sse])) + +(deftest sse-start-stream + (let [request (-> (mock/request :get "/events")) + handler (sse/event-channel-handler (fn [request response raise ch] ch)) + response @(handler request) + {body :body + {content-type "Content-Type" + connection "Connection" + cache-control "Cache-Control" + X-Accel-Buffering "X-Accel-Buffering" + allow-origin "Access-Control-Allow-Origin"} :headers + status :status} response] + (is body "Response has a body") + (is (instance? manifold.stream.async.CoreAsyncSource body) "Response body is a channel.") + (is (= 200 status) "A successful status code is sent to the client.") + (is (= "text/event-stream; charset=UTF-8" content-type) + "The mime type and character encoding are set with the servlet setContentType method.") + (is (= "close" connection) "The client is instructed to close the connection.") + (is (= "no-cache" cache-control) "The client is instructed not to cache the event stream.") + (is (= "close" connection) "The client is instructed to close the connection.") + (is (= "no" X-Accel-Buffering) "The server is instructed to allow unbuffered response."))) +