UNPKG

@zowe/cli

Version:

Zowe CLI is a command line interface (CLI) that provides a simple and streamlined way to interact with IBM z/OS.

205 lines 11 kB
"use strict"; /* * This program and the accompanying materials are made available under the terms of the * Eclipse Public License v2.0 which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-v20.html * * SPDX-License-Identifier: EPL-2.0 * * Copyright Contributors to the Zowe Project. * */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const imperative_1 = require("@zowe/imperative"); const fs = require("fs"); const zos_jobs_for_zowe_sdk_1 = require("@zowe/zos-jobs-for-zowe-sdk"); const zos_files_for_zowe_sdk_1 = require("@zowe/zos-files-for-zowe-sdk"); const zosmf_for_zowe_sdk_1 = require("@zowe/zosmf-for-zowe-sdk"); const consumers_1 = require("stream/consumers"); /** * "zos-jobs submit data-set" command handler. Submits a job (JCL) contained within a z/OS data set (PS or PDS member). * @export * @class SubmitJobHandler * @implements {ICommandHandler} */ class SharedSubmitHandler extends zosmf_for_zowe_sdk_1.ZosmfBaseHandler { /** * Command handler process - invoked by the command processor to handle the "zos-jobs submit data-set" * @param {IHandlerParameters} params - Command handler parameters * @returns {Promise<void>} - Fulfilled when the command completes successfully OR rejected with imperative error * @memberof SubmitDataSetHandler */ processCmd(params) { return __awaiter(this, void 0, void 0, function* () { var _a; try { const status = { statusMessage: "Submitting job", percentComplete: imperative_1.TaskProgress.TEN_PERCENT, stageName: imperative_1.TaskStage.IN_PROGRESS }; // Save the needed parameters for convenience const parms = { jclSource: undefined, viewAllSpoolContent: this.mArguments.viewAllSpoolContent, directory: this.mArguments.directory, extension: this.mArguments.extension, volume: this.mArguments.volume, waitForActive: this.mArguments.waitForActive, waitForOutput: this.mArguments.waitForOutput, task: status, jclSymbols: this.mArguments.jclSymbols, internalReaderFileEncoding: this.mArguments.jobEncoding, internalReaderLrecl: (_a = this.mArguments.jobRecordLength) === null || _a === void 0 ? void 0 : _a.toString(), internalReaderRecfm: this.mArguments.jobRecordFormat }; const options = {}; params.response.progress.startBar({ task: status }); // Determine the positional parameter specified and invoke the correct API // TODO: More will be added with additional commands let sourceType; if (this.mArguments.dataset) { sourceType = "dataset"; } else if (this.mArguments.file) { sourceType = "uss-file"; } else if (this.mArguments.localFile) { sourceType = "local-file"; } else if (params.definition.name === "stdin") { sourceType = "stdin"; } let response; // Response from Submit Job let apiObj; // API Object to set in the command JSON response let spoolFilesResponse; // Response from view all spool content option let source; // The actual JCL source (i.e. data-set name, file name, etc.) let directory = this.mArguments.directory; // Path where to download spool content // Process depending on the source type switch (sourceType) { // Submit the JCL from a data set case "dataset": // If the data set is not in catalog and volume option is provided if (parms.volume) { options.volume = parms.volume; // Get JCL from data set or member const getJcl = yield zos_files_for_zowe_sdk_1.Get.dataSet(this.mSession, this.mArguments.dataset, options); source = this.mArguments.dataset; apiObj = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.submitJclString(this.mSession, getJcl.toString(), parms); if (parms.viewAllSpoolContent) { spoolFilesResponse = apiObj; } break; } else { response = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.submitJobCommon(this.mSession, { jobDataSet: this.mArguments.dataset, jclSymbols: this.mArguments.jclSymbols }); apiObj = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.checkSubmitOptions(this.mSession, parms, response); source = this.mArguments.dataset; if (parms.viewAllSpoolContent) { spoolFilesResponse = apiObj; } } break; // Submit JCL from a USS file case "uss-file": response = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.submitJobCommon(this.mSession, { jobUSSFile: this.mArguments.file, jclSymbols: this.mArguments.jclSymbols }); apiObj = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.checkSubmitOptions(this.mSession, parms, response); source = this.mArguments.ussfile; if (parms.viewAllSpoolContent) { spoolFilesResponse = apiObj; } break; // Submit the JCL from a local file case "local-file": { parms.jclSource = this.mArguments.localFile; let JclString; try { JclString = fs.readFileSync(this.mArguments.localFile).toString(); } catch (err) { throw new imperative_1.ImperativeError({ msg: zos_jobs_for_zowe_sdk_1.ZosJobsMessages.nodeJsFsError.message, additionalDetails: err.toString(), causeErrors: err }); } apiObj = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.submitJclString(this.mSession, JclString, parms); source = this.mArguments.localFile; if (parms.viewAllSpoolContent) { spoolFilesResponse = apiObj; } break; } // Submit the JCL piped in on stdin case "stdin": { const Jcl = yield (0, consumers_1.text)(params.stdin); apiObj = yield zos_jobs_for_zowe_sdk_1.SubmitJobs.submitJclString(this.mSession, Jcl, parms); source = "stdin"; if (parms.viewAllSpoolContent) { spoolFilesResponse = apiObj; } break; } default: throw new imperative_1.ImperativeError({ msg: `Internal submit error: Unable to determine the JCL source. ` + `Please contact support.`, additionalDetails: JSON.stringify(params) }); } // Print the response to the command if (spoolFilesResponse == null) { params.response.format.output({ fields: ["jobid", "retcode", "jobname", "status"], output: apiObj, format: "object" }); // Set the API object to the correct this.data.setObj(apiObj); // Print data from spool content } else { for (const spoolFile of spoolFilesResponse) { if (spoolFile.procName != null && spoolFile.procName.length > 0) { this.console.log("Spool file: %s (ID #%d, Step: %s, ProcStep: %s)", spoolFile.ddName, spoolFile.id, spoolFile.stepName, spoolFile.procName); } else { this.console.log("Spool file: %s (ID #%d, Step: %s)", spoolFile.ddName, spoolFile.id, spoolFile.stepName); } this.console.log(spoolFile.data); } // Set the API object to the correct this.data.setObj(spoolFilesResponse); } // Print path where spool content was downloaded if (directory != null && spoolFilesResponse == null) { directory = directory.includes("./") ? directory : `./${directory}`; params.response.console.log(`Successfully downloaded output to ${directory}/${apiObj.jobid}`); } params.response.progress.endBar(); this.data.setMessage(`Submitted JCL contained in "${sourceType}": "${source}"`); } catch (err) { if (err instanceof imperative_1.ImperativeError) { throw err; } else { throw new imperative_1.ImperativeError({ msg: err.message, causeErrors: err }); } } }); } } exports.default = SharedSubmitHandler; //# sourceMappingURL=Submit.shared.handler.js.map