From 34be4f79f1e35b90749aca9c468567afd8399198 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:40:25 +0200 Subject: [PATCH 01/26] `server-datasets.md`: missing MVS members Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/appendix/server-datasets.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/appendix/server-datasets.md b/docs/appendix/server-datasets.md index 00e5c955fb..18bcf7761d 100644 --- a/docs/appendix/server-datasets.md +++ b/docs/appendix/server-datasets.md @@ -33,7 +33,8 @@ ZWEIKRR3 | JCL | Defines RACF key ring and certificates ZWEIKRT1 | JCL | Defines TSS key ring and certificates ZWEIKRT2 | JCL | Defines TSS key ring and certificates ZWEIKRT3 | JCL | Defines TSS key ring and certificates -ZWEIMVS | JCL | Creates datasets used by a Zowe instance +ZWEIMVS | JCL | Creates PARMLIB dataset +ZWEIMVS1 | JCL | Creates plugin dataset (expected to be APF) ZWEIMVS2 | JCL | Creates the load library (expected to be APF) ZWEINSTL | JCL | Creates and copies basic installation datasets and members ZWEIRAC | JCL | Defines security permits for RACF @@ -47,8 +48,9 @@ ZWENOKRR | JCL | Removes key ring and certificates for RACF ZWENOKRT | JCL | Removes key ring and certificates for TSS ZWENOKYR | JCL | Removes key ring and certificates ZWENOSEC | JCL | Defines security permits -ZWERMVS | JCL | Removes datasets used by a Zowe instance -ZWERMVS2 | JCL | Removes the APF load library +ZWERMVS | JCL | Removes PARMLIB dataset +ZWERNVS1 | JCL | Removes plugin dataset +ZWERMVS2 | JCL | Removes load library ZWERSTC | JCL | Removes `PROCLIB` members ZWESASTC | JCL | Starts the Zowe Auxiliary server used by Cross memory server ZWESECKG | JCL | Sample program which generates a secret key for the PKCS#11 token From b1c9fd9137ffecf40e71c3d9e61e64a7197db9d1 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Thu, 10 Jul 2025 14:10:36 +0200 Subject: [PATCH 02/26] Update server-datasets.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/appendix/server-datasets.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/appendix/server-datasets.md b/docs/appendix/server-datasets.md index 18bcf7761d..ff4243e3b6 100644 --- a/docs/appendix/server-datasets.md +++ b/docs/appendix/server-datasets.md @@ -99,6 +99,7 @@ The following datasets are designed to be used by a single Zowe instance. These Library DDNAME | Member Type | zowe.yaml | Target Volume | Type | Org | RECFM | LRECL | No. of 3390 Trks | No. of DIR Blks ---|---|---|---|---|---|---|---|---|-- -CUST.PARMLIB | PARM Library Members | zowe.setup.dataset.parmlib | ANY | U | PDSE | FB | 80 | 15 | 5 -CUST.JCLLIB | JCL Members | zowe.setup.dataset.jcllib | ANY | U | PDSE | FB | 80 | 15 | 5 -CUST.ZWESAPL | CLIST copy utilities | zowe.setup.dataset.authPluginLib | ANY | U | PDSE | U | 0 | 15 | N/A +CUST.PARMLIB | PARM Library Members | `zowe.setup.dataset.parmlib` | ANY | U | PDSE | FB | 80 | 15 | 5 +CUST.JCLLIB | JCL Members | `zowe.setup.dataset.jcllib` | ANY | U | PDSE | FB | 80 | 60 | 5 +CUST.ZWESALL | APF load modules | `zowe.setup.dataset.authLoadlib` | ANY | U | PDSE | U | 0 | 30 | N/A +CUST.ZWESAPL | APF plugins load modules | `zowe.setup.dataset.authPluginLib` | ANY | U | PDSE | U | 0 | 30 | N/A From b6416301ea1fce437c83f9016708e076cd96fd4a Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Thu, 10 Jul 2025 15:50:23 +0200 Subject: [PATCH 03/26] Update initialize-zos-system.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/initialize-zos-system.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/docs/user-guide/initialize-zos-system.md b/docs/user-guide/initialize-zos-system.md index cdcba9fe90..ffba87b8e3 100644 --- a/docs/user-guide/initialize-zos-system.md +++ b/docs/user-guide/initialize-zos-system.md @@ -8,7 +8,8 @@ Once you complete the installation of the Zowe runtime, begin configuration by i ## About the `zwe init` command The `zwe init` command is a combination of the following subcommands. Each subcommand defines a configuration. - +- **generate** +Generates ready to execute JCL samples from YAML configuration values. - **mvs** Copies the data sets provided with Zowe to custom data sets. - **security** @@ -31,19 +32,6 @@ We recommend you to run these sub commands one by one to clearly see the output Enter `zwe init --help` to learn more about the command or see the [`zwe init` command reference](../appendix/zwe_server_command_reference/zwe/init/zwe-init-vsam.md) for detailed explanation, examples, and parameters. ::: -## zwe init arguments - -The following `zwe init` arguments can assist you with the initization process: - -- **--update-config** - This argument allows the init process to update your configuration file based on automatic detection and your `zowe.setup` settings. For example, if `java.home` and `node.home` are not defined, they can be updated based on the information that is collected on the system. `zowe.certificate` section can also be updated automatically based on your `zowe.setup.certificate` settings. -- **--allow-overwrite** - This argument allows you to rerun the `zwe init` command repeatedly regardless of whether some data sets are already created. -- **-v** or **--verbose** - This argument provides execution details of the `zwe` command. You can use it for troubleshooting purposes if the error message is not clear enough. -- **-vv** or **--trace** - This argument provides you more execution details than the `--verbose` mode for troubleshooting purposes. - ## Zowe initilization command The `zwe init` command runs the subcommands in sequence automatically. If you have the Zowe configuration file preparted and have security administrator privileges, or security and certificates setup was already completed on the system, you can run the following command: From e217aac3831b68f61ae0b88d7bbc07070f8da162 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:46:24 +0200 Subject: [PATCH 04/26] Update server-datasets.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/appendix/server-datasets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/appendix/server-datasets.md b/docs/appendix/server-datasets.md index ff4243e3b6..c7b98cb738 100644 --- a/docs/appendix/server-datasets.md +++ b/docs/appendix/server-datasets.md @@ -49,7 +49,7 @@ ZWENOKRT | JCL | Removes key ring and certificates for TSS ZWENOKYR | JCL | Removes key ring and certificates ZWENOSEC | JCL | Defines security permits ZWERMVS | JCL | Removes PARMLIB dataset -ZWERNVS1 | JCL | Removes plugin dataset +ZWERMVS1 | JCL | Removes plugin dataset ZWERMVS2 | JCL | Removes load library ZWERSTC | JCL | Removes `PROCLIB` members ZWESASTC | JCL | Starts the Zowe Auxiliary server used by Cross memory server From a4474c7882e0cbb3a98ad1b4e2f7082e993e60ed Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:59:33 +0200 Subject: [PATCH 05/26] apfauth needs SDSF Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/systemrequirements-zos.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/systemrequirements-zos.md b/docs/user-guide/systemrequirements-zos.md index 6847ee7b81..1fd6bf0310 100644 --- a/docs/user-guide/systemrequirements-zos.md +++ b/docs/user-guide/systemrequirements-zos.md @@ -32,8 +32,9 @@ Be sure your z/OS system meets the following prerequisites: | Task | Command utilizing SDSF | Alternatives | |-----------|-------------------------------|-------------| | [Certificate setup](configure-certificates.md) | `zwe init certificate` | z/OSMF workflow "ZWEKRING", or the JCL samples "ZWEKRING" and those that begin with "ZWEIKR" can be used to create keyrings. | - | [Starting Zowe](start-zowe-zos.md) | `zwe start` | Products that can issue the MVS START command upon Zowe's STC such as Sysview or EJES can be used instead. | - | [Stopping Zowe](start-zowe-zos.md) | `zwe stop` | Products that can issue the MVS STOP command upon Zowe's STC such as Sysview or EJES can be used instead. | + | [Authorize library](../appendix/zwe_server_command_reference/zwe/init/zwe-init-apfauth.md) | `zwe init apfauth` | Products that can issue the MVS `SETPROG APF` command or update `SYS1.PARMLIB(PROGxx)`. See examples in [`SZWESAMP(ZWESIPRG)`](https://github.com/zowe/zowe-install-packaging/blob/v3.x/staging/files/SZWESAMP/ZWESIPRG). | + | [Starting Zowe](start-zowe-zos.md) | `zwe start` | Products that can issue the MVS `START` command upon Zowe's STC such as Sysview or EJES can be used instead. | + | [Stopping Zowe](start-zowe-zos.md) | `zwe stop` | Products that can issue the MVS `STOP` command upon Zowe's STC such as Sysview or EJES can be used instead. | Not having SDSF installed may result in the following error message: From 8f3f57cc3d7f4e111a0bf13be7749514df9db04b Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:27:53 +0200 Subject: [PATCH 06/26] Update zwe-init-subcommand-overview.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- .../zwe-init-subcommand-overview.md | 70 +++++-------------- 1 file changed, 18 insertions(+), 52 deletions(-) diff --git a/docs/user-guide/zwe-init-subcommand-overview.md b/docs/user-guide/zwe-init-subcommand-overview.md index 45d1fabedf..b1aaf5e9be 100644 --- a/docs/user-guide/zwe-init-subcommand-overview.md +++ b/docs/user-guide/zwe-init-subcommand-overview.md @@ -21,10 +21,11 @@ Use the `zwe init mvs` command to intialize Zowe custom MVS data sets. :::info Required role: system programmer ::: -During the installation of Zowe, the following three data sets are created and populated with members copied across from the Zowe installation files: +During the installation of Zowe, the following data sets are created and populated with members copied across from the Zowe installation files: * `SZWEAUTH` +* `SZWEEXEC` +* `SZWELOAD` * `SZWESAMP` -* `SZWEEXEC` The contents of these data sets represent the original files that were provided as part of the Zowe installation and are not meant to be modified. @@ -68,37 +69,31 @@ The following output is an example of running `zwe init mvs`. ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets -Create data sets if they are not exist +Create data sets if they do not exist Creating IBMUSER.ZWE.CUST.PARMLIB Creating IBMUSER.ZWE.CUST.JCLLIB -Creating IBMUSER.ZWE.SZWEAUTH +Creating IBMUSER.ZWE.CUST.ZWESALL Creating IBMUSER.ZWE.CUST.ZWESAPL -Copy IBMUSER.ZWE.SZWESAMP(ZWESIP00) to USER.ZWE.CUST.PARMLIB(ZWESIP00) -Copy components/zss/LOADLIB/ZWESIS01 to USER.ZWE.SZWEAUTH(ZWESIS01) -Copy components/zss/LOADLIB/ZWESAUX to USER.ZWE.SZWEAUTH(ZWESAUX) -Copy components/launcher/bin/zowe_launcher to USER.ZWE.SZWEAUTH(ZWELNCH) +Copy IBMUSER.ZWE.CUST.SZWESAMP(ZWESIP00) to IBMUSER.ZWE.CUST.PARMLIB(ZWESIP00) +Copy components/zss/LOADLIB/ZWESIS01 to IBMUSER.ZWE.CUST.ZWESALL(ZWESIS01) +Copy components/zss/LOADLIB/ZWESAUX to IBMUSER.ZWE.CUST.ZWESALL(ZWESAUX) +Copy components/zss/LOADLIB/ZWESISDL to IBMUSER.ZWE.CUST.ZWESALL(ZWESISDL) +Copy components/launcher/bin/zowe_launcher to IBMUSER.ZWE.CUST.ZWESALL(ZWELNCH) >> Zowe custom data sets are initialized successfully. -#> ``` Successful execution of `zwe init mvs` has the following results: -* In the `zowe.yaml` file, three custom data sets are created that have matching values with the following libraries: +* In the `zowe.yaml` file, custom data sets are created that have matching values with the following libraries: * `zowe.setup.dataset.parmlib` * `zowe.setup.dataset.jcllib` + * `zowe.setup.dataset.authLoadlib` * `zowe.setup.dataset.authPluginLib`. * The member `ZWESIP00` is contained in `CUST.PARMLIB`. `JCLLIB` and `ZWESAPL` are empty. -* The PDS `SZWEAUTH` is created. If `SZWEAUTH` already exists, the following error is thrown: - ``` - Error ZWEL0158E: IBMUSER.ZWE.SZWEAUTH already exists - ``` - You can ignore this message, or you can use the `--allow-overwritten` option on the command. For example, `zwe init mvs -c zowe.yaml --allow-overwritten`. - - ## Initializing Zowe security configurations (`zwe init security`) This subcommand creates the user IDs and security manager settings. @@ -150,7 +145,7 @@ Zowe contains load modules that require access to make privileged z/OS security The command `zwe init apfauth` reads the PDS names for the following load libraries from zowe.yaml and performs the APF authority commands. * **zowe.setup.dataset.authLoadLib** -Specifies the user custom load library, containing the ZWELNCH, ZWESIS01 and ZWESAUX load modules. These are the Zowe launcher, the ZIS cross memory server and the auxiliary server. +Specifies the user custom load library containing the load modules. * **zowe.setup.dataset.authPluginLib** References the load library for ZIS plugins. @@ -158,36 +153,6 @@ For more information about `zwe init apfauth` see: * [Performing APF authorization of load libraries](./apf-authorize-load-library.md). * [`zwe init apfauth`](../appendix/zwe_server_command_reference/zwe/init/zwe-init-apfauth.md) in the Reference section. -:::tip - -To avoid having to run the `init apfauth` command, you can specify the flag `--security-dry-run` as in the following example. - -**Example:** - -``` -zwe init apfauth --security-dry-run -c /path/to/zowe.yaml -------------------------------------------------------------------------------- ->> APF authorize load libraries - -APF authorize IBMUSER.ZWE.SZWEAUTH -- Dry-run mode, security setup is NOT performed on the system. - Please apply this operator command manually: - - SETPROG APF,ADD,DSNAME=IBMUSER.ZWE.SZWEAUTH,SMS - -APF authorize IBMUSER.ZWE.CUST.ZWESAPL -- Dry-run mode, security setup is NOT performed on the system. - Please apply this operator command manually: - - SETPROG APF,ADD,DSNAME=IBMUSER.ZWE.CUST.ZWESAPL,SMS - - ->> Zowe load libraries are APF authorized successfully. - -``` -For production environments, inform your security administrator to re-submit the `init apfauth` command with proper authorization. - -::: ## Configuring Zowe to use TLS certificates (`zwe init certificate`) @@ -241,16 +206,17 @@ The `zwe init stc` command uses the `CUST.JCL` LIB data sets as a staging area t ------------------------------------------------------------------------------- >> Install Zowe main started task -Modify ZWESLSTC -Modify ZWESISTC -Modify ZWESASTC +Modify ZWESLSTC and save as IBMUSER.ZWE.CUST.JCLLIB(ZWESLSTC) +CONFIG path defined in ZWESLSTC is converted into absolute path and may contain SYSNAME. +Please manually verify if this path works for your environment, especially when you are working in Sysplex environment. +Modify ZWESISTC and save as IBMUSER.ZWE.CUST.JCLLIB(ZWESISTC) +Modify ZWESASTC and save as IBMUSER.ZWE.CUST.JCLLIB(ZWESASTC) Copy IBMUSER.ZWE.CUST.JCLLIB(ZWESLSTC) to USER.PROCLIB(ZWESLSTC) Copy IBMUSER.ZWE.CUST.JCLLIB(ZWESISTC) to USER.PROCLIB(ZWESISTC) Copy IBMUSER.ZWE.CUST.JCLLIB(ZWESASTC) to USER.PROCLIB(ZWESASTC) >> Zowe main started tasks are installed successfully. -#> ``` ## (Deprecated) Creating VSAM caching service datasets (`zwe init vsam`) From ef8e779e449de168eff721ec00e13b2414e24e7a Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:37:47 +0200 Subject: [PATCH 07/26] VSAM update Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/zwe-init-subcommand-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/zwe-init-subcommand-overview.md b/docs/user-guide/zwe-init-subcommand-overview.md index b1aaf5e9be..f5100875da 100644 --- a/docs/user-guide/zwe-init-subcommand-overview.md +++ b/docs/user-guide/zwe-init-subcommand-overview.md @@ -228,7 +228,7 @@ Zowe can work in a high availability (HA) configuration where multiple instances :::info Required roles: system programmer ::: -The command `zwe init vsam` uses the template JCL in `SZWESAMP(ZWECSVSM)` to copy the source template member from `zowe.setup.mvs.hlq.SZWESAMP(ZWECVCSM)` and creates a target JCL member in `zowe.setup.mvs.jcllib(ZWECVSCM)` with values extracted from the `zowe.yaml` file. +The command `zwe init vsam` uses the template JCL in `zowe.setup.dataset.prefix` + `.SZWESAMP(ZWECSVSM)`, processes it with values extracted from the `zowe.yaml` file and creates a target JCL member in `zowe.setup.dataset.prefix.jcllib` + `(ZWECVSCM)`. For more information about `zwe init vsam`, see [Creating VSAM caching service datasets](./configure-caching-service-ha.md) From 740bd4d667d830d08bcf3a419a738c60ba00cd0d Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:45:41 +0200 Subject: [PATCH 08/26] Links to existing doc Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/zwe-init-subcommand-overview.md | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/docs/user-guide/zwe-init-subcommand-overview.md b/docs/user-guide/zwe-init-subcommand-overview.md index f5100875da..124ec569a6 100644 --- a/docs/user-guide/zwe-init-subcommand-overview.md +++ b/docs/user-guide/zwe-init-subcommand-overview.md @@ -21,11 +21,7 @@ Use the `zwe init mvs` command to intialize Zowe custom MVS data sets. :::info Required role: system programmer ::: -During the installation of Zowe, the following data sets are created and populated with members copied across from the Zowe installation files: -* `SZWEAUTH` -* `SZWEEXEC` -* `SZWELOAD` -* `SZWESAMP` +During the installation of Zowe, the following [runtime datasets](../appendix/server-datasets.md#runtime-datasets) are created. The contents of these data sets represent the original files that were provided as part of the Zowe installation and are not meant to be modified. @@ -44,13 +40,7 @@ zowe: authPluginLib: IBMUSER.ZWE.CUST.ZWESAPL ``` -Review the following table for storage requirements for the three data sets: - -Library DDNAME | Member Type | zowe.yaml | Target Volume | Type | Org | RECFM | LRECL | No. of 3390 Trks | No. of DIR Blks ----|---|---|---|---|---|---|---|---|-- -CUST.PARMLIB | PARM Library Members | zowe.setup.dataset.parmlib | ANY | U | PDSE | FB | 80 | 15 | 5 -CUST.JCLLIB | JCL Members | zowe.setup.dataset.jcllib | ANY | U | PDSE | FB | 80 | 15 | 5 -CUST.ZWESAPL | CLIST copy utilities | zowe.setup.dataset.authPluginLib | ANY | U | PDSE | U | 0 | 15 | N/A +Review the [storage requirements](../appendix/server-datasets.md#custom-datasets) for the datasets. ### Procedure to initialize Zowe custom data sets From c9ca479c2180c3606a3b2d6f8d9f29a05f850c06 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:48:08 +0200 Subject: [PATCH 09/26] Typo Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/initialize-zos-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/initialize-zos-system.md b/docs/user-guide/initialize-zos-system.md index ffba87b8e3..1eb7ded3c4 100644 --- a/docs/user-guide/initialize-zos-system.md +++ b/docs/user-guide/initialize-zos-system.md @@ -34,7 +34,7 @@ Enter `zwe init --help` to learn more about the command or see the [`zwe init` c ## Zowe initilization command -The `zwe init` command runs the subcommands in sequence automatically. If you have the Zowe configuration file preparted and have security administrator privileges, or security and certificates setup was already completed on the system, you can run the following command: +The `zwe init` command runs the subcommands in sequence automatically. If you have the Zowe configuration file prepared and have security administrator privileges, or security and certificates setup was already completed on the system, you can run the following command: ``` zwe init --config /path/to/zowe.yaml From b0c7f8f3134efb2e5d261654f31381948900818b Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:51:41 +0200 Subject: [PATCH 10/26] Generate is not a config step Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/initialize-zos-system.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/initialize-zos-system.md b/docs/user-guide/initialize-zos-system.md index 1eb7ded3c4..db01463490 100644 --- a/docs/user-guide/initialize-zos-system.md +++ b/docs/user-guide/initialize-zos-system.md @@ -6,8 +6,8 @@ Once you complete the installation of the Zowe runtime, begin configuration by i ::: ## About the `zwe init` command - -The `zwe init` command is a combination of the following subcommands. Each subcommand defines a configuration. + Each subcommand defines a configuration. +The `zwe init` command is a combination of the following subcommands. Except the generate, each subcommand defines a configuration. - **generate** Generates ready to execute JCL samples from YAML configuration values. - **mvs** From 74a0ceda13c3631c11f00d72d488fd389d041e30 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 13 Aug 2025 09:24:20 +0200 Subject: [PATCH 11/26] Update server-datasets.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/appendix/server-datasets.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/docs/appendix/server-datasets.md b/docs/appendix/server-datasets.md index c7b98cb738..00e5c955fb 100644 --- a/docs/appendix/server-datasets.md +++ b/docs/appendix/server-datasets.md @@ -33,8 +33,7 @@ ZWEIKRR3 | JCL | Defines RACF key ring and certificates ZWEIKRT1 | JCL | Defines TSS key ring and certificates ZWEIKRT2 | JCL | Defines TSS key ring and certificates ZWEIKRT3 | JCL | Defines TSS key ring and certificates -ZWEIMVS | JCL | Creates PARMLIB dataset -ZWEIMVS1 | JCL | Creates plugin dataset (expected to be APF) +ZWEIMVS | JCL | Creates datasets used by a Zowe instance ZWEIMVS2 | JCL | Creates the load library (expected to be APF) ZWEINSTL | JCL | Creates and copies basic installation datasets and members ZWEIRAC | JCL | Defines security permits for RACF @@ -48,9 +47,8 @@ ZWENOKRR | JCL | Removes key ring and certificates for RACF ZWENOKRT | JCL | Removes key ring and certificates for TSS ZWENOKYR | JCL | Removes key ring and certificates ZWENOSEC | JCL | Defines security permits -ZWERMVS | JCL | Removes PARMLIB dataset -ZWERMVS1 | JCL | Removes plugin dataset -ZWERMVS2 | JCL | Removes load library +ZWERMVS | JCL | Removes datasets used by a Zowe instance +ZWERMVS2 | JCL | Removes the APF load library ZWERSTC | JCL | Removes `PROCLIB` members ZWESASTC | JCL | Starts the Zowe Auxiliary server used by Cross memory server ZWESECKG | JCL | Sample program which generates a secret key for the PKCS#11 token @@ -99,7 +97,6 @@ The following datasets are designed to be used by a single Zowe instance. These Library DDNAME | Member Type | zowe.yaml | Target Volume | Type | Org | RECFM | LRECL | No. of 3390 Trks | No. of DIR Blks ---|---|---|---|---|---|---|---|---|-- -CUST.PARMLIB | PARM Library Members | `zowe.setup.dataset.parmlib` | ANY | U | PDSE | FB | 80 | 15 | 5 -CUST.JCLLIB | JCL Members | `zowe.setup.dataset.jcllib` | ANY | U | PDSE | FB | 80 | 60 | 5 -CUST.ZWESALL | APF load modules | `zowe.setup.dataset.authLoadlib` | ANY | U | PDSE | U | 0 | 30 | N/A -CUST.ZWESAPL | APF plugins load modules | `zowe.setup.dataset.authPluginLib` | ANY | U | PDSE | U | 0 | 30 | N/A +CUST.PARMLIB | PARM Library Members | zowe.setup.dataset.parmlib | ANY | U | PDSE | FB | 80 | 15 | 5 +CUST.JCLLIB | JCL Members | zowe.setup.dataset.jcllib | ANY | U | PDSE | FB | 80 | 15 | 5 +CUST.ZWESAPL | CLIST copy utilities | zowe.setup.dataset.authPluginLib | ANY | U | PDSE | U | 0 | 15 | N/A From 273481242a548e174e7b7a513d3decd9f28e567f Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Thu, 28 Aug 2025 12:02:03 -0400 Subject: [PATCH 12/26] minor adjustments Signed-off-by: MarkAckert --- docs/user-guide/configure-zowe-runtime.md | 2 +- docs/user-guide/zwe-init-subcommand-overview.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/configure-zowe-runtime.md b/docs/user-guide/configure-zowe-runtime.md index 0255c92e18..f5ef919a03 100644 --- a/docs/user-guide/configure-zowe-runtime.md +++ b/docs/user-guide/configure-zowe-runtime.md @@ -18,7 +18,7 @@ After your installation of Zowe runtime, you can run the `zwe init` command to p * Create user IDs and security manager settings (Security Admin) * Provide APF authorize load libraries (Security Admin) * Configure Zowe to use TLS certificates (Security Admin) -* Configure VSAM files to run the Zowe caching service used for high availability (HA) +* Configure the Zowe caching service for high availability (HA) * Configure the system to launch the Zowe started task For more information about this z/OS runtime initialization method, see [Configuring Zowe with zwe init](./initialize-zos-system.md) diff --git a/docs/user-guide/zwe-init-subcommand-overview.md b/docs/user-guide/zwe-init-subcommand-overview.md index 124ec569a6..4379022cfb 100644 --- a/docs/user-guide/zwe-init-subcommand-overview.md +++ b/docs/user-guide/zwe-init-subcommand-overview.md @@ -36,7 +36,7 @@ zowe: prefix: IBMUSER.ZWE parmlib: IBMUSER.ZWE.CUST.PARMLIB jcllib: IBMUSER.ZWE.CUST.JCLLIB - authLoadlib: IBMUSER.ZWE.SZWEAUTH + authLoadlib: IBMUSER.ZWE.CUST.SZWEAUTH authPluginLib: IBMUSER.ZWE.CUST.ZWESAPL ``` From 4a4fa97998d4700dc365e1d52a89992c4129dcf9 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Thu, 28 Aug 2025 16:51:23 -0400 Subject: [PATCH 13/26] first draft of zowe-via-jcl and `zwe`, some minor edits Signed-off-by: MarkAckert --- docs/images/zosmf/inputvars-jcl-enable.png | Bin 0 -> 79223 bytes docs/user-guide/configuring-zowe-via-jcl.md | 131 +++++++++++++++++++- docs/user-guide/installandconfig.md | 6 +- 3 files changed, 128 insertions(+), 9 deletions(-) create mode 100644 docs/images/zosmf/inputvars-jcl-enable.png diff --git a/docs/images/zosmf/inputvars-jcl-enable.png b/docs/images/zosmf/inputvars-jcl-enable.png new file mode 100644 index 0000000000000000000000000000000000000000..d36d55115f4f94274a308ed24148c64cab6bbbb1 GIT binary patch literal 79223 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 literal 0 HcmV?d00001 diff --git a/docs/user-guide/configuring-zowe-via-jcl.md b/docs/user-guide/configuring-zowe-via-jcl.md index b9cd1c0b35..b503f5e5f0 100644 --- a/docs/user-guide/configuring-zowe-via-jcl.md +++ b/docs/user-guide/configuring-zowe-via-jcl.md @@ -1,6 +1,127 @@ - # Configuring Zowe via JCL + # Configuring Zowe with JCL -One option to configure Zowe is by directly customizing JCLs. The Zowe Runtime Dataset `SZWESAMP` contains JCL samples that have templates referencing Zowe YAML parameters. These samples should not be submitted without modification. Samples that are submitted without modification will end unsuccessfully with a JCL ERROR status. +:::note +Configuring Zowe with JCL is currently in *technical preview*. In a later release, this will become the default method of configuration. +::: + +Zowe can be configured on your system with JCL using the `zwe` commands, or by customizing and running JCL entirely manually. Both of these configuration methods require a [`zowe.yaml` configuration file](./installandconfig.md#zowe-configuration-file-zoweyaml). Between these two options, we recommend sticking with `zwe` commands rather than manually submitting JCL from scratch, as there's additional validation we can perform on your configuration prior to creating and submitting JCL. + +- [Getting started with `zwe` and JCL](#getting-started-with-zwe-and-jcl) + - [Generating JCL](#generating-jcl) + - [Adding Job Parameters to generated JCL](#adding-job-parameters-to-generated-jcl) + - [Reviewing JCL before submission](#reviewing-jcl-before-submission) + - [Following existing `zwe` command documentation](#following-existing-zwe-command-documentation) + - [Following existing z/OSMF workflows](#following-existing-zosmf-workflow-documentation) +- [Getting started with manual JCL submission](#getting-started-with-manual-jcl-submission) + - [Preparing the JCL](#preparing-the-jcl) + - [Manual JCL Core Tasks](#manual-jcl-core-tasks) + - [Manual JCL Keyring Tasks](#manual-jcl-keyring-tasks) + - [Manual JCL Caching Service VSAM Task (Deprecated)](#manual-jcl-caching-service-vsam-task-deprecated) + +## Getting started with `zwe` and JCL + +By default, `zwe` will not submit solely JCL to configure Zowe, instead relying on a mix of unix services and JCL. To enable `zwe` to rely **solely** on JCL, you can either add `--jcl` to the end of every `zwe install` or `zwe init` command, or set `zowe.setup.jcl.enable` in your zowe.yaml file. + +Example zowe.yaml: +```yaml +zowe: + setup: + jcl: + enable: true +``` + +Example commands: +```shell +zwe install -c /path/to/your/zowe.yaml --jcl +zwe init mvs -c /path/to/your/zowe.yaml --jcl +``` + +### Generating JCL + +`zwe init` commands using JCL require you to first generate the JCL using values present in your `zowe.yaml` file. To do this, run: + +```shell +zwe init generate -c /path/to/your/zowe.yaml` +``` + +This takes the configuration values present in your `zowe.yaml` file, uses them to populate JCL templates in `SZWESAMP`, and creates a `JCLLIB` dataset with the final generated JCL. The `JCLLIB` will be created using the prefix `zowe.setup.dataset.jcllib`. + +For example, `zwe init generate` with the below zowe.yaml creates the dataset `MY.DS.PREFIX.JCLLIB`. If this dataset already exists, you must add `--allow-overwrite` to the `init generate` command. +```yaml +zowe: + setup: + dataset: + # ... other fields + jcllib: MY.DS.PREFIX.JCLLIB +``` + +:::important +If you make any changes to values starting with `zowe.setup` in your zowe.yaml file, you must re-run `zwe init generate` to create fresh JCL. Optionally, `zwe init` commands provide a `--generate` flag which will run `init generate` on-the-fly as well. For example, `zwe init mvs --generate` will run `init generate` before the `init mvs`. +::: + +### Adding Job Parameters to generated JCL + +If you require specific job parameters to run JCL on your system, you can add them via the `zowe.setup.jcl.header` field in your zowe.yaml file. The `zwe` _will not_ validate the syntax of the supplied parameters, you should always review the generated JCL to ensure the headers are correct. + +This header field can be supplied as either a single or multi-line string. Line 1 requires no formatting, while lines 2 onward require you to supply `// ` before the job parameters. If using a single line for the header field, use `\n` to indicate new lines. If using multi-line strings, ensure your indentation remains aligned with each new line. + +Example zowe.yaml, with header as a single line. Double quotes are required around the entire string: +```yaml +zowe: + setup: + jcl: + enable: true + header: "'ZWECFJOB'\n// REGION=0M\n//* atestcomment" + dataset: # ...the rest of your zowe.yaml +``` + +Example zowe.yaml, with header as a single line: +```yaml +zowe: + setup: + jcl: + enable: true + header: | + 'ZWECFJOB', + // REGION=0M + //* atestcomment + dataset: # ...the rest of your zowe.yaml +``` + +Both zowe.yaml files create the below job card: +``` +//ZWEGENER JOB 'SOMEJOB', +// REGION=0M +//* atestcomment +//* secondtestcomment +``` + +### Reviewing JCL before submission + +One advantage to JCL is the ability to review all the actions it will take on your system before submitting it. There are a few ways to review JCL used by `zwe` before submission. All `zwe init` and `zwe install` commands support the `--dry-run` command line parameter, which will print the command's final JCL to the console and won't submit it. When running `zwe init generate` specifically, this is the only way to review the final JCL prior to submission. For other `zwe init` commands and the `zwe install` command, you can choose to run them with `--dry-run` and review the console outputs, or you can review them in the `JCLLIB` dataset created by `init generate`. + +### Following existing `zwe` command documentation + +To configure Zowe successfully with JCL, you can follow the existing documentation for `zwe install` and `zwe init` with minor modifications: + +1. Setup JCL enablement and JCL job parameters as described in this guide first. +2. Run `zwe init generate` before any other init command, and after any change to a `zowe.setup` field in the zowe.yaml file. + +That's it! + +### Following existing z/OSMF workflow documentation + +Both the [Zowe Configuration Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) and the [Stand-alone APIML Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) support JCL enablement. When you start your configuration, you will see the option to enable JCL and a `Job statement positionial parameters...` text field where you can fill out job statement information. **Note:** unlike when editing the zowe.yaml file directly, do not enter a start-of-line `// ` for lines 2 or more in the workflow text field. This field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. + +![Workflow](../images/zosmf/inputvars-jcl-enable.png) + +## Getting started with manual JCL submission + +If you do not wish to use the `zwe` command-line interface, you can submit the same set of JCL yourself directly through MVS datasets. Do note that you will still need a zowe.yaml file. + +### Preparing the JCL + +The Zowe Runtime Dataset `SZWESAMP` contains JCL samples that have templates referencing Zowe YAML parameters. These samples should not be submitted without modification. Samples that are submitted without modification will end unsuccessfully with a JCL ERROR status. Edit and submit the job `SZWESAMP(ZWEGENER)` to validate the contents of your `zowe.yaml` before resolving the `JCL templates` and placing the resulting JCL into a separate data set created by the job `ZWEGENER`. The location is specified in `zowe.setup.dataset.jcllib`. @@ -17,7 +138,7 @@ In addition to core JCL samples, you can also customize JCL samples for various * For sample JCLs corresponding to keyring tasks, see the section [Keyring Tasks](#keyring-tasks) later in this article. * For JCL samples if you are using VSAM as your storage solution for the Caching service, see the table corresponding to [(Deprecated) Caching Service VSAM Task](#deprecated-caching-service-vsam-task). -## Core Tasks +## Manual JCL Core Tasks | Task | Description | Sample JCL| |------|-------------|-----------| @@ -27,7 +148,7 @@ In addition to core JCL samples, you can also customize JCL samples for various |(z/OS v2.4 ONLY) Create Zowe SAF Resource Class | On z/OS v2.4, the SAF resource class for Zowe is not included, and must be created. This step is not needed on z/OS v2.5 and later versions. | RACF: [ZWEIRACZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIRACZ)
TSS: [ZWEITSSZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEITSSZ)
ACF2: [ZWEIACFZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIACFZ) Copy STC JCL to PROCLIB |
**Purpose:**
The job ZWESLSTC runs Zowe's webservers. The job ZWESISTC runs the APF authorized cross-memory server. The job ZWESASTC is started by ZWESISTC on an as-needed basis.
**Action:**
Copy the members ZWESLSTC, ZWESISTC, and ZWESASTC into your desired PROCLIB. If the job names are customized, also modify the YAML values of them in `zowe.setup.security.stcs`. | [ZWEISTC](https://github.com/zowe/zowe-install-packaging/blob/v2.x/staging/files/SZWESAMP/ZWEISTC) -## Keyring Tasks +## Manual JCL Keyring Tasks **Certificate requirements** Ensure that your Zowe keyring has the following elements: @@ -64,7 +185,7 @@ zowe: -## (Deprecated) Caching Service VSAM Task +## Manual JCL Caching Service VSAM Task (Deprecated) The Caching Service is a server of Zowe that improves the high availability and fault tolerance of Zowe. It is enabled by default and uses Infinispan for its backing storage by default. diff --git a/docs/user-guide/installandconfig.md b/docs/user-guide/installandconfig.md index 82c70fc25b..7a4204424d 100755 --- a/docs/user-guide/installandconfig.md +++ b/docs/user-guide/installandconfig.md @@ -213,8 +213,6 @@ When you execute the `zwe` command, the `--config` or `-c` argument is used to p * To avoid passing `--config` or `-c` to every `zwe` command, you can define `ZWE_CLI_PARAMETER_CONFIG` environment variable points to the location of zowe.yaml. For example, after defining `export ZWE_CLI_PARAMETER_CONFIG=/path/to/my/zowe.yaml`, you can simply type `zwe start` instead of the full command `zwe start -c /path/to/my/zowe.yaml`. - -* If you are new to the `example-zowe.yaml` configuration file, you can start with entries that are marked with `COMMONLY_CUSTOMIZED`. It highlights most of the common configurations, such as directories, host and domain name, service ports, certificate setup, and z/OSMF, which are critical for standing a new Zowe instance. ::: ### Workspace directory @@ -237,7 +235,7 @@ Multiple Zowe instances can define different log directories. It is not necessar The log directory should be defined in your Zowe configuration file as `zowe.logDirectory`. -### Keystore directory +### (Optional) Keystore directory Zowe uses certificates to enable transport layer security. The system administrator can choose to use z/OS Keyring or PKCS#12 keystore for certificate storage. A keystore directory is created and used if PKCS#12 keystore is chosen. @@ -255,7 +253,7 @@ Zowe uses certificates to enable transport layer security. The system administra └── localhost.truststore.p12 - Zowe trusted certificate authorities in PKCS#12 format ``` -To generate a keystore directory, you need proper `zowe.setup.certificate` configuration defined in the Zowe configuration file. Execute the server command `zwe init certificate`. To learn more about this command, see the [Reference of zwe init certificate](../appendix/zwe_server_command_reference/zwe/init/zwe-init-certificate.md) in the appendix. +To generate a keystore directory tree, you need to define `zowe.setup.certificate` configuration in the Zowe configuration file. The keystore directory provided to the Zowe configuration must first be created by an administrator. Sub-directories will be created when you run `zwe init certificate` during [certificate configuration steps](https://docs.zowe.org/stable/user-guide/configure-certificates). To learn more about this command, see the [Reference of zwe init certificate](../appendix/zwe_server_command_reference/zwe/init/zwe-init-certificate.md) in the appendix. ### Extension directory From 2c5bd7281d45ea296d7359e6199e03de0b31cfeb Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 29 Aug 2025 09:39:55 -0400 Subject: [PATCH 14/26] fix broken links Signed-off-by: MarkAckert --- docs/user-guide/cli-authentication-methods.md | 2 +- docs/user-guide/configuring-zowe-via-jcl.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user-guide/cli-authentication-methods.md b/docs/user-guide/cli-authentication-methods.md index fb62114aa1..f1d4fca083 100644 --- a/docs/user-guide/cli-authentication-methods.md +++ b/docs/user-guide/cli-authentication-methods.md @@ -248,7 +248,7 @@ Use the following steps to specify a base path with Zowe [team configuration](.. #### Specifying a base path with Zowe V1 profiles -See the [Integrating with API Mediation Layer](https://67c89aa5af702da5881fc564--zowe-docs-master.netlify.app/v1.28.x/user-guide/cli-usingcli#integrating-with-api-mediation-layer) Zowe V1 documentation. +See the [Integrating with API Mediation Layer](../../versioned_docs/version-v1.28.x/user-guide/cli-usingcli#integrating-with-api-mediation-layer) Zowe V1 documentation. ## Using client certificates diff --git a/docs/user-guide/configuring-zowe-via-jcl.md b/docs/user-guide/configuring-zowe-via-jcl.md index b503f5e5f0..d2b21af966 100644 --- a/docs/user-guide/configuring-zowe-via-jcl.md +++ b/docs/user-guide/configuring-zowe-via-jcl.md @@ -134,9 +134,9 @@ Edit and submit the job `SZWESAMP(ZWEGENER)` to validate the contents of your `z When the JCL is prepared, the following jobs can be submitted to perform the following instance configuration actions. In addition to core JCL samples, you can also customize JCL samples for various keyring setup options according to your security manager. -* For sample JCLs corresponding to core tasks, see the table [Core Tasks](#core-tasks). -* For sample JCLs corresponding to keyring tasks, see the section [Keyring Tasks](#keyring-tasks) later in this article. -* For JCL samples if you are using VSAM as your storage solution for the Caching service, see the table corresponding to [(Deprecated) Caching Service VSAM Task](#deprecated-caching-service-vsam-task). +* For sample JCLs corresponding to core tasks, see the table [Core Tasks](#manual-jcl-core-tasks). +* For sample JCLs corresponding to keyring tasks, see the section [Keyring Tasks](#manual-jcl-keyring-tasks) later in this article. +* For JCL samples if you are using VSAM as your storage solution for the Caching service, see the table corresponding to [(Deprecated) Caching Service VSAM Task](#manual-jcl-caching-service-vsam-task-deprecated). ## Manual JCL Core Tasks From 25a053cab147670f870e678d5ebcd769d130f67a Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 29 Aug 2025 12:06:42 -0400 Subject: [PATCH 15/26] bunch of minor fixes Signed-off-by: MarkAckert --- docs/user-guide/configuring-zowe-via-jcl.md | 34 +++++++++++---------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/user-guide/configuring-zowe-via-jcl.md b/docs/user-guide/configuring-zowe-via-jcl.md index d2b21af966..8d192b75b3 100644 --- a/docs/user-guide/configuring-zowe-via-jcl.md +++ b/docs/user-guide/configuring-zowe-via-jcl.md @@ -30,7 +30,7 @@ zowe: enable: true ``` -Example commands: +Example commands: `--jcl` overrides `zowe.setup.jcl.enable` ```shell zwe install -c /path/to/your/zowe.yaml --jcl zwe init mvs -c /path/to/your/zowe.yaml --jcl @@ -38,13 +38,13 @@ zwe init mvs -c /path/to/your/zowe.yaml --jcl ### Generating JCL -`zwe init` commands using JCL require you to first generate the JCL using values present in your `zowe.yaml` file. To do this, run: +Running `zwe init` commands with JCL require that you to first generate JCL using values present in your `zowe.yaml` file. To do this, run: ```shell -zwe init generate -c /path/to/your/zowe.yaml` -``` +zwe init generate -c /path/to/your/zowe.yaml +``` -This takes the configuration values present in your `zowe.yaml` file, uses them to populate JCL templates in `SZWESAMP`, and creates a `JCLLIB` dataset with the final generated JCL. The `JCLLIB` will be created using the prefix `zowe.setup.dataset.jcllib`. +This takes the configuration values present in your `zowe.yaml` file, uses them to populate JCL templates in `SZWESAMP`, and creates a `JCLLIB` dataset with the final generated JCL. The `JCLLIB` will be created using the value of `zowe.setup.dataset.jcllib`. For example, `zwe init generate` with the below zowe.yaml creates the dataset `MY.DS.PREFIX.JCLLIB`. If this dataset already exists, you must add `--allow-overwrite` to the `init generate` command. ```yaml @@ -56,31 +56,33 @@ zowe: ``` :::important -If you make any changes to values starting with `zowe.setup` in your zowe.yaml file, you must re-run `zwe init generate` to create fresh JCL. Optionally, `zwe init` commands provide a `--generate` flag which will run `init generate` on-the-fly as well. For example, `zwe init mvs --generate` will run `init generate` before the `init mvs`. +If you make any changes to values which begin with `zowe.setup` in your zowe.yaml file, you must re-run `zwe init generate` to create fresh JCL. Optionally, `zwe init` commands provide a `--generate` flag which will run `init generate` on-the-fly as well. For example, `zwe init mvs --generate` will run `init generate` before the `init mvs`. ::: ### Adding Job Parameters to generated JCL -If you require specific job parameters to run JCL on your system, you can add them via the `zowe.setup.jcl.header` field in your zowe.yaml file. The `zwe` _will not_ validate the syntax of the supplied parameters, you should always review the generated JCL to ensure the headers are correct. +If you require specific job parameters to run JCL on your system, you can add them via the `zowe.setup.jcl.header` field in your zowe.yaml file. The `zwe` commands _will not_ validate the syntax of the supplied parameters, so you should always review the generated JCL to ensure the headers are correct. -This header field can be supplied as either a single or multi-line string. Line 1 requires no formatting, while lines 2 onward require you to supply `// ` before the job parameters. If using a single line for the header field, use `\n` to indicate new lines. If using multi-line strings, ensure your indentation remains aligned with each new line. +This header field can be supplied as either a single or multi-line string. Line 1 requires no formatting, while lines 2 and onward require you to supply `// ` before the job parameters. If using a single line for the header field, use `\n` to indicate new lines. If using multi-line strings, ensure your indentation remains aligned with each new line. -Example zowe.yaml, with header as a single line. Double quotes are required around the entire string: +Example zowe.yaml, with header as a single line: ```yaml zowe: setup: jcl: enable: true + # Double quotes are required around the entire string: header: "'ZWECFJOB'\n// REGION=0M\n//* atestcomment" dataset: # ...the rest of your zowe.yaml ``` -Example zowe.yaml, with header as a single line: +Example zowe.yaml, with header as line: ```yaml zowe: setup: jcl: enable: true + # Ensure spacing is aligned here, column 1 is under the 'a' of 'header' header: | 'ZWECFJOB', // REGION=0M @@ -90,19 +92,18 @@ zowe: Both zowe.yaml files create the below job card: ``` -//ZWEGENER JOB 'SOMEJOB', +//ZWEGENER JOB 'ZWECFJOB', // REGION=0M //* atestcomment -//* secondtestcomment ``` ### Reviewing JCL before submission -One advantage to JCL is the ability to review all the actions it will take on your system before submitting it. There are a few ways to review JCL used by `zwe` before submission. All `zwe init` and `zwe install` commands support the `--dry-run` command line parameter, which will print the command's final JCL to the console and won't submit it. When running `zwe init generate` specifically, this is the only way to review the final JCL prior to submission. For other `zwe init` commands and the `zwe install` command, you can choose to run them with `--dry-run` and review the console outputs, or you can review them in the `JCLLIB` dataset created by `init generate`. +One advantage to JCL is the ability to review all the actions it will take on your system before submitting it. There are a few ways to review JCL used by `zwe` before submission. All `zwe init` and `zwe install` commands support the `--dry-run` command line parameter, which will print the command's final JCL to the console and exit. When running `zwe init generate` or `zwe install` specifically, this is the only way to review the final JCL prior to submission. For other `zwe init` commands, you can choose to run them with `--dry-run` and review the console outputs, or you can review their JCL in the `JCLLIB` dataset created by `init generate`. We recommend reviewing using `--dry-run`. ### Following existing `zwe` command documentation -To configure Zowe successfully with JCL, you can follow the existing documentation for `zwe install` and `zwe init` with minor modifications: +To configure Zowe successfully with JCL, you can follow all existing documentation for `zwe install` and `zwe init` with minor modifications: 1. Setup JCL enablement and JCL job parameters as described in this guide first. 2. Run `zwe init generate` before any other init command, and after any change to a `zowe.setup` field in the zowe.yaml file. @@ -111,13 +112,14 @@ That's it! ### Following existing z/OSMF workflow documentation -Both the [Zowe Configuration Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) and the [Stand-alone APIML Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) support JCL enablement. When you start your configuration, you will see the option to enable JCL and a `Job statement positionial parameters...` text field where you can fill out job statement information. **Note:** unlike when editing the zowe.yaml file directly, do not enter a start-of-line `// ` for lines 2 or more in the workflow text field. This field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. +Both the [Zowe Configuration Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) and the [Stand-alone APIML Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) support JCL enablement. When you start your configuration, you will see the option to enable JCL and a field labeled with `Job statement positionial parameters...` where you can fill in job statement information. +**Note:** Unlike when editing the zowe.yaml file directly, do not enter a start-of-line `// ` for lines 2 or more in the workflow text field. This field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. ![Workflow](../images/zosmf/inputvars-jcl-enable.png) ## Getting started with manual JCL submission -If you do not wish to use the `zwe` command-line interface, you can submit the same set of JCL yourself directly through MVS datasets. Do note that you will still need a zowe.yaml file. +If you do not wish to use the `zwe` command-line tool to configure Zowe, you can submit the same set of JCL yourself directly through MVS datasets. Do note that you will still need a zowe.yaml file. ### Preparing the JCL From 9fc92a2e71bea280d7c34f4a0b857ddc6d25089f Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 29 Aug 2025 13:09:41 -0400 Subject: [PATCH 16/26] update broken links to branch Signed-off-by: MarkAckert --- .../install-zowe-server-install-wizard.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/user-guide/install-zowe-server-install-wizard.md b/docs/user-guide/install-zowe-server-install-wizard.md index 83399a5998..f16b4c912c 100644 --- a/docs/user-guide/install-zowe-server-install-wizard.md +++ b/docs/user-guide/install-zowe-server-install-wizard.md @@ -184,15 +184,15 @@ The following table presents the steps in the installation, detailed description |Install Wizard Initalization Step|Description|Sample JCL| |---|---|---| -|Installation|**Purpose:**
Create datasets for Zowe's PARMLIB content and non-ZFS extension content for a given Zowe Instance

**Action:**
1. Allocate the PDSE FB80 dataset with at least 15 tracks named from Zowe parameter `zowe.setup.dataset.parmlib`
2. Allocate the PDSE FB80 dataset with at least 30 tracks named from Zowe parameter `zowe.setup.dataset.authPluginLib`
3. Copy the ZWESIP00 member from `zowe.setup.dataset.prefix`.SZWESAMP into `zowe.setup.dataset.parmlib`|[ZWEIMVS](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIMVS)| -|APF Auth|**Purpose:**
Zowe contains one privileged component, ZIS, which enables the security model. The majority of Zowe is unprivileged and in key 8. The load library for the ZIS component and its extension library must be set as APF authorized and run in key 4. This enables ZIS and components that depend on ZIS.

**Action:**
1. APF authorize the datasets defined at `zowe.setup.dataset.authLoadlib` and `zowe.setup.dataset.authPluginLib`.
2. Define PPT entries for the members ZWESIS01 and ZWESAUX as Key 4, NOSWAP in the SCHEDxx member of the system PARMLIB.|[ZWEIAPF](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIAPF)| -|Security|**Purpose:**
The STC accounts for Zowe need permissions for operating servers, and users need permissions for interacting with the servers.

**Action:**
[Set SAF permissions for accounts](https://docs.zowe.org/stable/user-guide/assign-security-permissions-to-users#security-permissions-reference-table)|RACF: [ZWEIRAC](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIRAC)

TSS: [ZWEITSS](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEITSS)

ACF2: [ZWEIACF](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIACF)| -|Security|(z/OS v2.4 ONLY) Create Zowe SAF Resource Class|This is not needed on z/OS v2.5+. On z/OS v2.4, the SAF resource class for Zowe is not included, and must be created. See these samples for examples:

RACF: [ZWEIRACZ](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIRACZ)

TSS: [ZWEITSSZ](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEITSSZ)

ACF2: [ZWEIACFZ](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIACFZ)| -|Certificates Option 1|Zowe creates a keyring and populates it with a newly generated certificate and certificate authority. The certificate would be seen as "self-signed" by clients unless import of the CA to clients is performed.|RACF: [ZWEIKRR1](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRR1)

TSS: [ZWEIKRT1](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRT1)

ACF2: [ZWEIKRA1](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRA1)| -|Certificates Option 2|Zowe creates a keyring and populates the keyring by connecting pre-existing certificates and CAs that you specify.|RACF: [ZWEIKRR2](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRR2)

TSS: [ZWEIKRT2](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRT2)

ACF2: [ZWEIKRA2](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRA2)| -|Certificates Option 3|Zowe creates a keyring and populates the keyring by importing PKCS12 content from a dataset that you specify.|RACF: [ZWEIKRR3](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRR3)

TSS: [ZWEIKRT3](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRT3)

ACF2: [ZWEIKRA3](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEIKRA3)| -|STC|**Purpose**:
ZWESLSTC is the job for running Zowe's webservers. ZWESISTC runs the APF authorized cross-memory server. The ZWESASTC job is started by ZWESISTC on an as-needed basis.

**Action**:
Copy the members ZWESLSTC, ZWESISTC, and ZWESASTC into your desired PROCLIB. If the job names are customized, modify the job name YAML values in `zowe.setup.security.stcs`|[ZWEISTC](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEISTC)| -|(Optional) VSAM for Caching Service (NYI)|**Purpose:**
To use VSAM as your storage method for the Caching Service. Note that Infinispan is the recommended storage method. For more information, see [Using VSAM as a storage solution through the Caching service](../extend/extend-apiml/api-mediation-vsam.md).

**Action:**
Create a RLM or NONRLM dataset for the Caching service, and set the name as the value for `components.caching-service.storage.vsam.name`|[ZWECSVSM](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWECSVSM)| +|Installation|**Purpose:**
Create datasets for Zowe's PARMLIB content and non-ZFS extension content for a given Zowe Instance

**Action:**
1. Allocate the PDSE FB80 dataset with at least 15 tracks named from Zowe parameter `zowe.setup.dataset.parmlib`
2. Allocate the PDSE FB80 dataset with at least 30 tracks named from Zowe parameter `zowe.setup.dataset.authPluginLib`
3. Copy the ZWESIP00 member from `zowe.setup.dataset.prefix`.SZWESAMP into `zowe.setup.dataset.parmlib`|[ZWEIMVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIMVS)| +|APF Auth|**Purpose:**
Zowe contains one privileged component, ZIS, which enables the security model. The majority of Zowe is unprivileged and in key 8. The load library for the ZIS component and its extension library must be set as APF authorized and run in key 4. This enables ZIS and components that depend on ZIS.

**Action:**
1. APF authorize the datasets defined at `zowe.setup.dataset.authLoadlib` and `zowe.setup.dataset.authPluginLib`.
2. Define PPT entries for the members ZWESIS01 and ZWESAUX as Key 4, NOSWAP in the SCHEDxx member of the system PARMLIB.|[ZWEIAPF](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIAPF)| +|Security|**Purpose:**
The STC accounts for Zowe need permissions for operating servers, and users need permissions for interacting with the servers.

**Action:**
[Set SAF permissions for accounts](https://docs.zowe.org/stable/user-guide/assign-security-permissions-to-users#security-permissions-reference-table)|RACF: [ZWEIRAC](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIRAC)

TSS: [ZWEITSS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEITSS)

ACF2: [ZWEIACF](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIACF)| +|Security|(z/OS v2.4 ONLY) Create Zowe SAF Resource Class|This is not needed on z/OS v2.5+. On z/OS v2.4, the SAF resource class for Zowe is not included, and must be created. See these samples for examples:

RACF: [ZWEIRACZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIRACZ)

TSS: [ZWEITSSZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEITSSZ)

ACF2: [ZWEIACFZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIACFZ)| +|Certificates Option 1|Zowe creates a keyring and populates it with a newly generated certificate and certificate authority. The certificate would be seen as "self-signed" by clients unless import of the CA to clients is performed.|RACF: [ZWEIKRR1](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRR1)

TSS: [ZWEIKRT1](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRT1)

ACF2: [ZWEIKRA1](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRA1)| +|Certificates Option 2|Zowe creates a keyring and populates the keyring by connecting pre-existing certificates and CAs that you specify.|RACF: [ZWEIKRR2](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRR2)

TSS: [ZWEIKRT2](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRT2)

ACF2: [ZWEIKRA2](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRA2)| +|Certificates Option 3|Zowe creates a keyring and populates the keyring by importing PKCS12 content from a dataset that you specify.|RACF: [ZWEIKRR3](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRR3)

TSS: [ZWEIKRT3](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRT3)

ACF2: [ZWEIKRA3](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIKRA3)| +|STC|**Purpose**:
ZWESLSTC is the job for running Zowe's webservers. ZWESISTC runs the APF authorized cross-memory server. The ZWESASTC job is started by ZWESISTC on an as-needed basis.

**Action**:
Copy the members ZWESLSTC, ZWESISTC, and ZWESASTC into your desired PROCLIB. If the job names are customized, modify the job name YAML values in `zowe.setup.security.stcs`|[ZWEISTC](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEISTC)| +|(Optional) VSAM for Caching Service (NYI)|**Purpose:**
To use VSAM as your storage method for the Caching Service. Note that Infinispan is the recommended storage method. For more information, see [Using VSAM as a storage solution through the Caching service](../extend/extend-apiml/api-mediation-vsam.md).

**Action:**
Create a RLM or NONRLM dataset for the Caching service, and set the name as the value for `components.caching-service.storage.vsam.name`|[ZWECSVSM](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWECSVSM)| ## Final Review From 3f479510dbb41eca8bb3dc13d2b8ce873176f560 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 29 Aug 2025 13:30:13 -0400 Subject: [PATCH 17/26] lychee cache wasn't saving? Signed-off-by: MarkAckert --- .github/workflows/link-checker.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/link-checker.yml b/.github/workflows/link-checker.yml index 3f4f08beb7..7402d3f727 100644 --- a/.github/workflows/link-checker.yml +++ b/.github/workflows/link-checker.yml @@ -26,12 +26,12 @@ jobs: done - name: Restore lychee cache - uses: actions/cache@v4 + id: lychee-cache-restore + uses: actions/cache/restore@v4 with: path: .lycheecache - key: cache-lychee-${{ github.base_ref || github.ref_name }} + key: cache-lychee-${{ github.event.pull_request.head || github.base_ref || github.ref_name }} restore-keys: cache-lychee- - save-always: true - name: Run lychee uses: lycheeverse/lychee-action@v1 @@ -39,3 +39,11 @@ jobs: args: "--accept 403,406,429 --cache --include-fragments --max-cache-age 1d --max-concurrency 2 --no-progress --timeout 60 --verbose 'docs/**/*.md'" fail: true token: ${{ secrets.GITHUB_TOKEN }} + + - name: Always save lychee cache + id: save-lychee-cache + if: always() + uses: actions/cache/save@v4 + with: + key: ${{ steps.lychee-cache-restore.outputs.cache-primary-key }} + path: .lycheecache From 3fe488cf0459cb5d2d62d1116a3d0b3c7e9aa577 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 29 Aug 2025 13:38:24 -0400 Subject: [PATCH 18/26] use ref, not object Signed-off-by: MarkAckert --- .github/workflows/link-checker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/link-checker.yml b/.github/workflows/link-checker.yml index 7402d3f727..abd30d3329 100644 --- a/.github/workflows/link-checker.yml +++ b/.github/workflows/link-checker.yml @@ -30,7 +30,7 @@ jobs: uses: actions/cache/restore@v4 with: path: .lycheecache - key: cache-lychee-${{ github.event.pull_request.head || github.base_ref || github.ref_name }} + key: cache-lychee-${{ github.event.pull_request.head.ref || github.base_ref || github.ref_name }} restore-keys: cache-lychee- - name: Run lychee From 609a86500c8179c9cbfa6d8ad75006e7cc0170b0 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Tue, 2 Sep 2025 16:56:22 +0200 Subject: [PATCH 19/26] Update configuring-zowe-via-jcl.md Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/configuring-zowe-via-jcl.md | 46 ++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/user-guide/configuring-zowe-via-jcl.md b/docs/user-guide/configuring-zowe-via-jcl.md index 8d192b75b3..31caa4b9f6 100644 --- a/docs/user-guide/configuring-zowe-via-jcl.md +++ b/docs/user-guide/configuring-zowe-via-jcl.md @@ -1,4 +1,4 @@ - # Configuring Zowe with JCL +# Configuring Zowe with JCL :::note Configuring Zowe with JCL is currently in *technical preview*. In a later release, this will become the default method of configuration. @@ -20,9 +20,9 @@ Zowe can be configured on your system with JCL using the `zwe` commands, or by c ## Getting started with `zwe` and JCL -By default, `zwe` will not submit solely JCL to configure Zowe, instead relying on a mix of unix services and JCL. To enable `zwe` to rely **solely** on JCL, you can either add `--jcl` to the end of every `zwe install` or `zwe init` command, or set `zowe.setup.jcl.enable` in your zowe.yaml file. +By default, `zwe` will not submit solely JCL to configure Zowe, instead relying on a mix of unix services and JCL. To enable `zwe` to rely **solely** on JCL, you can either add `--jcl` to the end of every `zwe install` or `zwe init` command, or set `zowe.setup.jcl.enable` in your `zowe.yaml` file. -Example zowe.yaml: +Example `zowe.yaml`: ```yaml zowe: setup: @@ -44,9 +44,9 @@ Running `zwe init` commands with JCL require that you to first generate JCL usin zwe init generate -c /path/to/your/zowe.yaml ``` -This takes the configuration values present in your `zowe.yaml` file, uses them to populate JCL templates in `SZWESAMP`, and creates a `JCLLIB` dataset with the final generated JCL. The `JCLLIB` will be created using the value of `zowe.setup.dataset.jcllib`. +This takes the configuration values present in your `zowe.yaml` file, uses them to populate JCL templates in `SZWESAMP`, and creates a `JCLLIB` data set with the final generated JCL. The `JCLLIB` will be created using the value of `zowe.setup.dataset.jcllib`. -For example, `zwe init generate` with the below zowe.yaml creates the dataset `MY.DS.PREFIX.JCLLIB`. If this dataset already exists, you must add `--allow-overwrite` to the `init generate` command. +For example, `zwe init generate` with the below `zowe.yaml` creates the dataset `MY.DS.PREFIX.JCLLIB`. If this data set already exists, it is always overwritten by `init generate` command. ```yaml zowe: setup: @@ -56,16 +56,16 @@ zowe: ``` :::important -If you make any changes to values which begin with `zowe.setup` in your zowe.yaml file, you must re-run `zwe init generate` to create fresh JCL. Optionally, `zwe init` commands provide a `--generate` flag which will run `init generate` on-the-fly as well. For example, `zwe init mvs --generate` will run `init generate` before the `init mvs`. +If you make any changes to values which begin with `zowe.setup` in your `zowe.yaml` file, you must re-run `zwe init generate` to create fresh JCL. Optionally, `zwe init` commands provide a `--generate` flag which will run `init generate` on-the-fly as well. For example, `zwe init mvs --generate` will run `init generate` before the `init mvs`. ::: ### Adding Job Parameters to generated JCL -If you require specific job parameters to run JCL on your system, you can add them via the `zowe.setup.jcl.header` field in your zowe.yaml file. The `zwe` commands _will not_ validate the syntax of the supplied parameters, so you should always review the generated JCL to ensure the headers are correct. +If you require specific job parameters to run JCL on your system, you can add them via the `zowe.setup.jcl.header` field in your `zowe.yaml` file. The `zwe` commands _will not_ validate the syntax of the supplied parameters, so you should always review the generated JCL to ensure the headers are correct. -This header field can be supplied as either a single or multi-line string. Line 1 requires no formatting, while lines 2 and onward require you to supply `// ` before the job parameters. If using a single line for the header field, use `\n` to indicate new lines. If using multi-line strings, ensure your indentation remains aligned with each new line. +This header field can be supplied as either a single or multi-line string. The first line requires no formatting, while next lines require you to follow JCL syntax. If using a single line for the header field, use `\n` to indicate new lines. If using multi-line strings, ensure your indentation remains aligned with each new line. -Example zowe.yaml, with header as a single line: +Example `zowe.yaml`, with header as a single line: ```yaml zowe: setup: @@ -76,7 +76,7 @@ zowe: dataset: # ...the rest of your zowe.yaml ``` -Example zowe.yaml, with header as line: +Example `zowe.yaml`, with header as line: ```yaml zowe: setup: @@ -90,8 +90,8 @@ zowe: dataset: # ...the rest of your zowe.yaml ``` -Both zowe.yaml files create the below job card: -``` +Both `zowe.yaml` files create the below job card: +```jcl //ZWEGENER JOB 'ZWECFJOB', // REGION=0M //* atestcomment @@ -106,24 +106,24 @@ One advantage to JCL is the ability to review all the actions it will take on yo To configure Zowe successfully with JCL, you can follow all existing documentation for `zwe install` and `zwe init` with minor modifications: 1. Setup JCL enablement and JCL job parameters as described in this guide first. -2. Run `zwe init generate` before any other init command, and after any change to a `zowe.setup` field in the zowe.yaml file. +2. Run `zwe init generate` before any other `init` command, and after any change to a `zowe.setup` field in the `zowe.yaml` file. That's it! ### Following existing z/OSMF workflow documentation Both the [Zowe Configuration Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) and the [Stand-alone APIML Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) support JCL enablement. When you start your configuration, you will see the option to enable JCL and a field labeled with `Job statement positionial parameters...` where you can fill in job statement information. -**Note:** Unlike when editing the zowe.yaml file directly, do not enter a start-of-line `// ` for lines 2 or more in the workflow text field. This field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. +**Note:** Unlike when editing the `zowe.yaml` file directly, do not enter a start-of-line `// ` for lines 2 or more in the workflow text field. This field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. ![Workflow](../images/zosmf/inputvars-jcl-enable.png) ## Getting started with manual JCL submission -If you do not wish to use the `zwe` command-line tool to configure Zowe, you can submit the same set of JCL yourself directly through MVS datasets. Do note that you will still need a zowe.yaml file. +If you do not wish to use the `zwe` command-line tool to configure Zowe, you can submit the same set of JCL yourself directly through MVS data sets. Do note that you will still need a `zowe.yaml` file. ### Preparing the JCL -The Zowe Runtime Dataset `SZWESAMP` contains JCL samples that have templates referencing Zowe YAML parameters. These samples should not be submitted without modification. Samples that are submitted without modification will end unsuccessfully with a JCL ERROR status. +The Zowe Sample Data set `SZWESAMP` contains JCL samples that have templates referencing Zowe YAML parameters. These samples should not be submitted without modification. Samples that are submitted without modification will end unsuccessfully with a JCL ERROR status. Edit and submit the job `SZWESAMP(ZWEGENER)` to validate the contents of your `zowe.yaml` before resolving the `JCL templates` and placing the resulting JCL into a separate data set created by the job `ZWEGENER`. The location is specified in `zowe.setup.dataset.jcllib`. @@ -144,11 +144,11 @@ In addition to core JCL samples, you can also customize JCL samples for various | Task | Description | Sample JCL| |------|-------------|-----------| -|Create Instance Datasets |
**Purpose:**
Create datasets for Zowe's PARMLIB content and non-ZFS extension content for a given Zowe Instance
**Action:**
1) Allocate the PDSE FB80 dataset with at least 15 tracks named from Zowe parameter `zowe.setup.dataset.parmlib`
2) Allocate the PDSE FB80 dataset with at least 30 tracks named from Zowe parameter `zowe.setup.dataset.authPluginLib`
3) Copy the member `ZWESIP00` from `zowe.setup.dataset.prefix.SZWESAMP` into `zowe.setup.dataset.parmlib` | [ZWEIMVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIMVS) -|APF Authorize privileged content |
**Purpose:**
The majority of Zowe is unprivileged code running in Key 8. Zowe relies on a single component called ZIS to own all of the privileged code logic. The load library for the ZIS component and its extension library must be set as APF authorized and run in Key 4 to use ZIS and components that depend upon it.
**Action:**
1) APF authorize the datasets defined at `zowe.setup.dataset.authLoadlib` and `zowe.setup.dataset.authPluginLib`.
2) Define PPT entries for the members `ZWESIS01` and `ZWESAUX` as Key 4, NOSWAP in the `SCHEDxx` member of the system PARMLIB. | [ZWEIAPF](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIAPF)
- Grant SAF premissions |
**Purpose:**
The STC accounts for Zowe need permissions for operating servers, and users need permissions for interacting with the servers.
**Action:**
[Set SAF permissions for accounts](https://docs.zowe.org/stable/user-guide/assign-security-permissions-to-users#security-permissions-reference-table) | RACF: [ZWEIRAC](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIRAC)
TSS: [ZWEITSS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEITSS)
ACF2: [ZWEIACF](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIACF)
+|Create Instance Data sets |
**Purpose:**
Create data sets for Zowe's PARMLIB content and non-ZFS extension content for a given Zowe Instance
**Action:**
1) Allocate the PDSE FB80 data set with at least 15 tracks named from Zowe parameter `zowe.setup.dataset.parmlib`
2) Allocate the PDSE FB80 data set with at least 30 tracks named from Zowe parameter `zowe.setup.dataset.authPluginLib`
3) Copy the member `ZWESIP00` from `zowe.setup.dataset.prefix.SZWESAMP` into `zowe.setup.dataset.parmlib` | [ZWEIMVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIMVS) +|APF Authorize privileged content |
**Purpose:**
The majority of Zowe is unprivileged code running in Key 8. Zowe relies on a single component called ZIS to own all of the privileged code logic. The load library for the ZIS component and its extension library must be set as APF authorized and run in Key 4 to use ZIS and components that depend upon it.
**Action:**
1) APF authorize the data sets defined at `zowe.setup.dataset.authLoadlib` and `zowe.setup.dataset.authPluginLib`.
2) Define PPT entries for the members `ZWESIS01` and `ZWESAUX` as Key 4, NOSWAP in the `SCHEDxx` member of the system PARMLIB. | [ZWEIAPF2](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIAPF2)
+ Grant SAF permissions |
**Purpose:**
The STC accounts for Zowe need permissions for operating servers, and users need permissions for interacting with the servers.
**Action:**
[Set SAF permissions for accounts](https://docs.zowe.org/stable/user-guide/assign-security-permissions-to-users#security-permissions-reference-table) | RACF: [ZWEIRAC](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIRAC)
TSS: [ZWEITSS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEITSS)
ACF2: [ZWEIACF](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIACF)
|(z/OS v2.4 ONLY) Create Zowe SAF Resource Class | On z/OS v2.4, the SAF resource class for Zowe is not included, and must be created. This step is not needed on z/OS v2.5 and later versions. | RACF: [ZWEIRACZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIRACZ)
TSS: [ZWEITSSZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEITSSZ)
ACF2: [ZWEIACFZ](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWEIACFZ) - Copy STC JCL to PROCLIB |
**Purpose:**
The job ZWESLSTC runs Zowe's webservers. The job ZWESISTC runs the APF authorized cross-memory server. The job ZWESASTC is started by ZWESISTC on an as-needed basis.
**Action:**
Copy the members ZWESLSTC, ZWESISTC, and ZWESASTC into your desired PROCLIB. If the job names are customized, also modify the YAML values of them in `zowe.setup.security.stcs`. | [ZWEISTC](https://github.com/zowe/zowe-install-packaging/blob/v2.x/staging/files/SZWESAMP/ZWEISTC) + Copy STC JCL to PROCLIB |
**Purpose:**
The job ZWESLSTC runs Zowe's webservers. The job ZWESISTC runs the APF authorized cross-memory server. The job ZWESASTC is started by ZWESISTC on an as-needed basis.
**Action:**
Copy the members ZWESLSTC, ZWESISTC, and ZWESASTC into your desired PROCLIB. If the job names are customized, also modify the YAML values of them in `zowe.setup.security.stcs`. | [ZWEISTC](https://github.com/zowe/zowe-install-packaging/blob/v3.x/staging/files/SZWESAMP/ZWEISTC) ## Manual JCL Keyring Tasks **Certificate requirements** @@ -162,7 +162,7 @@ Every intermediate and root Certificate Authority (CA) that Zowe interacts with There are four options for setting up keyrings: Three scenarios presented in the following table include JCL samples where a keyring is created for you. If you already have a keyring, you can configure Zowe to use this keyring by configuring `zowe.yaml` values within `zowe.certificate` according to the following example: -``` +```yaml zowe: certificate: keystore: @@ -204,7 +204,7 @@ Using VSAM instead of Infinispan is deprecated, but still possible. You can also use JCL samples for removing Zowe configuration: |Action | Sample JCL | |------|-----------| -|Remove Instance Datasets | [ZWERMVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWERMVS) +|Remove Instance Data sets | [ZWERMVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWERMVS) |Remove SAF Permissions | [ZWENOSEC](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWENOSEC) |Remove Keyring | ACF2:
[ZWENOKRA](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWENOKRA)
RACF:
[ZWENOKRR](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWENOKRR)
TSS:
[ZWENOKRT](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWENOKRT)| -|Remove Caching Service VSAM Dataset | [ZWECSRVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWECSRVS) +|Remove Caching Service VSAM Data set | [ZWECSRVS](https://github.com/zowe/zowe-install-packaging/tree/v3.x/master/files/SZWESAMP/ZWECSRVS) From e28aa8a8e1b9151e6b1c65438bafc6b756ff50c1 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 3 Sep 2025 12:11:26 -0400 Subject: [PATCH 20/26] couple more edits Signed-off-by: MarkAckert --- docs/user-guide/configuring-overview.md | 14 +++--- docs/user-guide/configuring-zowe-via-jcl.md | 12 +++--- docs/user-guide/installandconfig.md | 48 ++++++++++----------- 3 files changed, 39 insertions(+), 35 deletions(-) diff --git a/docs/user-guide/configuring-overview.md b/docs/user-guide/configuring-overview.md index ee78144c88..b52dc660a3 100644 --- a/docs/user-guide/configuring-overview.md +++ b/docs/user-guide/configuring-overview.md @@ -18,17 +18,21 @@ Successful completion of steps 2, 3, and 4 may require elevated security permiss ## Configuring Zowe runtime -To cofigure Zowe runtime, choose from the following options: +To configure Zowe runtime, choose from the following options: -* **Option 1: Configure Zowe manually using the `zwe init` command group** -To run the `zwe init` command, it is necessary to create a Zowe configuration file. For more information about this file, see the [Runtime directory](./installandconfig.md#runtime-directory) which details all of the started tasks in the article _Preparing for installation_. +* **Option 1: Configure Zowe using the `zwe init` command group** +To run the `zwe init` command, it is necessary to create a Zowe configuration file. For more information about this file, see the [Zowe configuration file](./installandconfig.md#zowe-configuration-file-zoweyaml). Once your configuration file is prepared, see [Configuring Zowe with zwe init](./initialize-zos-system.md), for more information about using the `zwe init` command group. -* **Option 2: Configure Zowe via JCL** +:::note +From Zowe 3.3.0 forward, the `zwe init` command supports JCL-driven actions. This will become the default method of `zwe init` configuration in a future release. Read [this guide](./configuring-zowe-via-jcl.md) to get started. +::: + +* **Option 2: Configure Zowe via manual JCL** You can configure Zowe by directly customizing JCLs. The Zowe Runtime Dataset `SZWESAMP` contains JCL samples that have templates referencing `zowe.yaml` parameters. These samples should not be submitted without modification. - For more information, see [Configuring Zowe via JCL](./configuring-zowe-via-jcl.md) + For more information, see [Configuring Zowe via JCL](./configuring-zowe-via-jcl.md#getting-started-with-manual-jcl-submission) * **Option 3: Configure Zowe with z/OSMF workflows** You can execute the Zowe configuration workflow either from a PSWI during deployment, or later from a created software instance in z/OSMF. Alternatively, you can execute the configuration workflow z/OSMF during the workflow registration process. diff --git a/docs/user-guide/configuring-zowe-via-jcl.md b/docs/user-guide/configuring-zowe-via-jcl.md index 31caa4b9f6..9c9ba61c51 100644 --- a/docs/user-guide/configuring-zowe-via-jcl.md +++ b/docs/user-guide/configuring-zowe-via-jcl.md @@ -4,7 +4,7 @@ Configuring Zowe with JCL is currently in *technical preview*. In a later release, this will become the default method of configuration. ::: -Zowe can be configured on your system with JCL using the `zwe` commands, or by customizing and running JCL entirely manually. Both of these configuration methods require a [`zowe.yaml` configuration file](./installandconfig.md#zowe-configuration-file-zoweyaml). Between these two options, we recommend sticking with `zwe` commands rather than manually submitting JCL from scratch, as there's additional validation we can perform on your configuration prior to creating and submitting JCL. +Zowe can be configured on your system with JCL using the `zwe` commands, or by customizing and running JCL entirely manually. Both of these configuration methods require a [`zowe.yaml` configuration file](./installandconfig.md#zowe-configuration-file-zoweyaml). Between these two options, we recommend sticking with `zwe` commands rather than manually submitting JCL, as there's additional validation `zwe` can perform on your configuration prior to creating and submitting JCL. - [Getting started with `zwe` and JCL](#getting-started-with-zwe-and-jcl) - [Generating JCL](#generating-jcl) @@ -32,8 +32,8 @@ zowe: Example commands: `--jcl` overrides `zowe.setup.jcl.enable` ```shell -zwe install -c /path/to/your/zowe.yaml --jcl -zwe init mvs -c /path/to/your/zowe.yaml --jcl +zwe install -c /path/to/my/zowe.yaml --jcl +zwe init mvs -c /path/to/my/zowe.yaml --jcl ``` ### Generating JCL @@ -41,7 +41,7 @@ zwe init mvs -c /path/to/your/zowe.yaml --jcl Running `zwe init` commands with JCL require that you to first generate JCL using values present in your `zowe.yaml` file. To do this, run: ```shell -zwe init generate -c /path/to/your/zowe.yaml +zwe init generate -c /path/to/my/zowe.yaml ``` This takes the configuration values present in your `zowe.yaml` file, uses them to populate JCL templates in `SZWESAMP`, and creates a `JCLLIB` data set with the final generated JCL. The `JCLLIB` will be created using the value of `zowe.setup.dataset.jcllib`. @@ -76,7 +76,7 @@ zowe: dataset: # ...the rest of your zowe.yaml ``` -Example `zowe.yaml`, with header as line: +Example `zowe.yaml`, with header as multi-line field: ```yaml zowe: setup: @@ -99,7 +99,7 @@ Both `zowe.yaml` files create the below job card: ### Reviewing JCL before submission -One advantage to JCL is the ability to review all the actions it will take on your system before submitting it. There are a few ways to review JCL used by `zwe` before submission. All `zwe init` and `zwe install` commands support the `--dry-run` command line parameter, which will print the command's final JCL to the console and exit. When running `zwe init generate` or `zwe install` specifically, this is the only way to review the final JCL prior to submission. For other `zwe init` commands, you can choose to run them with `--dry-run` and review the console outputs, or you can review their JCL in the `JCLLIB` dataset created by `init generate`. We recommend reviewing using `--dry-run`. +One advantage to JCL is the ability to review all the actions it will take on your system before submitting it. There are a few ways to review JCL used by `zwe` before submission. All `zwe init` and `zwe install` commands support the `--dry-run` command line parameter, which will print the command's final JCL to the console and exit. When running `zwe init generate` or `zwe install` specifically, this is the only way to review the final JCL prior to submission. For other `zwe init` commands, you can choose to run them with `--dry-run` and review the console output, or you can review their JCL in the `JCLLIB` dataset created by `init generate`. We recommend reviewing using `--dry-run`, and inspecting the `JCLLIB` only if `--dry-run` is insufficient. ### Following existing `zwe` command documentation diff --git a/docs/user-guide/installandconfig.md b/docs/user-guide/installandconfig.md index 7a4204424d..4c326689f8 100755 --- a/docs/user-guide/installandconfig.md +++ b/docs/user-guide/installandconfig.md @@ -191,30 +191,6 @@ This data set defined in Zowe configuration contains extra load libraries used b - **`zowe.setup.datasets.loadlib`** This data set defined in Zowe configuration contains load libraries that do not need authorization, such as a version of the configuration manager that can be used within REXX. -### Zowe configuration file (`zowe.yaml`) - -Zowe uses a YAML format configuration. If you store the configuration on USS, this file is usually referred as `zowe.yaml`. - -This configuration file has the following requirements: - -- The Zowe runtime user, usually referred as `ZWESVUSR`, must have read permission to this file. -- If you plan to run Zowe in Sysplex, all Zowe high availability instances must share the same configuration file. As such, this configuration file should be placed in a shared file system (zFS directory) where all LPARs in a Sysplex can access. -- The Zowe configuration file may contain sensitive configuration information so it should be protected against malicious access. - -To create this configuration, you can copy from `example-zowe.yaml` located in Zowe runtime directory. Note that the `zowe.runtimeDirectory` definition in the configuration file should match the Zowe runtime directory mentioned previously. - -To learn more about this Zowe configuration file, see the [Zowe YAML configuration file reference](../appendix/zowe-yaml-configuration.md). - - -:::tip zowe.yaml configuration tips: - -When you execute the `zwe` command, the `--config` or `-c` argument is used to pass the location of a `zowe.yaml` file. - -* To avoid passing `--config` or `-c` to every `zwe` command, you can define `ZWE_CLI_PARAMETER_CONFIG` environment variable points to the location of zowe.yaml. - - For example, after defining `export ZWE_CLI_PARAMETER_CONFIG=/path/to/my/zowe.yaml`, you can simply type `zwe start` instead of the full command `zwe start -c /path/to/my/zowe.yaml`. -::: - ### Workspace directory The workspace directory is required to launch Zowe. It is automatically created when you start Zowe. More than one workspace directory can be created and used to launch multiple instances of Zowe sharing the same runtime directory. It is not recommended to create workspace directory manually in order to avoid permission conflicts. @@ -265,6 +241,30 @@ The extension directory should be created by system administrator and defined in Zowe uses [`zwe components install` command](../appendix/zwe_server_command_reference/zwe/components/install/zwe-components-install.md) to install Zowe server extensions. This command creates sub-directories or symbolic links under the extension directory. +### Zowe configuration file (`zowe.yaml`) + +Zowe uses a YAML format configuration. You can choose to store this file in either USS or a data set, and in both cases this will be referred to as `zowe.yaml` throughout the documentation. Our recommendation is to store the `zowe.yaml` file in USS within your workspace directory [as defined above.](#workspace-directory) + +This configuration file has the following requirements: + +- The Zowe runtime user, usually referred as `ZWESVUSR`, must have read permission to this file. +- If you plan to run Zowe in Sysplex, all Zowe high availability instances must share the same configuration file. As such, this configuration file should be placed in a shared file system (zFS directory) where all LPARs in a Sysplex can access. +- The Zowe configuration file may contain sensitive configuration information so it should be protected against malicious access. + +To create this configuration, you can copy from `example-zowe.yaml` located in Zowe runtime directory. Note that the `zowe.runtimeDirectory` definition in the configuration file should match the Zowe runtime directory mentioned previously. + +To learn more about this Zowe configuration file, see the [Zowe YAML configuration file reference](../appendix/zowe-yaml-configuration.md). + + +:::tip zowe.yaml configuration tips: + +When you execute the `zwe` command, the `--config` or `-c` argument is used to pass the location of a `zowe.yaml` file. + +* To avoid passing `--config` or `-c` to every `zwe` command, you can define `ZWE_CLI_PARAMETER_CONFIG` environment variable points to the location of zowe.yaml. + + For example, after defining `export ZWE_CLI_PARAMETER_CONFIG=/path/to/my/zowe.yaml`, you can simply type `zwe start` instead of the full command `zwe start -c /path/to/my/zowe.yaml`. +::: + ## Next step Review and address the specific requirements in the Prepare for Installation section before beginning installation of Zowe server-side components for z/OS. From efbfeef78d462b495d9f8f5415cd716f03cccb68 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 3 Sep 2025 13:39:40 -0400 Subject: [PATCH 21/26] more minor edits, notes in different places Signed-off-by: MarkAckert --- docs/user-guide/configure-apiml-zosmf-workflow.md | 4 ++++ docs/user-guide/configure-zowe-runtime.md | 2 +- docs/user-guide/configure-zowe-zosmf-workflow.md | 4 ++++ docs/user-guide/configuring-zowe-via-jcl.md | 8 +++++--- docs/user-guide/systemrequirements-zos.md | 4 ++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/user-guide/configure-apiml-zosmf-workflow.md b/docs/user-guide/configure-apiml-zosmf-workflow.md index 6c8e357f5f..de4702f7ff 100644 --- a/docs/user-guide/configure-apiml-zosmf-workflow.md +++ b/docs/user-guide/configure-apiml-zosmf-workflow.md @@ -14,6 +14,10 @@ Ensure that you meet the following requirements before you start your Zowe confi - Install and configure z/OSMF - Install Zowe with an SMP/E build, PSWI, or a convenience build +:::note +From Zowe 3.3.0 forward, the Zowe z/OSMF Workflow supports JCL-driven configuration. This will become the default method of configuration in a future release. Read [this guide](./configuring-zowe-via-jcl.md#following-existing-zosmf-workflow-documentation) for more information. +::: + ## Overview of Stand-alone Zowe API ML Configuration workflow The following components are automatically enabled after performing the **Stand-alone Zowe API ML Configuration** workflow: diff --git a/docs/user-guide/configure-zowe-runtime.md b/docs/user-guide/configure-zowe-runtime.md index f5ef919a03..bda15dc8ed 100644 --- a/docs/user-guide/configure-zowe-runtime.md +++ b/docs/user-guide/configure-zowe-runtime.md @@ -7,7 +7,7 @@ Begin configuration of your installation of Zowe z/OS components by initializing Use one of the following options to initialize Zowe z/OS runtime: -* Initialize Zowe maunually using zwe init command group +* Initialize Zowe manually using zwe init command group * Configure Zowe with z/OSMF workflows ## Initialize Zowe manually using zwe init command group diff --git a/docs/user-guide/configure-zowe-zosmf-workflow.md b/docs/user-guide/configure-zowe-zosmf-workflow.md index d8a931bdd0..ee877dbf1c 100644 --- a/docs/user-guide/configure-zowe-zosmf-workflow.md +++ b/docs/user-guide/configure-zowe-zosmf-workflow.md @@ -15,6 +15,10 @@ Ensure that you meet the following requirements before you start your Zowe confi - Install and configure z/OSMF - Install Zowe with an SMP/E build, PSWI, or a convenience build +:::note +From Zowe 3.3.0 forward, the Zowe z/OSMF Workflow supports JCL-driven actions. This will become the default method of configuration in a future release. Read [this guide](./configuring-zowe-via-jcl.md#following-existing-zosmf-workflow-documentation) for more information. +::: + ## Overview of Full Zowe server-side configuration for Zowe 3.0 workflow You can complete the following tasks with the **Full Zowe server-side configuration for Zowe 3.0** workflow: diff --git a/docs/user-guide/configuring-zowe-via-jcl.md b/docs/user-guide/configuring-zowe-via-jcl.md index 9c9ba61c51..dececb9a2b 100644 --- a/docs/user-guide/configuring-zowe-via-jcl.md +++ b/docs/user-guide/configuring-zowe-via-jcl.md @@ -108,12 +108,14 @@ To configure Zowe successfully with JCL, you can follow all existing documentati 1. Setup JCL enablement and JCL job parameters as described in this guide first. 2. Run `zwe init generate` before any other `init` command, and after any change to a `zowe.setup` field in the `zowe.yaml` file. -That's it! +Differences to note: + +1. `zwe init security` no longer submits `ZWESECUR`, and instead uses `ZWEI***`, where `***` is your configured ESM. ### Following existing z/OSMF workflow documentation -Both the [Zowe Configuration Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) and the [Stand-alone APIML Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) support JCL enablement. When you start your configuration, you will see the option to enable JCL and a field labeled with `Job statement positionial parameters...` where you can fill in job statement information. -**Note:** Unlike when editing the `zowe.yaml` file directly, do not enter a start-of-line `// ` for lines 2 or more in the workflow text field. This field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. +Both the [Zowe Configuration Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) and the [Stand-alone APIML Workflow](https://docs.zowe.org/stable/user-guide/configure-apiml-zosmf-workflow) support configuration with JCL. When you start your configuration, you will see the option to enable JCL and a field labeled with `Job statement positional parameters...` where you can fill in job statement information. +**Note:** Do _not_ enter a start-of-line `// ` for lines 2 or later in the workflow text field; it will be added automatically for you. This entire text field can be left blank if you do not need to add any job statement parameters. Once you have reviewed and set these fields, follow the workflow instructions normally. ![Workflow](../images/zosmf/inputvars-jcl-enable.png) diff --git a/docs/user-guide/systemrequirements-zos.md b/docs/user-guide/systemrequirements-zos.md index fca08c564c..cfa8381c90 100644 --- a/docs/user-guide/systemrequirements-zos.md +++ b/docs/user-guide/systemrequirements-zos.md @@ -31,10 +31,10 @@ Be sure your z/OS system meets the following prerequisites: | Task | Command utilizing SDSF | Alternatives | |-----------|-------------------------------|-------------| - | [Security setup](configuring-security.md) | `zwe init security` | Submit `ZWESECUR` or `ZWENOSEC` manually or use `zwe init security --jcl` | + | [Security setup](configuring-security.md) | `zwe init security` | Use `zwe init security --jcl` as [described here](./configuring-zowe-via-jcl.md#getting-started-with-zwe-and-jcl), or submit `ZWESECUR` or `ZWENOSEC` manually | | [Certificate setup](configure-certificates.md) | `zwe init certificate` | z/OSMF workflow "ZWEKRING", or the JCL samples "ZWEKRING" and those that begin with "ZWEIKR" can be used to create keyrings. | | [Authorize library](../appendix/zwe_server_command_reference/zwe/init/zwe-init-apfauth.md) | `zwe init apfauth` | Products that can issue the MVS `SETPROG APF` command or update `SYS1.PARMLIB(PROGxx)`. See examples in [`SZWESAMP(ZWESIPRG)`](https://github.com/zowe/zowe-install-packaging/blob/v3.x/staging/files/SZWESAMP/ZWESIPRG). | - | [VSAM setup](initialize-vsam-dataset.md) | `zwe init vsam` | Submit `ZWECSRVS` or `ZWECSVSM` manually or use `zwe init vsam --jcl` | + | [VSAM setup](initialize-vsam-dataset.md) | `zwe init vsam` | Use `zwe init vsam --jcl` as [described here](./configuring-zowe-via-jcl.md#getting-started-with-zwe-and-jcl), or submit `ZWECSRVS` or `ZWECSVSM` manually | | [Starting Zowe](start-zowe-zos.md) | `zwe start` | Products that can issue the MVS `START` command upon Zowe's STC such as Sysview or EJES can be used instead. | | [Stopping Zowe](start-zowe-zos.md) | `zwe stop` | Products that can issue the MVS `STOP` command upon Zowe's STC such as Sysview or EJES can be used instead. | From a5a9b284f74f2aa6625b30152d071bcdceb6c0b2 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 3 Sep 2025 16:44:35 -0400 Subject: [PATCH 22/26] broken links Signed-off-by: MarkAckert --- docs/user-guide/cli-authentication-methods.md | 2 +- docs/user-guide/initialize-mvs-datasets.md | 4 ++-- docs/user-guide/zwe-init-subcommand-overview.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/user-guide/cli-authentication-methods.md b/docs/user-guide/cli-authentication-methods.md index 02853b5af4..86c37b8de4 100644 --- a/docs/user-guide/cli-authentication-methods.md +++ b/docs/user-guide/cli-authentication-methods.md @@ -14,7 +14,7 @@ If you configure multiple authentication methods for a specific service, set the ## Order of precedence -You can configure the order that Zowe CLI follows to search for an available authentication method, or you can leave the [default order of precedence](../extend/extend-cli/cli-authentication-mechanisms.md#default-order-of-precendence) used by the service you are connecting to. +You can configure the order that Zowe CLI follows to search for an available authentication method, or you can leave the [default order of precedence](../extend/extend-cli/cli-authentication-mechanisms.md#default-order-of-precedence) used by the service you are connecting to. To configure a different order of precedence, add the `authOrder` property to the profile for the service to which you want to connect.: diff --git a/docs/user-guide/initialize-mvs-datasets.md b/docs/user-guide/initialize-mvs-datasets.md index 07c7e86965..eada1f4b4e 100644 --- a/docs/user-guide/initialize-mvs-datasets.md +++ b/docs/user-guide/initialize-mvs-datasets.md @@ -21,11 +21,11 @@ zowe: prefix: IBMUSER.ZWE parmlib: IBMUSER.ZWE.CUST.PARMLIB jcllib: IBMUSER.ZWE.CUST.JCLLIB - authLoadlib: IBMUSER.ZWEV3.SZWEAUTH + authLoadlib: IBMUSER.ZWEV3.SZWEAUTHntication-mechanisms.md#default authPluginLib: IBMUSER.ZWE.CUST.ZWESAPL ``` -Refer to the appendix for the [list of datasets](../appendix/server-datasets.md#custom-datasets) that will be created in this step. +Refer to the appendix for the [list of datasets](../appendix/server-datasets.md#custom-data-sets) that will be created in this step. ## Procedure to initialize Zowe custom data sets diff --git a/docs/user-guide/zwe-init-subcommand-overview.md b/docs/user-guide/zwe-init-subcommand-overview.md index 4379022cfb..0cbc2b1229 100644 --- a/docs/user-guide/zwe-init-subcommand-overview.md +++ b/docs/user-guide/zwe-init-subcommand-overview.md @@ -21,7 +21,7 @@ Use the `zwe init mvs` command to intialize Zowe custom MVS data sets. :::info Required role: system programmer ::: -During the installation of Zowe, the following [runtime datasets](../appendix/server-datasets.md#runtime-datasets) are created. +During the installation of Zowe, the following [runtime datasets](../appendix/server-datasets.md#runtime-data-sets) are created. The contents of these data sets represent the original files that were provided as part of the Zowe installation and are not meant to be modified. @@ -40,7 +40,7 @@ zowe: authPluginLib: IBMUSER.ZWE.CUST.ZWESAPL ``` -Review the [storage requirements](../appendix/server-datasets.md#custom-datasets) for the datasets. +Review the [storage requirements](../appendix/server-datasets.md#custom-data-sets) for the datasets. ### Procedure to initialize Zowe custom data sets From 7b83cb9ea1f3b42284acf06cc6564f75936121b1 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 3 Sep 2025 16:45:26 -0400 Subject: [PATCH 23/26] fix mistake Signed-off-by: MarkAckert --- docs/user-guide/initialize-mvs-datasets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/initialize-mvs-datasets.md b/docs/user-guide/initialize-mvs-datasets.md index eada1f4b4e..f389f96157 100644 --- a/docs/user-guide/initialize-mvs-datasets.md +++ b/docs/user-guide/initialize-mvs-datasets.md @@ -21,7 +21,7 @@ zowe: prefix: IBMUSER.ZWE parmlib: IBMUSER.ZWE.CUST.PARMLIB jcllib: IBMUSER.ZWE.CUST.JCLLIB - authLoadlib: IBMUSER.ZWEV3.SZWEAUTHntication-mechanisms.md#default + authLoadlib: IBMUSER.ZWEV3.SZWEAUTH authPluginLib: IBMUSER.ZWE.CUST.ZWESAPL ``` From 2750d959ff9535a1b477551a4feefd0e9060d7c0 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Thu, 4 Sep 2025 14:40:20 -0400 Subject: [PATCH 24/26] Small updates to initialize-zos-system Signed-off-by: MarkAckert --- docs/user-guide/initialize-zos-system.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/user-guide/initialize-zos-system.md b/docs/user-guide/initialize-zos-system.md index db01463490..663a453b24 100644 --- a/docs/user-guide/initialize-zos-system.md +++ b/docs/user-guide/initialize-zos-system.md @@ -8,23 +8,23 @@ Once you complete the installation of the Zowe runtime, begin configuration by i ## About the `zwe init` command Each subcommand defines a configuration. The `zwe init` command is a combination of the following subcommands. Except the generate, each subcommand defines a configuration. -- **generate** -Generates ready to execute JCL samples from YAML configuration values. +- (Optional) **generate** +Used when [configuring with JCL is enabled](./configuring-zowe-via-jcl.md#getting-started-with-zwe-and-jcl). Generates ready to execute JCL samples from YAML configuration values. - **mvs** Copies the data sets provided with Zowe to custom data sets. -- **security** -Creates the user IDs and security manager settings. +- (Deprecated) **vsam** +Configures the VSAM files needed if the Caching service is set to VSAM mode. This is not required nor the default, and exists for compatibility. - **apfauth** APF authorizes the LOADLIB containing the modules that need to perform z/OS privileged security calls. +- **security** +Creates the user IDs and security manager settings. - **certificate** Configures Zowe to use TLS certificates. - **stc** Configures the system to launch the Zowe started task. -- (Deprecated) **vsam** -Configures the VSAM files needed if the Caching service is set to VSAM mode. This is not required nor the default, and exists for compatibility. :::info Recommendation: -We recommend you to run these sub commands one by one to clearly see the output of each step. To successfully run `zwe init security`, `zwe init apfauth`, and `zwe init certificate`, it is likely that your organization requires elevated permissions. We recommend you consult with your security administrator to run these commands. For more information about tasks for the security administrator, and details about the `zwe init security` command, see the section [Configuring security](./configuring-security.md) in this configuration documentation +We recommend you to run these sub commands one by one to clearly see the output of each step, and submit them in the order given above. To successfully run `zwe init security`, `zwe init apfauth`, and `zwe init certificate`, it is likely that your organization requires elevated permissions. We recommend you consult with your security administrator to run these commands. For more information about tasks for the security administrator, and details about the `zwe init security` command, see the section [Configuring security](./configuring-security.md) in this configuration documentation ::: From 03d7dd3bd2d605c1400f2ad5d4429262e7bdc4aa Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 10 Sep 2025 15:30:17 +0200 Subject: [PATCH 25/26] Typo Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/configuring-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/configuring-overview.md b/docs/user-guide/configuring-overview.md index b52dc660a3..91e8fe2647 100644 --- a/docs/user-guide/configuring-overview.md +++ b/docs/user-guide/configuring-overview.md @@ -47,7 +47,7 @@ You can execute the Zowe configuration workflow either from a PSWI during deploy Configuration of the z/OS system is dependent on the specific Zowe features and functionalities you would like to employ with your Zowe installation. :::tip -Note that configuring the z/OS system requires elevated permissions. We recommend you consult with your security administrator to perform the reqired steps to configure the z/OS system. +Note that configuring the z/OS system requires elevated permissions. We recommend you consult with your security administrator to perform the required steps to configure the z/OS system. ::: For more information, see [Configuring the z/OS system for Zowe](./configure-zos-system.md). From 0fd3e18deba7989b2c0be81c0d5478dc88d084b4 Mon Sep 17 00:00:00 2001 From: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> Date: Wed, 10 Sep 2025 15:36:25 +0200 Subject: [PATCH 26/26] Typo Signed-off-by: Martin Zeithaml <66114686+Martin-Zeithaml@users.noreply.github.com> --- docs/user-guide/initialize-zos-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/initialize-zos-system.md b/docs/user-guide/initialize-zos-system.md index 663a453b24..34a1bd144c 100644 --- a/docs/user-guide/initialize-zos-system.md +++ b/docs/user-guide/initialize-zos-system.md @@ -32,7 +32,7 @@ We recommend you to run these sub commands one by one to clearly see the output Enter `zwe init --help` to learn more about the command or see the [`zwe init` command reference](../appendix/zwe_server_command_reference/zwe/init/zwe-init-vsam.md) for detailed explanation, examples, and parameters. ::: -## Zowe initilization command +## Zowe initialization command The `zwe init` command runs the subcommands in sequence automatically. If you have the Zowe configuration file prepared and have security administrator privileges, or security and certificates setup was already completed on the system, you can run the following command: