var _actionActivities = function() {
this._url = null;
var fqdn = this.getFQDN();
if (fqdn !== null) {
this._url = "https://" + fqdn;
} else {
throw new Error("Error at FQDN detection");
}
this._httpRestHost = null;
if (this._url !== null) {
this._httpRestHost = RESTHostManager.createTransientHostFrom(
RESTHostManager.createHost("dynamicRequest")
);
this._httpRestHost.operationTimeout = 60;
this._httpRestHost.connectionTimeout = 30;
this._httpRestHost.hostVerification = false;
this._httpRestHost.url = this._url;
}
this.bearerToken = null;
};
_actionActivities.prototype = {
getFQDN : function() {
var fqdn = "";
var jvmOpts = java.lang.System.getenv("JVM_OPTS");
if (jvmOpts !== null) {
var options = jvmOpts.split(" ");
options.forEach( function(option) {
if (option.substring(0, 19) === "-Dvco.app.hostname=") {
fqdn = option.substring(19, option.length);
}
});
}
if (fqdn !== "") {
return fqdn;
} else {
return null;
}
},
retrieveBearerToken : function(username, password) {
if (this._url === null) {
return;
}
var httpRestHost = this._httpRestHost.clone();
var jsonLogin = {
"username": username,
"password": password
};
var login = JSON.stringify(jsonLogin);
var request = httpRestHost.createRequest(
"POST",
"/csp/gateway/am/api/login?access_token",
login
);
request.contentType = "application/json";
var response = request.execute();
if (response.statusCode === 200) {
var oRefreshToken = JSON.parse(response.contentAsString);
var refreshToken = "{\"refreshToken\":\"" +
oRefreshToken.refresh_token + "\"}";
request = httpRestHost.createRequest(
"POST",
"/iaas/api/login",
refreshToken
);
request.contentType = "application/json";
response = request.execute();
if (response.statusCode === 200) {
var oBearerToken = JSON.parse(response.contentAsString);
this.bearerToken = oBearerToken.token;
} else {
System.error("Error at retrieving bearer token");
}
}
},
createAction : function(
moduleName,
actionName,
code,
parameters,
outputType
) {
var _parameters = [];
if (parameters instanceof Array) {
_parameters = JSON.parse(JSON.stringify(parameters));
}
if (typeof outputType !== "string") {
outputType = "string";
}
var httpRestHost = this._httpRestHost.clone();
if (_parameters.length > 0) {
_parameters.forEach( function(parameter) {
delete parameter.value;
});
}
var jsonScript = {
"name": actionName,
"module": moduleName,
"version": "0.1.0",
"description": "Test",
"script": code,
"input-parameters": _parameters,
"output-type": outputType
};
var script = JSON.stringify(jsonScript);
var request = httpRestHost.createRequest(
"POST",
"/vco/api/actions?uniqueName=false",
script
);
request.contentType = "application/json";
request.setHeader("Accept", "application/json");
request.setHeader("Authorization", "Bearer " + this.bearerToken);
var response = request.execute();
if (response.statusCode === 201) {
var jsonResponse = JSON.parse(response.contentAsString);
return jsonResponse.id;
} else {
System.error("Error creating action");
throw new Error("Error creating action");
}
},
executeAction : function(actionId, parameters) {
if (!Array.isArray(parameters)) {
parameters = [];
}
var httpRestHost = this._httpRestHost.clone();
var jsonBody = {
"parameters": parameters,
"async-execution": false
};
var body = JSON.stringify(jsonBody);
var request = httpRestHost.createRequest(
"POST",
"/vco/api/actions/" + actionId + "/executions",
body
);
request.contentType = "application/json";
request.setHeader("Accept", "application/json");
request.setHeader("Authorization", "Bearer " + this.bearerToken);
var response = request.execute();
if (response.statusCode === 200) {
var jsonResponse = JSON.parse(response.contentAsString);
return jsonResponse;
} else {
System.log("Error at execution\n" + response.contentAsString);
}
},
getAction : function(actionId) {
var httpRestHost = this._httpRestHost.clone();
var request = httpRestHost.createRequest(
"GET",
"/vco/api/actions/" + actionId
);
request.setHeader("Accept", "application/json");
request.setHeader("Authorization", "Bearer " + this.bearerToken);
var response = request.execute();
return response.statusCode;
},
getActionLog : function(executionId) {
var httpRestHost = this._httpRestHost.clone();
var request = httpRestHost.createRequest(
"GET",
"/vco/api/actions/" + executionId + "/logs?maxResult=2147483647"
);
request.setHeader("Accept", "application/json");
request.setHeader("Authorization", "Bearer " + this.bearerToken);
var response = request.execute();
if (response.statusCode === 200) {
return response.contentAsString;
} else {
System.log("Error at get log");
}
}
};
function main(userName, password) {
if (
String(userName).trim() !== "" &&
String(password).trim() !== ""
) {
var actionActivities = new _actionActivities();
actionActivities.retrieveBearerToken(userName, password);
if (actionActivities.bearerToken === null) {
throw new Error("No Bearer token available");
}
var code = "\n" +
"function main(name, city, vm) {\n" +
" System.log(\"Hello \" + name + \" from \" + city +" +
" \" is working on \" + vm.name);\n" +
" return \"Hello \" + name + \" from \" + city +" +
" \" is working on \" + vm.name;\n" +
"}\n" +
"\n" +
"return main(in_name, in_city, in_sdkobject)\n";
var parameters = [
{ "name": "in_name", "type": "string", "value": {
"string": { "value": "Stefan" }
} },
{ "name": "in_city", "type": "string", "value": {
"string": { "value": "Oberirsen" }
} },
{ "name": "in_sdkobject", "type": "VC:VirtualMachine", "value": {
"sdk-object": {
"type": "VC:VirtualMachine",
"id": "vcsa-01a.corp.vmbeans.com/vm-16003"
}
} }
];
var outputType = "string";
var tempActionName = "x" + System.nextUUID().replace(/-/g, "_");
var actionId =
actionActivities.createAction(
"temp",
tempActionName,
code,
parameters,
outputType
);
while (actionActivities.getAction(actionId) !== 200) {
System.sleep(1000);
}
var response = actionActivities.executeAction(
actionId,
parameters
);
var executionId = response["execution-id"];
System.sleep(2500);
var actionLog = actionActivities.getActionLog(executionId);
return {
"returnType": response["type"],
"returnValue": JSON.stringify(response["value"]),
"executionId": executionId,
"actionLog": actionLog
};
} else {
throw new Error(
"userName or password argument can not be null"
);
}
}
return main("holadmin@corp.vmbeans.com", "VMware1!");
|