-
Notifications
You must be signed in to change notification settings - Fork 87
/
imperative.ts
406 lines (402 loc) · 17.2 KB
/
imperative.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
/*
* 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.
*
*/
import * as path from "path";
// WIP Imperative version of Brightside
import { IImperativeConfig } from "@zowe/imperative";
import { Constants } from "./Constants";
import { ZosmfSession } from "@zowe/zosmf-for-zowe-sdk";
import {
TSO_OPTION_ACCOUNT_PROFILE,
TSO_OPTION_CHAR_SET,
TSO_OPTION_CODE_PAGE,
TSO_OPTION_COLUMNS,
TSO_OPTION_LOGON_PROCEDURE,
TSO_OPTION_REGION_SIZE,
TSO_OPTION_ROWS
} from "./zostso/constants/ZosTso.constants";
import { SshSession } from "@zowe/zos-uss-for-zowe-sdk";
import { ZosFilesOptions } from "./zosfiles/ZosFiles.options";
const config: IImperativeConfig = {
productDisplayName: Constants.DISPLAY_NAME,
commandModuleGlobs: [
"provisioning/*.definition!(.d).*s",
"workflows/*.definition!(.d).*s",
"zosconsole/*.definition!(.d).*s",
"zosfiles/*.definition!(.d).*s",
"zosjobs/*.definition!(.d).*s",
"zosmf/*.definition!(.d).*s",
"zostso/*.definition!(.d).*s",
"zosuss/*.definition!(.d).*s",
"zoslogs/*.definition!(.d).*s"
],
rootCommandDescription: Constants.DESCRIPTION,
defaultHome: Constants.HOME_DIR,
envVariablePrefix: Constants.ENV_PREFIX,
webHelpLogoImgPath: path.join(__dirname, "..", "web-help-logo.png"),
logging: {
appLogging: {
logFile: Constants.LOG_LOCATION
}
},
baseProfile: {
type: "base",
schema: {
type: "object",
title: "Base Profile",
description: "Base profile that stores values shared by multiple service profiles",
properties: {
host: {
type: "string",
optionDefinition: Constants.BASE_OPTION_HOST
},
port: {
type: "number",
optionDefinition: Constants.BASE_OPTION_PORT
},
user: {
type: "string",
secure: true,
optionDefinition: Constants.BASE_OPTION_USER
},
password: {
type: "string",
secure: true,
optionDefinition: Constants.BASE_OPTION_PASSWORD
},
rejectUnauthorized: {
type: "boolean",
optionDefinition: Constants.BASE_OPTION_REJECT_UNAUTHORIZED
},
tokenType: {
type: "string",
optionDefinition: Constants.BASE_OPTION_TOKEN_TYPE
},
tokenValue: {
type: "string",
secure: true,
optionDefinition: Constants.BASE_OPTION_TOKEN_VALUE
},
certFile: {
type: "string",
optionDefinition: Constants.BASE_OPTION_CERT_FILE
},
certKeyFile: {
type: "string",
optionDefinition: Constants.BASE_OPTION_CERT_KEY_FILE
// },
// certFilePassphrase: {
// type: "string",
// secure: true,
// optionDefinition: Constants.BASE_OPTION_CERT_FILE_PASSPHRASE
}
},
required: []
},
createProfileExamples: [
{
options: "base1 --host example.com --port 443 --user admin --password 123456",
description: "Create a profile called 'base1' to connect to host example.com and port 443"
},
{
options: "base2 --host example.com --user admin --password 123456 --reject-unauthorized false",
description: "Create a profile called 'base2' to connect to host example.com (default port - 443) " +
"and allow self-signed certificates"
},
{
options: "base3 --host example.com --port 1443",
description: "Create a profile called 'base3' to connect to host example.com and port 1443, " +
" not specifying a username or password so they are not stored on disk; these will need to be specified on every command"
},
{
options: "base4 --reject-unauthorized false",
description: "Create a zosmf profile called 'base4' to connect to default port 443 and allow self-signed certificates, " +
"not specifying a username, password, or host so they are not stored on disk; these will need to be specified on every command"
}
],
updateProfileExamples: [
{
options: "base1 --user newuser --password newp4ss",
description: "Update a base profile named 'base1' with a new username and password"
}
],
authConfig: [
{
serviceName: "apiml",
handler: __dirname + "/auth/ApimlAuthHandler",
login: {
summary: Constants.APIML_LOGIN_SUMMARY,
description: Constants.APIML_LOGIN_DESCRIPTION,
examples: [
Constants.APIML_LOGIN_EXAMPLE1,
Constants.APIML_LOGIN_EXAMPLE2
],
options: [
Constants.BASE_OPTION_HOST,
Constants.BASE_OPTION_PORT,
Constants.BASE_OPTION_USER,
Constants.BASE_OPTION_PASSWORD,
Constants.BASE_OPTION_REJECT_UNAUTHORIZED,
Constants.BASE_OPTION_CERT_FILE,
Constants.BASE_OPTION_CERT_KEY_FILE
]
},
logout: {
summary: Constants.APIML_LOGOUT_SUMMARY,
description: Constants.APIML_LOGOUT_DESCRIPTION,
examples: [
Constants.APIML_LOGOUT_EXAMPLE1,
Constants.APIML_LOGOUT_EXAMPLE2
],
options: [
Constants.BASE_OPTION_HOST,
Constants.BASE_OPTION_PORT,
Constants.APIML_LOGOUT_OPTION_TOKEN_TYPE,
Constants.BASE_OPTION_TOKEN_VALUE,
Constants.BASE_OPTION_REJECT_UNAUTHORIZED
]
}
}
]
},
authGroupConfig: {
authGroup: {
summary: Constants.AUTH_GROUP_SUMMARY,
description: Constants.AUTH_GROUP_DESCRIPTION
}
},
profiles: [
{
type: "zosmf",
schema: {
type: "object",
title: "z/OSMF Profile",
description: "z/OSMF Profile",
properties: {
host: {
type: "string",
optionDefinition: ZosmfSession.ZOSMF_OPTION_HOST_PROFILE
},
port: {
type: "number",
optionDefinition: ZosmfSession.ZOSMF_OPTION_PORT
},
user: {
type: "string",
secure: true,
optionDefinition: ZosmfSession.ZOSMF_OPTION_USER_PROFILE
},
password: {
type: "string",
secure: true,
optionDefinition: ZosmfSession.ZOSMF_OPTION_PASSWORD_PROFILE
},
rejectUnauthorized: {
type: "boolean",
optionDefinition: ZosmfSession.ZOSMF_OPTION_REJECT_UNAUTHORIZED
},
certFile: {
type: "string",
optionDefinition: ZosmfSession.ZOSMF_OPTION_CERT_FILE
},
certKeyFile: {
type: "string",
optionDefinition: ZosmfSession.ZOSMF_OPTION_CERT_KEY_FILE
},
// certFilePassphrase: {
// type: "string",
// secure: true,
// optionDefinition: ZosmfSession.ZOSMF_OPTION_CERT_FILE_PASSPHRASE
// },
basePath: {
type: "string",
optionDefinition: ZosmfSession.ZOSMF_OPTION_BASE_PATH
},
protocol: {
type: "string",
optionDefinition: ZosmfSession.ZOSMF_OPTION_PROTOCOL
},
encoding: {
type: "number",
optionDefinition: {
name: "encoding",
aliases: ["ec"],
description: "The encoding for download and upload of z/OS data set and USS files." +
" The default encoding if not specified is 1047.",
type: "number"
}
},
responseTimeout: {
type: "number",
optionDefinition: ZosFilesOptions.responseTimeout
}
},
required: []
},
createProfileExamples: [
{
options: "zos123 --host zos123 --port 1443 --user ibmuser --password myp4ss",
description: "Create a zosmf profile called 'zos123' to connect to z/OSMF at host zos123 and port 1443"
},
{
options: "zos124 --host zos124 --user ibmuser --password myp4ss --reject-unauthorized false",
description: "Create a zosmf profile called 'zos124' to connect to z/OSMF at the host zos124 (default port - 443) " +
"and allow self-signed certificates"
},
{
options: "zos125 --host zos125 --port 1443",
description: "Create a zosmf profile called 'zos125' to connect to z/OSMF at the host zos125 and port 1443, " +
" not specifying a username or password so they are not stored on disk; these will need to be specified on every command"
},
{
options: "zos126 --reject-unauthorized false",
description: "Create a zosmf profile called 'zos126' to connect to z/OSMF on the default port 443 and allow self-signed " +
"certificates, not specifying a username, password, or host so they are not stored on disk; these will need to be " +
"specified on every command"
},
{
options: "zosAPIML --host zosAPIML --port 2020 --user ibmuser --password myp4ss --reject-unauthorized false --base-path basePath",
description: "Create a zosmf profile called 'zos124' to connect to z/OSMF at the host zos124 (default port - 443) " +
"and allow self-signed certificates"
}
],
updateProfileExamples: [
{
options: "zos123 --user newuser --password newp4ss",
description: "Update a zosmf profile named 'zos123' with a new username and password"
}
]
},
{
type: "tso",
schema: {
type: "object",
title: "TSO Profile",
description: "z/OS TSO/E User Profile",
properties: {
account: {
type: "string",
optionDefinition: TSO_OPTION_ACCOUNT_PROFILE
},
characterSet: {
type: "string",
optionDefinition: TSO_OPTION_CHAR_SET
},
codePage: {
type: "string",
optionDefinition: TSO_OPTION_CODE_PAGE
},
columns: {
type: "number",
optionDefinition: TSO_OPTION_COLUMNS
},
logonProcedure: {
type: "string",
optionDefinition: TSO_OPTION_LOGON_PROCEDURE
},
regionSize: {
type: "number",
optionDefinition: TSO_OPTION_REGION_SIZE
},
rows: {
type: "number",
optionDefinition: TSO_OPTION_ROWS
}
},
required: []
},
createProfileExamples: [
{
description: "Create a tso profile called 'myprof' with default settings and JES accounting information of 'IZUACCT'",
options: "myprof -a IZUACCT"
},
{
description: "Create a tso profile called 'largeregion' with a region size of 8192, a logon procedure of MYPROC, and " +
"JES accounting information of '1234'",
options: "largeregion -a 1234 --rs 8192"
},
{
description: "Create a tso profile called 'myprof2' with default settings and region size of 8192, without storing the user " +
"account on disk",
options: "myprof2 --rs 8192"
}
],
updateProfileExamples: [
{
description: "Update a tso profile called myprof with new JES accounting information",
options: "myprof -a NEWACCT"
}
]
},
{
type: "ssh",
schema: {
type: "object",
title: "z/OS SSH Profile",
description: "z/OS SSH Profile",
properties: {
host: {
type: "string",
optionDefinition: SshSession.SSH_OPTION_HOST_PROFILE
},
port: {
type: "number",
optionDefinition: SshSession.SSH_OPTION_PORT
},
user: {
type: "string",
optionDefinition: SshSession.SSH_OPTION_USER_PROFILE
},
password: {
type: "string",
secure: true,
optionDefinition: SshSession.SSH_OPTION_PASSWORD
},
privateKey: {
type: "string",
optionDefinition: SshSession.SSH_OPTION_PRIVATEKEY
},
keyPassphrase: {
type: "string",
secure: true,
optionDefinition: SshSession.SSH_OPTION_KEYPASSPHRASE
},
handshakeTimeout: {
type: "number",
optionDefinition: SshSession.SSH_OPTION_HANDSHAKETIMEOUT
}
},
required: []
},
createProfileExamples: [
{
options: "ssh111 --host sshhost --user ibmuser --password myp4ss",
description: "Create a ssh profile called 'ssh111' to connect to z/OS SSH server at host 'zos123' and default port 22"
},
{
options: "ssh222 --host sshhost --port 13022 --user ibmuser --password myp4ss",
description: "Create a ssh profile called 'ssh222' to connect to z/OS SSH server at host 'zos123' and port 13022"
},
{
options: "ssh333 --host sshhost --user ibmuser --privateKey /path/to/privatekey --keyPassphrase privateKeyPassphrase",
description: "Create a ssh profile called 'ssh333' to connect to z/OS SSH server at host 'zos123' " +
"using a privatekey '/path/to/privatekey' and its decryption passphrase 'privateKeyPassphrase' " +
"for privatekey authentication"
},
{
options: "ssh444 --privateKey /path/to/privatekey",
description: "Create a ssh profile called 'ssh444' to connect to z/OS SSH server on default port 22, without specifying " +
"username, host, or password, preventing those values from being stored on disk"
}
]
}
]
};
module.exports = config;