Call deployApplication endpoint
Change-Id: I3ede8df12c59d0de7a0bdf19f7fcb34c9a001e3a
This commit is contained in:
parent
27edd92a4e
commit
f4456c5fda
@ -403,27 +403,24 @@ public class ExnConnector {
|
||||
* }
|
||||
* }</pre>
|
||||
*
|
||||
* <p>Each value for {@code nodeName} has to be unique, and should be
|
||||
* either the name of the master node or the name of a node that will
|
||||
* subsequently be referenced in the affinity trait of the modified
|
||||
* <p>Each value for {@code nodeName} has to be globally unique, and
|
||||
* should be either the name of the master node or the name of a node that
|
||||
* will subsequently be referenced in the affinity trait of the modified
|
||||
* kubevela file (see {@link NebulousAppDeployer#addNodeAffinities()}).
|
||||
*
|
||||
* <p>The values for {@code nodeCandidateId} and {@code cloudId} come from
|
||||
* the return value of a call to {@link #findNodeCandidates()}.
|
||||
*
|
||||
* <p>Note that this method could be rewritten to accept the nodes as a
|
||||
* {@code List<org.ow2.proactive.sal.model.IaasNode>} instead, if that is
|
||||
* more convenient.
|
||||
*
|
||||
* @param appID The application's id, used to name the cluster.
|
||||
* @param appID The application's id, used only for logging.
|
||||
* @param clusterName The cluster name.
|
||||
* @param masterNodeName The name of the master node.
|
||||
* @param nodes A JSON array containing the node definitions.
|
||||
* @param nodes A JSON array containing the node definitions, including the master node.
|
||||
* @return true if the cluster was successfully defined, false otherwise.
|
||||
*/
|
||||
public boolean defineCluster(String appID, String masterNodeName, ArrayNode nodes) {
|
||||
public boolean defineCluster(String appID, String clusterName, String masterNodeName, ArrayNode nodes) {
|
||||
// https://openproject.nebulouscloud.eu/projects/nebulous-collaboration-hub/wiki/deployment-manager-sal-1#specification-of-endpoints-being-developed
|
||||
ObjectNode body = mapper.createObjectNode()
|
||||
.put("name", appID)
|
||||
.put("name", clusterName)
|
||||
.put("master-node", masterNodeName);
|
||||
body.putArray("nodes").addAll(nodes);
|
||||
Map<String, Object> msg;
|
||||
@ -438,11 +435,6 @@ public class ExnConnector {
|
||||
Map<String, Object> response = defineCluster.sendSync(msg, appID, null, false);
|
||||
JsonNode payload = extractPayloadFromExnResponse(response, appID);
|
||||
return payload.asBoolean();
|
||||
// TODO: check if we still need to unwrap this; see
|
||||
// `AbstractProcessor.groovy#normalizeResponse` and bug 2055053
|
||||
// https://opendev.org/nebulous/exn-middleware/src/commit/ffc2ca7bdf657b3831d2b803ff2b84d5e8e1bdcd/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/AbstractProcessor.groovy#L111
|
||||
// https://bugs.launchpad.net/nebulous/+bug/2055053
|
||||
// return payload.at("/success").asBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -483,62 +475,48 @@ public class ExnConnector {
|
||||
/**
|
||||
* Deploy a cluster created by {@link #defineCluster}.
|
||||
*
|
||||
* @param appID The application's id, used to name the cluster.
|
||||
* @param appID The application's id, used for logging only.
|
||||
* @param clusterName The name of the cluster.
|
||||
* @return true if the cluster was successfully deployed, false otherwise.
|
||||
*/
|
||||
public boolean deployCluster(String appID) {
|
||||
public boolean deployCluster(String appID, String clusterName) {
|
||||
// https://openproject.nebulouscloud.eu/projects/nebulous-collaboration-hub/wiki/deployment-manager-sal-1#specification-of-endpoints-being-developed
|
||||
ObjectNode body = mapper.createObjectNode()
|
||||
.put("applicationId", appID);
|
||||
Map<String, Object> msg;
|
||||
try {
|
||||
msg = Map.of("metaData", Map.of("user", "admin"),
|
||||
"body", mapper.writeValueAsString(body));
|
||||
} catch (JsonProcessingException e) {
|
||||
log.error("Could not convert JSON to string (this should never happen)",
|
||||
keyValue("appId", appID), e);
|
||||
return false;
|
||||
}
|
||||
Map<String, Object> msg = Map.of("metaData",
|
||||
Map.of("user", "admin", "clusterName", clusterName));
|
||||
Map<String, Object> response = deployCluster.sendSync(msg, appID, null, false);
|
||||
JsonNode payload = extractPayloadFromExnResponse(response, appID);
|
||||
return payload.asBoolean();
|
||||
// TODO: check if we still need to unwrap this; see
|
||||
// `AbstractProcessor.groovy#normalizeResponse` and bug 2055053
|
||||
// https://opendev.org/nebulous/exn-middleware/src/commit/ffc2ca7bdf657b3831d2b803ff2b84d5e8e1bdcd/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/AbstractProcessor.groovy#L111
|
||||
// https://bugs.launchpad.net/nebulous/+bug/2055053
|
||||
// return payload.at("/success").asBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit a KubeVela file to a deployed cluster.
|
||||
*
|
||||
* @param appID The application's id.
|
||||
* @param clusterName The name of the cluster.
|
||||
* @param appName The name of the application.
|
||||
* @param kubevela The KubeVela file, with node affinity traits
|
||||
* corresponding to the cluster definintion.
|
||||
* @return true if the application was successfully deployed, false otherwise.
|
||||
* corresponding to the cluster definintion, serialized into a string.
|
||||
* @return the ProActive job ID, or -1 in case of failure.
|
||||
*/
|
||||
public boolean deployApplication(String appID, String kubevela) {
|
||||
// https://openproject.nebulouscloud.eu/projects/nebulous-collaboration-hub/wiki/deployment-manager-sal-1#specification-of-endpoints-being-developed
|
||||
public long deployApplication(String appID, String clusterName, String appName, String kubevela) {
|
||||
ObjectNode body = mapper.createObjectNode()
|
||||
.put("applicationId", appID)
|
||||
.put("KubevelaYaml", kubevela);
|
||||
.put("appFile", kubevela)
|
||||
.put("packageManager", "kubevela")
|
||||
.put("appName", appName)
|
||||
.put("action", "apply")
|
||||
.put("flags", "");
|
||||
Map<String, Object> msg;
|
||||
try {
|
||||
msg = Map.of("metaData", Map.of("user", "admin"),
|
||||
msg = Map.of("metaData", Map.of("user", "admin", "clusterName", clusterName),
|
||||
"body", mapper.writeValueAsString(body));
|
||||
} catch (JsonProcessingException e) {
|
||||
log.error("Could not convert JSON to string (this should never happen)",
|
||||
keyValue("appId", appID), e);
|
||||
return false;
|
||||
return -1;
|
||||
}
|
||||
Map<String, Object> response = deployApplication.sendSync(msg, appID, null, false);
|
||||
JsonNode payload = extractPayloadFromExnResponse(response, appID);
|
||||
return payload.asBoolean();
|
||||
// TODO: check if we still need to unwrap this; see
|
||||
// `AbstractProcessor.groovy#normalizeResponse` and bug 2055053
|
||||
// https://opendev.org/nebulous/exn-middleware/src/commit/ffc2ca7bdf657b3831d2b803ff2b84d5e8e1bdcd/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/AbstractProcessor.groovy#L111
|
||||
// https://bugs.launchpad.net/nebulous/+bug/2055053
|
||||
// return payload.at("/success").asBoolean();
|
||||
return payload.asLong();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -12,6 +12,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import picocli.CommandLine.Command;
|
||||
import picocli.CommandLine.Option;
|
||||
import picocli.CommandLine.Parameters;
|
||||
import picocli.CommandLine.ParentCommand;
|
||||
|
||||
@ -30,6 +31,18 @@ public class LocalExecution implements Callable<Integer> {
|
||||
@Parameters(description = "The file containing a JSON app creation message")
|
||||
private Path app_creation_msg;
|
||||
|
||||
@Option(names = { "--deploy" },
|
||||
description = "Deploy application (default true).",
|
||||
defaultValue = "true", fallbackValue = "true",
|
||||
negatable = true)
|
||||
private boolean deploy;
|
||||
|
||||
@Option(names = { "--ampl" },
|
||||
description = "Send AMPL file to solver (default true).",
|
||||
defaultValue = "true", fallbackValue = "true",
|
||||
negatable = true)
|
||||
private boolean sendAMPL;
|
||||
|
||||
@Override public Integer call() {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
CountDownLatch exn_synchronizer = new CountDownLatch(1);
|
||||
@ -46,13 +59,16 @@ public class LocalExecution implements Callable<Integer> {
|
||||
}
|
||||
NebulousApp app = NebulousApp.newFromAppMessage(msg, connector);
|
||||
if (connector != null) {
|
||||
log.debug("Sending AMPL to channel {}", connector.getAmplMessagePublisher());
|
||||
app.sendAMPL();
|
||||
// skip for now until the endpoints are ready and the exn middleware is running
|
||||
// app.deployUnmodifiedApplication();
|
||||
if (sendAMPL) {
|
||||
log.debug("Sending AMPL to channel {}", connector.getAmplMessagePublisher());
|
||||
app.sendAMPL();
|
||||
System.out.println(AMPLGenerator.generateAMPL(app));
|
||||
}
|
||||
if (deploy) {
|
||||
log.debug("Deploying application", connector.getAmplMessagePublisher());
|
||||
app.deployUnmodifiedApplication();
|
||||
}
|
||||
}
|
||||
System.out.println(AMPLGenerator.generateAMPL(app));
|
||||
// TODO: wait for solver reply here?
|
||||
if (connector != null) {
|
||||
connector.stop();
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ public class NebulousAppDeployer {
|
||||
// 4. Create cluster
|
||||
|
||||
ObjectNode cluster = mapper.createObjectNode();
|
||||
cluster.put("name", appUUID)
|
||||
cluster.put("name", clusterName)
|
||||
.put("master-node", masterNodeName);
|
||||
ArrayNode nodes = cluster.withArray("nodes");
|
||||
if (masterNodeCandidate != null) {
|
||||
@ -270,13 +270,13 @@ public class NebulousAppDeployer {
|
||||
.put("nodeCandidateId", candidate.getId())
|
||||
.put("cloudId", candidate.getCloud().getId());
|
||||
});
|
||||
boolean defineClusterSuccess = conn.defineCluster(clusterName, masterNodeName, nodes);
|
||||
boolean defineClusterSuccess = conn.defineCluster(appUUID, clusterName, masterNodeName, nodes);
|
||||
|
||||
boolean labelClusterSuccess = conn.labelNodes(appUUID, clusterName, nodeLabels);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// 5. Deploy cluster
|
||||
boolean deployClusterSuccess = conn.deployCluster(clusterName);
|
||||
boolean deployClusterSuccess = conn.deployCluster(appUUID, clusterName);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// 6. Rewrite KubeVela
|
||||
@ -292,7 +292,7 @@ public class NebulousAppDeployer {
|
||||
// ------------------------------------------------------------
|
||||
// 7. Deploy application
|
||||
|
||||
// TODO: call deployApplication endpoint
|
||||
long proActiveJobID = conn.deployApplication(appUUID, clusterName, app.getName(), rewritten_kubevela);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// 8. Update NebulousApp state
|
||||
|
Loading…
x
Reference in New Issue
Block a user