Skip to content

Instantly share code, notes, and snippets.

@khangngu
Created May 22, 2018 17:10
Show Gist options
  • Save khangngu/6eef06a21e64d65b4d09eee55eabeec9 to your computer and use it in GitHub Desktop.
Save khangngu/6eef06a21e64d65b4d09eee55eabeec9 to your computer and use it in GitHub Desktop.
sdc-server setup errors
HTTP/1.1 200 OK
request-id: 3a0c2beb-f025-4b0e-9920-ef11f1fa0702
Content-Type: application/json
Content-Length: 23872
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, Api-Version, Response-Time
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Expose-Headers: Api-Version, Request-Id, Response-Time
Connection: Keep-Alive
Content-MD5: U1sDuq5ehF7y6b5x/97Raw==
Date: Tue, 22 May 2018 17:05:08 GMT
Server: WorkflowAPI
Response-Time: 15
x-request-id: c0626481-bd3b-4262-bf44-67e5f7a01f9f
x-response-time: 16
x-server-name: 5519fac8-94de-4ffc-b8bb-3113f9474d22
{
"execution": "failed",
"chain_results": [
{
"result": "All parameters OK!",
"error": "",
"name": "cnapi.validate_params",
"started_at": "2018-05-22T16:19:52.089Z",
"finished_at": "2018-05-22T16:19:52.145Z"
},
{
"result": "No nics specified",
"error": "",
"name": "napi.validate_nic_params",
"started_at": "2018-05-22T16:19:52.287Z",
"finished_at": "2018-05-22T16:19:52.327Z"
},
{
"result": "4 nics retrieved from NAPI",
"error": "",
"name": "napi.get_current_nics",
"started_at": "2018-05-22T16:19:52.467Z",
"finished_at": "2018-05-22T16:19:52.709Z"
},
{
"result": "No nics to get changes for",
"error": "",
"name": "napi.apply_nic_updates",
"started_at": "2018-05-22T16:19:52.836Z",
"finished_at": "2018-05-22T16:19:52.873Z"
},
{
"result": "No nics to update",
"error": "",
"name": "napi.update_nics",
"started_at": "2018-05-22T16:19:53.012Z",
"finished_at": "2018-05-22T16:19:53.050Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.mark_as_setting_up",
"started_at": "2018-05-22T16:19:53.127Z",
"finished_at": "2018-05-22T16:19:53.248Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.fetch_setup_files",
"started_at": "2018-05-22T16:19:53.337Z",
"finished_at": "2018-05-22T16:19:53.596Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.execute_joysetup_script",
"started_at": "2018-05-22T16:19:53.677Z",
"finished_at": "2018-05-22T16:20:49.589Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.execute_agentsetup_script",
"started_at": "2018-05-22T16:20:49.681Z",
"finished_at": "2018-05-22T16:23:34.705Z"
},
{
"result": "No nics to update",
"error": "",
"name": "cnapi.update_nics",
"started_at": "2018-05-22T16:23:34.767Z",
"finished_at": "2018-05-22T16:23:34.810Z"
},
{
"result": "No tasks to poll",
"error": "",
"name": "cnapi.poll_tasks",
"started_at": "2018-05-22T16:23:34.887Z",
"finished_at": "2018-05-22T16:23:34.926Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.touch_setup_complete",
"started_at": "2018-05-22T16:23:35.007Z",
"finished_at": "2018-05-22T16:23:35.251Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.refresh_server_sysinfo",
"started_at": "2018-05-22T16:23:35.337Z",
"finished_at": "2018-05-22T16:23:38.533Z"
},
{
"result": "OK",
"error": "",
"name": "cnapi.reboot_server",
"started_at": "2018-05-22T16:23:38.606Z",
"finished_at": "2018-05-22T16:23:38.830Z"
},
{
"result": "",
"error": "task timeout error",
"name": "cnapi.wait_for_reboot",
"started_at": "2018-05-22T16:23:38.967Z",
"finished_at": "2018-05-22T16:43:38.900Z"
}
],
"params": {
"nic_action": "update",
"amqp_host": "rabbitmq.qalab.joyent.us",
"cnapi_url": "http://10.99.99.22",
"assets_url": "http://10.99.99.8",
"server_uuid": "78d2a308-983c-6bd3-f662-e157c96d5346",
"overprovision_ratio": 1,
"hostname": "qacn1",
"server_nics": [
{
"belongs_to_type": "server",
"belongs_to_uuid": "78d2a308-983c-6bd3-f662-e157c96d5346",
"mac": "42:98:51:62:ff:d4",
"owner_uuid": "930896af-bf8c-48d4-885c-6573a94b1853",
"primary": false,
"state": "provisioning",
"created_timestamp": "2018-05-22T16:15:49.129Z",
"modified_timestamp": "2018-05-22T16:15:49.129Z"
},
{
"belongs_to_type": "server",
"belongs_to_uuid": "78d2a308-983c-6bd3-f662-e157c96d5346",
"mac": "62:27:de:d0:67:38",
"owner_uuid": "930896af-bf8c-48d4-885c-6573a94b1853",
"primary": false,
"state": "provisioning",
"created_timestamp": "2018-05-22T16:15:49.129Z",
"modified_timestamp": "2018-05-22T16:15:49.129Z"
},
{
"belongs_to_type": "server",
"belongs_to_uuid": "78d2a308-983c-6bd3-f662-e157c96d5346",
"mac": "62:69:75:b6:a6:7b",
"owner_uuid": "930896af-bf8c-48d4-885c-6573a94b1853",
"primary": false,
"state": "provisioning",
"created_timestamp": "2018-05-22T16:15:49.129Z",
"modified_timestamp": "2018-05-22T16:15:49.129Z"
},
{
"belongs_to_type": "server",
"belongs_to_uuid": "78d2a308-983c-6bd3-f662-e157c96d5346",
"mac": "32:ea:a7:72:82:bf",
"owner_uuid": "930896af-bf8c-48d4-885c-6573a94b1853",
"primary": false,
"state": "provisioning",
"created_timestamp": "2018-05-22T16:12:39.145Z",
"modified_timestamp": "2018-05-22T16:15:48.940Z",
"ip": "10.222.222.9",
"mtu": 1500,
"netmask": "255.255.255.0",
"nic_tag": "admin_rack99",
"resolvers": [
"10.99.99.11"
],
"vlan_id": 0,
"routes": {
"10.99.99.0/24": "10.222.222.1"
},
"network_uuid": "57dd350b-dfaf-4b0e-b6a5-a8f76f47768a",
"nic_tags_provided": [
"admin_rack99"
]
}
]
},
"server_uuid": "78d2a308-983c-6bd3-f662-e157c96d5346",
"target": "78d2a308-983c-6bd3-f662-e157c96d5346",
"workflow": "d92b38ad-e20c-48b4-aa75-ebc726dfe11b",
"exec_after": null,
"num_attempts": 0,
"name": "server-setup-1.0.3",
"version": "1.0.3",
"timeout": 7200,
"onerror": [
{
"name": "onerror",
"body": "function (job, cb) {\n cb(new Error('Error executing job'));\n }"
}
],
"chain": [
{
"name": "cnapi.validate_params",
"timeout": 10,
"retry": 1,
"body": "function validateParams(job, callback) {\n if (!job.params.server_uuid) {\n callback(new Error('Must specify server_uuid'));\n return;\n }\n\n if (!job.params.cnapi_url) {\n callback(new Error('Must specify cnapi_url'));\n return;\n }\n\n if (!job.params.assets_url) {\n callback(new Error('Must specify assets_url'));\n return;\n }\n\n if (!job.params.amqp_host) {\n callback(new Error('Must specify amqp_host'));\n return;\n }\n\n callback(null, 'All parameters OK!');\n}"
},
{
"name": "napi.validate_nic_params",
"timeout": 10,
"retry": 1,
"body": "function validateNicParams(job, callback) {\n var filtered = [];\n\n if (!job.params.nics) {\n return callback(null, 'No nics specified');\n }\n\n if (!napiUrl) {\n callback(new Error('No napiUrl workflow parameter'));\n return;\n }\n\n if ((typeof (job.params.nics) !== 'object') ||\n !job.params.nics.hasOwnProperty('length')) {\n return callback(new Error('nics object must be an array'));\n }\n\n for (var n in job.params.nics) {\n var nicObj = job.params.nics[n];\n if (typeof (nicObj) !== 'object' ||\n nicObj.hasOwnProperty('length')) {\n return callback(\n new Error('nics object must be an array of objects'));\n }\n\n if (nicObj.hasOwnProperty('mac') &&\n nicObj.hasOwnProperty('nic_tags_provided')) {\n filtered.push({\n mac: nicObj.mac,\n nic_tags_provided: nicObj.nic_tags_provided\n });\n }\n }\n\n job.params.nics = filtered;\n\n callback(null, 'nic parameters OK!');\n}"
},
{
"name": "napi.get_current_nics",
"timeout": 120,
"retry": 1,
"body": "function getServerNics(job, callback) {\n // XXX: if something is set in job.params, return here\n if (!job.params.server_uuid) {\n return callback(new Error('No server_uuid specified'));\n }\n\n var napi = new sdcClients.NAPI({ url: napiUrl });\n napi.listNics({ belongs_to_uuid: job.params.server_uuid },\n function (err, res) {\n if (err) {\n job.log.error(err,\n 'error listing server nics for server: '\n + job.params.server_uuid);\n return callback(err);\n }\n\n\n job.log.debug(res, 'successfully got nics for server: '\n + job.params.server_uuid);\n job.params.server_nics = res;\n\n return callback(null, res.length + ' nics retrieved from NAPI');\n });\n}"
},
{
"name": "napi.apply_nic_updates",
"timeout": 10,
"retry": 1,
"body": "function applyNicUpdates(job, callback) {\n if (!job.params.nics || job.params.nics.length === 0) {\n return callback(null, 'No nics to get changes for');\n }\n\n if (!job.params.nic_action) {\n return callback(new Error('No nic action specified'));\n }\n\n if (job.params.nic_action === 'replace') {\n return callback(null, 'replacing nic values');\n }\n\n if (!job.params.server_nics) {\n return callback(new Error('No server nics to update'));\n }\n\n var oldNics = {};\n job.params.server_nics.forEach(function (nic) {\n oldNics[nic.mac] = nic;\n });\n\n job.log.debug(oldNics, 'old nics');\n for (var n in job.params.nics) {\n var newNic = job.params.nics[n];\n if (!newNic.hasOwnProperty('mac') ||\n !oldNics.hasOwnProperty(newNic.mac)) {\n job.log.warn(newNic, 'missing mac or unknown nic');\n continue;\n }\n\n // Only allow updating nic_tags_provided for now\n if (!newNic.hasOwnProperty('nic_tags_provided')) {\n job.log.warn(newNic, 'missing nic_tags_provided');\n continue;\n }\n\n var oldNic = oldNics[newNic.mac];\n\n if (job.params.nic_action === 'delete') {\n var afterDeletes = [];\n\n // No nic tags to begin with, so there's nothing to delete\n if (!oldNic.nic_tags_provided) {\n continue;\n }\n\n oldNic.nic_tags_provided.forEach(function (tag) {\n if (newNic.nic_tags_provided.indexOf(tag) === -1) {\n afterDeletes.push(tag);\n }\n });\n\n oldNic.nic_tags_provided = afterDeletes;\n continue;\n }\n\n if (job.params.nic_action === 'update') {\n newNic.nic_tags_provided.forEach(function (tag) {\n if (!oldNic.nic_tags_provided) {\n oldNic.nic_tags_provided = [];\n }\n\n if (oldNic.nic_tags_provided.indexOf(tag) === -1) {\n oldNic.nic_tags_provided.push(tag);\n }\n });\n }\n }\n\n var newNicParams = [];\n for (var o in oldNics) {\n newNicParams.push({\n mac: o,\n nic_tags_provided: oldNics[o].nic_tags_provided\n });\n }\n\n var msg = 'applied nic ' + job.params.nic_action + 's';\n job.log.info(newNicParams, msg);\n job.params.nics = newNicParams;\n return callback(null, msg);\n}"
},
{
"name": "napi.update_nics",
"timeout": 120,
"retry": 1,
"body": "function updateNics(job, callback) {\n if (!job.params.nics || job.params.nics.length === 0) {\n return callback(null, 'No nics to update');\n }\n\n var napi = new sdcClients.NAPI({ url: napiUrl });\n return async.forEach(job.params.nics, function (nic, cb) {\n var mac = nic.mac;\n napi.updateNic(mac, nic, function (err, res) {\n if (err) {\n job.log.error(err, 'error updating nic: ' + mac);\n return cb(err);\n }\n\n job.log.debug(res, 'successfully updated nic: ' + mac);\n return cb();\n });\n }, function (err) {\n if (err) {\n return callback(err);\n }\n\n return callback(null, 'nics updated in NAPI successfully');\n });\n}"
},
{
"name": "cnapi.mark_as_setting_up",
"timeout": 10,
"retry": 1,
"body": "function markServerAsSettingUp(job, callback) {\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var serverUrl = '/servers/' + job.params.server_uuid;\n\n var payload = {\n setting_up: true\n };\n\n cnapi.post(serverUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error setting server as setting_up');\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.fetch_setup_files",
"timeout": 10,
"retry": 1,
"body": "function fetchSetupFiles(job, callback) {\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n var cnapiUrl = job.params.cnapi_url;\n var assetsUrl = job.params.assets_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var overprovision_ratio = job.params.overprovision_ratio || '1.0';\n var nodeConfigDir = 'config-' + job.params.server_uuid;\n var diskCfg = '';\n if (job.params.disk_layout) {\n diskCfg += 'echo \"layout=\\'' + job.params.disk_layout + '\\'\"; ';\n }\n if (job.params.hasOwnProperty('disk_cache')) {\n diskCfg += 'echo \"cache=\\'' + job.params.disk_cache + '\\'\"; ';\n }\n if (job.params.hasOwnProperty('disk_spares')) {\n diskCfg += 'echo \"spares=' + job.params.disk_spares + '\"; ';\n }\n\n var script = [\n '#!/bin/bash',\n 'set -o xtrace',\n 'cd /var/tmp',\n 'mkdir /var/tmp/node.config',\n 'mkdir /var/tmp/' + nodeConfigDir,\n '(echo \"overprovision_ratio=\\'' + overprovision_ratio + '\\'\"; ' +\n diskCfg +\n 'curl $1/extra/joysetup/node.config) | tee ' + nodeConfigDir +\n '/node.config node.config/node.config >&-',\n 'curl -O $1/extra/joysetup/joysetup.sh',\n 'curl -O $1/extra/joysetup/agentsetup.sh',\n 'chmod +x *.sh'\n ].join('\\n');\n\n var payload = {\n script: script,\n args: [assetsUrl]\n };\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error fetching setup files: ' + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.execute_joysetup_script",
"timeout": 3600,
"retry": 1,
"body": "function executeJoysetupScript(job, callback) {\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n\n var script = [\n '#!/bin/bash',\n 'set -o xtrace',\n 'cd /var/tmp',\n './joysetup.sh'\n ].join('\\n');\n\n var payload = {\n script: script\n };\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error executing joysetup: ' + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n job.log.info('Successfully executed joysetup script');\n callback();\n });\n}"
},
{
"name": "cnapi.execute_agentsetup_script",
"timeout": 3600,
"retry": 1,
"body": "function executeAgentSetupScript(job, callback) {\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n var cnapiUrl = job.params.cnapi_url;\n var assetsUrl = job.params.assets_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n\n var script = [\n '#!/bin/bash',\n 'set -o xtrace',\n 'cd /var/tmp',\n 'echo ASSETS_URL = $ASSETS_URL',\n './agentsetup.sh'\n ].join('\\n');\n\n var payload = {\n script: script,\n env: { ASSETS_URL: assetsUrl }\n };\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error executing agent setup via CNAPI:'\n + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.update_nics",
"timeout": 3600,
"retry": 1,
"body": "function nicUpdate(job, callback) {\n if (!job.params.nics || job.params.nics.length === 0) {\n return callback(null, 'No nics to update');\n }\n\n var cnapi = new sdcClients.CNAPI({ url: cnapiUrl });\n var endpoint = '/servers/' + job.params.server_uuid + '/nics/update';\n job.params.taskIDs = [];\n\n job.log.debug(job.params.nics, 'Updating rules on server \"%s\"',\n job.params.server_uuid);\n\n return cnapi.post(endpoint, { nics: job.params.nics },\n function (err, task) {\n if (err) {\n return callback(err);\n }\n\n job.log.debug(task, 'Server \"%s\": nic update task \"%s\"',\n job.params.server_uuid, task.id);\n job.params.taskIDs.push({ server_uuid: job.params.server_uuid,\n task_id: task.id});\n return callback(null, 'Started nic update task on server');\n });\n}"
},
{
"name": "cnapi.poll_tasks",
"timeout": 3600,
"retry": 1,
"body": "function pollTasks(job, callback) {\n if (!job.params.taskIDs || job.params.taskIDs.length === 0) {\n return callback(null, 'No tasks to poll');\n }\n\n var cnapi = new sdcClients.CNAPI({ url: cnapiUrl });\n\n job.params.taskSuccesses = [];\n job.params.taskFailures = [];\n\n return async.forEach(job.params.taskIDs, function (detail, cb) {\n var timeout = null;\n\n function pollOne() {\n cnapi.getTask(detail.task_id, function onCnapi(err, task) {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n if (err) {\n return cb(err);\n }\n\n job.log.debug(task, 'retrieved task for server \"%s\"',\n detail.server_uuid);\n if (task.status == 'failure') {\n job.params.taskFailures.push(detail);\n return cb(new Error('CNAPI task \"' + detail.task_id\n + '\" failed for server \"' + detail.server_uuid + '\"'));\n }\n\n if (task.status == 'complete') {\n job.params.taskSuccesses.push(detail);\n return cb(null);\n }\n\n timeout = setTimeout(pollOne, 1000);\n });\n }\n\n pollOne();\n }, function (err) {\n if (err) {\n return callback(err);\n }\n\n return callback(null, 'All server tasks returned successfully');\n });\n}"
},
{
"name": "cnapi.touch_setup_complete",
"timeout": 1000,
"retry": 1,
"body": "function touchSetupComplete(job, callback) {\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n\n var script = [\n '#!/bin/bash',\n 'touch /var/svc/setup_complete'\n ].join('\\n');\n\n var payload = {\n script: script\n };\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error posting to Ur via CNAPI:' + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.refresh_server_sysinfo",
"timeout": 1000,
"retry": 1,
"body": "function refreshServerSysinfo(job, callback) {\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var serverUrl = '/servers/' + job.params.server_uuid + '/sysinfo-refresh';\n\n cnapi.post(serverUrl, {}, function (error, req, res) {\n if (error) {\n job.log.info('Error refreshing server sysinfo');\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.reboot_server",
"timeout": 600,
"retry": 1,
"body": "function rebootServer(job, callback) {\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n\n var payload = {\n script: '#!/bin/bash\\nexit 113'\n };\n\n job.log.info('rebootServer');\n\n if (!job.params.hostname) {\n job.log.info('No need to reboot, hostname not set');\n callback();\n return;\n }\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n job.log.info('rebootServer (post)');\n if (error) {\n job.log.info('Error posting to Ur via CNAPI:' + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.wait_for_reboot",
"timeout": 1200,
"retry": 1,
"body": "function waitForReboot(job, callback) {\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var timer;\n var serverUrl = '/servers/' + job.params.server_uuid;\n\n job.log.info('waitForReboot()');\n\n if (!job.params.hostname) {\n job.log.info('No need to wait for reboot, hostname not set');\n callback();\n return;\n }\n\n function checkRebooted() {\n cnapi.get(serverUrl, function (err, req, res, server) {\n var cn_state;\n var created_at;\n var last_boot;\n\n if (err) {\n job.log.info(\n 'Error getting server info from CNAPI:' + err.message);\n job.log.info(err.stack.toString());\n clearTimeout(timer);\n callback(err);\n return;\n }\n\n job.log.info('waitForReboot() got result from CNAPI');\n\n cn_state = server.status;\n job.log.info('cn_state: ' + cn_state);\n created_at = (new Date(job.created_at).getTime() / 1000);\n job.log.info('created_at: ' + created_at);\n last_boot = (new Date(server.last_boot).getTime() / 1000);\n job.log.info('last_boot: ' + last_boot);\n\n if (cn_state === 'running' && (last_boot > created_at)) {\n clearTimeout(timer);\n callback();\n return;\n }\n timer = setTimeout(checkRebooted, 5000);\n });\n }\n\n timer = setTimeout(checkRebooted, 5000);\n}"
},
{
"name": "cnapi.run_postsetup_script",
"timeout": 1000,
"retry": 1,
"body": "function runPostSetupScript(job, callback) {\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n\n if (!job.params.postsetup_script) {\n callback();\n return;\n }\n\n var payload = {\n script: job.params.postsetup_script\n };\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error posting to Ur via CNAPI:' + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.restart_ur",
"timeout": 1000,
"retry": 1,
"body": "function restartUr(job, callback) {\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var urUrl = '/servers/' + job.params.server_uuid + '/execute';\n\n var payload = {\n script:\n '#!/bin/bash\\n'+\n 'nohup /bin/bash -c ' +\n '\"(/usr/bin/sleep 5; /usr/sbin/svcadm restart ur) &\"'\n };\n\n job.log.info('restartUr');\n\n cnapi.post(urUrl, payload, function (error, req, res) {\n job.log.info('restartUr (post)');\n if (error) {\n job.log.info('Error posting to Ur via CNAPI:' + error.message);\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
},
{
"name": "cnapi.mark_server_as_setup",
"timeout": 1000,
"retry": 1,
"body": "function markServerAsSetup(job, callback) {\n var cnapiUrl = job.params.cnapi_url;\n var cnapi = restify.createJsonClient({ url: cnapiUrl});\n var serverUrl = '/servers/' + job.params.server_uuid;\n\n var payload = {\n setup: true,\n setting_up: false\n };\n\n cnapi.post(serverUrl, payload, function (error, req, res) {\n if (error) {\n job.log.info('Error setting server as setup');\n job.log.info(error.stack.toString());\n callback(error);\n return;\n }\n callback();\n });\n}"
}
],
"workflow_uuid": "d92b38ad-e20c-48b4-aa75-ebc726dfe11b",
"created_at": "2018-05-22T16:19:51.761Z",
"onerror_results": [
{
"result": "",
"error": {
"name": "Error",
"message": "Error executing job"
},
"name": "onerror",
"started_at": "2018-05-22T16:43:39.032Z",
"finished_at": "2018-05-22T16:43:39.074Z"
}
],
"started": 1527005992088,
"elapsed": 1427.123,
"uuid": "3a0c2beb-f025-4b0e-9920-ef11f1fa0702"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment