diff --git a/.dependency/prepare_source_zip.sh b/.dependency/prepare_source_zip.sh index 17d578458f..080faa931d 100755 --- a/.dependency/prepare_source_zip.sh +++ b/.dependency/prepare_source_zip.sh @@ -21,7 +21,7 @@ SCRIPT_NAME=$(basename "$0") SCRIPT_PWD=$(cd "$(dirname "$0")" && pwd) ROOT_PWD=$(cd "$SCRIPT_PWD" && cd .. && pwd) cd "$ROOT_PWD" -WORK_BRANCH=v2.x/master +WORK_BRANCH=v3.x/master ZOWE_MANIFEST="https://raw.githubusercontent.com/zowe/zowe-install-packaging/${WORK_BRANCH}/manifest.json.template" WORK_DIR=.release ZIP_DIR="${WORK_DIR}/source_zip" @@ -51,7 +51,7 @@ echo ################################################################################ echo "[${SCRIPT_NAME}] download manifest.json" -/bin/sh -c "curl -s ${GITHUB_AUTH_HEADER} \"${ZOWE_MANIFEST}\"" > "${WORK_DIR}/manifest.json.template" +/bin/sh -c "curl -s ${GITHUB_AUTH_HEADER} \"${ZOWE_MANIFEST}\"" >"${WORK_DIR}/manifest.json.template" if [ -f "${WORK_DIR}/manifest.json.template" ]; then echo "[${SCRIPT_NAME}] - ${WORK_DIR}/manifest.json.template downloaded" else @@ -67,7 +67,7 @@ echo ################################################################################ echo "[${SCRIPT_NAME}] write README.md" -cat > "${ZIP_DIR}/README.md" << EOF +cat >"${ZIP_DIR}/README.md" <>$GITHUB_OUTPUT echo ZOWE_ARTIFACTORY_FINAL_FILENAME=$ZOWE_ARTIFACTORY_FINAL_FILENAME >>$GITHUB_OUTPUT -echo NODE_HOME_PATTERN=/ZOWE/node/node-$ZOS_NODE_VERSION-os390-s390x >>$GITHUB_OUTPUT +echo NODE_HOME_PATTERN=/ZOWE/node/node-$ZOS_NODE_VERSION >>$GITHUB_OUTPUT echo TEST_SERVER=$TEST_SERVER >>$GITHUB_OUTPUT echo TEST_SERVER_NICKNAME=$TEST_SERVER_NICKNAME >>$GITHUB_OUTPUT echo EXTENSION_LIST=$EXTENSION_LIST >>$GITHUB_OUTPUT @@ -28,4 +28,4 @@ printf "Zowe CLI artifactory path: ${CYAN}$ZOWE_CLI_ARTIFACTORY_FINAL${NC}\n" printf "Zowe extension list: ${CYAN}$EXTENSION_LIST${NC}\n" printf "Test server: ${CYAN}$TEST_SERVER${NC}\n" printf "Test server nickname: ${CYAN}$TEST_SERVER_NICKNAME${NC}\n" -printf "Node home pattern on z/OS: ${CYAN}/ZOWE/node/node-$ZOS_NODE_VERSION-os390-s390x${NC}\n" +printf "Node home pattern on z/OS: ${CYAN}/ZOWE/node/node-$ZOS_NODE_VERSION${NC}\n" diff --git a/.github/scripts/manifest_verification/check_sources.js b/.github/scripts/manifest_verification/check_sources.js index 31293432f8..8514553108 100644 --- a/.github/scripts/manifest_verification/check_sources.js +++ b/.github/scripts/manifest_verification/check_sources.js @@ -81,15 +81,18 @@ async function main() { } // If not a commit, check repo tags - const tags = await octokit.rest.repos.listTags({ - owner: 'zowe', - repo: repo, - }).then((resp) => { - if (resp.status < 400) { - return resp.data; + // requires paginate API. + + const tags = await octokit.paginate( + "GET /repos/{owner}/{repo}/tags", + { + owner: 'zowe', + repo: repo, } - return []; - }) + ).then((resp) => { + // resp is the aggregated data from paginate.. [ { name: 'tag-a', ..other-fields.. }, {}, {}, ...] + return resp; + }); const knownTag = tags.find((item) => item.name === tag); if (knownTag != null && knownTag.name.trim().length > 0) { diff --git a/.github/scripts/manifest_verification/package-lock.json b/.github/scripts/manifest_verification/package-lock.json index 784fe7954d..31f555dc36 100644 --- a/.github/scripts/manifest_verification/package-lock.json +++ b/.github/scripts/manifest_verification/package-lock.json @@ -10,7 +10,7 @@ "license": "EPL-2.0", "dependencies": { "@actions/core": "1.10.1", - "@actions/github": "^6.0.0", + "@actions/github": "6.0.0", "fs-extra": "11.2.0" } }, diff --git a/.github/workflows/build-packaging.yml b/.github/workflows/build-packaging.yml index 1b64e08db8..73e526a4f3 100644 --- a/.github/workflows/build-packaging.yml +++ b/.github/workflows/build-packaging.yml @@ -9,7 +9,7 @@ permissions: on: push: branches: - - v2.x/staging + - v3.x/staging pull_request: types: [opened, synchronize] @@ -99,8 +99,9 @@ jobs: echo "run_build=${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.ORIGIN_ISSUE_TRIGGER == 'false') || !contains(fromJson(steps.get-labels.outputs.result), 'Build: None') }}" >> $GITHUB_OUTPUT - id: check-test name: 'export conditional used to determine if we should run a test suite' + # run_test explanation: if we set "run_build" from the prior step and this is a PR, run unless "Test: None" label is present. If not initiated from a PR, only build. run: | - echo "run_test=${{ (steps.check-build.outputs.run_build == 'true' && !contains(fromJson(steps.get-labels.outputs.result), 'Test: None')) }}" >> $GITHUB_OUTPUT + echo "run_test=${{ (steps.check-build.outputs.run_build == 'true' && github.event_name != 'workflow_dispatch' && !contains(fromJson(steps.get-labels.outputs.result), 'Test: None')) }}" >> $GITHUB_OUTPUT display-dispatch-event-id: if: github.event.inputs.RANDOM_DISPATCH_EVENT_ID != '' @@ -177,7 +178,7 @@ jobs: - name: '[Prep 6a] Process labels for ci build (pull, push, comment)' id: process-labels - if: github.event_name != 'workflow_dispatch' + if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.ORIGIN_ISSUE_TRIGGER == 'true' }} run: | BUILD_WHAT="PAX" @@ -203,7 +204,7 @@ jobs: - name: '[Prep 6b] Process github.event.inputs for manually triggered build' id: process-inputs - if: github.event_name == 'workflow_dispatch' + if: ${{ github.event_name == 'workflow_dispatch' || github.event.inputs.ORIGIN_ISSUE_TRIGGER != 'true' }} run: | BUILD_WHAT="${{ steps.process-labels.outputs.BUILD_WHAT_LABELS }}" @@ -273,7 +274,7 @@ jobs: with: manifest-file-path: ${{ github.workspace }}/manifest.json default-target-path: .pax/binaryDependencies/ - expected-count: 30 + expected-count: 27 # this step is not doing a publish, we are just utilizing this actions to get the PUBLISH_TARGET_PATH, # and it will be used in the next step: [Download 3] Download SMPE build log @@ -344,7 +345,7 @@ jobs: with: lock-repository: ${{ github.repository }} github-token: ${{ secrets.GITHUB_TOKEN }} - lock-resource-name: zowe-psi-build-zzow07-lock + lock-resource-name: zowe-psi-build-zzow10-lock lock-avg-retry-interval: 60 - name: '[PSWI 0] PSWI pre-build check for existing smpe' @@ -353,8 +354,8 @@ jobs: jfrog rt dl ${{github.event.inputs.PSWI_SMPE_AZWE_ARTIFACTORY_PATH}}/AZWE002*.zip --flat=true .pax/AZWE002.zip jfrog rt dl ${{github.event.inputs.PSWI_SMPE_ARTIFACTORY_PATH}}/zowe-smpe-*.zip --flat=true .pax/zowe-smpe.zip - - name: '[SMPE Pax 4] Build PSWI' + id: pswi if: env.INPUTS_BUILD_PSWI == 'true' timeout-minutes: 60 run: | @@ -367,6 +368,14 @@ jobs: ZZOW_SSH_PORT: ${{ secrets.SSH_MARIST_ALLSYS_PORT }} VERSION: ${{ env.P_VERSION }} + - name: Store PSWI folder + uses: actions/upload-artifact@v4 + if: env.INPUTS_BUILD_PSWI == 'true' && failure() + with: + name: pswi-folder + path: | + pswi/logs/** + - name: '[K8S] Build Kubernetes' timeout-minutes: 10 if: env.INPUTS_BUILD_KUBERNETES == 'true' diff --git a/.github/workflows/cicd-test-readme.md b/.github/workflows/cicd-test-readme.md index 082639da7b..66d1a58c12 100644 --- a/.github/workflows/cicd-test-readme.md +++ b/.github/workflows/cicd-test-readme.md @@ -4,9 +4,9 @@ This guide will describe how you should input into Github Actions workflow input Currently we support three testing z/OS servers: -- zzow06 (ACF2) -- zzow07 (Top Secret/TSS) -- zzow08 (RACF) +- zzow09 (ACF2) +- zzow10 (Top Secret/TSS) +- zzow11 (RACF) Testing pipeline is running tests in parallel. The workflow will try to acquire the resource lock if available. If the resource lock is occupied, the workflow will wait until the lock is succesfully acquired. @@ -17,7 +17,7 @@ Workflow trigger is at [cicd-test](https://github.com/zowe/zowe-install-packagin ### Choose Test Server - This input is a choice, and it's mandatory. -- You can choose from one of `zzow06`, `zzow07`, `zzow08`, `zzow06,zzow07,zzow08` (if you want to run the test on all zzow servers), or `Any zzow servers` (pick any zzow servers, potentially help reduce wait time) +- You can choose from one of `zzow09`, `zzow10`, `zzow11`, `zzow09,zzow10,zzow11` (if you want to run the test on all zzow servers), or `Any zzow servers` (pick any zzow servers, potentially help reduce wait time) - Default is `Any zzow servers` ### Choose Install Test @@ -29,7 +29,7 @@ Workflow trigger is at [cicd-test](https://github.com/zowe/zowe-install-packagin - SMPE PTF - Extensions - Keyring - - z/OS node v18 + - z/OS node v20 - Non-strict Verify External Certificate - Install PTF twice - VSAM Caching storage method @@ -91,7 +91,7 @@ Background: CICD testing relies on a `zowe.pax` or `zowe-smpe.zip` (for SMPE ins - This input is pre-filled with `sample-node-api;sample-trial-app` to test [sample-node-api](https://github.com/zowe/sample-node-api) and [sample-trial-app](https://github.com/zowe/sample-trial-app) projects. In normal circumstances, you probably don't need to modify the pre-filled value here. - By default, the extension artifact search pattern is using format `libs-snapshot-local/org/zowe/{ext-name}/*/{ext-name}-*.pax` where `{ext-name}` will be processed and substituted from this input (as an example above, `sample-node-api`). Then the latest uploaded artifact will be used. -- Optionally, you can customized your extension artifact path. Customized jfrog artifactory path should exist, be valid, and enclosed in brackets and put after the extension name, eg. `sample-node-api(my/new/path/sample-node-api-cus.pax)`. A pattern contains `*` is also supported, which the latest artifact will be picked up. If multiple extensions are included, make sure to separate them by semi-colon. In addition to the artifactory path/pattern, you can also put a full http URL to any other remote location that points to an extension pax here. +- Optionally, you can customized your extension artifact version. Customized jfrog artifactory version should exist, be valid, and enclosed in brackets and put after the extension name, eg. `sample-node-api(3.0.0-SNAPSHOT)`. This example will create a search pattern like the following, where the latest artifact in the folder is picked up: `libs-snapshot-local/org/zowe/sample-node-api/3.0.0-SNAPSHOT/sample-node-api-*.pax`. A pattern containing `*` is also supported, which will result in the latest artifact in the latest folder matching the pattern. For example: `sample-node-api(1.0.0-*)` will create this search pattern: `libs-snapshot-local/org/zowe/sample-node-api/1.0.0-*/sample-node-api-*.pax`, which could match folders `1.0.0-SNAPSHOT`, `1.0.0-MAIN`, `1.0.0-user-pr-build`, etc. - The following regular expression will be used to check against your input ``` @@ -109,7 +109,7 @@ Background: CICD testing relies on a `zowe.pax` or `zowe-smpe.zip` (for SMPE ins When running CICD integration tests during RC stage, the following string will be parsed into the Github Actions matrix. As a result, a total of 21 independent jobs will be spawned. ``` -basic/install.ts(zzow06,zzow07,zzow08);basic/install-ptf.ts(zzow06,zzow07,zzow08);basic/install-ext.ts(zzow07);extended/keyring.ts(zzow06,zzow07,zzow08);extended/node-versions/node-v18.ts(zzow06,zzow07,zzow08);extended/node-versions/node-v20.ts(zzow06,zzow07,zzow08);extended/certificates/nonstrict-verify-external-certificate.ts(zzow06) +basic/install.ts(zzow09,zzow10,zzow11);basic/install-ptf.ts(zzow09,zzow10,zzow11);basic/install-ext.ts(zzow10);extended/keyring.ts(zzow09,zzow10,zzow11);extended/node-versions/node-v20.ts(zzow09,zzow10,zzow11);extended/node-versions/node-v20.ts(zzow09,zzow10,zzow11);extended/certificates/nonstrict-verify-external-certificate.ts(zzow09) ``` Total elapsed time when running in parallel is approximately 3.5 hours on paper idealy if all parallel jobs are executing at the same time. In reality, from numerous tests performed, total elapsed time is around 4 hours. @@ -121,7 +121,6 @@ Selected test running elapsed time: | ---- | ------------ | | Convenience Pax | 53m | | SMPE PTF | 68m | -| z/OS node v18 | 45m | | z/OS node v20 | 45m | | Keyring | 53m | | Non-strict Verify External Certificate | 51m | diff --git a/.github/workflows/cicd-test.yml b/.github/workflows/cicd-test.yml index efa37bb2ca..84571eaab5 100644 --- a/.github/workflows/cicd-test.yml +++ b/.github/workflows/cicd-test.yml @@ -1,4 +1,11 @@ name: Zowe CICD Integration Tests + +permissions: + contents: write + issues: write + pull-requests: write + statuses: write + on: workflow_dispatch: inputs: @@ -9,10 +16,10 @@ on: default: 'Any zzow servers' options: - Any zzow servers - - zzow06 - - zzow07 - - zzow08 - - zzow06,zzow07,zzow08 + - zzow09 + - zzow10 + - zzow11 + - zzow09,zzow10,zzow11 install-test: description: 'Choose Install Test' type: choice @@ -24,8 +31,8 @@ on: - SMPE PTF - Extensions - Keyring - - z/OS node v18 - z/OS node v20 + - z/OS node v22 - Non-strict Verify External Certificate - Install PTF Twice - VSAM Caching Storage Method @@ -45,7 +52,7 @@ on: required: false # FIXME: too slow to test 2, temporarily only test 1 # default: 'sample-node-api;sample-trial-app' - default: 'sample-node-api' + default: 'sample-node-api(3.0.0-SNAPSHOT)' RANDOM_DISPATCH_EVENT_ID: description: 'random dispatch event id' required: false @@ -59,11 +66,11 @@ env: DEFAULT_ZOWE_PAX_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe*{branch-name}*.pax DEFAULT_ZOWE_SMPE_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe-smpe*{branch-name}*.zip DEFAULT_ZOWE_CLI_ARTIFACTORY_PATTERN: PLACE_HOLDER/org/zowe/cli/zowe-cli-package/*zowe-cli-package-2*.zip - DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/*/{ext-name}-*.pax + DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/{ext-version}/{ext-name}-*.pax # below block can be overwritten, adjusted by DevOps only - # ZOS_NODE_VERSION more to choose from: v16.20.1, v18.16.0 - ZOS_NODE_VERSION: v16.20.1 + # ZOS_NODE_VERSION more to choose from: v18.16.0, v20.11.0 + ZOS_NODE_VERSION: v18.16.0 CLIENT_NODE_VERSION: v12.18.3 INSTALL_TEST_DEBUG_INFORMATION: zowe-install-test:* SANITY_TEST_DEBUG_INFORMATION: zowe-sanity-test:* @@ -74,16 +81,16 @@ env: SMPE_PTF_TESTFILE: basic/install-ptf.ts EXTENSIONS_TESTFILE: basic/install-ext.ts KEYRING_TESTFILE: extended/keyring.ts - ZOS_NODE_V18_TESTFILE: extended/node-versions/node-v18.ts ZOS_NODE_V20_TESTFILE: extended/node-versions/node-v20.ts + ZOS_NODE_V22_TESTFILE: extended/node-versions/node-v22.ts NON_STRICT_VERIFY_EXTERNAL_CERTIFICATE_TESTFILE: extended/certificates/nonstrict-verify-external-certificate.ts INSTALL_PTF_TWICE_TESTFILE: extended/install-ptf-two-times.ts VSAM_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/vsam-storage.ts INFINISPAN_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/infinispan-storage.ts CONFIG_MANAGER_TESTFILE: extended/config-manager/enable-config-manager.ts GENERAL_API_DOCUMENTATION_TESTFILE: basic/install-api-gen.ts - ZOWE_NIGHTLY_TESTS_FULL: basic/install.ts(all);basic/install-ptf.ts(all) - ZOWE_RELEASE_TESTS_FULL: basic/install.ts(all);basic/install-ptf.ts(all);basic/install-ext.ts(any);extended/keyring.ts(all);extended/node-versions/node-v18.ts(zzow08);extended/node-versions/node-v20.ts(any);extended/certificates/nonstrict-verify-external-certificate.ts(any);extended/caching-storages/infinispan-storage.ts(any);extended/config-manager/enable-config-manager.ts(any) + ZOWE_NIGHTLY_TESTS_FULL: basic/install.ts(all);basic/install-fmid.ts(all) + ZOWE_RELEASE_TESTS_FULL: basic/install.ts(all);basic/install-fmid.ts(all);basic/install-ext.ts(any);extended/keyring.ts(all);extended/node-versions/node-v20.ts(any);extended/node-versions/node-v22.ts(any);extended/certificates/nonstrict-verify-external-certificate.ts(any);extended/caching-storages/infinispan-storage.ts(any);extended/config-manager/enable-config-manager.ts(any) jobs: display-dispatch-event-id: @@ -291,9 +298,6 @@ jobs: case 'Keyring': eta = 53 break; - case 'z/OS node v18': - eta = 45 - break; case 'z/OS node v20': eta = 45 break; diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml new file mode 100644 index 0000000000..d11b069c7a --- /dev/null +++ b/.github/workflows/link-check.yml @@ -0,0 +1,49 @@ +# This link checker focuses on covering end-user facing links, not developer documentation. +# This means we cover the smp/e, pswi, and zwe content. +# The lychee toml files are set to ignore links which popped up in comments or variables. +permissions: read-all + +name: Link Check CI + +on: + pull_request: + types: [opened, synchronize] + push: + branches: + - 'v3.x/staging' + - 'v2.x/staging' + workflow_dispatch: + +jobs: + lychee-link-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Link Checker + id: lychee + uses: lycheeverse/lychee-action@f81112d0d2814ded911bd23e3beaa9dda9093915 # v2.1.0 + with: + fail: true + format: json + output: lychee_output.json + args: --config ./.github/lychee.toml --no-progress --verbose --max-retries 10 'bin/**/*' 'smpe/**/*' 'workflows/**/*' + + - name: Output failed links in console + id: quick-output + if: always() + run: | + if [[ -f "lychee_output.json" ]]; then + jq .fail_map lychee_output.json + else + echo "lychee command failed and didn't produce output" + fi + + - name: Publish Output + id: publish + if: always() + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 + with: + name: lychee_results.json + path: lychee_output.json diff --git a/.github/workflows/pswi-zowe-config-test.yml b/.github/workflows/pswi-zowe-config-test.yml new file mode 100644 index 0000000000..5fcf430e54 --- /dev/null +++ b/.github/workflows/pswi-zowe-config-test.yml @@ -0,0 +1,61 @@ +name: PSWI zowe.yaml sync check + +permissions: + id-token: write + issues: write + pull-requests: write + contents: write + +on: + push: + branches: + - v3.x/staging + pull_request: + types: [opened, synchronize] + workflow_dispatch: + +jobs: + test-pswi-zowe-yaml: + runs-on: ubuntu-latest + steps: + + - name: '[Prep 1] Checkout' + uses: actions/checkout@v4 + + # Taken from shared-actions/prepare-workflow + - name: 'export github username and email' + run: | + git config --global user.name ${{ github.actor }} + echo ${{ github.actor }} + git config --global user.email dummy-email@email.com + shell: bash + + - name: '[PSI-LOCK] Lock marist servers to build PSWI' + uses: zowe-actions/shared-actions/lock-resource@main + with: + lock-repository: ${{ github.repository }} + github-token: ${{ secrets.GITHUB_TOKEN }} + lock-resource-name: zowe-psi-build-zzow10-lock + lock-avg-retry-interval: 30 + + - name: 'Test ZWECONF workflow' + id: zweconf + timeout-minutes: 30 + run: | + cd pswi + ./ZWECONF_test.sh + env: + ZOSMF_USER: ${{ secrets.ZOWE_PSWI_BUILD_USR }} + ZOSMF_PASS: ${{ secrets.ZOWE_PSWI_BUILD_PASSWD }} + ZZOW_SSH_PORT: ${{ secrets.SSH_MARIST_ALLSYS_PORT }} + + - name: Store test output + uses: actions/upload-artifact@v4 + if: steps.zweconf.outcome != '' && failure() + with: + name: zweconf_test + path: | + pswi/**.txt + pswi/zowe_.yaml + pswi/ZWECONF1/** + pswi/logs/** diff --git a/.github/workflows/snyk-analysis.yml b/.github/workflows/snyk-analysis.yml index e44d513eb9..144a93af19 100644 --- a/.github/workflows/snyk-analysis.yml +++ b/.github/workflows/snyk-analysis.yml @@ -3,8 +3,8 @@ name: Kubernetes Containers Scan on: push: branches: - - v2.x/master - - v2.x/staging + - v3.x/master + - v3.x/staging # pull_request: # types: [opened, synchronize] workflow_dispatch: diff --git a/.github/workflows/snyk-kubernetes.yml b/.github/workflows/snyk-kubernetes.yml index 179773a4d1..0f5c8bc72a 100644 --- a/.github/workflows/snyk-kubernetes.yml +++ b/.github/workflows/snyk-kubernetes.yml @@ -3,8 +3,8 @@ name: Kubernetes IaC Scan on: push: branches: - - v2.x/master - - v2.x/staging + - v3.x/master + - v3.x/staging # pull_request: # types: [opened, synchronize] workflow_dispatch: diff --git a/.github/workflows/zwe-doc-generation.yml b/.github/workflows/zwe-doc-generation.yml index 23a42c9e49..6b4fba8adb 100644 --- a/.github/workflows/zwe-doc-generation.yml +++ b/.github/workflows/zwe-doc-generation.yml @@ -4,7 +4,7 @@ on: # Will run this on push when v2 is out push: branches: - - v2.x/rc + - v3.x/rc workflow_dispatch: env: diff --git a/.pax/pre-packaging.sh b/.pax/pre-packaging.sh index cb17b8244b..531bef0ea3 100755 --- a/.pax/pre-packaging.sh +++ b/.pax/pre-packaging.sh @@ -190,9 +190,10 @@ BASE_DIR=$( pwd ) # /.pax -# use node v16 to build -export NODE_HOME=/ZOWE/node/node-v16.20.1-os390-s390x - +# use node v18 to build +export NODE_HOME=/ZOWE/node/node-v18.16.0 +export JAVA_HOME=/ZOWE/node/J17.0_64 +export PATH=$JAVA_HOME/bin:$PATH ZOWE_ROOT_DIR="${BASE_DIR}/content" cd "${BASE_DIR}" @@ -256,7 +257,7 @@ pax -ppx -rf "${getesm}" rm "${getesm}" cd "${BASE_DIR}" -configmgr=$(find "${ZOWE_ROOT_DIR}/files" -type f \( -name "configmgr-2*.pax" \) | head -n 1) +configmgr=$(find "${ZOWE_ROOT_DIR}/files" -type f \( -name "configmgr-3*.pax" \) | head -n 1) echo "[$SCRIPT_NAME] extract configmgr $configmgr" cd "${ZOWE_ROOT_DIR}/bin/utils" pax -ppx -rf "${configmgr}" @@ -281,7 +282,7 @@ EOT echo "[$SCRIPT_NAME] extract components" mkdir -p "${BASE_DIR}/logs" mkdir -p "${ZOWE_ROOT_DIR}/components" -for component in launcher zlux-core zss apiml-common-lib common-java-lib apiml-sample-extension gateway cloud-gateway caching-service metrics-service discovery api-catalog jobs-api files-api explorer-jes explorer-mvs explorer-uss; do +for component in launcher zlux-core zss apiml-common-lib common-java-lib apiml-sample-extension zaas gateway caching-service discovery api-catalog explorer-jes explorer-mvs explorer-uss; do echo "[$SCRIPT_NAME] - ${component}" component_file=$(find "${ZOWE_ROOT_DIR}/files" -type f \( -name "${component}*.pax" -o -name "${component}*.zip" \) | head -n 1) "${ZOWE_ROOT_DIR}/bin/zwe" \ diff --git a/CHANGELOG.md b/CHANGELOG.md index 6485176d2f..fd5f0c5cbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,34 @@ # Change Log All notable changes to the Zowe Installer will be documented in this file. + +## `3.1.0` +- Bugfix: When logging `zwe` command, sometimes the log has wrong file tag and the log is unreadable. [#4071](https://github.com/zowe/zowe-install-packaging/pull/4071) +- Bugfix: When `--log-dir` parameter for `zwe` command is a file, there might be an error "InternalError: stack overflow". [#4064](https://github.com/zowe/zowe-install-packaging/pull/4064) +- Enhancement: command `zwe init` does not require NodeJS [#4088](https://github.com/zowe/zowe-install-packaging/pull/4088) +- Enhancement: command `zwe install` does not require NodeJS [#4069](https://github.com/zowe/zowe-install-packaging/pull/4069) +- Enhancement: new javascript funtion `getStatvfs()` to obtain information about the file sysytem [#3994](https://github.com/zowe/zowe-install-packaging/pull/3994) +- Enhancement: command `zwe diagnose` in javascript only [#4061](https://github.com/zowe/zowe-install-packaging/pull/4061) +- Enhancement: schema validation update for `zowe.job.name` and `zowe.job.prefix` [#4060](https://github.com/zowe/zowe-install-packaging/pull/4060) + +## `3.0.0` + +### Breaking Changes + +- The Zowe YAML now requires the `zaas` component for the API Mediation Layer to work. See example-zowe.yaml for new component values. +- The Zowe YAML attribute `components.gateway.apiml.security.auth.zosmf.serviceId` for the “gateway” component has changed from “zosmf” to “ibmzosmf”. This may impact Zowe Clients. See example-zowe.yaml for new component values. For more information on this change, please see the API Mediation Layer's 3.0.0 Breaking Changes. +- The Zowe YAML parameter `components.gateway.apiml.security.auth.zosmf.jwtAutoconfiguration` for the “gateway” component has changed. The value “auto” is no longer allowed, and you must choose either the default of “jwt” or “ltpa” depending on if your z/OSMF is set up for JWT use as recommended See example-zowe.yaml for new component values. For more information on this change, please see the API Mediation Layer's 3.0.0 Breaking Changes. + + +### New features and enhancements +- Enhancement: Added explanation to possible error message when checking z/OSMF setting. [#3956](https://github.com/zowe/zowe-install-packaging/pull/3956) +- Enhancement: New plugin identifier added to list of plugins and `allowedPlugins.json` for the new V3 Desktop in Angular 18. [#3984](https://github.com/zowe/zowe-install-packaging/pull/3984) + +## `2.18.1` +- Bugfix: Error message `ZWEL0141E` did not print user ID. [#3971](https://github.com/zowe/zowe-install-packaging/pull/3971) + ## `2.17.0` ## New features and enhancements diff --git a/INSTALLATION.md b/INSTALLATION.md index 31603c3e39..d3a3b6df38 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -14,16 +14,11 @@ Table of contents: 2. [Configuration Concepts](#configuration-concepts) 2. [Distribution](#distribution) 3. [Installation of Runtime](#installation-of-runtime) - 1. [SMPE or PSWI](#smpe-or-pswi) - 2. [PAX](#pax) 4. [Configuration of Instance](#configuration-of-instance) 1. [Configuration by JCL](#configuration-by-jcl) 1. [Core Tasks](#core-tasks) 2. [Keyring Tasks](#keyring-tasks) - 3. [(Optional) Caching Service VSAM Task](#optional-caching-service-vsam-task) 2. [Configuration by zwe](#configuration-by-zwe) - 1. [Keystore or Keyring Configuration](#keystore-or-keyring-configuration) - 2. [(Optional) Caching Service VSAM Configuration](#optional-caching-service-vsam-configuration) 5. [Networking](#networking) 1. [Ports](#ports) 2. [IP Addresses](#ip-addresses) @@ -119,7 +114,6 @@ When the JCL is prepared, the following jobs can be submitted to perform the fol |Create Instance Datasets|**Purpose:** Create datasets for Zowe's PARMLIB content and non-ZFS extension content for a given Zowe Instance

**Action:**
1) Allocate PDSE FB80 dataset with at least 15 tracks named from Zowe parameter `zowe.setup.dataset.parmlib`
2) Allocate PDSE FB80 dataset with at least 30 tracks named from Zowe parameter `zowe.setup.dataset.authPluginLib`
3) Copy 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 Authorize privileged content|**Purpose:** Zowe contains one privileged component, ZIS, which enables the security model by which the majority of Zowe is unprivileged and in key 8. The load library for the ZIS component and its extension library must be set 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/feature/v3/jcl/files/SZWESAMP/ZWEIAPF)| |Grant SAF permissions|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/SZWIACF)| -|(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|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)| |Copy STC JCL to PROCLIB|**Purpose**: ZWESLSTC is the job for running Zowe's webservers, and ZWESISTC is for running 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, also modify the YAML values of them in `zowe.setup.security.stcs`|[ZWEISTC](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWEISTC)| @@ -148,23 +142,17 @@ zowe: password: "password" #literally "password". keyrings do not use passwords, so this is a placeholder. ``` -If you would like Zowe to create a keyring instead, you can do one of these three tasks: +
+
+If you would like Zowe to create a keyring instead, click here for options |Keyring Setup Type|Description|Sample JCL| |---|---|---| |1|Zowe will create a keyring and populate 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)| |2|Zowe will create a keyring and populate it 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)| |3|Zowe will create a keyring and populate it 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)| - - -#### (Optional) Caching Service VSAM Task: ---- -If you plan to use the Zowe caching service Component, such as for high availability and fault tolerance reasons, then you must choose a form of database for it to use. -Among the choices is for it to use a VSAM dataset of your choice. - -|Task|Description|Sample JCL| -|---|---|---| -|Create VSAM Dataset for Caching Service|**Action**: Create a RLS or NONRLS dataset for the caching service, and set the name into the YAML value `components.caching-service.storage.vsam.name`|[ZWECSVSM](https://github.com/zowe/zowe-install-packaging/tree/feature/v3/jcl/files/SZWESAMP/ZWECSVSM)| +
+
JCL samples for removing Zowe configuration also exist. |Action|Sample JCL| @@ -189,6 +177,11 @@ Each command reads configuration properties from the Zowe YAML files, and combin The commands resolve the JCL sample templates into usable JCL within the dataset defined by YAML value `zowe.setup.dataset.jcllib`. Before each command runs, it will print the JCL that it is submitting. +Using `zwe init` is an alternative to using the JCL samples from the previous section. + +
+Click here to read about configuring via zwe instead of JCL samples + Every `zwe init` command also has a `--dry-run` option which validates the configuration, prints the JCL, but does not submit it. This allows you to review the actions before performing them with the appropriate administrator. @@ -227,7 +220,9 @@ zowe: password: "password" #literally "password". keyrings do not use passwords, so this is a placeholder. ``` -To instead have Zowe create a keystore or keyring for you, run `zwe init certificate` for one of the options below. +
+
+To instead have Zowe create a keystore or keyring for you, click here for running `zwe init certificate`. |Certificate scenario|Description| |---|---| @@ -236,16 +231,8 @@ To instead have Zowe create a keystore or keyring for you, run `zwe init certifi |3|Zowe will create a keyring and populate 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| |4|Zowe will create a keyring and populate it by connecting pre-existing certificates and CAs that you specify.| |5|Zowe will create a keyring and populate it by importing PKCS12 content from a dataset that you specify.| - - - -#### (Optional) Caching Service VSAM Configuration: -If you plan to use the Zowe caching service Component, such as for high availability and fault tolerance reasons, then you must choose a form of database for it to use. -Among the choices is for it to use a VSAM dataset of your choice. - -|Task|Description|Sample JCL|Doc| -|---|---|---|---| -|Create VSAM Dataset for Caching Service|Creates a RLS or NONRLS dataset for the caching service using the YAML values in `zowe.setup.vsam`|`zwe init vsam`|[Doc](https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/init/zwe-init-vsam)| +
+


@@ -262,14 +249,17 @@ The following lists the default ports of each server of Zowe that is enabled by These are customized within the YAML at `components..port`, such as `components.zss.port` to customize the ZSS port. -|Component|Component Category|TCP Port|Job Suffix|Log Suffix|Note| +|Component|Component Category|TCP Port|Job Name|Log Suffix|Note| |---|---|---|---|---|---| -|api-catalog|API Mediation Layer|7552|AC|AAC|Provides API documentation| -|discovery|API Mediation Layer|7553|AD|ADS|Used by the gateway to discover presence and health each server in a Zowe instance for routing| -|gateway|API Mediation Layer|7554|AG|AGW|When enabled, the port chosen should also be the value of `zowe.externalPort`. Zowe can be configured to have this port as the only externally-accessible port as the gateway can proxy the other Zowe servers.| -|caching-service|API Mediation Layer|7555|CS|ACS|Provides a cache for high-availability/fault-tolerant operation| -|app-server|App Framework|7556|DS|D|Provides the Desktop, requires NodeJS| -|zss|App Framework|7557|SZ|SZ|Provides APIs| +|api-catalog|API Mediation Layer|7552|ZWE1AC|AAC|Provides API documentation| +|discovery|API Mediation Layer|7553|ZWE1AD|ADS|Used by the gateway to discover presence and health each server in a Zowe instance for routing| +|gateway|API Mediation Layer|7554|ZWE1AG|AGW|When enabled, the port chosen should also be the value of `zowe.externalPort`. Zowe can be configured to have this port as the only externally-accessible port as the gateway can proxy the other Zowe servers.| +|caching-service|API Mediation Layer|7555|ZWE1CS|ACS|Provides a cache for high-availability/fault-tolerant operation| +|app-server|App Framework|7556|ZWE1DS|D|Provides the Desktop, requires NodeJS| +|zss|App Framework|7557|ZWE1SZ|SZ|Provides APIs| +|zaas|API Mediation Layer|7558|ZWE1AZ|AZ|Provides security APIs| + +Note that the Job name prefix ZWE1 can be modified via the YAML property `zowe.job.prefix`. Zowe also has a property, `zowe.externalPort` that describes where clients should connect to access Zowe. This must match the gateway port when the gateway is enabled. When it isn't, this port should match the primary server of Zowe that you are using. @@ -288,6 +278,7 @@ When `zowe.job.prefix` is "ZWE1", An example of port reservations with a fixed I 7555 TCP ZWE1CS BIND 10.11.12.13 ; Zowe Caching Service 7556 TCP ZWE1DS BIND 10.11.12.13 ; Zowe App Server 7557 TCP ZWE1SZ BIND 10.11.12.13 ; Zowe ZSS + 7558 TCP ZWE1AZ BIND 10.11.12.13 ; Zowe ZAAS ``` ### TLS configuration diff --git a/README.md b/README.md index 0fca70475a..ff7deccee1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# zowe-install-packaging +# zowe-install-packaging This repository includes Zowe installation script and pipelines to build Zowe. @@ -135,14 +135,10 @@ For each Zowe component, we have point of contact(s) in case if we want to confi - zlux-editor - Explorer APIs / UI Plugins: Jordan Cain * Binary Dependencies - - org.zowe.explorer.data.sets - - org.zowe.explorer.jobs - org.zowe.explorer-jes - org.zowe.explorer-mvs - org.zowe.explorer-uss * Source Dependencies - - data-sets - - jobs - explorer-api-common - explorer-jes - explorer-mvs @@ -159,7 +155,6 @@ For each Zowe component, we have point of contact(s) in case if we want to confi - zowe-cli-mq-plugin - zowe-cli-scs-plugin - zowe-cli-ftp-plugin - - zowe-cli-ims-plugin - Explorer (Visual Studio Code Extension): Fernando Rijo Cedeno, Mark Ackert * Source Dependencies - zowe-explorer-vscode @@ -194,3 +189,10 @@ Please check details in [playbooks folder](playbooks/README.md). ## Quick Sanity Check on Your Zowe Instance Please check details in [sanity test folder](tests/sanity/README.md). + +

Hosting infrastructure for this project is supported by:

+

+ + + +

diff --git a/bin/README.md b/bin/README.md index c41812e683..3241ab1d44 100644 --- a/bin/README.md +++ b/bin/README.md @@ -80,6 +80,7 @@ These Zowe environment variables are created globally. Any Zowe components, exte - `ZWE_ENABLED_COMPONENTS` is a list of components will be started in current HA instance. - `ZWE_GATEWAY_HOST` contains domain name to access gateway internally. - `ZWE_GATEWAY_SHARED_LIBS` contains a directory where gateway shared libraries are installed. +- `ZWE_ZAAS_SHARED_LIBS` contains a directory where zaas (Zowe Authentication and Authorization Service) libraries are installed. - `ZWE_INSTALLED_COMPONENTS` is a list of all installed components. - `ZWE_LAUNCH_COMPONENTS` is a list of enabled components for current HA instance and has start command defined. - `ZWE_POD_CLUSTERNAME` indicates the current Kubernetes cluster name Zowe is running. This variable is only applicable when Zowe is running in Kubernetes. diff --git a/bin/commands/diagnose/index.sh b/bin/commands/diagnose/index.sh index e45a33a2bb..db76d7c37a 100644 --- a/bin/commands/diagnose/index.sh +++ b/bin/commands/diagnose/index.sh @@ -11,59 +11,4 @@ # Copyright Contributors to the Zowe Project. ####################################################################### -USE_CONFIGMGR=$(check_configmgr_enabled) -if [ "${USE_CONFIGMGR}" = "true" ]; then - _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/diagnose/cli.js" -else - - error_code="${ZWE_CLI_PARAMETER_ERROR_CODE}" - - print_message "" - - if echo $error_code | grep -q -E "^[zZ][wW][eE][AaSsDdLl][A-Za-z]?[0-9]{3,4}[A-Za-z]$"; then - server_code=$(echo "${error_code}" | cut -c4) - if [[ "$server_code" == [Dd] ]]; then - print_message "This code corresponds to the errors related to the ZOWE Desktop and the App Server." - print_message "" - print_message "To find the description of this error code, refer to the:" - print_message "" - print_message " Zowe documentation for Application framework" - print_message " https://docs.zowe.org/stable/troubleshoot/app-framework/appserver-error-codes" - elif [[ "$server_code" == [Ss] ]]; then - print_message "This code corresponds to the errors related to the Zowe Subsystem Services (ZSS) and Zowe Installation Services (ZIS)." - print_message "" - print_message "To find the description of this error code, refer to the:" - print_message "" - print_message " Zowe documentation for ZSS" - print_message " https://docs.zowe.org/stable/troubleshoot/app-framework/zss-error-codes" - print_message " Zowe documentation for ZIS" - print_message " https://docs.zowe.org/stable/troubleshoot/app-framework/zis-error-codes" - elif [[ "$server_code" == [Aa] ]]; then - print_message "This code corresponds to the errors related to the Zowe API Mediation Layer (APIML)." - print_message "" - print_message "To find the description of this error code, refer to the:" - print_message "" - print_message " Zowe documentation for API Mediation Layer" - print_message " https://docs.zowe.org/stable/troubleshoot/troubleshoot-apiml-error-codes" - elif [[ "$server_code" == [Ll] ]]; then - print_message "This code corresponds to the errors related to the Zowe Launcher and ZWE." - print_message "" - print_message "To find the description of this error code, refer to the:" - print_message "" - print_message " Zowe documentation for Launcher" - print_message " https://docs.zowe.org/stable/troubleshoot/launcher/launcher-error-codes" - print_message " Launcher error codes" - print_message " https://github.com/zowe/launcher/blob/v2.x/master/src/msg.h" - print_message " Zowe documentation for ZWE" - print_message " https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/" - fi - print_message "" - print_message "You may also explore reports from other users experiencing the same error by searching" - print_message "https://github.com/search?q=org%3Azowe+${error_code}&type=discussions" - else - print_error_and_exit "ZWEL0102E: Invalid parameter --error-code='${error_code}'" "" 102 - fi - - print_message "" - -fi +_CEE_RUNOPTS="XPLINK(ON)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/diagnose/cli.js" diff --git a/bin/commands/diagnose/index.ts b/bin/commands/diagnose/index.ts index 8fb6518277..4535f7e2fa 100644 --- a/bin/commands/diagnose/index.ts +++ b/bin/commands/diagnose/index.ts @@ -3,65 +3,64 @@ under the terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - + SPDX-License-Identifier: EPL-2.0 - + Copyright Contributors to the Zowe Project. */ + import * as std from 'cm_std'; import * as common from '../../libs/common'; -const THIS_CODE = "\nThis code corresponds to the errors related to the"; -const FIND_DESC = "To find the description of this error code, refer to the:\n "; -const URL = { - apiML: "https://docs.zowe.org/stable/troubleshoot/troubleshoot-apiml-error-codes", - appFW : "https://docs.zowe.org/stable/troubleshoot/app-framework/appserver-error-codes", - launcher: "https://docs.zowe.org/stable/troubleshoot/launcher/launcher-error-codes", - launcherGit: "https://github.com/zowe/launcher/blob/v2.x/master/src/msg.h", - zss: "https://docs.zowe.org/stable/troubleshoot/app-framework/zss-error-codes", - zis: "https://docs.zowe.org/stable/troubleshoot/app-framework/zis-error-codes", - zwe: "https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/" -} - -function thisCodeCorrespondsTo(component: string){ - common.printMessage(`${THIS_CODE} ${component}.\n`); - common.printMessage(`${FIND_DESC}`); +const COMPONENTS = { + a: { + title: 'Zowe API Mediation Layer (APIML)', + urls: [ + { text: 'API Mediation Layer', link: 'https://docs.zowe.org/stable/troubleshoot/troubleshoot-apiml-error-codes' } + ] + }, + d: { + title: 'Zowe Desktop and the App Server', + urls: [ + { text: 'Application framework', link: 'https://docs.zowe.org/stable/troubleshoot/app-framework/appserver-error-codes' } + ] + }, + l: { + title: 'Zowe Launcher and zwe', + urls: [ + { text: 'Launcher', link: 'https://docs.zowe.org/stable/troubleshoot/launcher/launcher-error-codes' }, + { text: 'Launcher error codes', link: `https://github.com/zowe/launcher/blob/v${common.getZoweVersion().substring(0,1)}.x/master/src/msg.h`, git: true }, + { text: 'zwe', link: 'https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/' }, + ] + }, + s: { + title: 'Zowe Subsystem Services (ZSS) and Zowe Installation Services (ZIS)', + urls: [ + { text: 'ZSS', link: 'https://docs.zowe.org/stable/troubleshoot/app-framework/zss-error-codes' }, + { text: 'ZIS', link: 'https://docs.zowe.org/stable/troubleshoot/app-framework/zis-error-codes' } + ] + } } -function printLinks(description: string, link: string){ - if (link.indexOf('github') > 0) - common.printMessage(` ${description}`) - else - common.printMessage(` Zowe documentation for ${description}`) - common.printMessage(` ${link}`); +function printComponent(component: any): void { + common.printMessage(`\nThis code corresponds to the errors related to the ${component.title}.\n`); + common.printMessage(`To find the description of this error code, refer to the:\n`); + for (let url in component.urls) { + let zoweDocFor = component.urls[url].git ? '' : 'Zowe documentation for '; + common.printMessage(` ${zoweDocFor}${component.urls[url].text}`); + common.printMessage(` ${component.urls[url].link}`); + } } -export function execute() { +export function execute(): void { const errorCode = std.getenv('ZWE_CLI_PARAMETER_ERROR_CODE'); if (/^[zZ][wW][eE][AaSsDdLl][A-Za-z]?[0-9]{3,4}[A-Za-z]$/.test(errorCode)) { - const serverCode = errorCode.charAt(3); - if (serverCode.toLowerCase() === 'd') { - thisCodeCorrespondsTo('ZOWE Desktop and the App Server'); - printLinks('Application framework', `${URL.appFW}`); - } - else if (serverCode.toLowerCase() === 's') { - thisCodeCorrespondsTo('Zowe Subsystem Services (ZSS) and Zowe Installation Services (ZIS)'); - printLinks('ZSS', `${URL.zss}`); - printLinks('ZIS', `${URL.zis}`); - } - else if (serverCode.toLowerCase() === 'a') { - thisCodeCorrespondsTo('Zowe API Mediation Layer (APIML)'); - printLinks('API Mediation Layer', `${URL.apiML}`); + const serverCode = errorCode.charAt(3).toLowerCase(); + if ('adls'.includes(serverCode)) { + printComponent(COMPONENTS[serverCode]); + common.printMessage(`\nYou may also explore reports from other users experiencing the same error by searching\nhttps://github.com/search?q=org%3Azowe+${errorCode}&type=discussions\n`); } - else if (serverCode.toLowerCase() === 'l') { - thisCodeCorrespondsTo('Zowe Launcher and ZWE'); - printLinks('Launcher', `${URL.launcher}`); - printLinks('Launcher error codes', `${URL.launcherGit}`); - printLinks('ZWE', `${URL.zwe}`); - } - common.printMessage(`\nYou may also explore reports from other users experiencing the same error by searching\nhttps://github.com/search?q=org%3Azowe+${errorCode}&type=discussions\n`); - } - else { + } else { common.printErrorAndExit(`ZWEL0102E: Invalid parameter --error-code='${errorCode}'`, undefined, 102); } } diff --git a/bin/commands/init/apfauth/.examples b/bin/commands/init/apfauth/.examples index ac9dc2c851..d404be28d6 100644 --- a/bin/commands/init/apfauth/.examples +++ b/bin/commands/init/apfauth/.examples @@ -1 +1,2 @@ zwe init apfauth --security-dry-run -c /path/to/zowe.yaml +zwe init apfauth --security-dry-run -c /path/to/zowe.yaml --generate diff --git a/bin/commands/init/apfauth/.parameters b/bin/commands/init/apfauth/.parameters index 56143b1254..a464df9bca 100644 --- a/bin/commands/init/apfauth/.parameters +++ b/bin/commands/init/apfauth/.parameters @@ -1 +1,2 @@ security-dry-run,dry-run||boolean|||||Whether to dry run security related setup. +generate||boolean|||||Whether to force rebuild of JCL prior to submission. Use this when you've changed zowe.yaml and are re-submitting this command. diff --git a/bin/commands/init/apfauth/index.sh b/bin/commands/init/apfauth/index.sh index 581636ffd5..647b583408 100644 --- a/bin/commands/init/apfauth/index.sh +++ b/bin/commands/init/apfauth/index.sh @@ -12,8 +12,7 @@ ####################################################################### if [ -z "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}" ]; then - # user-facing command, use tmpdir to not mess up workspace permissions + # user-facing command, use tmpdir to not mess up workspace permissions export ZWE_PRIVATE_TMP_MERGED_YAML_DIR=1 fi _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/init/apfauth/cli.js" - diff --git a/bin/commands/init/apfauth/index.ts b/bin/commands/init/apfauth/index.ts index 50df9a5e33..f5d07ac59a 100644 --- a/bin/commands/init/apfauth/index.ts +++ b/bin/commands/init/apfauth/index.ts @@ -19,6 +19,7 @@ import * as fs from '../../../libs/fs'; import * as shell from '../../../libs/shell'; import * as stringlib from '../../../libs/string'; import * as xplatform from 'xplatform'; +import * as initGenerate from '../generate/index'; export function execute() { @@ -34,6 +35,12 @@ export function execute() { common.printErrorAndExit(`Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file.`, undefined, 157); } + // check if user passed --generate + const forceGen = !!std.getenv('ZWE_CLI_PARAMETER_GENERATE') + if (forceGen) { + initGenerate.execute(); + } + // read JCL library and validate const jcllib = zoslib.verifyGeneratedJcl(ZOWE_CONFIG); if (!jcllib) { diff --git a/bin/commands/init/certificate/.errors b/bin/commands/init/certificate/.errors index 0dbf93823a..173126d09e 100644 --- a/bin/commands/init/certificate/.errors +++ b/bin/commands/init/certificate/.errors @@ -2,3 +2,4 @@ ZWEL0157E|157|%s (%s) is not defined in Zowe YAML configuration file. ZWEL0164E|164|Value of %s (%s) defined in Zowe YAML configuration file is invalid. Valid values are %s. ZWEL0174E|174|Failed to generate certificate in Zowe keyring "%s/%s". ZWEL0319E|319|zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ${prefix}.SZWESAMP(ZWEGENER) before running this command. +ZWEL0201E|201|File %s does not exist. diff --git a/bin/commands/init/certificate/index.sh b/bin/commands/init/certificate/index.sh index 63860de145..af240ea8e7 100644 --- a/bin/commands/init/certificate/index.sh +++ b/bin/commands/init/certificate/index.sh @@ -15,39 +15,43 @@ print_level1_message "Generate certificate" ############################### # validation -require_zowe_yaml +require_zowe_yaml "skipnode" + +# Keytool is needed +require_java + if [ -n "${ZWE_PRIVATE_CONFIG_ORIG}" ]; then CONFIG_TO_WRITE=${ZWE_PRIVATE_CONFIG_ORIG} else CONFIG_TO_WRITE=${ZWE_CLI_PARAMETER_CONFIG} fi -# Keytool is needed -require_java - -# Node is needed for read_yaml -require_node - export ZWE_PRIVATE_TMP_MERGED_YAML_DIR=$(create_tmp_file) mkdir -p ${ZWE_PRIVATE_TMP_MERGED_YAML_DIR} _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/internal/config/output/cli.js" -# use the yaml configmgr returns because it will contain defaults for the version we are using. -ZWE_CLI_PARAMETER_CONFIG=${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml +if [ $? -eq 0 -a -f "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml" ]; then + # use the yaml configmgr returns because it will contain defaults for the version we are using. + ZWE_CLI_PARAMETER_CONFIG=${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml +else + print_error_and_exit "Error ZWEL0201E: File '${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml' does not exist." "" 201 +fi ############################### # read prefix and validate -prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix") +prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix") if [ -z "${prefix}" ]; then print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157 fi - +# read JCL library and validate jcllib=$(verify_generated_jcl) if [ "$?" -eq 1 ]; then print_error_and_exit "Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ${prefix}.SZWESAMP(ZWEGENER) before running this command." "" 319 fi - +security_product=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.product") +security_users_zowe=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zowe") +security_groups_admin=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.admin") # read cert type and validate -cert_type=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.type") +cert_type=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.type") if [ -z "${cert_type}" ]; then print_error_and_exit "Error ZWEL0157E: Certificate type (zowe.setup.certificate.type) is not defined in Zowe YAML configuration file." "" 157 fi @@ -56,12 +60,19 @@ fi if [ $? -ne 0 ]; then print_error_and_exit "Error ZWEL0164E: Value of certificate type (zowe.setup.certificate.type) defined in Zowe YAML configuration file is invalid. Valid values are PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS." "" 164 fi - +# read cert dname +for item in caCommonName commonName orgUnit org locality state country; do + var_name="dname_${item}" + var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.dname.${item}") + eval "${var_name}=\"${var_val}\"" +done +# read cert validity +cert_validity=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.validity") if [ "${cert_type}" = "PKCS12" ]; then # read keystore info for item in directory lock name password; do var_name="pkcs12_${item}" - var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.pkcs12.${item}") + var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.pkcs12.${item}") eval "${var_name}=\"${var_val}\"" done if [ -z "${pkcs12_directory}" ]; then @@ -72,13 +83,12 @@ if [ "${cert_type}" = "PKCS12" ]; then else # JCE* content security_product=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.product") - keyring_option=1 # read keyring info # TODO removed "owner" here because it wasnt being read in the JCL. for item in name label caLabel; do var_name="keyring_${item}" - var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.${item}") + var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.${item}") eval "${var_name}=\"${var_val}\"" done # FIXME: currently ZWEKRING jcl will import the cert and chain, CA will also be added to CERTAUTH, but the CA will not be connected to keyring. @@ -87,8 +97,8 @@ else # JCE* content if [ -z "${keyring_name}" ]; then print_error_and_exit "Error ZWEL0157E: Zowe keyring name (zowe.setup.certificate.keyring.name) is not defined in Zowe YAML configuration file." "" 157 fi - - keyring_import_dsName=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.dsName") + keyring_import_dsName=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.dsName") + keyring_import_password=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.password") if [ -n "${keyring_import_dsName}" ]; then keyring_option=3 keyring_import_password=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.password") @@ -106,7 +116,6 @@ else # JCE* content yaml_keyring_label="${keyring_connect_label}" fi fi - if [ "${keyring_option}" -eq 1 ]; then # validate parameters only needed for creation of certificate for item in caCommonName commonName orgUnit org locality state country; do @@ -120,6 +129,7 @@ else # JCE* content if [ -z "${cert_validity}" ]; then print_error_and_exit "Error ZWEL0157E: Certificate creation parameter (zowe.setup.certificate.validity) is not defined in Zowe YAML configuration file." "" 157 fi + fi # read keyring-specific z/OSMF info @@ -129,22 +139,25 @@ else # JCE* content eval "${var_name}=\"${var_val}\"" done fi - +# Trace or debug information will be part of the output, let's turn it off for the inline zwe commands +save_trace=$ZWE_PRIVATE_LOG_LEVEL_ZWELS +ZWE_PRIVATE_LOG_LEVEL_ZWELS= # read keystore domains -cert_import_CAs=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.importCertificateAuthorities" | tr '\n' ',') +cert_import_CAs=$(zwecli_inline_execute_command internal config get --config "${ZWE_CLI_PARAMETER_CONFIG}" --path ".zowe.setup.certificate.importCertificateAuthorities" | tr '\n' ',' | awk '{ print substr( $0, 1, length($0)-1 ) }') # read keystore domains -cert_domains=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.san" | tr '\n' ',') +cert_domains=$(zwecli_inline_execute_command internal config get --config "${ZWE_CLI_PARAMETER_CONFIG}" --path ".zowe.setup.certificate.san" | tr '\n' ',' | awk '{ print substr( $0, 1, length($0)-1 ) }') if [ -z "${cert_domains}" ]; then - cert_domains=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.externalDomains" | tr '\n' ',') + cert_domains=$(zwecli_inline_execute_command internal config get --config "${ZWE_CLI_PARAMETER_CONFIG}" --path ".zowe.externalDomains" | tr '\n' ',' | awk '{ print substr( $0, 1, length($0)-1 ) }') fi +ZWE_PRIVATE_LOG_LEVEL_ZWELS=$save_trace for item in host port; do var_name="zosmf_${item}" - var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zOSMF.${item}") + var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zOSMF.${item}") eval "${var_name}=\"${var_val}\"" done keyring_trust_zosmf=0 -verify_certificates=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.verifyCertificates" | upper_case) +verify_certificates=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.verifyCertificates" | upper_case) if [ "${verify_certificates}" = "STRICT" -o "${verify_certificates}" = "NONSTRICT" ]; then keyring_trust_zosmf=1 else @@ -153,7 +166,6 @@ else zosmf_port= fi - ############################### # set default values or quit on missing ones @@ -165,7 +177,6 @@ if [ "${cert_type}" = "PKCS12" ]; then print_error_and_exit "Error ZWEL0157E: (zowe.setup.certificate.pkcs12.password) is not defined in Zowe YAML configuration file." "" 157 fi - if [ "$(lower_case "${pkcs12_lock}")" = "true" ]; then security_users_zowe=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zowe") security_groups_admin=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.admin") @@ -204,10 +215,12 @@ else # JCE* content if [ -z "${security_groups_stc}" ]; then print_error_and_exit "Error ZWEL0157E: (zowe.setup.security.groups.stc) is not defined in Zowe YAML configuration file." "" 157 fi - fi + fi - if [ -z "${zosmf_ca}" -a "${security_product}" = "RACF" -a -n "${zosmf_host}" ]; then - zosmf_ca="_auto_" + if [ "${security_product}" = "RACF" -o "${security_product}" = "TSS" ]; then + if [ -z "${zosmf_ca}" -a -n "${zosmf_host}" ]; then + zosmf_ca="_auto_" + fi fi fi @@ -225,7 +238,7 @@ if [ "${cert_type}" = "PKCS12" ]; then if [ -z "${pkcs12_import_alias}" ]; then print_error_and_exit "Error ZWEL0157E: Certificate alias of import keystore (zowe.setup.certificate.pkcs12.import.alias) is not defined in Zowe YAML configuration file." "" 157 fi - + # import from another keystore zwecli_inline_execute_command \ certificate pkcs12 import \ @@ -266,8 +279,8 @@ if [ "${cert_type}" = "PKCS12" ]; then # export CA cert in PEM format zwecli_inline_execute_command \ certificate pkcs12 export \ - --keystore "${pkcs12_directory}/${pkcs12_caAlias}/${pkcs12_caAlias}.keystore.p12" \ - --password "${pkcs12_caPassword}" + --keystore "${pkcs12_directory}/${pkcs12_caAlias}/${pkcs12_caAlias}.keystore.p12" \ + --password "${pkcs12_caPassword}" yaml_pem_cas="${pkcs12_directory}/${pkcs12_caAlias}/${pkcs12_caAlias_lc}.cer" @@ -330,14 +343,14 @@ if [ "${cert_type}" = "PKCS12" ]; then # export all certs in PEM format zwecli_inline_execute_command \ certificate pkcs12 export \ - --keystore "${pkcs12_directory}/${pkcs12_name}/${pkcs12_name}.keystore.p12" \ - --password "${pkcs12_password}" \ - --private-keys "${pkcs12_name}" + --keystore "${pkcs12_directory}/${pkcs12_name}/${pkcs12_name}.keystore.p12" \ + --password "${pkcs12_password}" \ + --private-keys "${pkcs12_name}" zwecli_inline_execute_command \ certificate pkcs12 export \ - --keystore "${pkcs12_directory}/${pkcs12_name}/${pkcs12_name}.truststore.p12" \ - --password "${pkcs12_password}" \ - --private-keys "" + --keystore "${pkcs12_directory}/${pkcs12_name}/${pkcs12_name}.truststore.p12" \ + --password "${pkcs12_password}" \ + --private-keys "" # after we export truststore, the imported CAs will be exported as extca*.cer if [ -n "${cert_import_CAs}" ]; then @@ -355,10 +368,10 @@ if [ "${cert_type}" = "PKCS12" ]; then if [ "$(lower_case "${pkcs12_lock}")" = "true" ]; then zwecli_inline_execute_command \ certificate pkcs12 lock \ - --keystore-dir "${pkcs12_directory}" \ - --user "${security_users_zowe}" \ - --group "${security_groups_admin}" \ - --group-permission none + --keystore-dir "${pkcs12_directory}" \ + --user "${security_users_zowe}" \ + --group "${security_groups_admin}" \ + --group-permission none fi pkcs12_name_lc=$(echo "${pkcs12_name}" | lower_case) @@ -406,24 +419,24 @@ else # JCE* content # should we clean up before creating new if [ "${ZWE_CLI_PARAMETER_ALLOW_OVERWRITE}" = "true" ]; then # warning - print_message "Warning ZWEL0300W: Keyring \"safkeyring:///${keyring_owner}/${keyring_name}\" will be overwritten during configuration." + print_message "Warning ZWEL0300W: Keyring \"safkeyring://${keyring_owner}/${keyring_name}\" will be overwritten during configuration." keyring_run_zwenokyr_jcl "${prefix}" "${jcllib}" "${security_product}" else # error - # print_error_and_exit "Error ZWEL0158E: Keyring \"safkeyring:///${keyring_owner}/${keyring_name}\" already exists." "" 158 + # print_error_and_exit "Error ZWEL0158E: Keyring \"safkeyring:////${keyring_owner}/${keyring_name}\" already exists." "" 158 fi keyring_run_zwekring_jcl "${prefix}" \ - "${jcllib}" \ - "${keyring_option}" \ - "${cert_domains}" \ - "${cert_import_CAs}" \ - "${keyring_trust_zosmf}" \ - "${zosmf_ca}" \ - "${cert_validity}" \ - "${security_product}" - + "${jcllib}" \ + "${keyring_option}" \ + "${cert_domains}" \ + "${cert_import_CAs}" \ + "${keyring_trust_zosmf}" \ + "${zosmf_ca}" \ + "${cert_validity}" \ + "${security_product}" + if [ $? -ne 0 ]; then job_has_failures=true if [ "${ZWE_CLI_PARAMETER_IGNORE_SECURITY_FAILURES}" = "true" ]; then @@ -444,12 +457,12 @@ else # JCE* content if [ "${ZWE_CLI_PARAMETER_UPDATE_CONFIG}" = "true" ]; then print_level1_message "Update certificate configuration to ${ZWE_CLI_PARAMETER_CONFIG}" update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.keystore.type" "${cert_type}" - update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.keystore.file" "safkeyring:////${keyring_owner}/${keyring_name}" + update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.keystore.file" "safkeyring://${keyring_owner}/${keyring_name}" # we must set a dummy value here, other JDK will complain wrong parameter update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.keystore.password" "password" update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.keystore.alias" "${yaml_keyring_label}" update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.truststore.type" "${cert_type}" - update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.truststore.file" "safkeyring:////${keyring_owner}/${keyring_name}" + update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.truststore.file" "safkeyring://${keyring_owner}/${keyring_name}" # we must set a dummy value here, other JDK will complain wrong parameter update_zowe_yaml "${ZWE_CLI_PARAMETER_CONFIG}" "zowe.certificate.truststore.password" "password" print_level2_message "Zowe configuration is updated successfully." @@ -461,12 +474,12 @@ else # JCE* content print_message " certificate:" print_message " keystore:" print_message " type: ${cert_type}" - print_message " file: \"safkeyring:////${keyring_owner}/${keyring_name}\"" + print_message " file: \"safkeyring://${keyring_owner}/${keyring_name}\"" print_message " password: \"password\"" print_message " alias: \"${yaml_keyring_label}\"" print_message " truststore:" print_message " type: ${cert_type}" - print_message " file: \"safkeyring:////${keyring_owner}/${keyring_name}\"" + print_message " file: \"safkeyring://${keyring_owner}/${keyring_name}\"" print_message " password: \"password\"" print_level2_message "Zowe configuration requires manual updates." fi @@ -482,6 +495,6 @@ if [ -n "${zosmf_host}" -a "${verify_certificates}" = "STRICT" ]; then fi # cleanup temp file made at top. -if [ -n "$ZWE_PRIVATE_TMP_MERGED_YAML_DIR" ]; then +if [ -f "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml" ]; then rm "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml" fi diff --git a/bin/commands/init/mvs/.examples b/bin/commands/init/mvs/.examples index 880022a51f..991f767747 100644 --- a/bin/commands/init/mvs/.examples +++ b/bin/commands/init/mvs/.examples @@ -1 +1,2 @@ zwe init mvs -v -c /path/to/zowe.yaml +zwe init mvs -v -c /path/to/zowe.yaml --generate diff --git a/bin/commands/init/mvs/.parameters b/bin/commands/init/mvs/.parameters index e22daff5d3..70854b90ba 100644 --- a/bin/commands/init/mvs/.parameters +++ b/bin/commands/init/mvs/.parameters @@ -1,2 +1,3 @@ allow-overwrite,allow-overwritten||boolean|||||Allow overwritten existing MVS data set. dry-run||boolean|||||Generates and prints JCL but does not execute. +generate||boolean|||||Whether to force rebuild of JCL prior to submission. Use this when you've changed zowe.yaml and are re-submitting this command. diff --git a/bin/commands/init/mvs/index.sh b/bin/commands/init/mvs/index.sh index fdc7dbe0e4..574b5419d8 100644 --- a/bin/commands/init/mvs/index.sh +++ b/bin/commands/init/mvs/index.sh @@ -17,4 +17,3 @@ if [ -z "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}" ]; then export ZWE_PRIVATE_TMP_MERGED_YAML_DIR=1 fi _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/init/mvs/cli.js" - diff --git a/bin/commands/init/mvs/index.ts b/bin/commands/init/mvs/index.ts index 8f3a6fe8d1..7c3a01ff9c 100644 --- a/bin/commands/init/mvs/index.ts +++ b/bin/commands/init/mvs/index.ts @@ -19,6 +19,7 @@ import * as zosdataset from '../../../libs/zos-dataset'; import * as common from '../../../libs/common'; import * as config from '../../../libs/config'; import * as stringlib from '../../../libs/string'; +import * as initGenerate from '../generate/index'; export function execute(allowOverwrite?: boolean) { common.printLevel1Message(`Initialize Zowe custom data sets`); @@ -32,6 +33,12 @@ export function execute(allowOverwrite?: boolean) { common.printErrorAndExit(`Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file.`, undefined, 157); } + // check if user passed --generate + const forceGen = !!std.getenv('ZWE_CLI_PARAMETER_GENERATE') + if (forceGen) { + initGenerate.execute(); + } + const jcllib = zoslib.verifyGeneratedJcl(ZOWE_CONFIG); if (!jcllib) { common.printErrorAndExit(`Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ${prefix}.SZWESAMP(ZWEGENER) before running this command.`, undefined, 319); diff --git a/bin/commands/init/security/.examples b/bin/commands/init/security/.examples index d3800923c2..2e6dff24c5 100644 --- a/bin/commands/init/security/.examples +++ b/bin/commands/init/security/.examples @@ -1 +1,2 @@ zwe init security -v -c /path/to/zowe.yaml +zwe init security -v -c /path/to/zowe.yaml --generate diff --git a/bin/commands/init/security/.parameters b/bin/commands/init/security/.parameters index 3c654a9e5d..866971689f 100644 --- a/bin/commands/init/security/.parameters +++ b/bin/commands/init/security/.parameters @@ -1,2 +1,3 @@ security-dry-run,dry-run||boolean|||||Generates and prints JCL but does not execute. ignore-security-failures||boolean|||||Whether to ignore security setup job failures. +generate||boolean|||||Whether to force rebuild of JCL prior to submission. Use this when you've changed zowe.yaml and are re-submitting this command. diff --git a/bin/commands/init/security/index.sh b/bin/commands/init/security/index.sh index dd44426811..3ff87232e1 100644 --- a/bin/commands/init/security/index.sh +++ b/bin/commands/init/security/index.sh @@ -12,7 +12,7 @@ ####################################################################### if [ -z "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}" ]; then - # user-facing command, use tmpdir to not mess up workspace permissions + # user-facing command, use tmpdir to not mess up workspace permissions export ZWE_PRIVATE_TMP_MERGED_YAML_DIR=1 fi _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/init/security/cli.js" diff --git a/bin/commands/init/security/index.ts b/bin/commands/init/security/index.ts index d3653fbfbb..7ef09dc567 100644 --- a/bin/commands/init/security/index.ts +++ b/bin/commands/init/security/index.ts @@ -9,11 +9,13 @@ Copyright Contributors to the Zowe Project. */ +import * as std from 'cm_std'; import * as zos from 'zos'; import * as common from '../../../libs/common'; import * as config from '../../../libs/config'; import * as zoslib from '../../../libs/zos'; import * as zosJes from '../../../libs/zos-jes'; +import * as initGenerate from '../generate/index'; export function execute(dryRun?: boolean, ignoreSecurityFailures?: boolean) { common.printLevel1Message(`Run Zowe security configurations`); @@ -27,6 +29,13 @@ export function execute(dryRun?: boolean, ignoreSecurityFailures?: boolean) { if (!prefix) { common.printErrorAndExit(`Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file.`, undefined, 157); } + + // check if user passed --generate + const forceGen = !!std.getenv('ZWE_CLI_PARAMETER_GENERATE') + if (forceGen) { + initGenerate.execute(); + } + // read JCL library and validate const jcllib = zoslib.verifyGeneratedJcl(ZOWE_CONFIG); if (!jcllib) { @@ -67,6 +76,6 @@ export function execute(dryRun?: boolean, ignoreSecurityFailures?: boolean) { common.printMessage(``); common.printMessage(`WARNING: Due to the limitation of the ZWEI${securityPrefix} job, exit with 0 does not mean`); common.printMessage(` the job is fully successful. Please check the job log to determine`); - common.printMessage(` if there are any inline errors.`); + common.printMessage(` if there are any messages indicating a problem.`); common.printMessage(``); } diff --git a/bin/commands/init/stc/.examples b/bin/commands/init/stc/.examples index 154a3b890c..8ca7d6bd45 100644 --- a/bin/commands/init/stc/.examples +++ b/bin/commands/init/stc/.examples @@ -1 +1,2 @@ zwe init stc -v -c /path/to/zowe.yaml +zwe init stc -v -c /path/to/zowe.yaml --generate diff --git a/bin/commands/init/stc/.parameters b/bin/commands/init/stc/.parameters index e22daff5d3..70854b90ba 100644 --- a/bin/commands/init/stc/.parameters +++ b/bin/commands/init/stc/.parameters @@ -1,2 +1,3 @@ allow-overwrite,allow-overwritten||boolean|||||Allow overwritten existing MVS data set. dry-run||boolean|||||Generates and prints JCL but does not execute. +generate||boolean|||||Whether to force rebuild of JCL prior to submission. Use this when you've changed zowe.yaml and are re-submitting this command. diff --git a/bin/commands/init/stc/index.sh b/bin/commands/init/stc/index.sh index adc2d6fee1..1cc1c553c8 100644 --- a/bin/commands/init/stc/index.sh +++ b/bin/commands/init/stc/index.sh @@ -12,7 +12,7 @@ ####################################################################### if [ -z "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}" ]; then - # user-facing command, use tmpdir to not mess up workspace permissions + # user-facing command, use tmpdir to not mess up workspace permissions export ZWE_PRIVATE_TMP_MERGED_YAML_DIR=1 fi _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/init/stc/cli.js" diff --git a/bin/commands/init/stc/index.ts b/bin/commands/init/stc/index.ts index f7ee31eb21..7392398d1f 100644 --- a/bin/commands/init/stc/index.ts +++ b/bin/commands/init/stc/index.ts @@ -22,7 +22,7 @@ import * as config from '../../../libs/config'; import * as zoslib from '../../../libs/zos'; import * as zosJes from '../../../libs/zos-jes'; import * as zosdataset from '../../../libs/zos-dataset'; - +import * as initGenerate from '../generate/index'; export function execute(allowOverwrite: boolean = false) { @@ -47,6 +47,13 @@ export function execute(allowOverwrite: boolean = false) { if (!proclib) { common.printErrorAndExit(`Error ZWEL0157E: PROCLIB (zowe.setup.dataset.proclib) is not defined in Zowe YAML configuration file.`, undefined, 157); } + + // check if user passed --generate + const forceGen = !!std.getenv('ZWE_CLI_PARAMETER_GENERATE') + if (forceGen) { + initGenerate.execute(); + } + // read JCL library and validate const jcllib = zoslib.verifyGeneratedJcl(ZOWE_CONFIG); if (!jcllib) { diff --git a/bin/commands/init/vsam/.examples b/bin/commands/init/vsam/.examples index 2aec2da3f9..235b283682 100644 --- a/bin/commands/init/vsam/.examples +++ b/bin/commands/init/vsam/.examples @@ -1 +1,2 @@ zwe init vsam -v -c /path/to/zowe.yaml +zwe init vsam -v -c /path/to/zowe.yaml --generate diff --git a/bin/commands/init/vsam/.parameters b/bin/commands/init/vsam/.parameters index 604a1cc286..c96f09dc89 100644 --- a/bin/commands/init/vsam/.parameters +++ b/bin/commands/init/vsam/.parameters @@ -1,3 +1,4 @@ allow-overwrite,allow-overwritten||boolean|||||Allow overwritten existing MVS data set. dry-run||boolean|||||Generates and prints JCL but does not execute update-config||boolean|||||Whether to update YAML configuration for caching-service to match vsam name. +generate||boolean|||||Whether to force rebuild of JCL prior to submission. Use this when you've changed zowe.yaml and are re-submitting this command. diff --git a/bin/commands/init/vsam/index.ts b/bin/commands/init/vsam/index.ts index 72ea633a19..d5f2182b26 100644 --- a/bin/commands/init/vsam/index.ts +++ b/bin/commands/init/vsam/index.ts @@ -16,6 +16,7 @@ import * as zosJes from '../../../libs/zos-jes'; import * as zosDataset from '../../../libs/zos-dataset'; import * as common from '../../../libs/common'; import * as config from '../../../libs/config'; +import * as initGenerate from '../generate/index'; export function execute(allowOverwrite?: boolean, dryRun?: boolean, updateConfig?: boolean) { common.printLevel1Message(`Initialize Zowe custom data sets`); @@ -33,6 +34,12 @@ export function execute(allowOverwrite?: boolean, dryRun?: boolean, updateConfig return common.printErrorAndExit(`Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file.`, undefined, 157); } + // check if user passed --generate + const forceGen = !!std.getenv('ZWE_CLI_PARAMETER_GENERATE') + if (forceGen) { + initGenerate.execute(); + } + const jcllib = zoslib.verifyGeneratedJcl(ZOWE_CONFIG); if (!jcllib) { return common.printErrorAndExit(`Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ${prefix}.SZWESAMP(ZWEGENER) before running this command.`, undefined, 319); diff --git a/bin/commands/install/index.sh b/bin/commands/install/index.sh index df76a4c66e..c73c72288d 100644 --- a/bin/commands/install/index.sh +++ b/bin/commands/install/index.sh @@ -26,10 +26,10 @@ ${ZWE_PRIVATE_DS_SZWEEXEC}|Zowe executable utilities library|dsntype(library) ds if [ -n "${ZWE_CLI_PARAMETER_DATASET_PREFIX}" ]; then prefix="${ZWE_CLI_PARAMETER_DATASET_PREFIX}" else - require_zowe_yaml + require_zowe_yaml "skipnode" # read prefix and validate - prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix") + prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix") if [ -z "${prefix}" ]; then print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157 fi diff --git a/bin/commands/internal/config/output/.help b/bin/commands/internal/config/output/.help index 9ab013c019..b78a8ad2be 100644 --- a/bin/commands/internal/config/output/.help +++ b/bin/commands/internal/config/output/.help @@ -1 +1 @@ -Outputs the merged YAML used at Zowe runtime into zowe.workspaceDirectory/.env/.zowe-merged.yaml +Outputs the merged YAML used at Zowe runtime into `zowe.workspaceDirectory/.env/.zowe-merged.yaml`. diff --git a/bin/commands/internal/start/prepare/index.sh b/bin/commands/internal/start/prepare/index.sh index 85ca4ad100..3b1ef2e169 100644 --- a/bin/commands/internal/start/prepare/index.sh +++ b/bin/commands/internal/start/prepare/index.sh @@ -20,376 +20,398 @@ if [ "${USE_CONFIGMGR}" = "true" ]; then _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/internal/start/prepare/cli.js" else + ################################################################################ + # FUNCTIONS + + ######################################################## + # Extra preparations for running in container + # - link component runtime under zowe /components + # - `commands.configureInstance` is deprecated in v2 + prepare_running_in_container() { + # gracefully shutdown all processes + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,prepare_running_in_container:${LINENO}" "Register SIGTERM handler for graceful shutdown." + trap gracefully_shutdown SIGTERM + + # read ZWE_PRIVATE_CONTAINER_COMPONENT_ID from component manifest + # /component is hardcoded path we asked for in conformance + if [ -z "${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" ]; then + export ZWE_PRIVATE_CONTAINER_COMPONENT_ID=$(read_component_manifest /component '.name') + fi -################################################################################ -# FUNCTIONS - -######################################################## -# Extra preparations for running in container -# - link component runtime under zowe /components -# - `commands.configureInstance` is deprecated in v2 -prepare_running_in_container() { - # gracefully shutdown all processes - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,prepare_running_in_container:${LINENO}" "Register SIGTERM handler for graceful shutdown." - trap gracefully_shutdown SIGTERM - - # read ZWE_PRIVATE_CONTAINER_COMPONENT_ID from component manifest - # /component is hardcoded path we asked for in conformance - if [ -z "${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" ]; then - export ZWE_PRIVATE_CONTAINER_COMPONENT_ID=$(read_component_manifest /component '.name') - fi - - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,prepare_running_in_container:${LINENO}" "Prepare /components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID} directory." - if [ -e "${ZWE_zowe_runtimeDirectory}/components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" ]; then - rm -fr "${ZWE_zowe_runtimeDirectory}/components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" - fi - # we have hardcoded path for component runtime directory - ln -sfn /component "${ZWE_zowe_runtimeDirectory}/components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" -} - -######################################################## -# Prepare log directory -prepare_log_directory() { - # TODO: is it ok ZWE_zowe_logDirectory is not defined? - if [ -n "${ZWE_zowe_logDirectory}" ]; then - mkdir -p "${ZWE_zowe_logDirectory}" - - if [ ! -w "${ZWE_zowe_logDirectory}" ]; then - print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_log_directory:${LINENO}" "ZWEL0141E: User $(get_user_id) does not have write permission on ${ZWE_zowe_logDirectory}." - exit 141 + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,prepare_running_in_container:${LINENO}" "Prepare /components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID} directory." + if [ -e "${ZWE_zowe_runtimeDirectory}/components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" ]; then + rm -fr "${ZWE_zowe_runtimeDirectory}/components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" fi - fi -} + # we have hardcoded path for component runtime directory + ln -sfn /component "${ZWE_zowe_runtimeDirectory}/components/${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" + } + + ######################################################## + # Prepare log directory + prepare_log_directory() { + # TODO: is it ok ZWE_zowe_logDirectory is not defined? + if [ -n "${ZWE_zowe_logDirectory}" ]; then + mkdir -p "${ZWE_zowe_logDirectory}" + + if [ ! -w "${ZWE_zowe_logDirectory}" ]; then + print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_log_directory:${LINENO}" "ZWEL0141E: User $(get_user_id) does not have write permission on ${ZWE_zowe_logDirectory}." + exit 141 + fi + fi + } -######################################################## -# Prepare workspace directory -prepare_workspace_directory() { - export ZWE_PRIVATE_WORKSPACE_ENV_DIR="${ZWE_zowe_workspaceDirectory}/.env" - export ZWE_STATIC_DEFINITIONS_DIR="${ZWE_zowe_workspaceDirectory}/api-mediation/api-defs" - export ZWE_GATEWAY_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/gateway/sharedLibs/" - export ZWE_DISCOVERY_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/discovery/sharedLibs/" + ######################################################## + # Prepare workspace directory + prepare_workspace_directory() { + export ZWE_PRIVATE_WORKSPACE_ENV_DIR="${ZWE_zowe_workspaceDirectory}/.env" + export ZWE_STATIC_DEFINITIONS_DIR="${ZWE_zowe_workspaceDirectory}/api-mediation/api-defs" + export ZWE_GATEWAY_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/gateway/sharedLibs/" + export ZWE_ZAAS_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/zaas/sharedLibs/" + export ZWE_DISCOVERY_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/discovery/sharedLibs/" - mkdir -p "${ZWE_zowe_workspaceDirectory}" + mkdir -p "${ZWE_zowe_workspaceDirectory}" - if [ ! -w "${ZWE_zowe_workspaceDirectory}" ]; then - print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "ZWEL0141E: User $(get_user_id) does not have write permission on ${ZWE_zowe_workspaceDirectory}." - exit 141 - fi + if [ ! -w "${ZWE_zowe_workspaceDirectory}" ]; then + print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "ZWEL0141E: User $(get_user_id) does not have write permission on ${ZWE_zowe_workspaceDirectory}." + exit 141 + fi - # set workspace dir permission - # FIXME: 771 is inherited from v1, we should consider disable read permission for `other` - umask 0002 - result=$(chmod -R 771 "${ZWE_zowe_workspaceDirectory}" 2>&1) - code=$? - if [ ${code} -ne 0 ]; then - print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "WARNING: Failed to set permission of some existing files or directories in ${ZWE_zowe_workspaceDirectory}:" - print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "${result}" - fi + # set workspace dir permission + # FIXME: 771 is inherited from v1, we should consider disable read permission for `other` + umask 0002 + result=$(chmod -R 771 "${ZWE_zowe_workspaceDirectory}" 2>&1) + code=$? + if [ ${code} -ne 0 ]; then + print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "WARNING: Failed to set permission of some existing files or directories in ${ZWE_zowe_workspaceDirectory}:" + print_formatted_error "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "${result}" + fi - # create apiml static defs directory - mkdir -p "${ZWE_STATIC_DEFINITIONS_DIR}" - # create apiml gateway share library directory - mkdir -p "${ZWE_GATEWAY_SHARED_LIBS}" - # create apiml discovery share library directory - mkdir -p "${ZWE_DISCOVERY_SHARED_LIBS}" + # create apiml static defs directory + mkdir -p "${ZWE_STATIC_DEFINITIONS_DIR}" + # create apiml gateway shared libraries directory + mkdir -p "${ZWE_GATEWAY_SHARED_LIBS}" + # create apiml zaas shared libraries directory + mkdir -p "${ZWE_ZAAS_SHARED_LIBS}" + # create apiml discovery shared libraries directory + mkdir -p "${ZWE_DISCOVERY_SHARED_LIBS}" - # Copy Zowe manifest into WORKSPACE_DIR so we know the version for support enquiries/migration - cp ${ZWE_zowe_runtimeDirectory}/manifest.json ${ZWE_zowe_workspaceDirectory} + # Copy Zowe manifest into WORKSPACE_DIR so we know the version for support enquiries/migration + cp ${ZWE_zowe_runtimeDirectory}/manifest.json ${ZWE_zowe_workspaceDirectory} - # prepare .env directory - mkdir -p "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}" + # prepare .env directory + mkdir -p "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}" - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "initialize .instance-${ZWE_CLI_PARAMETER_HA_INSTANCE}.env(s)" - generate_instance_env_from_yaml_config "${ZWE_CLI_PARAMETER_HA_INSTANCE}" + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,prepare_workspace_directory:${LINENO}" "initialize .instance-${ZWE_CLI_PARAMETER_HA_INSTANCE}.env(s)" + generate_instance_env_from_yaml_config "${ZWE_CLI_PARAMETER_HA_INSTANCE}" - # we lock this folder only for zowe runtime user - chmod -R 700 "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}" -} + # we lock this folder only for zowe runtime user + chmod -R 700 "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}" + } -######################################################## -# Global validations -global_validate() { - print_formatted_info "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "process global validations ..." + ######################################################## + # Global validations + global_validate() { + print_formatted_info "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "process global validations ..." - # validate_runtime_user - if [ "${USER}" = "IZUSVR" ]; then - print_formatted_warn "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "ZWEL0302W: You are running the Zowe process under user id IZUSVR. This is not recommended and may impact your z/OS MF server negatively." - fi + # validate_runtime_user + if [ "${USER}" = "IZUSVR" ]; then + print_formatted_warn "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "ZWEL0302W: You are running the Zowe process under user id IZUSVR. This is not recommended and may impact your z/OS MF server negatively." + fi - # reset error counter - export ZWE_PRIVATE_ERRORS_FOUND=0 + # reset error counter + export ZWE_PRIVATE_ERRORS_FOUND=0 - validate_this "is_directory_writable \"${ZWE_zowe_workspaceDirectory}\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + validate_this "is_directory_writable \"${ZWE_zowe_workspaceDirectory}\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" - if [ "${ZWE_RUN_IN_CONTAINER}" != "true" ]; then - # only do these check when it's not running in container + if [ "${ZWE_RUN_IN_CONTAINER}" != "true" ]; then + # only do these check when it's not running in container - # currently node is always required - validate_this "validate_node_home 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + # currently node is always required + validate_this "validate_node_home 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" - # validate java for some core components - if [[ ${ZWE_ENABLED_COMPONENTS} == *"gateway"* || ${ZWE_ENABLED_COMPONENTS} == *"cloud-gateway"* || ${ZWE_ENABLED_COMPONENTS} == *"discovery"* || ${ZWE_ENABLED_COMPONENTS} == *"api-catalog"* || ${ZWE_ENABLED_COMPONENTS} == *"caching-service"* || ${ZWE_ENABLED_COMPONENTS} == *"metrics-service"* || ${ZWE_ENABLED_COMPONENTS} == *"files-api"* || ${ZWE_ENABLED_COMPONENTS} == *"jobs-api"* ]]; then - validate_this "validate_java_home 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" - fi - else - if [ -z "${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" ]; then - validate_this "is_variable_set \"ZWE_PRIVATE_CONTAINER_COMPONENT_ID\" \"Cannot find name from the component image manifest file\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + # validate java for some core components + if [[ ${ZWE_ENABLED_COMPONENTS} == *"gateway"* || ${ZWE_ENABLED_COMPONENTS} == *"zaas"* || ${ZWE_ENABLED_COMPONENTS} == *"discovery"* || ${ZWE_ENABLED_COMPONENTS} == *"api-catalog"* || ${ZWE_ENABLED_COMPONENTS} == *"caching-service"* ]]; then + validate_this "validate_java_home 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + fi + else + if [ -z "${ZWE_PRIVATE_CONTAINER_COMPONENT_ID}" ]; then + validate_this "is_variable_set \"ZWE_PRIVATE_CONTAINER_COMPONENT_ID\" \"Cannot find name from the component image manifest file\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + fi fi - fi - # validate z/OSMF for some core components - if [ -n "${ZOSMF_HOST}" -a -n "${ZOSMF_PORT}" ]; then - if [[ ${ZWE_ENABLED_COMPONENTS} == *"discovery"* || ${ZWE_ENABLED_COMPONENTS} == *"files-api"* || ${ZWE_ENABLED_COMPONENTS} == *"jobs-api"* ]]; then - validate_this "validate_zosmf_host_and_port \"${ZOSMF_HOST}\" \"${ZOSMF_PORT}\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + # validate z/OSMF for some core components + if [ -n "${ZOSMF_HOST}" -a -n "${ZOSMF_PORT}" ]; then + if [[ ${ZWE_ENABLED_COMPONENTS} == *"discovery"* ]]; then + validate_this "validate_zosmf_host_and_port \"${ZOSMF_HOST}\" \"${ZOSMF_PORT}\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" + else + if [ "${ZWE_components_gateway_apiml_security_auth_provider}" = "zosmf" ]; then + let "ZWE_PRIVATE_ERRORS_FOUND=${ZWE_PRIVATE_OLD_ERRORS_FOUND}+1" + print_error "Using z/OSMF as 'components.gateway.apiml.security.auth.provider' is not possible: discovery is disabled." + print_formatted_info "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "Zosmf validation failed" + fi + fi fi - elif [ "${ZWE_components_gateway_apiml_security_auth_provider}" = "zosmf" ]; then - validate_this "validate_zosmf_as_auth_provider \"${ZOSMF_HOST}\" \"${ZOSMF_PORT}\" \"${ZWE_components_gateway_apiml_security_auth_provider}\" 2>&1" "zwe-internal-start-prepare,global_validate:${LINENO}" - fi - check_runtime_validation_result "zwe-internal-start-prepare,global_validate:${LINENO}" - - print_formatted_info "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "global validations are successful" -} - -######################################################## -# Validate component properties if script exists -validate_components() { - print_formatted_info "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "process component validations ..." - - # reset error counter - export ZWE_PRIVATE_ERRORS_FOUND=0 - - for component_id in $(echo "${ZWE_ENABLED_COMPONENTS}" | sed "s/,/ /g"); do - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- checking ${component_id}" - component_dir=$(find_component_directory "${component_id}") - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- in directory ${component_dir}" - if [ -n "${component_dir}" ]; then - cd "${component_dir}" - - # check validate script - validate_script=$(read_component_manifest "${component_dir}" ".commands.validate" 2>/dev/null) - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- commands.validate is ${validate_script:-}" - if [ -n "${validate_script}" ]; then - if [ -f "${validate_script}" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- process ${component_id} validate command ..." - ZWE_PRIVATE_OLD_ERRORS_FOUND=${ZWE_PRIVATE_ERRORS_FOUND} - ZWE_PRIVATE_ERRORS_FOUND=0 - (load_environment_variables "${component_id}" && . "${validate_script}" 2>&1 && return ${ZWE_PRIVATE_ERRORS_FOUND}) - retval=$? - let "ZWE_PRIVATE_ERRORS_FOUND=${ZWE_PRIVATE_OLD_ERRORS_FOUND}+${retval}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "Error ZWEL0172E: Component ${component_id} has commands.validate defined but the file is missing." + check_runtime_validation_result "zwe-internal-start-prepare,global_validate:${LINENO}" + + print_formatted_info "ZWELS" "zwe-internal-start-prepare,global_validate:${LINENO}" "global validations are successful" + } + + ######################################################## + # Validate component properties if script exists + validate_components() { + print_formatted_info "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "process component validations ..." + + # reset error counter + export ZWE_PRIVATE_ERRORS_FOUND=0 + + for component_id in $(echo "${ZWE_ENABLED_COMPONENTS}" | sed "s/,/ /g"); do + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- checking ${component_id}" + component_dir=$(find_component_directory "${component_id}") + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- in directory ${component_dir}" + if [ -n "${component_dir}" ]; then + cd "${component_dir}" + + # check validate script + validate_script=$(read_component_manifest "${component_dir}" ".commands.validate" 2>/dev/null) + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- commands.validate is ${validate_script:-}" + if [ -n "${validate_script}" ]; then + if [ -f "${validate_script}" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- process ${component_id} validate command ..." + ZWE_PRIVATE_OLD_ERRORS_FOUND=${ZWE_PRIVATE_ERRORS_FOUND} + ZWE_PRIVATE_ERRORS_FOUND=0 + (load_environment_variables "${component_id}" && . "${validate_script}" 2>&1 && return ${ZWE_PRIVATE_ERRORS_FOUND}) + retval=$? + let "ZWE_PRIVATE_ERRORS_FOUND=${ZWE_PRIVATE_OLD_ERRORS_FOUND}+${retval}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "Error ZWEL0172E: Component ${component_id} has commands.validate defined but the file is missing." + fi fi - fi - # check platform dependencies - if [ "${ZWE_RUN_ON_ZOS}" != "true" ]; then - zos_deps=$(read_component_manifest "${component_dir}" ".dependencies.zos" 2>/dev/null) - if [ -n "${zos_deps}" ]; then - print_formatted_warn "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- ${component_id} depends on z/OS service(s). This dependency may require additional setup, please refer to the component documentation" + # check platform dependencies + if [ "${ZWE_RUN_ON_ZOS}" != "true" ]; then + zos_deps=$(read_component_manifest "${component_dir}" ".dependencies.zos" 2>/dev/null) + if [ -n "${zos_deps}" ]; then + print_formatted_warn "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "- ${component_id} depends on z/OS service(s). This dependency may require additional setup, please refer to the component documentation" + fi fi fi - fi - done - - check_runtime_validation_result "zwe-internal-start-prepare,validate_components:${LINENO}" - - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "component validations are successful" -} - -######################################################## -# Run setup/configure on components if script exists -configure_components() { - print_formatted_info "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "process component configurations ..." - for component_id in $(echo "${ZWE_ENABLED_COMPONENTS}" | sed "s/,/ /g"); do - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- checking ${component_id}" - component_dir=$(find_component_directory "${component_id}") - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- in directory ${component_dir}" - if [ -n "${component_dir}" ]; then - cd "${component_dir}" - - # prepare component workspace - component_name=$(read_component_manifest "${component_dir}" ".name") - mkdir -p "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}" - if [ -e "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}" ]; then - chmod 700 "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}" - fi + done + + check_runtime_validation_result "zwe-internal-start-prepare,validate_components:${LINENO}" + + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,validate_components:${LINENO}" "component validations are successful" + } + + ######################################################## + # Run setup/configure on components if script exists + configure_components() { + print_formatted_info "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "process component configurations ..." + for component_id in $(echo "${ZWE_ENABLED_COMPONENTS}" | sed "s/,/ /g"); do + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- checking ${component_id}" + component_dir=$(find_component_directory "${component_id}") + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- in directory ${component_dir}" + if [ -n "${component_dir}" ]; then + cd "${component_dir}" + + # prepare component workspace + component_name=$(read_component_manifest "${component_dir}" ".name") + mkdir -p "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}" + if [ -e "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}" ]; then + chmod 700 "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}" + fi - # copy manifest to workspace - component_manifest=$(get_component_manifest "${component_dir}") - if [ ! -z "${component_manifest}" -a -f "${component_manifest}" ]; then - cp "${component_manifest}" "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/" - fi + # copy manifest to workspace + component_manifest=$(get_component_manifest "${component_dir}") + if [ ! -z "${component_manifest}" -a -f "${component_manifest}" ]; then + cp "${component_manifest}" "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/" + fi - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- configure ${component_id}" - - # check configure script - preconfigure_script=$(read_component_manifest "${component_dir}" ".commands.preConfigure" 2>/dev/null) - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- commands.preConfigure is ${preconfigure_script:-}" - if [ -n "${preconfigure_script}" ]; then - if [ -f "${preconfigure_script}" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "* process ${component_id} pre-configure command ..." - # execute configure step and snapshot environment - result=$(load_environment_variables "${component_id}" && . "${preconfigure_script}") - retval=$? - if [ -n "${result}" ]; then - if [ "${retval}" = "0" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- configure ${component_id}" + + # check configure script + preconfigure_script=$(read_component_manifest "${component_dir}" ".commands.preConfigure" 2>/dev/null) + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- commands.preConfigure is ${preconfigure_script:-}" + if [ -n "${preconfigure_script}" ]; then + if [ -f "${preconfigure_script}" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "* process ${component_id} pre-configure command ..." + # execute configure step and snapshot environment + result=$(load_environment_variables "${component_id}" && . "${preconfigure_script}") + retval=$? + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi fi + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "Error ZWEL0172E: Component ${component_id} has commands.preConfigure defined but the file is missing." fi - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "Error ZWEL0172E: Component ${component_id} has commands.preConfigure defined but the file is missing." fi - fi - # default build-in behaviors - # - apiml static definitions - result=$(process_component_apiml_static_definitions "${component_dir}" 2>&1) - retval=$? - if [ -n "${result}" ]; then - if [ "${retval}" = "0" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + # default build-in behaviors + # - apiml static definitions + result=$(process_component_apiml_static_definitions "${component_dir}" 2>&1) + retval=$? + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi fi - fi - # - generic app framework plugin - result=$(process_component_appfw_plugin "${component_dir}" 2>&1) - retval=$? - if [ -n "${result}" ]; then - if [ "${retval}" = "0" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + # - generic app framework plugin + result=$(process_component_appfw_plugin "${component_dir}" 2>&1) + retval=$? + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi fi - fi - # - gateway shared lib - result=$(process_component_gateway_shared_libs "${component_dir}" 2>&1) - retval=$? - if [ -n "${result}" ]; then - if [ "${retval}" = "0" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + # - zaas shared lib + result=$(process_component_zaas_shared_libs "${component_dir}" 2>&1) + retval=$? + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi fi - fi - # - discovery shared lib - result=$(process_component_discovery_shared_libs "${component_dir}" 2>&1) - retval=$? - if [ -n "${result}" ]; then - if [ "${retval}" = "0" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + # - gateway shared lib + result=$(process_component_gateway_shared_libs "${component_dir}" 2>&1) + retval=$? + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi fi - fi - # check configure script - configure_script=$(read_component_manifest "${component_dir}" ".commands.configure" 2>/dev/null) - print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- commands.configure is ${configure_script:-}" - if [ -n "${configure_script}" ]; then - if [ -f "${configure_script}" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "* process ${component_id} configure command ..." - # execute configure step and generate environment snapshot - result=$(load_environment_variables "${component_id}" && . ${configure_script} ; rc=$? ; get_environment_exports > "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/.${ZWE_CLI_PARAMETER_HA_INSTANCE}.env" ; return $rc) - retval=$? - # set permission for the component environment snapshot - if [ -f "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/.${ZWE_CLI_PARAMETER_HA_INSTANCE}.env" ]; then - chmod 700 "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/.${ZWE_CLI_PARAMETER_HA_INSTANCE}.env" + # - discovery shared lib + result=$(process_component_discovery_shared_libs "${component_dir}" 2>&1) + retval=$? + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" fi - if [ -n "${result}" ]; then - if [ "${retval}" = "0" ]; then - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi + + # check configure script + configure_script=$(read_component_manifest "${component_dir}" ".commands.configure" 2>/dev/null) + print_formatted_trace "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "- commands.configure is ${configure_script:-}" + if [ -n "${configure_script}" ]; then + if [ -f "${configure_script}" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "* process ${component_id} configure command ..." + # execute configure step and generate environment snapshot + result=$( + load_environment_variables "${component_id}" && . ${configure_script} + rc=$? + get_environment_exports >"${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/.${ZWE_CLI_PARAMETER_HA_INSTANCE}.env" + return $rc + ) + retval=$? + # set permission for the component environment snapshot + if [ -f "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/.${ZWE_CLI_PARAMETER_HA_INSTANCE}.env" ]; then + chmod 700 "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/${component_name}/.${ZWE_CLI_PARAMETER_HA_INSTANCE}.env" + fi + if [ -n "${result}" ]; then + if [ "${retval}" = "0" ]; then + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "${result}" + fi fi + else + print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "Error ZWEL0172E: Component ${component_id} has commands.configure defined but the file is missing." fi - else - print_formatted_error "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "Error ZWEL0172E: Component ${component_id} has commands.configure defined but the file is missing." fi fi - fi - done + done - print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "component configurations are successful" -} + print_formatted_debug "ZWELS" "zwe-internal-start-prepare,configure_components:${LINENO}" "component configurations are successful" + } -############################### -# Few early steps even before initialization + ############################### + # Few early steps even before initialization -# init ZWE_RUN_IN_CONTAINER variable -ZWE_zowe_workspaceDirectory=$(shell_read_yaml_config "${ZWE_CLI_PARAMETER_CONFIG}" 'zowe' 'workspaceDirectory') -if [ -z "${ZWE_zowe_workspaceDirectory}" ]; then - print_error_and_exit "Error ZWEL0157E: Zowe workspace directory (zowe.workspaceDirectory) is not defined in Zowe YAML configuration file." "" 157 -fi -if [ -f "${ZWE_zowe_workspaceDirectory}/.init-for-container" ]; then - export ZWE_RUN_IN_CONTAINER=true -fi + # init ZWE_RUN_IN_CONTAINER variable + ZWE_zowe_workspaceDirectory=$(shell_read_yaml_config "${ZWE_CLI_PARAMETER_CONFIG}" 'zowe' 'workspaceDirectory') + if [ -z "${ZWE_zowe_workspaceDirectory}" ]; then + print_error_and_exit "Error ZWEL0157E: Zowe workspace directory (zowe.workspaceDirectory) is not defined in Zowe YAML configuration file." "" 157 + fi + if [ -f "${ZWE_zowe_workspaceDirectory}/.init-for-container" ]; then + export ZWE_RUN_IN_CONTAINER=true + fi -# Fix node.js piles up in IPC message queue -# run this before any node command we start -if [ "${ZWE_RUN_ON_ZOS}" = "true" -a "${ZWE_PRIVATE_CLEANUP_IPC_MQ}" = "true" ]; then - print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" "Clean up IPC message queue before using node.js." - ${ZWE_zowe_runtimeDirectory}/bin/utils/cleanup-ipc-mq.sh -fi + # Fix node.js piles up in IPC message queue + # run this before any node command we start + if [ "${ZWE_RUN_ON_ZOS}" = "true" -a "${ZWE_PRIVATE_CLEANUP_IPC_MQ}" = "true" ]; then + print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" "Clean up IPC message queue before using node.js." + ${ZWE_zowe_runtimeDirectory}/bin/utils/cleanup-ipc-mq.sh + fi -############################### -# display starting information -export ZWE_VERSION=$(shell_read_json_config "${ZWE_zowe_runtimeDirectory}/manifest.json" 'version' 'version') -print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "Zowe version: v${ZWE_VERSION}" -print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "build and hash: $(shell_read_json_config ${ZWE_zowe_runtimeDirectory}/manifest.json 'build' 'branch')#$(shell_read_json_config ${ZWE_zowe_runtimeDirectory}/manifest.json 'build' 'number') ($(shell_read_json_config ${ZWE_zowe_runtimeDirectory}/manifest.json 'build' 'commitHash'))" - -############################### -# validation -if [ "$(item_in_list "${ZWE_PRIVATE_CORE_COMPONENTS_REQUIRE_JAVA}" "${ZWE_CLI_PARAMETER_COMPONENT}")" = "true" ]; then - # other extensions need to specify `require_java` in their validate.sh - require_java -fi -require_node -require_zowe_yaml + ############################### + # display starting information + export ZWE_VERSION=$(shell_read_json_config "${ZWE_zowe_runtimeDirectory}/manifest.json" 'version' 'version') + print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "Zowe version: v${ZWE_VERSION}" + print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "build and hash: $(shell_read_json_config ${ZWE_zowe_runtimeDirectory}/manifest.json 'build' 'branch')#$(shell_read_json_config ${ZWE_zowe_runtimeDirectory}/manifest.json 'build' 'number') ($(shell_read_json_config ${ZWE_zowe_runtimeDirectory}/manifest.json 'build' 'commitHash'))" + + ############################### + # validation + if [ "$(item_in_list "${ZWE_PRIVATE_CORE_COMPONENTS_REQUIRE_JAVA}" "${ZWE_CLI_PARAMETER_COMPONENT}")" = "true" ]; then + # other extensions need to specify `require_java` in their validate.sh + require_java + fi + require_node + require_zowe_yaml -# overwrite ZWE_PRIVATE_LOG_LEVEL_ZWELS with zowe.launchScript.logLevel config in YAML -ZWE_PRIVATE_LOG_LEVEL_ZWELS="$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.launchScript.logLevel" | upper_case)" + # overwrite ZWE_PRIVATE_LOG_LEVEL_ZWELS with zowe.launchScript.logLevel config in YAML + ZWE_PRIVATE_LOG_LEVEL_ZWELS="$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.launchScript.logLevel" | upper_case)" -# check and sanitize ZWE_CLI_PARAMETER_HA_INSTANCE -sanitize_ha_instance_id -print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "starting Zowe instance ${ZWE_CLI_PARAMETER_HA_INSTANCE} with ${ZWE_CLI_PARAMETER_CONFIG} ..." + # check and sanitize ZWE_CLI_PARAMETER_HA_INSTANCE + sanitize_ha_instance_id + print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "starting Zowe instance ${ZWE_CLI_PARAMETER_HA_INSTANCE} with ${ZWE_CLI_PARAMETER_CONFIG} ..." -# extra preparations for running in container -# this is running in containers -if [ "${ZWE_RUN_IN_CONTAINER}" = "true" ]; then - prepare_running_in_container -fi + # extra preparations for running in container + # this is running in containers + if [ "${ZWE_RUN_IN_CONTAINER}" = "true" ]; then + prepare_running_in_container + fi -# init log directory -prepare_log_directory - -# init workspace directory and generate environment variables from YAML -prepare_workspace_directory - -# now we can load all variables -load_environment_variables -print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" ">>> all environment variables" -print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" "$(env)" -print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" "<<<" - -############################### -# main lifecycle -# global validations -# no validation for running in container -global_validate -# no validation for running in container -if [ "${ZWE_RUN_IN_CONTAINER}" != "true" ]; then - validate_components -fi -configure_components + # init log directory + prepare_log_directory + + # init workspace directory and generate environment variables from YAML + prepare_workspace_directory + + # now we can load all variables + load_environment_variables + print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" ">>> all environment variables" + print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" "$(env)" + print_formatted_trace "ZWELS" "zwe-internal-start-prepare:${LINENO}" "<<<" + + ############################### + # main lifecycle + # global validations + # no validation for running in container + global_validate + # no validation for running in container + if [ "${ZWE_RUN_IN_CONTAINER}" != "true" ]; then + validate_components + fi + configure_components -############################### -# display instance prepared info -print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "Zowe runtime environment prepared" + ############################### + # display instance prepared info + print_formatted_info "ZWELS" "zwe-internal-start-prepare:${LINENO}" "Zowe runtime environment prepared" fi diff --git a/bin/commands/internal/start/prepare/index.ts b/bin/commands/internal/start/prepare/index.ts index cf9463fbdc..08feceb953 100644 --- a/bin/commands/internal/start/prepare/index.ts +++ b/bin/commands/internal/start/prepare/index.ts @@ -3,9 +3,9 @@ under the terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html - + SPDX-License-Identifier: EPL-2.0 - + Copyright Contributors to the Zowe Project. */ @@ -75,7 +75,7 @@ function prepareLogDirectory() { if (logDir) { os.mkdir(logDir, 0o750); if (!fs.isDirectoryWritable(logDir)) { - common.printFormattedError("ZWELS", "zwe-internal-start-prepare,prepare_log_directory", `ZWEL0141E: User $(get_user_id) does not have write permission on ${logDir}.`); + common.printFormattedError("ZWELS", "zwe-internal-start-prepare,prepare_log_directory", `ZWEL0141E: User ${user} does not have write permission on ${logDir}.`); std.exit(141); } } @@ -147,7 +147,7 @@ function globalValidate(enabledComponents:string[]): void { // validate java for some core components //TODO this should be a manifest parameter that you require java, not a hardcoded list. What if extensions require it? - if (enabledComponents.includes('gateway') || enabledComponents.includes('cloud-gateway') || enabledComponents.includes('discovery') || enabledComponents.includes('api-catalog') || enabledComponents.includes('caching-service') || enabledComponents.includes('metrics-service') || enabledComponents.includes('files-api') || enabledComponents.includes('jobs-api')) { + if (enabledComponents.includes('gateway') || enabledComponents.includes('zaas') || enabledComponents.includes('discovery') || enabledComponents.includes('api-catalog') || enabledComponents.includes('caching-service')) { let javaOk = java.validateJavaHome(); if (!javaOk) { privateErrors++; @@ -166,18 +166,16 @@ function globalValidate(enabledComponents:string[]): void { // validate z/OSMF for some core components if (zosmfHost && zosmfPort) { - if (enabledComponents.includes('discovery') || enabledComponents.includes('files-api') || enabledComponents.includes('jobs-api')) { + if (enabledComponents.includes('discovery')) { let zosmfOk = zosmf.validateZosmfHostAndPort(zosmfHost, zosmfPort); if (!zosmfOk) { privateErrors++; common.printFormattedError('ZWELS', "zwe-internal-start-prepare,global_validate", "Zosmf validation failed"); } } else if (std.getenv('ZWE_components_gateway_apiml_security_auth_provider') == "zosmf") { - let zosmfOk = zosmf.validateZosmfAsAuthProvider(zosmfHost, zosmfPort, 'zosmf'); - if (!zosmfOk) { privateErrors++; + common.printError("Using z/OSMF as 'components.gateway.apiml.security.auth.provider' is not possible: discovery is disabled."); common.printFormattedError('ZWELS', "zwe-internal-start-prepare,global_validate", "Zosmf validation failed"); - } } } @@ -195,7 +193,7 @@ function validateComponents(enabledComponents:string[]): any { common.printFormattedInfo("ZWELS", "zwe-internal-start-prepare,validate_components", "process component validations ..."); const componentEnvironments = {}; - + // reset error counter let privateErrors = 0; std.setenv('ZWE_PRIVATE_ERRORS_FOUND','0'); @@ -244,7 +242,7 @@ function validateComponents(enabledComponents:string[]): any { } } }); - + std.setenv('ZWE_PRIVATE_ERRORS_FOUND', ''+privateErrors); varlib.checkRuntimeValidationResult("zwe-internal-start-prepare,validate_components"); @@ -259,8 +257,8 @@ function configureComponents(componentEnvironments?: any, enabledComponents?:str const zwePrivateWorkspaceEnvDir = std.getenv('ZWE_PRIVATE_WORKSPACE_ENV_DIR'); const zweCliParameterHaInstance = std.getenv('ZWE_CLI_PARAMETER_HA_INSTANCE'); - - + + enabledComponents.forEach((componentId: string)=> { common.printFormattedTrace("ZWELS", "zwe-internal-start-prepare,configure_components", `- checking ${componentId}`); const componentDir = component.findComponentDirectory(componentId); @@ -312,13 +310,21 @@ function configureComponents(componentEnvironments?: any, enabledComponents?:str common.printFormattedError("ZWELS", "zwe-internal-start-prepare,configure_components", `${componentName} processComponentApimlStaticDefinitions failure`); } // - generic app framework plugin - success=component.processComponentAppfwPlugin(componentDir); + success=component.processComponentAppfwPlugin(componentDir); if (success) { common.printFormattedDebug("ZWELS", "zwe-internal-start-prepare,configure_components", `${componentName} processComponentAppfwPlugin success`); } else { common.printFormattedError("ZWELS", "zwe-internal-start-prepare,configure_components", `${componentName} processComponentAppfwPlugin failure`); } - + + // zaas shared lib + success=component.processComponentZaasSharedLibs(componentDir); + if (success) { + common.printFormattedDebug("ZWELS", "zwe-internal-start-prepare,configure_components", `${componentName} processComponentZaasSharedLibs success`); + } else { + common.printFormattedError("ZWELS", "zwe-internal-start-prepare,configure_components", `${componentName} processComponentZaasSharedLibs failure`); + } + // - gateway shared lib success=component.processComponentGatewaySharedLibs(componentDir); if (success) { @@ -354,13 +360,13 @@ function configureComponents(componentEnvironments?: any, enabledComponents?:str const result = shell.execOutSync('sh', '-c', `. ${runtimeDirectory}/bin/libs/configmgr-index.sh && cd ${componentDir} && . ${fullPath} ; export rc=$? ; export -p`); common.printFormattedDebug("ZWELS", "zwe-internal-start-prepare,configure_components", `${componentName} configure ended with rc=${result.rc}`); - + if (result.rc==0) { const exportContent = varlib.getEnvironmentExports(result.out); if (exportContent) { const rc = xplatform.storeFileUTF8(`${zwePrivateWorkspaceEnvDir}/${componentName}/.${zweCliParameterHaInstance}.env`, xplatform.AUTO_DETECT, exportContent); if (!rc) { - + } else { // set permission for the component environment snapshot shell.execSync('chmod', `700`, `"${zwePrivateWorkspaceEnvDir}/${componentName}/.${zweCliParameterHaInstance}.env"`); @@ -388,7 +394,7 @@ function configureComponents(componentEnvironments?: any, enabledComponents?:str } } }); - + common.printFormattedDebug("ZWELS", "zwe-internal-start-prepare,configure_components", "component configurations are successful"); } @@ -454,7 +460,7 @@ export function execute() { config.sanitizeHaInstanceId(); common.printFormattedInfo("ZWELS", "zwe-internal-start-prepare", `starting Zowe instance ${std.getenv('ZWE_CLI_PARAMETER_HA_INSTANCE')} with ${cliParameterConfig} ...`); - // extra preparations for running in container + // extra preparations for running in container // this is running in containers if (runInContainer == 'true') { prepareRunningInContainer(); diff --git a/bin/commands/migrate/for/kubernetes/index.sh b/bin/commands/migrate/for/kubernetes/index.sh index b957ea19db..c31bbbb04e 100644 --- a/bin/commands/migrate/for/kubernetes/index.sh +++ b/bin/commands/migrate/for/kubernetes/index.sh @@ -49,7 +49,7 @@ mkdir -p "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}" generate_instance_env_from_yaml_config convert-for-k8s source_env "${ZWE_PRIVATE_WORKSPACE_ENV_DIR}/.instance-convert-for-k8s.env" # prepare full SAN list for k8s -full_k8s_domain_list="${ZWE_CLI_PARAMETER_DOMAINS},localhost.localdomain,localhost,127.0.0.1,*.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.pod.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.discovery-service.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.gateway-service.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME}" +full_k8s_domain_list="${ZWE_CLI_PARAMETER_DOMAINS},localhost.localdomain,localhost,127.0.0.1,*.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.pod.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.discovery-service.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.gateway-service.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME},*.zaas-service.${ZWE_CLI_PARAMETER_K8S_NAMESPACE}.svc.${ZWE_CLI_PARAMETER_K8S_CLUSTER_NAME}" original_zss_host="${ZWE_zowe_externalDomains_0}" original_zss_port="${ZWE_components_zss_port}" @@ -77,9 +77,9 @@ if [[ "${ZWE_zowe_certificate_keystore_type}" == JCE*KS ]]; then ZWE_zowe_certificate_truststore_password="${ZWE_CLI_PARAMETER_PASSWORD}" keystore_content=$(pkeytool -list \ - -keystore "${ZWE_zowe_certificate_keystore_file}" \ - -storepass "${ZWE_zowe_certificate_keystore_password}" \ - -storetype "${ZWE_zowe_certificate_keystore_type}") + -keystore "${ZWE_zowe_certificate_keystore_file}" \ + -storepass "${ZWE_zowe_certificate_keystore_password}" \ + -storetype "${ZWE_zowe_certificate_keystore_type}") ZWE_zowe_certificate_keystore_alias= aliases=$(echo "${keystore_content}" | grep -i keyentry | awk -F, '{print $1}') @@ -145,7 +145,7 @@ if [ "${ZWE_zowe_setup_certificate_type}" = "PKCS12" -a "${ZWE_zowe_verifyCertif print_error_and_exit "Error ZWEL0169E: Failed to create certificate \"${ZWE_zowe_setup_certificate_pkcs12_name}\"." "" 169 fi if [ ! -f "${temp_dir}/keystore/${ZWE_zowe_setup_certificate_pkcs12_name}/${ZWE_zowe_setup_certificate_pkcs12_name}.keystore.p12" ]; then - >&2 echo "Error: failed to generate keystore for Kubernetes" + echo >&2 "Error: failed to generate keystore for Kubernetes" exit 1 fi @@ -204,29 +204,27 @@ done update_zowe_yaml "${temp_dir}/zowe.yaml" "zowe.externalPort" "${ZWE_CLI_PARAMETER_EXTERNAL_PORT}" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.gateway.port" "7554" +update_zowe_yaml "${temp_dir}/zowe.yaml" "components.zaas.port" "7558" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.discovery.port" "7553" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.api-catalog.port" "7552" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.caching-service.port" "7555" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.app-server.port" "7556" -update_zowe_yaml "${temp_dir}/zowe.yaml" "components.jobs-api.port" "8545" -update_zowe_yaml "${temp_dir}/zowe.yaml" "components.files-api.port" "8547" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.gateway.enabled" "true" +update_zowe_yaml "${temp_dir}/zowe.yaml" "components.zaas.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.discovery.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.api-catalog.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.caching-service.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.app-server.enabled" "true" -update_zowe_yaml "${temp_dir}/zowe.yaml" "components.jobs-api.enabled" "true" -update_zowe_yaml "${temp_dir}/zowe.yaml" "components.files-api.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.explorer-jes.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.explorer-mvs.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.explorer-uss.enabled" "true" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.gateway.apiml.security.x509.externalMapperUrl" "" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.gateway.apiml.security.authorization.endpoint.url" "" -gateway_auth_provider=$(read_yaml "${temp_dir}/zowe.yaml" ".components.gateway.apiml.security.authorization.endpoint.provider") -if [ "${gateway_auth_provider}" != "" ]; then - print_message "Zowe APIML Gateway authorization provider is suggested to be empty when running in Kubernetes. 'native' is not supported off Z platform." +zaas_auth_provider=$(read_yaml "${temp_dir}/zowe.yaml" ".components.gateway.apiml.security.authorization.endpoint.provider") +if [ "${zaas_auth_provider}" != "" ]; then + print_message "Zowe APIML ZAAS authorization provider is suggested to be empty when running in Kubernetes. 'native' is not supported off Z platform." fi update_zowe_yaml "${temp_dir}/zowe.yaml" "components.gateway.apiml.security.authorization.endpoint.provider" "" update_zowe_yaml "${temp_dir}/zowe.yaml" "components.discovery.replicas" "1" diff --git a/bin/commands/support/verify-fingerprints/index.sh b/bin/commands/support/verify-fingerprints/index.sh index 0044c5e48a..3a67cc129b 100644 --- a/bin/commands/support/verify-fingerprints/index.sh +++ b/bin/commands/support/verify-fingerprints/index.sh @@ -63,7 +63,10 @@ print_message "- Calculate hashes of Zowe files" cust_hashes=$(create_tmp_file "${tmp_file_prefix}") result=$(java -cp "${ZWE_zowe_runtimeDirectory}/bin/utils/" HashFiles "${all_files}" | sort > "${cust_hashes}") code=$? -if [ ${code} -eq 1 -o ! -f "${cust_hashes}" ]; then +if [ -f "${cust_hashes}" ]; then + file_size_check=$(wc -l "${cust_hashes}" | awk '{print $1}') +fi +if [ "${code}" -eq 1 -o ! -f "${cust_hashes}" -o "${file_size_check}" -eq 0 ]; then print_error " * Error ZWEL0151E: Failed to create temporary file ${cust_hashes}. Please check permission or volume free space." print_error " * Exit code: ${code}" print_error " * Output:" diff --git a/bin/libs/certificate.sh b/bin/libs/certificate.sh index 37dfa1a33d..05139300c1 100644 --- a/bin/libs/certificate.sh +++ b/bin/libs/certificate.sh @@ -28,6 +28,8 @@ ZWE_PRIVATE_DEFAULT_CERTIFICATE_VALIDITY="3650" ZWE_PRIVATE_DEFAULT_CERTIFICATE_KEY_USAGE="keyEncipherment,digitalSignature,nonRepudiation,dataEncipherment" ZWE_PRIVATE_DEFAULT_CERTIFICATE_EXTENDED_KEY_USAGE="clientAuth,serverAuth" +JAVA_KEYTOOL_FLAG=" -J-Dkeystore.pkcs12.legacy " + ####################################################################### # Notes: some keyring related functions, like ncert, are using R_datalib behind the scene. It requires proper # permission setup on the server. @@ -199,8 +201,6 @@ pkcs12_create_certificate_authority() { password="${3}" common_name=${4:-${ZWE_PRIVATE_DEFAULT_CERTIFICATE_CA_COMMON_NAME}} - flags=$(get_java_pkcs12_keystore_flag) - print_message ">>>> Generate PKCS12 format local CA with alias ${alias}:" mkdir -p "${keystore_dir}/${alias}" result=$(pkeytool -genkeypair -v \ @@ -212,7 +212,7 @@ pkcs12_create_certificate_authority() { -storepass "${password}" \ -storetype "PKCS12" \ -validity "${ZWE_PRIVATE_CERTIFICATE_CA_VALIDITY:-${ZWE_PRIVATE_DEFAULT_CERTIFICATE_CA_VALIDITY}}" \ - ${flags} \ + ${JAVA_KEYTOOL_FLAG} \ -ext KeyUsage="keyCertSign" \ -ext BasicConstraints:"critical=ca:true") if [ $? -ne 0 ]; then @@ -237,11 +237,9 @@ pkcs12_create_certificate_and_sign() { print_message ">>>> Generate certificate \"${alias}\" in the keystore ${keystore_name}:" - flags=$(get_java_pkcs12_keystore_flag) - mkdir -p "${keystore_dir}/${keystore_name}" result=$(pkeytool -genkeypair -v \ - ${flags} \ + ${JAVA_KEYTOOL_FLAG} \ -alias "${alias}" \ -keyalg RSA -keysize 2048 \ -keystore "${keystore_dir}/${keystore_name}/${keystore_name}.keystore.p12" \ @@ -259,7 +257,7 @@ pkcs12_create_certificate_and_sign() { fi print_message ">>>> Generate CSR for the certificate \"${alias}\" in the keystore \"${keystore_name}\":" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -certreq -v \ -alias "${alias}" \ -keystore "${keystore_dir}/${keystore_name}/${keystore_name}.keystore.p12" \ @@ -288,7 +286,7 @@ pkcs12_create_certificate_and_sign() { san="${san}dns:localhost.localdomain,dns:localhost,ip:127.0.0.1" print_message ">>>> Sign the CSR using the Certificate Authority \"${ca_alias}\":" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -gencert -v \ -infile "${keystore_dir}/${keystore_name}/${alias}.csr" \ -outfile "${keystore_dir}/${keystore_name}/${alias}.signed.cer" \ @@ -325,7 +323,7 @@ pkcs12_create_certificate_and_sign() { >/dev/null 2>/dev/null if [ "$?" != "0" ]; then print_message ">>>> Import the Certificate Authority \"${ca_alias}\" to the keystore \"${keystore_name}\":" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -importcert -v \ -trustcacerts -noprompt \ -file "${ca_cert_file}" \ @@ -344,7 +342,7 @@ pkcs12_create_certificate_and_sign() { >/dev/null 2>/dev/null if [ "$?" != "0" ]; then print_message ">>>> Import the Certificate Authority \"${ca_alias}\" to the truststore \"${keystore_name}\":" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -importcert -v \ -trustcacerts -noprompt \ -file "${ca_cert_file}" \ @@ -360,7 +358,7 @@ pkcs12_create_certificate_and_sign() { fi print_message ">>>> Import the signed CSR to the keystore \"${keystore_name}\":" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -importcert -v \ -trustcacerts -noprompt \ -file "${keystore_dir}/${keystore_name}/${alias}.signed.cer" \ @@ -477,9 +475,7 @@ pkcs12_import_pkcs12_keystore() { return 1 fi - flags=$(get_java_pkcs12_keystore_flag) - - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -importkeystore -v \ -noprompt \ -deststoretype "PKCS12" \ @@ -508,14 +504,12 @@ pkcs12_import_certificates() { ca_files="${3}" alias="${4:-extca}" - flags=$(get_java_pkcs12_keystore_flag) - ca_index=1 while read -r ca_file; do ca_file=$(echo "${ca_file}" | trim) if [ -n "${ca_file}" ]; then print_message ">>>> Import \"${ca_file}\" to the keystore \"${dest_keystore}\":" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -importcert -v \ -trustcacerts -noprompt \ -file "${ca_file}" \ @@ -568,8 +562,6 @@ pkcs12_trust_service() { return 1 fi - flags=$(get_java_pkcs12_keystore_flag) - # parse keytool output into separate files csplit -s -k -f "${keystore_dir}/${keystore_name}/${service_alias}" "${tmp_file}" /-----END\ CERTIFICATE-----/1 \ {$(expr `grep -c -e '-----END CERTIFICATE-----' "${tmp_file}"` - 1)} @@ -578,7 +570,7 @@ pkcs12_trust_service() { cert_file=$(basename "${cert}") cert_alias=${cert_file%.cer} echo ">>>> Import a certificate \"${cert_alias}\" to the truststore:" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -importcert -v \ -trustcacerts \ -noprompt \ @@ -633,11 +625,6 @@ pkcs12_export_pem() { if [ $? -ne 0 ]; then return 1 fi - if [ `uname` = "OS/390" ]; then - iconv -f ISO8859-1 -t IBM-1047 "${keystore_dir}/${alias_lc}.cer" > "${keystore_dir}/${alias_lc}.cer-ebcdic" - mv "${keystore_dir}/${alias_lc}.cer-ebcdic" "${keystore_dir}/${alias_lc}.cer" - ensure_file_encoding "${keystore_dir}/${alias_lc}.cer" "CERTIFICATE" - fi fi done <>>> Export certificate \"${label}\" from safkeyring:////${keyring_owner}/${keyring_name} to PKCS#12 keystore ${keystore_file}" - flags=$(get_java_pkcs12_keystore_flag) # create keystore if it doesn't exist if [ -f "${keystore_file}" ]; then print_debug "- Create keystore with dummy certificate ${dummy_cert}" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -genkeypair \ -alias "${dummy_cert}" \ -dname "CN=Zowe Dummy Cert, OU=ZWELS, O=Zowe, C=US" \ @@ -1150,7 +1136,7 @@ keyring_export_to_pkcs12() { if [ "${cert_only}" = "true" ]; then # use keytool to import certificate print_debug "- Import certificate into keystore as \"${label}\"" - result=$(pkeytool ${flags} \ + result=$(pkeytool ${JAVA_KEYTOOL_FLAG} \ -import -v \ -trustcacerts -noprompt \ -alias "${label}" \ diff --git a/bin/libs/common.sh b/bin/libs/common.sh index 404deb4857..035135dbf8 100644 --- a/bin/libs/common.sh +++ b/bin/libs/common.sh @@ -46,9 +46,9 @@ check_configmgr_enabled() { } require_zowe_yaml() { - # node is required to read yaml file - require_node - + if [ -z "${1}" ]; then + require_node + fi if [ -z "${ZWE_CLI_PARAMETER_CONFIG}" ]; then print_error_and_exit "Error ZWEL0108E: Zowe YAML config file is required." "" 108 elif [ ! -f "${ZWE_CLI_PARAMETER_CONFIG}" ]; then @@ -123,7 +123,7 @@ print_error_and_exit() { exit_code=${3:-1} print_error "${message}" "${write_to}" - if [ -n "$ZWE_PRIVATE_TMP_MERGED_YAML_DIR" ]; then + if [ -f "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml" ]; then rm "${ZWE_PRIVATE_TMP_MERGED_YAML_DIR}/.zowe-merged.yaml" fi exit ${exit_code} diff --git a/bin/libs/common.ts b/bin/libs/common.ts index 6085bd3293..a9cf0fa802 100644 --- a/bin/libs/common.ts +++ b/bin/libs/common.ts @@ -130,7 +130,6 @@ export function date(...args: string[]): string|undefined { let logExists = false; let logFile:std.File|null = null; - export function finishLogFile() { if (logFile) { logFile.close(); @@ -140,32 +139,26 @@ export function finishLogFile() { function writeLog(message: string): boolean { const filename = std.getenv('ZWE_PRIVATE_LOG_FILE'); + if (!filename) { + return false; + } + logExists = fs.fileExists(filename); if (!logExists) { - if (filename) { + fs.createFile(filename, 0o640, message); logExists = fs.fileExists(filename); - if (!logExists) { - fs.createFile(filename, 0o640, message); - logExists = fs.fileExists(filename); - } - if (logExists) { - let errObj = {errno:undefined}; - logFile = std.open(filename, 'w', errObj); - if (errObj.errno) { - printError(`Error opening file ${filename}, errno=${errObj.errno}`); - logFile=null; - logExists=false; - return false; - } + let errObj = {errno:undefined}; + logFile = std.open(filename, 'w', errObj); + if (errObj.errno) { + printError(`Error opening file ${filename}, errno=${errObj.errno}`); + logFile=null; + logExists=false; + return false; } - } - } - if (logFile===undefined || logFile===null) { - return false; } else { - //TODO this does utf8. should we flip it to 1047 on zos? - logFile.puts(message+'\n'); - return true; + xplatform.appendFileUTF8(filename, xplatform.AUTO_DETECT, message); + return true; } + return logExists; } @@ -353,7 +346,7 @@ export function getZoweRuntimeManifest(): any|undefined { if (!runtimeManifest) { const manifestFileName = `${std.getenv('ZWE_zowe_runtimeDirectory')}/manifest.json`; const result = xplatform.loadFileUTF8(manifestFileName,xplatform.AUTO_DETECT); - if (result){ + if (!result) { printError('Could not read runtime manifest in '+manifestFileName); } else { runtimeManifest=JSON.parse(result); @@ -382,6 +375,6 @@ std.setenv('ZWE_PRIVATE_DEFAULT_ZIS_USER', 'ZWESIUSR'); std.setenv('ZWE_PRIVATE_DEFAULT_ZOWE_STC', 'ZWESLSTC'); std.setenv('ZWE_PRIVATE_DEFAULT_ZIS_STC', 'ZWESISTC'); std.setenv('ZWE_PRIVATE_DEFAULT_AUX_STC', 'ZWESASTC'); -std.setenv('ZWE_PRIVATE_CORE_COMPONENTS_REQUIRE_JAVA', 'gateway,cloud-gateway,discovery,api-catalog,caching-service,metrics-service,files-api,jobs-api'); +std.setenv('ZWE_PRIVATE_CORE_COMPONENTS_REQUIRE_JAVA', 'gateway,zaas,discovery,api-catalog,caching-service'); std.setenv('ZWE_PRIVATE_CLI_LIBRARY_LOADED', 'true'); diff --git a/bin/libs/component.sh b/bin/libs/component.sh index 7f405e972f..9a57d98d8c 100644 --- a/bin/libs/component.sh +++ b/bin/libs/component.sh @@ -680,6 +680,72 @@ process_component_appfw_plugin() { fi } +############################### +# Parse and process manifest Gateway Shared Libs (gatewaySharedLibs) definitions +# +# The supported manifest entry is ".gatewaySharedLibs". All shared libs +# defined will be passed to install-app.sh for proper installation. +# +# Note: this function requires node, which means NODE_HOME should have been defined, +# and ensure_node_is_on_path should have been executed. +# +# @param string component directory +process_component_zaas_shared_libs() { + component_dir="${1}" + + # make sure $ZWE_ZAAS_SHARED_LIBS exists + mkdir -p "${ZWE_ZAAS_SHARED_LIBS}" + + all_succeed=true + iterator_index=0 + plugin_name= + zaas_shared_libs_workspace_path= + zaas_shared_libs_path=$(read_component_manifest "${component_dir}" ".zaasSharedLibs[${iterator_index}]" 2>/dev/null) + while [ -n "${zaas_shared_libs_path}" ]; do + cd "${component_dir}" + + if [ -z "${plugin_name}" ]; then + # prepare plugin directory + plugin_name=$(read_component_manifest "${component_dir}" ".name" 2>/dev/null) + if [ -z "${plugin_name}" ]; then + print_error "Cannot read name from the plugin ${component_dir}" + all_succeed=false + break + fi + zaas_shared_libs_workspace_path="${ZWE_ZAAS_SHARED_LIBS}/${plugin_name}" + mkdir -p "${zaas_shared_libs_workspace_path}" + fi + + # copy manifest to workspace + component_manifest=$(get_component_manifest "${component_dir}") + if [ ! -z "${component_manifest}" -a -f "${component_manifest}" ]; then + cp "${component_manifest}" "${zaas_shared_libs_workspace_path}" + fi + + # copy libraries to workspace/zaas/sharedLibs/ + # Due to limitation of how Java loading shared libraries, all jars are copied to plugin root directly. + if [ -f "${zaas_shared_libs_path}" ]; then + cp "${zaas_shared_libs_path}" "${zaas_shared_libs_workspace_path}" + elif [ -d "${zaas_shared_libs_path}" ]; then + find "${zaas_shared_libs_path}" -type f | xargs -I{} cp {} "${zaas_shared_libs_workspace_path}" + else + print_error "Zaas shared libs directory ${zaas_shared_libs_path} is not accessible" + all_succeed=false + break + fi + + iterator_index=`expr $iterator_index + 1` + zaas_shared_libs_path=$(read_component_manifest "${component_dir}" ".zaasSharedLibs[${iterator_index}]" 2>/dev/null) + done + + if [ "${all_succeed}" = "true" ]; then + return 0 + else + # error message should have be echoed before this + return 1 + fi +} + ############################### # Parse and process manifest Gateway Shared Libs (gatewaySharedLibs) definitions # @@ -695,7 +761,6 @@ process_component_gateway_shared_libs() { # make sure $ZWE_GATEWAY_SHARED_LIBS exists mkdir -p "${ZWE_GATEWAY_SHARED_LIBS}" - all_succeed=true iterator_index=0 plugin_name= diff --git a/bin/libs/component.ts b/bin/libs/component.ts index 457a12364c..5f5bbe5160 100644 --- a/bin/libs/component.ts +++ b/bin/libs/component.ts @@ -809,8 +809,57 @@ export function processComponentAppfwPlugin(componentDir: string): boolean { } /* - Parse and process manifest Gateway Shared Libs (gatewaySharedLibs) definitions + Parse and process manifest Zaas Shared Libs (zaasSharedLibs) definitions + The supported manifest entry is ".zaasSharedLibs". All shared libs + defined will be passed to install-app.sh for proper installation. +*/ +export function processComponentZaasSharedLibs(componentDir: string): boolean { + const zaasSharedLibs = std.getenv('ZWE_ZAAS_SHARED_LIBS'); + fs.mkdirp(zaasSharedLibs, 0o770); + + const manifest = getManifest(componentDir); + let pluginName; + let zaasSharedLibsWorkspacePath:string|undefined; + + if (manifest && manifest.zaasSharedLibs) { + for (let i = 0; i < manifest.zaasSharedLibs.length; i++) { + const zaasSharedLibsDef = manifest.zaasSharedLibs[i]; + const fileOrDir=`${componentDir}/${zaasSharedLibsDef}`; + if (!pluginName) { + pluginName = manifest.name; + if (!pluginName) { + common.printError(`Cannot read name from the plugin ${componentDir}`); + return false; + } + zaasSharedLibsWorkspacePath = `${zaasSharedLibs}/${pluginName}`; + fs.mkdirp(zaasSharedLibsWorkspacePath, 0o770); + } + + if (!zaasSharedLibsWorkspacePath){ + common.printError("Unexpected error: did not find zaasSharedLibsWorkspacePath"); + return false; + } + const manifestPath = getManifestPath(componentDir); + if (manifestPath){ + fs.cp(manifestPath, zaasSharedLibsWorkspacePath); + } + + if (fs.fileExists(fileOrDir)) { + fs.cp(fileOrDir, zaasSharedLibsWorkspacePath); + } else if (fs.directoryExists(fileOrDir)) { + fs.cp(`${fileOrDir}/\*`, zaasSharedLibsWorkspacePath); + } else { + common.printError(`Zaas shared libs directory ${fileOrDir} is not accessible`); + return false; + } + } + } + return true; +} + +/* + Parse and process manifest Gateway Shared Libs (gatewaySharedLibs) definitions The supported manifest entry is ".gatewaySharedLibs". All shared libs defined will be passed to install-app.sh for proper installation. */ diff --git a/bin/libs/config.sh b/bin/libs/config.sh index 64d41ef80e..a78eea8cbc 100755 --- a/bin/libs/config.sh +++ b/bin/libs/config.sh @@ -124,6 +124,7 @@ load_environment_variables() { export ZWE_PRIVATE_WORKSPACE_ENV_DIR="${ZWE_zowe_workspaceDirectory}/.env" export ZWE_STATIC_DEFINITIONS_DIR="${ZWE_zowe_workspaceDirectory}/api-mediation/api-defs" export ZWE_GATEWAY_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/gateway/sharedLibs/" + export ZWE_ZAAS_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/zaas/sharedLibs/" export ZWE_DISCOVERY_SHARED_LIBS="${ZWE_zowe_workspaceDirectory}/discovery/sharedLibs/" # now we can load all variables diff --git a/bin/libs/config.ts b/bin/libs/config.ts index ce56e57607..71e3d67b18 100644 --- a/bin/libs/config.ts +++ b/bin/libs/config.ts @@ -275,6 +275,7 @@ export function loadEnvironmentVariables(componentId?: string) { std.setenv('ZWE_PRIVATE_WORKSPACE_ENV_DIR', zwePrivateWorkspaceEnvDir); std.setenv('ZWE_STATIC_DEFINITIONS_DIR', `${workspaceDirectory}/api-mediation/api-defs`); std.setenv('ZWE_GATEWAY_SHARED_LIBS', `${workspaceDirectory}/gateway/sharedLibs/`); + std.setenv('ZWE_ZAAS_SHARED_LIBS', `${workspaceDirectory}/zaas/sharedLibs/`); std.setenv('ZWE_DISCOVERY_SHARED_LIBS', `${workspaceDirectory}/discovery/sharedLibs/`); // now we can load all variables diff --git a/bin/libs/fs.ts b/bin/libs/fs.ts index 144fe461a0..632bb2cbd7 100644 --- a/bin/libs/fs.ts +++ b/bin/libs/fs.ts @@ -66,15 +66,17 @@ export function resolvePath(...parts:string[]): string { } export function mkdirp(path:string, mode?: number): number { + if (!path) { + return 1; + } let paths: string[] = []; let parts = path.split('/'); let currentPath = ''; parts.forEach((part:string)=> { - currentPath+='/'+part; - if (currentPath.startsWith('//')) { - currentPath = currentPath.substring(1); + if (part) { + currentPath += '/' + part; + paths.push(currentPath); } - paths.push(currentPath); }); let firstMissingDir: number; @@ -85,9 +87,9 @@ export function mkdirp(path:string, mode?: number): number { } } - common.printDebug('paths='+JSON.stringify(paths)); + common.printDebug('fs.mkdir paths='+JSON.stringify(paths)); if (firstMissingDir >= paths.length) { return 0; } - common.printDebug('firstMissingDir='+paths[firstMissingDir]); + common.printDebug('fs.mkdir firstMissingDir='+paths[firstMissingDir]); for (let i = firstMissingDir; i < paths.length; i++) { let rc = os.mkdir(paths[i], mode ? mode : 0o777); diff --git a/bin/libs/index.sh b/bin/libs/index.sh index cf291d5e19..4871a8fac3 100755 --- a/bin/libs/index.sh +++ b/bin/libs/index.sh @@ -27,7 +27,7 @@ export ZWE_PRIVATE_DEFAULT_ZIS_USER=ZWESIUSR export ZWE_PRIVATE_DEFAULT_ZOWE_STC=ZWESLSTC export ZWE_PRIVATE_DEFAULT_ZIS_STC=ZWESISTC export ZWE_PRIVATE_DEFAULT_AUX_STC=ZWESASTC -export ZWE_PRIVATE_CORE_COMPONENTS_REQUIRE_JAVA=gateway,cloud-gateway,discovery,api-catalog,caching-service,metrics-service,files-api,jobs-api +export ZWE_PRIVATE_CORE_COMPONENTS_REQUIRE_JAVA=zaas,gateway,discovery,api-catalog,caching-service . "${ZWE_zowe_runtimeDirectory}/bin/libs/certificate.sh" . "${ZWE_zowe_runtimeDirectory}/bin/libs/container.sh" diff --git a/bin/libs/java.sh b/bin/libs/java.sh index b610ebe58f..b13d74d060 100644 --- a/bin/libs/java.sh +++ b/bin/libs/java.sh @@ -57,12 +57,12 @@ detect_java_home() { break fi done - ) + ) fi # fall back to the most well-known java path - if [ -z "${java_home}" -a -f /usr/lpp/java/J8.0_64/bin/java ]; then - java_home=/usr/lpp/java/J8.0_64 + if [ -z "${java_home}" -a -f /usr/lpp/java/J17.0_64/bin/java ]; then + java_home=/usr/lpp/java/J17.0_64 fi if [ -n "${java_home}" ]; then @@ -83,7 +83,7 @@ require_java() { fi if [ -z "${JAVA_HOME}" ]; then - print_error_and_exit "Error ZWEL0122E: Cannot find java. Set the java.path value in the Zowe YAML, or include java in the PATH environment variable of any accounts that start or manage Zowe" "" 122 + print_error_and_exit "Error ZWEL0122E: Cannot find java. Set the java.home value in the Zowe YAML, or include java in the PATH environment variable of any accounts that start or manage Zowe" "" 122 fi ensure_java_is_on_path @@ -132,32 +132,3 @@ validate_java_home() { print_debug "Java check is successful." } - -get_java_pkcs12_keystore_flag() { - java_version=$("${JAVA_HOME}/bin/java" -version 2>&1) # Capture stderr to stdout, so we can print below if error - - - # As we know the java -version command works then strip out the line we need - java_version_short=$(echo "${java_version}" | grep ^"java version" | sed -e "s/java version //g"| sed -e "s/\"//g") - if [[ $java_version_short == "" ]]; then - java_version_short=$(echo "${java_version}" | grep ^"openjdk version" | sed -e "s/openjdk version //g"| sed -e "s/\"//g") - fi - java_major_version=$(echo "${java_version_short}" | cut -d '.' -f 1) - java_minor_version=$(echo "${java_version_short}" | cut -d '.' -f 2) - java_fix_version=$(echo "${java_version_short}" | cut -d '_' -f 2) - - if [ ${java_major_version} -eq 1 -a ${java_minor_version} -eq 8 ]; then - if [ ${java_fix_version} -lt 341 ]; then - printf " " - elif [ ${java_fix_version} -lt 361 ]; then - printf " -J-Dkeystore.pkcs12.certProtectionAlgorithm=PBEWithSHAAnd40BitRC2 -J-Dkeystore.pkcs12.certPbeIterationCount=50000 -J-Dkeystore.pkcs12.keyProtectionAlgorithm=PBEWithSHAAnd3KeyTripleDES -J-Dkeystore.pkcs12.keyPbeIterationCount=50000 " - else - printf " -J-Dkeystore.pkcs12.legacy " - fi - elif [ ${java_major_version} -eq 1 -a ${java_minor_version} -gt 8 ]; then - printf " -J-Dkeystore.pkcs12.legacy " - else - printf " " - fi -} - diff --git a/bin/libs/java.ts b/bin/libs/java.ts index abf4bd76f7..b0e2ed4a21 100644 --- a/bin/libs/java.ts +++ b/bin/libs/java.ts @@ -16,7 +16,7 @@ import * as common from './common'; import * as shell from './shell'; import * as config from './config'; -const JAVA_MIN_VERSION=8; +const JAVA_MIN_VERSION=17; export function ensureJavaIsOnPath(): void { let path=std.getenv('PATH') || '/bin:.:/usr/bin'; @@ -48,8 +48,8 @@ export function detectJavaHome(): string|undefined { } } - if (!javaBinHome && fs.fileExists('/usr/lpp/java/J8.0_64/bin/java')) { - return '/usr/lpp/java/J8.0_64'; + if (!javaBinHome && fs.fileExists('/usr/lpp/java/J17.0_64/bin/java')) { + return '/usr/lpp/java/J17.0_64'; } return undefined; } diff --git a/bin/libs/json.sh b/bin/libs/json.sh index 481f8e11af..c6b2e16458 100644 --- a/bin/libs/json.sh +++ b/bin/libs/json.sh @@ -175,6 +175,40 @@ read_yaml() { return ${code} } +read_yaml_configmgr() { + file="${1}" + key=$(echo "${2}" | tr '.' '/') + ignore_null="${3:-true}" + + print_trace "- read_yaml_configmgr process ${file} and extract '${2} -> ${key}'" + + configmgr="${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr" + schema="${ZWE_zowe_runtimeDirectory}/schemas/server-common.json:${ZWE_zowe_runtimeDirectory}/schemas/zowe-yaml-schema.json" + + result=$(_CEE_RUNOPTS="XPLINK(ON)" "${configmgr}" -s "$schema" -p "FILE(${file})" extract "${key}" 2>&1); + code=$? + + # When the item is not defined in config, configmgr returns + # code 0 and + # stdout = "error not found, reason=nnn" + if [[ "${result}" == "error not found, reason="* ]]; then + result="" + fi + + print_trace " * Exit code: ${code}" + print_trace " * Output:" + print_trace "$(padding_left "${result}" " ")" + + if [ ${code} -eq 0 ]; then + if [ "${ignore_null}" = "true" ]; then + if [ "${result}" = "null" -o "${result}" = "undefined" ]; then + result= + fi + fi + printf "${result}" + fi +} + read_json() { file="${1}" key="${2}" diff --git a/bin/libs/logging.sh b/bin/libs/logging.sh index 6e41778aca..787c4fe7a4 100755 --- a/bin/libs/logging.sh +++ b/bin/libs/logging.sh @@ -14,6 +14,9 @@ export ZWE_PRIVATE_LOG_FILE= prepare_log_file() { + if [ -f "${1}" ]; then + print_error_and_exit "Error ZWEL0102E: Invalid parameter --log-dir=${1} (not a directory)" "" 102 + fi # use absolute path to make sure we can always write to correct location even # if other scripts changed current working directory log_dir=$(convert_to_absolute_path "${1}" | remove_trailing_slash) diff --git a/bin/libs/node.sh b/bin/libs/node.sh index 4386be9005..4782864d7d 100644 --- a/bin/libs/node.sh +++ b/bin/libs/node.sh @@ -22,7 +22,7 @@ export NODE_STDIN_CCSID=1047 # Workaround Fix for node 8.16.1 that requires compatibility mode for untagged files export __UNTAGGED_READ_MODE=V6 -NODE_MIN=16 +NODE_MIN=18 ensure_node_is_on_path() { if [[ ":${PATH}:" != *":${NODE_HOME}/bin:"* ]]; then @@ -94,7 +94,7 @@ require_node() { fi if [ -z "${NODE_HOME}" ]; then - print_error_and_exit "Error ZWEL0121E: Cannot find node. Set the node.path value in the Zowe YAML, or include node in the PATH environment variable of any accounts that start or manage Zowe" "" 121 + print_error_and_exit "Error ZWEL0121E: Cannot find node. Set the node.home value in the Zowe YAML, or include node in the PATH environment variable of any accounts that start or manage Zowe" "" 121 fi ensure_node_is_on_path diff --git a/bin/libs/node.ts b/bin/libs/node.ts index 3b20ccfd76..40880f5665 100644 --- a/bin/libs/node.ts +++ b/bin/libs/node.ts @@ -18,7 +18,7 @@ import * as shell from './shell'; import * as config from './config'; import { PathAPI as pathoid } from './pathoid'; -const NODE_MIN_VERSION=16; +const NODE_MIN_VERSION=18; // enforce encoding of stdio/stdout/stderr // sometimes /dev/tty* ($SSH_TTY) are not configured properly, for example tagged as binary or wrong encoding diff --git a/bin/libs/zos-dataset.sh b/bin/libs/zos-dataset.sh index 16154681f5..539cd9db3d 100644 --- a/bin/libs/zos-dataset.sh +++ b/bin/libs/zos-dataset.sh @@ -105,7 +105,7 @@ data_set_copy_to_data_set() { allow_overwrite="${4}" if [ "${allow_overwrite}" != "true" ]; then - if [ "$(is_data_set_exists "//'${ds_to}'")" = "true" ]; then + if [ "$(is_data_set_exists '${ds_to}')" = "true" ]; then print_error_and_exit "Error ZWEL0133E: Data set ${ds_to} already exists" "" 133 fi fi diff --git a/bin/libs/zos-fs.ts b/bin/libs/zos-fs.ts index e0023a449f..9e6e9bf46f 100644 --- a/bin/libs/zos-fs.ts +++ b/bin/libs/zos-fs.ts @@ -116,3 +116,32 @@ export function ensureFileEncoding(file: string, expectedSample: string, expecte common.printTrace(`- Failed to detect encoding of ${file}.`); } } + +export type fileSystemFlagsReturn = { + rc: number, + exported?: boolean, + rdonly?: boolean, + nosuid?: boolean, + nosecurity?: boolean, +}; + +export function getFileSystemFlags(path: string): fileSystemFlagsReturn { + const ST_OEEXPORTED = 0x40000000 + const ST_RDONLY = 0x00000001 + const ST_NOSUID = 0x00000002 + const ST_NOSECURITY = 0x00000004 + let flags : fileSystemFlagsReturn = { rc: 1 }; + if (path) { + const result = zos.getStatvfs(path); + if (result[1] == 0) { + flags = { + rc: 0, + exported: !!(result[0].flag & ST_OEEXPORTED), + rdonly: !!(result[0].flag & ST_RDONLY), + nosuid: !!(result[0].flag & ST_NOSUID), + nosecurity: !!(result[0].flag & ST_NOSECURITY) + } + } + } + return flags; +} diff --git a/bin/libs/zos.sh b/bin/libs/zos.sh index 8e3eb5ebc3..87d9d283f7 100644 --- a/bin/libs/zos.sh +++ b/bin/libs/zos.sh @@ -68,7 +68,7 @@ operator_command() { } verify_generated_jcl() { - jcllib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib") + jcllib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib") # read JCL library and validate does_jcl_exist=$(is_data_set_exists "${jcllib}") if [ -z "${does_jcl_exist}" ]; then @@ -78,7 +78,7 @@ verify_generated_jcl() { # should be created, but may take time to discover. if [ -z "${does_jcl_exist}" ]; then does_jcl_exist= - for secs in 1 5 10 ; do + for secs in 1 5 10; do does_jcl_exist=$(is_data_set_exists "${jcllib}") if [ -z "${does_jcl_exist}" ]; then sleep ${secs} diff --git a/bin/libs/zosmf.sh b/bin/libs/zosmf.sh index 116f66c65e..84477c3699 100644 --- a/bin/libs/zosmf.sh +++ b/bin/libs/zosmf.sh @@ -49,16 +49,3 @@ validate_zosmf_host_and_port() { print_message "Successfully checked z/OS MF is available on 'https://${zosmf_host}:${zosmf_port}/zosmf/info'" fi } - -validate_zosmf_as_auth_provider() { - zosmf_host="${1}" - zosmf_port="${2}" - auth_provider="${3}" - - if [ -n "${zosmf_host}" -a -n "${zosmf_port}" ]; then - if [ "${auth_provider}" = "zosmf" ]; then - print_error "z/OSMF is not configured. Using z/OSMF as authentication provider is not supported." - return 1 - fi - fi -} diff --git a/bin/libs/zosmf.ts b/bin/libs/zosmf.ts index 89bddfa108..9e05a98be0 100644 --- a/bin/libs/zosmf.ts +++ b/bin/libs/zosmf.ts @@ -31,7 +31,7 @@ export function validateZosmfHostAndPort(zosmfHost: string, zosmfPort: number): common.printError(`Warning: Could not validate if z/OS MF is available on 'https://${zosmfHost}:${zosmfPort}/zosmf/info'. NODE_HOME is not defined.`); zosmfCheckPassed=false; } else { - let execReturn = shell.execOutSync(`${std.getenv('NODE_HOME')}/bin/node`, `${std.getenv('ZWE_zowe_runtimeDirectory')}/bin/utils/curl.js`, `"https://${zosmfHost}:${zosmfPort}/zosmf/info"`, `-k`, `-H`, `"X-CSRF-ZOSMF-HEADER: true"`, `--response-type`, `status`); + const execReturn = shell.execOutSync(`${std.getenv('NODE_HOME')}/bin/node`, `${std.getenv('ZWE_zowe_runtimeDirectory')}/bin/utils/curl.js`, `https://${zosmfHost}:${zosmfPort}/zosmf/info`, `-k`, `-H`, `X-CSRF-ZOSMF-HEADER: true`, `--response-type`, `status`); if (execReturn.rc || !execReturn.out) { common.printError(`Warning: Could not validate if z/OS MF is available on 'https://${zosmfHost}:${zosmfPort}/zosmf/info'. No response code from z/OSMF server.`); zosmfCheckPassed=false @@ -47,14 +47,3 @@ export function validateZosmfHostAndPort(zosmfHost: string, zosmfPort: number): } return zosmfCheckPassed; } - -//TODO isnt this completely backwards? -export function validateZosmfAsAuthProvider(zosmfHost: string, zosmfPort: number, authProvider: string): boolean { - if (zosmfHost && zosmfPort) { - if (authProvider == 'zosmf') { - common.printError("z/OSMF is not configured. Using z/OSMF as authentication provider is not supported."); - return true; - } - } - return false; -} diff --git a/bin/libs/zwecli.sh b/bin/libs/zwecli.sh index 0131c5ff5b..2571be2015 100755 --- a/bin/libs/zwecli.sh +++ b/bin/libs/zwecli.sh @@ -273,7 +273,7 @@ EOF if [ -f "${command_path}/.help" ]; then echo "------------------" echo "Description" - padding_left "$(cat "${command_path}/.help")" " " + padding_left "$(sed 's/^```yaml$/```/g' "${command_path}/.help")" " " echo fi @@ -309,7 +309,7 @@ EOF # find sub-commands command_path=$(zwecli_calculate_command_path) subdirs=$(find_sub_directories "${command_path}") - if [ -n "${subdirs}" ]; then + if [ -n "${subdirs}" ]; then echo "------------------" echo "Available sub-command(s)" while read -r line; do @@ -326,7 +326,7 @@ EOF echo "Example(s)" padding_left "$(cat "${command_path}/.examples")" " " echo - fi + fi exit 100 fi } diff --git a/bin/utils/ExportPrivateKeyZos.java b/bin/utils/ExportPrivateKeyZos.java index c14cf3bc3f..b2f625807a 100644 --- a/bin/utils/ExportPrivateKeyZos.java +++ b/bin/utils/ExportPrivateKeyZos.java @@ -14,7 +14,7 @@ import java.security.Key; import java.security.KeyStore; import java.util.Base64; -import com.ibm.crypto.provider.RACFInputStream; +import com.ibm.crypto.zsecurity.provider.RACFInputStream; public class ExportPrivateKeyZos { private String keystoreName; diff --git a/build/zwe/types/@qjstypes/xplatform.d.ts b/build/zwe/types/@qjstypes/xplatform.d.ts index f139e1ac00..6d4572936e 100644 --- a/build/zwe/types/@qjstypes/xplatform.d.ts +++ b/build/zwe/types/@qjstypes/xplatform.d.ts @@ -27,6 +27,7 @@ export function stringFromBytes(data:ArrayBuffer, offset:number, length:number, */ export function loadFileUTF8(path:string, sourceCCSID:number):string; export function storeFileUTF8(path:string, targetCCSID:number, content:string):number; +export function appendFileUTF8(path: string, targetCCSID:number, content:string):number; export var AUTO_DETECT:number; export var NO_CONVERT:number; diff --git a/build/zwe/types/@qjstypes/zos.d.ts b/build/zwe/types/@qjstypes/zos.d.ts index a1fb69517a..a47ec8e407 100644 --- a/build/zwe/types/@qjstypes/zos.d.ts +++ b/build/zwe/types/@qjstypes/zos.d.ts @@ -26,10 +26,29 @@ export type ZStat = { ccsid: number; }; +export type Statvfs = { + bsize: number; + blocks: number; + bavail: number; + fsid: number; + flag: number; + frsize: number; + bfree: number; + files: number; + ffree: number; + favail: number; + namemax: number; + OEmaxfilesizehw: number; + OEmaxfilesizelw: number; + OEusedspace: number; + OEinvarsec: number; +} + export function getEsm(): string; export function getZosVersion(): number; export function changeTag(path:string, ccsid:number):number; export function changeExtAttr(path: string, extattr:number, onOff:boolean):number; export function zstat(path:string):[ZStat, number]; +export function getStatvfs(path: string): [Statvfs, number]; export var EXTATTR_SHARELIB:number; export var EXTATTR_PROGCTL:number; diff --git a/containers/base-jdk/ubi/Dockerfile b/containers/base-jdk/ubi/Dockerfile index b87b254888..14a2d3f4de 100644 --- a/containers/base-jdk/ubi/Dockerfile +++ b/containers/base-jdk/ubi/Dockerfile @@ -9,23 +9,23 @@ # Copyright Contributors to the Zowe Project. ####################################################################### -FROM zowe-docker-release.jfrog.io/ompzowe/base:latest-ubi +FROM zowe-docker-release.jfrog.io/ompzowe/base:3-ubi ################################## # labels LABEL name="Zowe Base Image with JDK enabled" \ - maintainer="jack-tiefeng.jia@ibm.com" \ - vendor="Zowe" \ - version="2.0.2" \ - release="0" \ - summary="Base image for Zowe components with JDK enabled" \ - description="Base image for Zowe components with JDK enabled" + maintainer="mark.ackert@broadcom.com" \ + vendor="Zowe" \ + version="3.0.0" \ + release="0" \ + summary="Base image for Zowe components with JDK enabled" \ + description="Base image for Zowe components with JDK enabled" ################################## # Install JDK RUN microdnf install --nodocs \ - java-1.8.0-openjdk \ - && microdnf clean all --enablerepo='*' \ - # smoke tests - && java -version -ENV JAVA_HOME=/usr/lib/jvm/jre-1.8.0 + java-17-openjdk-headless \ + && microdnf clean all --enablerepo='*' \ + # smoke tests + && java -version +ENV JAVA_HOME=/usr/lib/jvm/jre-1.17.0 diff --git a/containers/base-jdk/ubuntu/Dockerfile b/containers/base-jdk/ubuntu/Dockerfile index 3ce76a688a..b5c3417d84 100644 --- a/containers/base-jdk/ubuntu/Dockerfile +++ b/containers/base-jdk/ubuntu/Dockerfile @@ -9,24 +9,25 @@ # Copyright Contributors to the Zowe Project. ####################################################################### -FROM zowe-docker-release.jfrog.io/ompzowe/base:latest-ubuntu +FROM zowe-docker-release.jfrog.io/ompzowe/base:3-ubuntu ################################## # labels LABEL name="Zowe Base Image with JDK enabled" \ - maintainer="jack-tiefeng.jia@ibm.com" \ - vendor="Zowe" \ - version="2.0.2" \ - release="0" \ - summary="Base image for Zowe components with JDK enabled" \ - description="Base image for Zowe components with JDK enabled" + maintainer="mark.ackert@broadcom.com" \ + vendor="Zowe" \ + version="3.0.0" \ + release="0" \ + summary="Base image for Zowe components with JDK enabled" \ + description="Base image for Zowe components with JDK enabled" ################################## -# Install JDK + +# Install JDK. RUN apt-get update \ - && apt-get install -y \ - openjdk-8-jre \ - && rm -rf /var/lib/apt/lists/* \ - # smoke tests - && java -version -ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre + && apt-get install -y \ + openjdk-17-jre \ + && rm -rf /var/lib/apt/lists/* \ + # smoke tests + && java -version +ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/jre diff --git a/containers/base-node/Dockerfile b/containers/base-node/Dockerfile index e3cd778ccd..089a4c7af0 100644 --- a/containers/base-node/Dockerfile +++ b/containers/base-node/Dockerfile @@ -10,19 +10,19 @@ ####################################################################### # base image tag -ARG ZOWE_BASE_IMAGE=latest-ubuntu +ARG ZOWE_BASE_IMAGE=3-ubuntu FROM zowe-docker-release.jfrog.io/ompzowe/base:${ZOWE_BASE_IMAGE} ################################## # labels LABEL name="Zowe Base Image with node.js enabled" \ - maintainer="jack-tiefeng.jia@ibm.com" \ - vendor="Zowe" \ - version="2.0.2" \ - release="0" \ - summary="Base image for Zowe components with node.js enabled" \ - description="Base image for Zowe components with node.js enabled" + maintainer="mark.ackert@broadcom.com" \ + vendor="Zowe" \ + version="3.0.0" \ + release="0" \ + summary="Base image for Zowe components with node.js enabled" \ + description="Base image for Zowe components with node.js enabled" ################################## # node.js is installed in base image, so no actions here diff --git a/containers/base/ubi/Dockerfile b/containers/base/ubi/Dockerfile index 1c7faf2def..51a4753b90 100644 --- a/containers/base/ubi/Dockerfile +++ b/containers/base/ubi/Dockerfile @@ -14,12 +14,12 @@ FROM registry.redhat.io/ubi8/ubi-minimal:latest ################################## # labels LABEL name="Zowe Base Image" \ - maintainer="jack-tiefeng.jia@ibm.com" \ - vendor="Zowe" \ - version="2.0.2" \ - release="0" \ - summary="Base image for Zowe components" \ - description="Base image for Zowe components" + maintainer="mark.ackert@broadcom.com" \ + vendor="Zowe" \ + version="3.0.0" \ + release="0" \ + summary="Base image for Zowe components" \ + description="Base image for Zowe components" ################################## # arguments @@ -32,59 +32,58 @@ ARG NODE_CPU_ARCH=x64 ################################## # environments -ENV NODE_VERSION=16.18.1 +ENV NODE_VERSION=18.20.4 ################################## # customize RUN set -ex \ - # shadow-utils is needed for having adduser groupadd commands - && microdnf install --nodocs shadow-utils \ - # define zowe user/group - && groupadd --gid ${GID} zowe \ - && useradd -r -m --no-log-init --uid ${UID} --gid ${GID} --home /home/zowe zowe \ - # create /licenses folder - && mkdir -p /licenses \ - && chown zowe.zowe /licenses \ - # create /component folder - && mkdir -p /component \ - && chown zowe.zowe /component \ - # install node.js which is mandatory for now - && microdnf install --nodocs \ - findutils \ - tar \ - xz \ - && ARCH=${NODE_CPU_ARCH} \ - # gpg keys listed at https://github.com/nodejs/node#release-keys - && for key in \ - 4ED778F539E3634C779C87C6D7062848A1AB005C \ - 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ - 74F12602B6F1C4E913FAA37AD3A89613643B6201 \ - 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ - 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ - C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ - C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \ - DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ - A48C2BEE680E841632CD4E44F07496B3EB3C1762 \ - 108F52B48DB57BB0CC439B2997B01419BD92F80A \ - B9E2F5981AA6E0CD28160D9FF13993A75599653C \ - ; do \ - gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ - gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \ - done \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ - && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ - # smoke tests - && node --version \ - && npm --version \ - # remove unused pacakges - && microdnf remove \ - findutils \ - tar \ - xz \ - # clean up - && microdnf clean all --enablerepo='*' + # shadow-utils is needed for having adduser groupadd commands + && microdnf install --nodocs shadow-utils \ + # define zowe user/group + && groupadd --gid ${GID} zowe \ + && useradd -r -m --no-log-init --uid ${UID} --gid ${GID} --home /home/zowe zowe \ + # create /licenses folder + && mkdir -p /licenses \ + && chown zowe.zowe /licenses \ + # create /component folder + && mkdir -p /component \ + && chown zowe.zowe /component \ + # install node.js which is mandatory for now + && microdnf install --nodocs \ + findutils \ + tar \ + xz \ + && ARCH=${NODE_CPU_ARCH} \ + # gpg keys listed at https://github.com/nodejs/node#release-keys + && for key in \ + 4ED778F539E3634C779C87C6D7062848A1AB005C \ + 141F07595B7B3FFE74309A937405533BE57C7D57 \ + 74F12602B6F1C4E913FAA37AD3A89613643B6201 \ + DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 \ + CC68F5A3106FF448322E48ED27F5E38D5B0A215F \ + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ + 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 \ + C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \ + 108F52B48DB57BB0CC439B2997B01419BD92F80A \ + A363A499291CBBC940DD62E41F10027AF002F8B0 \ + ; do \ + gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ + gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \ + done \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ + # smoke tests + && node --version \ + && npm --version \ + # remove unused pacakges + && microdnf remove \ + findutils \ + tar \ + xz \ + # clean up + && microdnf clean all --enablerepo='*' diff --git a/containers/base/ubuntu/Dockerfile b/containers/base/ubuntu/Dockerfile index 232f9b5824..a8b0c96819 100644 --- a/containers/base/ubuntu/Dockerfile +++ b/containers/base/ubuntu/Dockerfile @@ -14,12 +14,12 @@ FROM ubuntu:latest ################################## # labels LABEL name="Zowe Base Image" \ - maintainer="jack-tiefeng.jia@ibm.com" \ - vendor="Zowe" \ - version="2.0.2" \ - release="0" \ - summary="Base image for Zowe components" \ - description="Base image for Zowe components" + maintainer="mark.ackert@broadcom.com" \ + vendor="Zowe" \ + version="3.0.0" \ + release="0" \ + summary="Base image for Zowe components" \ + description="Base image for Zowe components" ################################## # arguments @@ -32,65 +32,64 @@ ARG NODE_CPU_ARCH=x64 ################################## # environments -ENV NODE_VERSION=16.18.1 +ENV NODE_VERSION=18.20.4 ################################## # customize RUN set -ex \ - # define zowe user/group - && groupadd -g $GID -r zowe \ - && useradd -r -m --no-log-init --uid ${UID} --gid ${GID} -d /home/zowe zowe \ - # use bash as default shell - && cd /bin \ - && ln -sfn bash sh \ - # create /licenses folder - && mkdir -p /licenses \ - && chown zowe.zowe /licenses \ - # create /component folder - && mkdir -p /component \ - && chown zowe.zowe /component \ - # install node.js which is mandatory for now - && apt-get update \ - && apt-get install -y \ - curl \ - gnupg \ - xz-utils \ - # upgrade - && apt-get upgrade -y \ - && ARCH=${NODE_CPU_ARCH} \ - # gpg keys listed at https://github.com/nodejs/node#release-keys - && for key in \ - 4ED778F539E3634C779C87C6D7062848A1AB005C \ - 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ - 74F12602B6F1C4E913FAA37AD3A89613643B6201 \ - 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ - 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ - C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ - C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \ - DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ - A48C2BEE680E841632CD4E44F07496B3EB3C1762 \ - 108F52B48DB57BB0CC439B2997B01419BD92F80A \ - B9E2F5981AA6E0CD28160D9FF13993A75599653C \ - ; do \ - gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ - gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \ - done \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ - && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ - && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ - # smoke tests - && node --version \ - && npm --version \ - # remove unused pacakges - && apt-get purge --auto-remove -y \ - bzip2 \ - curl \ - gnupg \ - tini \ - xz-utils \ - # clean up - && rm -rf /var/lib/apt/lists/* + # define zowe user/group + && groupadd -g $GID -r zowe \ + && useradd -r -m --no-log-init --uid ${UID} --gid ${GID} -d /home/zowe zowe \ + # use bash as default shell + && cd /bin \ + && ln -sfn bash sh \ + # create /licenses folder + && mkdir -p /licenses \ + && chown zowe.zowe /licenses \ + # create /component folder + && mkdir -p /component \ + && chown zowe.zowe /component \ + # install node.js which is mandatory for now + && apt-get update \ + && apt-get install -y \ + curl \ + gnupg \ + xz-utils \ + # upgrade + && apt-get upgrade -y \ + && ARCH=${NODE_CPU_ARCH} \ + # gpg keys listed at https://github.com/nodejs/node#release-keys + && for key in \ + 4ED778F539E3634C779C87C6D7062848A1AB005C \ + 141F07595B7B3FFE74309A937405533BE57C7D57 \ + 74F12602B6F1C4E913FAA37AD3A89613643B6201 \ + DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7 \ + CC68F5A3106FF448322E48ED27F5E38D5B0A215F \ + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ + 890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4 \ + C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C \ + 108F52B48DB57BB0CC439B2997B01419BD92F80A \ + A363A499291CBBC940DD62E41F10027AF002F8B0 \ + ; do \ + gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ + gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" ; \ + done \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ + # smoke tests + && node --version \ + && npm --version \ + # remove unused pacakges + && apt-get purge --auto-remove -y \ + bzip2 \ + curl \ + gnupg \ + tini \ + xz-utils \ + # clean up + && rm -rf /var/lib/apt/lists/* diff --git a/containers/kubernetes/samples/config-cm.yaml b/containers/kubernetes/samples/config-cm.yaml index 51f019ce13..d8fdbbee86 100644 --- a/containers/kubernetes/samples/config-cm.yaml +++ b/containers/kubernetes/samples/config-cm.yaml @@ -88,6 +88,11 @@ data: port: 7554 debug: false + zaas: + enabled: true + port: 7558 + debug: false + discovery: enabled: true port: 7553 @@ -122,14 +127,6 @@ data: tls: true crossMemoryServerName: ZWESIS_STD - jobs-api: - enabled: true - port: 8545 - - files-api: - enabled: true - port: 8547 - explorer-jes: enabled: true diff --git a/containers/kubernetes/samples/horizontal-pod-autoscaler/files-api-hpa.yaml b/containers/kubernetes/samples/horizontal-pod-autoscaler/files-api-hpa.yaml deleted file mode 100644 index 0843dc9a37..0000000000 --- a/containers/kubernetes/samples/horizontal-pod-autoscaler/files-api-hpa.yaml +++ /dev/null @@ -1,26 +0,0 @@ ---- -apiVersion: autoscaling/v2beta2 -kind: HorizontalPodAutoscaler -metadata: - name: files-api-hpa - namespace: zowe - labels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/version: "2.1.0" - app.kubernetes.io/component: hpa - app.kubernetes.io/managed-by: manual -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: files-api - minReplicas: 1 - maxReplicas: 3 - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 70 diff --git a/containers/kubernetes/samples/horizontal-pod-autoscaler/jobs-api-hpa.yaml b/containers/kubernetes/samples/horizontal-pod-autoscaler/jobs-api-hpa.yaml deleted file mode 100644 index 3ad0a8ae35..0000000000 --- a/containers/kubernetes/samples/horizontal-pod-autoscaler/jobs-api-hpa.yaml +++ /dev/null @@ -1,26 +0,0 @@ ---- -apiVersion: autoscaling/v2beta2 -kind: HorizontalPodAutoscaler -metadata: - name: jobs-api-hpa - namespace: zowe - labels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/version: "2.1.0" - app.kubernetes.io/component: hpa - app.kubernetes.io/managed-by: manual -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: jobs-api - minReplicas: 1 - maxReplicas: 3 - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: 70 diff --git a/containers/kubernetes/samples/pod-disruption-budget/files-api-pdb.yaml b/containers/kubernetes/samples/pod-disruption-budget/files-api-pdb.yaml deleted file mode 100644 index ba4e9ad5a4..0000000000 --- a/containers/kubernetes/samples/pod-disruption-budget/files-api-pdb.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -apiVersion: policy/v1beta1 -kind: PodDisruptionBudget -metadata: - name: files-api-pdb - namespace: zowe - labels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/version: "2.1.0" - app.kubernetes.io/component: pdb - app.kubernetes.io/managed-by: manual -spec: - minAvailable: 1 - selector: - matchLabels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/component: files-api diff --git a/containers/kubernetes/samples/pod-disruption-budget/jobs-api-pdb.yaml b/containers/kubernetes/samples/pod-disruption-budget/jobs-api-pdb.yaml deleted file mode 100644 index 5bc883a5a1..0000000000 --- a/containers/kubernetes/samples/pod-disruption-budget/jobs-api-pdb.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -apiVersion: policy/v1beta1 -kind: PodDisruptionBudget -metadata: - name: jobs-api-pdb - namespace: zowe - labels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/version: "2.1.0" - app.kubernetes.io/component: pdb - app.kubernetes.io/managed-by: manual -spec: - minAvailable: 1 - selector: - matchLabels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/component: jobs-api diff --git a/containers/kubernetes/samples/zaas-service.yaml b/containers/kubernetes/samples/zaas-service.yaml new file mode 100644 index 0000000000..5dafdb9a44 --- /dev/null +++ b/containers/kubernetes/samples/zaas-service.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: zaas-service + namespace: zowe + labels: + app.kubernetes.io/name: zowe + app.kubernetes.io/instance: zowe + app.kubernetes.io/version: "2.1.0" + app.kubernetes.io/component: zaas + app.kubernetes.io/part-of: apiml + app.kubernetes.io/managed-by: manual +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: zowe + app.kubernetes.io/instance: zowe + app.kubernetes.io/component: zaas + ports: + - name: zaas + protocol: TCP + port: 7558 + targetPort: zaas-port + appProtocol: https diff --git a/containers/kubernetes/workloads/jobs-api-deployment.yaml b/containers/kubernetes/workloads/jobs-api-deployment.yaml deleted file mode 100644 index e331293a33..0000000000 --- a/containers/kubernetes/workloads/jobs-api-deployment.yaml +++ /dev/null @@ -1,139 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: jobs-api - namespace: zowe - labels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/version: "2.1.0" - app.kubernetes.io/component: jobs-api - app.kubernetes.io/part-of: explorer-api - app.kubernetes.io/managed-by: manual -spec: - selector: - matchLabels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/component: jobs-api - template: - metadata: - labels: - app.kubernetes.io/name: zowe - app.kubernetes.io/instance: zowe - app.kubernetes.io/component: jobs-api - spec: - securityContext: - runAsUser: 20000 - runAsGroup: 20000 - fsGroup: 20000 - runAsNonRoot: true - serviceAccountName: zowe-sa - volumes: - - name: tmp - emptyDir: {} - - name: zowe-runtime - emptyDir: {} - - name: zowe-config - configMap: - name: zowe-config - - name: zowe-keystore - projected: - sources: - - secret: - name: zowe-certificates-secret - - name: zowe-logs - emptyDir: {} - - name: zowe-workspace - persistentVolumeClaim: - claimName: zowe-workspace-pvc - containers: - - name: jobs-api - image: zowe-docker-release.jfrog.io/ompzowe/jobs-api:2.0.10-ubuntu - imagePullPolicy: Always - resources: - requests: - memory: "256Mi" - cpu: "50m" - limits: - memory: "384Mi" - cpu: "300m" - ports: - - name: jobs-api-port - containerPort: 8545 - protocol: TCP - startupProbe: - tcpSocket: - port: 8545 - # this should give 60 * periodSeconds(default to 10) seconds about 10 minutes to confirm it's ready - periodSeconds: 10 - failureThreshold: 60 - livenessProbe: - tcpSocket: - port: 8545 - # this should give 3 * periodSeconds(default to 10) seconds about 30 seconds to confirm it's offline - periodSeconds: 10 - failureThreshold: 3 - command: ["/bin/bash", "-c"] - args: - - "/home/zowe/runtime/bin/zwe internal start -c /home/zowe/instance/zowe.yaml" - env: - - name: ZWE_POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - lifecycle: - preStop: - exec: - command: ["/bin/sh", "-c", "/home/zowe/runtime/bin/zwe internal container prestop -c /home/zowe/instance/zowe.yaml"] - securityContext: - readOnlyRootFilesystem: true - allowPrivilegeEscalation: false - privileged: false - runAsNonRoot: true - capabilities: - drop: - - all - volumeMounts: - - name: tmp - mountPath: /tmp - - name: zowe-runtime - mountPath: "/home/zowe/runtime" - - name: zowe-config - mountPath: "/home/zowe/instance/zowe.yaml" - subPath: zowe.yaml - readOnly: true - - name: zowe-keystore - mountPath: "/home/zowe/keystore" - readOnly: true - - name: zowe-logs - mountPath: "/home/zowe/instance/logs" - - name: zowe-workspace - mountPath: "/home/zowe/instance/workspace" - initContainers: - - name: init-zowe - image: zowe-docker-snapshot.jfrog.io/ompzowe/zowe-launch-scripts:2.5.0-ubuntu.v2-x-staging - imagePullPolicy: Always - resources: - requests: - memory: "64Mi" - cpu: "10m" - limits: - memory: "128Mi" - cpu: "100m" - securityContext: - readOnlyRootFilesystem: true - allowPrivilegeEscalation: false - privileged: false - runAsNonRoot: true - capabilities: - drop: - - all - volumeMounts: - - name: tmp - mountPath: /tmp - - name: zowe-runtime - mountPath: "/home/zowe/runtime" - - name: zowe-workspace - mountPath: "/home/zowe/instance/workspace" diff --git a/containers/kubernetes/workloads/files-api-deployment.yaml b/containers/kubernetes/workloads/zaas-deployment.yaml similarity index 83% rename from containers/kubernetes/workloads/files-api-deployment.yaml rename to containers/kubernetes/workloads/zaas-deployment.yaml index b365d0fcc7..f097d43d21 100644 --- a/containers/kubernetes/workloads/files-api-deployment.yaml +++ b/containers/kubernetes/workloads/zaas-deployment.yaml @@ -2,27 +2,27 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: files-api + name: zaas namespace: zowe labels: app.kubernetes.io/name: zowe app.kubernetes.io/instance: zowe app.kubernetes.io/version: "2.1.0" - app.kubernetes.io/component: files-api - app.kubernetes.io/part-of: explorer-api + app.kubernetes.io/component: zaas + app.kubernetes.io/part-of: apiml app.kubernetes.io/managed-by: manual spec: selector: matchLabels: app.kubernetes.io/name: zowe app.kubernetes.io/instance: zowe - app.kubernetes.io/component: files-api + app.kubernetes.io/component: zaas template: metadata: labels: app.kubernetes.io/name: zowe app.kubernetes.io/instance: zowe - app.kubernetes.io/component: files-api + app.kubernetes.io/component: zaas spec: securityContext: runAsUser: 20000 @@ -49,29 +49,29 @@ spec: persistentVolumeClaim: claimName: zowe-workspace-pvc containers: - - name: files-api - image: zowe-docker-release.jfrog.io/ompzowe/files-api:2.0.10-ubuntu + - name: zaas + image: zowe-docker-snapshot.jfrog.io/ompzowe/zaas-service:2.4.9-SNAPSHOT-ubuntu.v2-x-x imagePullPolicy: Always resources: requests: - memory: "256Mi" - cpu: "50m" - limits: memory: "384Mi" - cpu: "300m" + cpu: "150m" + limits: + memory: "512Mi" + cpu: "700m" ports: - - name: files-api-port - containerPort: 8547 + - name: zaas-port + containerPort: 7558 protocol: TCP startupProbe: tcpSocket: - port: 8547 - # this should give 60 * periodSeconds(default to 10) seconds about 10 minutes to confirm it's ready + port: 7558 + # this should give 90 * periodSeconds(default to 10) seconds about 15 minutes to confirm it's ready periodSeconds: 10 - failureThreshold: 60 + failureThreshold: 90 livenessProbe: tcpSocket: - port: 8547 + port: 7558 # this should give 3 * periodSeconds(default to 10) seconds about 30 seconds to confirm it's offline periodSeconds: 10 failureThreshold: 3 @@ -83,6 +83,8 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + - name: CMMN_LB + value: apiml-common-lib/bin/api-layer-lite-lib-all.jar lifecycle: preStop: exec: diff --git a/containers/server-bundle/ubuntu/README.md b/containers/server-bundle/ubuntu/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/containers/zowe-launch-scripts/Dockerfile b/containers/zowe-launch-scripts/Dockerfile index 4c969ce1d7..30d28465dc 100644 --- a/containers/zowe-launch-scripts/Dockerfile +++ b/containers/zowe-launch-scripts/Dockerfile @@ -10,19 +10,19 @@ ####################################################################### # base image tag -ARG ZOWE_BASE_IMAGE=latest-ubuntu +ARG ZOWE_BASE_IMAGE=3-ubuntu FROM zowe-docker-release.jfrog.io/ompzowe/base-node:${ZOWE_BASE_IMAGE} ################################## # labels LABEL name="Zowe Launch Script Image" \ - maintainer="jack-tiefeng.jia@ibm.com" \ - vendor="Zowe" \ - version="0.0.0" \ - release="0" \ - summary="Base Launch Script for Zowe components" \ - description="Base Launch Script for Zowe components" + maintainer="mark.ackert@broadcom.com" \ + vendor="Zowe" \ + version="0.0.0" \ + release="0" \ + summary="Base Launch Script for Zowe components" \ + description="Base Launch Script for Zowe components" ################################## # switch context diff --git a/example-zowe.yaml b/example-zowe.yaml index d8f31347a2..dc54feeeb0 100644 --- a/example-zowe.yaml +++ b/example-zowe.yaml @@ -39,29 +39,25 @@ zowe: # MVS data set related configurations dataset: # **COMMONLY_CUSTOMIZED** - # where Zowe MVS data sets will be installed - # This prefix is used for the Zowe runtime datasets - # Including: - # Auth Load Lib: SZWEAUTH - # Load Lib: SZWELOAD - prefix: IBMUSER.ZWEV2 + # where are existing Zowe SZWEEXEC Target libraries + prefix: IBMUSER.ZWEV3 # **COMMONLY_CUSTOMIZED** # PROCLIB where Zowe STCs will be copied over proclib: USER.PROCLIB # **COMMONLY_CUSTOMIZED** # Zowe PARMLIB - parmlib: IBMUSER.ZWEV2.CUST.PARMLIB + parmlib: IBMUSER.ZWEV3.CUST.PARMLIB # Holds Zowe PARMLIB members for plugins # **COMMONLY_CUSTOMIZED** # JCL library where Zowe will store temporary JCLs during initialization - jcllib: IBMUSER.ZWEV2.CUST.JCLLIB + jcllib: IBMUSER.ZWEV3.CUST.JCLLIB # Utilities for use by Zowe and extensions - loadlib: IBMUSER.ZWEV2.SZWELOAD + loadlib: IBMUSER.ZWEV3.SZWELOAD # APF authorized LOADLIB for Zowe - authLoadlib: IBMUSER.ZWEV2.SZWEAUTH + authLoadlib: IBMUSER.ZWEV3.SZWEAUTH # **COMMONLY_CUSTOMIZED** # APF authorized LOADLIB for Zowe ZIS Plugins - authPluginLib: IBMUSER.ZWEV2.CUST.ZWESAPL + authPluginLib: IBMUSER.ZWEV3.CUST.ZWESAPL # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # Security related configurations. This setup is optional. @@ -99,6 +95,7 @@ zowe: # >>>> Certificate setup scenario 1 # PKCS12 (keystore) with Zowe generate certificates. certificate: + # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS type: PKCS12 pkcs12: # **COMMONLY_CUSTOMIZED** @@ -143,6 +140,7 @@ zowe: # # >>>> Certificate setup scenario 2 # # PKCS12 (keystore) with importing certificate generated by other CA. # certificate: + # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS # type: PKCS12 # pkcs12: # # **COMMONLY_CUSTOMIZED** @@ -175,7 +173,7 @@ zowe: # # >>>> Certificate setup scenario 3 # # Zowe generated z/OS Keyring with Zowe generated certificates. # certificate: - # # Type of certificate storage. Valid values are: JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS + # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS # type: JCERACFKS # keyring: # # **COMMONLY_CUSTOMIZED** @@ -203,6 +201,7 @@ zowe: # country: "CZ" # # Validity days for Zowe generated certificates # validity: 3650 + # # **COMMONLY_CUSTOMIZED** # # Domain names and IPs should be added into certificate SAN # # If this field is not defined, `zwe init` command will use # # `zowe.externalDomains`. @@ -216,7 +215,7 @@ zowe: # # >>>> Certificate setup scenario 4 # # Zowe generated z/OS Keyring and connect to existing certificate # certificate: - # # Type of certificate storage. Valid values are: JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS + # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS # type: JCERACFKS # keyring: # # **COMMONLY_CUSTOMIZED** @@ -246,7 +245,7 @@ zowe: # # >>>> Certificate setup scenario 5 # # Zowe generated z/OS Keyring with importing certificate stored in data set # certificate: - # # Type of certificate storage. Valid values are: JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS + # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS # type: JCERACFKS # keyring: # # **COMMONLY_CUSTOMIZED** @@ -327,7 +326,7 @@ zowe: # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # This is an ID you use to separate multiple Zowe installs when determining # resource names used in RBAC authorization checks such as dataservices with RBAC - # expects this ID in SAF resources + # expects this ID in SAF resources rbacProfileIdentifier: "1" # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -343,7 +342,7 @@ zowe: externalDomains: # this should be the domain name to access Zowe APIML Gateway - sample-domain.com - + # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # This is the port you use to access Zowe Gateway from your web browser. # @@ -355,7 +354,7 @@ zowe: # # In this section, behavior such as which TLS levels, ciphers should be used, and if native TLS versus AT-TLS should be used. # See the schema for options. - # + # # This section applies to all components that support it. # So far: "zss" and "app-server" # @@ -385,8 +384,8 @@ zowe: # ZWED_TN3270_PORT: 23 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - # You can define any Zowe message portions to be checked for and the message added to the - # system log upon its logging, truncated to 126 characters. + # You can define any Zowe message portions to be checked for and the message added to the + # system log upon its logging, truncated to 126 characters (wildcards are not supported). sysMessages: # # Zowe starting - "ZWEL0021I" @@ -456,7 +455,7 @@ zowe: # This mode does not validate certificate Common Name and Subject # Alternative Name (SAN). # - DISABLED: disable certificate validation. This is NOT recommended for - # security. + # security. verifyCertificates: STRICT @@ -476,17 +475,17 @@ java: #------------------------------------------------------------------------------- -# node.js configuration +# Node.js configuration # -# Some Zowe components requires node.js. Define the path where you have your -# node.js is installed. +# Some Zowe components requires Node.js. Define the path where you have your +# Node.js is installed. # # **NOTE**: this field can be updated automatically if you pass `--update-config` # to `zwe init` command. #------------------------------------------------------------------------------- node: # **COMMONLY_CUSTOMIZED** - # Path to Node home directory. If node is at '/node/home/bin/node', than this would be '/node/home' + # Path to your Node.js home directory home: "" @@ -530,25 +529,14 @@ components: auth: provider: zosmf zosmf: - jwtAutoconfiguration: auto - serviceId: zosmf + jwtAutoconfiguration: jwt + serviceId: ibmzosmf authorization: endpoint: enabled: false - provider: "" + provider: "native" x509: enabled: false - server: - internal: - # gateway supports internal connector - enabled: false - port: 7550 - ssl: - enabled: false - # internal connector can use different certificate - # certificate: - # keystore: - # alias: "" # If we customize this to use different external certificate, than should also # define "server.internal.ssl.certificate" and enable "server.internal.ssl.enabled". @@ -557,17 +545,10 @@ components: # alias: "" # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - metrics-service: - enabled: false - port: 7551 - debug: false - - # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - cloud-gateway: - enabled: false - port: 7563 + zaas: + enabled: true + port: 7558 debug: false - # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> api-catalog: enabled: true @@ -590,17 +571,14 @@ components: storage: evictionStrategy: reject - # can be inMemory, VSAM, redis or infinispan - mode: VSAM - size: 10000 - vsam: - # your VSAM data set created by "zwe init vsam" command or ZWECSVSM JCL - # this is required if storage mode is VSAM - name: "" + # can be infinispan, inMemory, redis or VSAM(deprecated) + mode: infinispan infinispan: # this is required if storage mode is infinispan jgroups: port: 7600 + keyExchange: + port: 7601 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> app-server: @@ -624,18 +602,7 @@ components: agent: jwt: fallback: true - - # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - jobs-api: - enabled: false - debug: false - port: 7558 - - # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - files-api: - enabled: false - debug: false - port: 7559 + 64bit: true # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> explorer-jes: @@ -672,9 +639,9 @@ components: # # This sysname will be used to route your JES command to target system. # sysname: LPR1 # # for this HA instance, we did not customize "components", so it will use default value. - + # # HA instance ID, we will start 2 instances on LPAR2 -# # **NOTE**, we can only start one gateway in same LPAR. +# # **NOTE**, we can only start one Gateway in same LPAR. # lpar2a: # # hostname where this instance will be started # hostname: lpar2.my-company.com @@ -695,12 +662,6 @@ components: # zss: # # no app-server in this instance # enabled: false -# jobs-api: -# port: 18545 -# enabled: true -# files-api: -# port: 18547 -# enabled: true # caching-service: # port: 17555 # @@ -711,6 +672,8 @@ components: # # These configurations will overwrite highest level default "components" configuration # components: +# zaas: +# enabled: false # gateway: # enabled: false # discovery: @@ -722,9 +685,5 @@ components: # port: 28544 # zss: # port: 28542 -# jobs-api: -# enabled: true -# files-api: -# enabled: false # caching-service: # enabled: false diff --git a/files/SZWESAMP/ZWEINSTL b/files/SZWESAMP/ZWEINSTL index 9d9249c81a..93bdb684a7 100644 --- a/files/SZWESAMP/ZWEINSTL +++ b/files/SZWESAMP/ZWEINSTL @@ -11,7 +11,7 @@ //* //********************************************************************* //* -//MKPDSE EXEC PGM=IKJEFT01 +//MKPDSE EXEC PGM=IKJEFT01,DYNAMNBR=4 //SYSTSPRT DD SYSOUT=A //SYSTSIN DD * ALLOC NEW DA('{zowe.setup.dataset.prefix}.SZWESAMP') + @@ -36,20 +36,22 @@ blksize(32760) unit(sysallda) space(30,15) tracks //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * -SH cd {zowe.runtimeDirectory} && +SH cd '{zowe.runtimeDirectory}' && +ZWE_TMP_PREFIX='{zowe.setup.dataset.prefix}' && cd files/SZWESAMP && -cp * "//'{zowe.setup.dataset.prefix}.SZWESAMP'" && +cp * "//'$ZWE_TMP_PREFIX.SZWESAMP'" && cd ../SZWEEXEC && -cp * "//'{zowe.setup.dataset.prefix}.SZWEEXEC'" && +cp * "//'$ZWE_TMP_PREFIX.SZWEEXEC'" && cd ../SZWELOAD && -cp * "//'{zowe.setup.dataset.prefix}.SZWELOAD'" && -cd ../../components/launcher/bin -cp zowe_launcher "//'{zowe.setup.dataset.prefix}.SZWEAUTH'" && +cp * "//'$ZWE_TMP_PREFIX.SZWELOAD'" && +cd ../../components/launcher/bin && +cp zowe_launcher + "//'$ZWE_TMP_PREFIX.SZWEAUTH(ZWELNCH)'" && +cd ../samplib/ && +cp * "//'$ZWE_TMP_PREFIX.SZWESAMP'" && cd ../../zss/SAMPLIB && -cp ZWESASTC ZWESIP00 ZWESISTC ZWESISCH - "//'{zowe.setup.dataset.prefix}.SZWESAMP'" && +cp ZWESASTC ZWESIP00 ZWESISCH ZWESISTC + "//'$ZWE_TMP_PREFIX.SZWESAMP'" && cd ../LOADLIB && -cp ZWESIS01 ZWESAUX ZWESISDL - "//'{zowe.setup.dataset.prefix}.SZWEAUTH'" -/* - +cp * "//'$ZWE_TMP_PREFIX.SZWEAUTH'" +/* \ No newline at end of file diff --git a/files/SZWESAMP/ZWEITSS b/files/SZWESAMP/ZWEITSS index 03ed3c0804..512ef8c8f6 100644 --- a/files/SZWESAMP/ZWEITSS +++ b/files/SZWESAMP/ZWEITSS @@ -99,7 +99,7 @@ /* userid for ZOWE main server */ TSS LIST({zowe.setup.security.users.zowe}) SEGMENT(OMVS) - TSS CREATE({zowe.setup.security.users.zowe}) TYPE(USER) PASS(NOPW,0) + + TSS CREATE({zowe.setup.security.users.zowe}) TYPE(USER) PROTECTED + NAME('ZOWE MAIN SERVER') + DEPT(&STCUDEP.) TSS ADD({zowe.setup.security.users.zowe}) + @@ -109,7 +109,7 @@ /* userid for ZIS cross memory server */ TSS LIST({zowe.setup.security.users.zis}) SEGMENT(OMVS) - TSS CREATE({zowe.setup.security.users.zis}) TYPE(USER) PASS(NOPW,0) + + TSS CREATE({zowe.setup.security.users.zis}) TYPE(USER) PROTECTED + NAME('ZOWE ZIS CROSS MEMORY SERVER') + DEPT(&STCUDEP.) TSS ADD({zowe.setup.security.users.zis}) + diff --git a/files/defaults.yaml b/files/defaults.yaml index 8b32c91796..8e319ea090 100644 --- a/files/defaults.yaml +++ b/files/defaults.yaml @@ -70,15 +70,15 @@ zowe: # Distinguished name for Zowe generated certificates. dname: - caCommonName: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'Zowe Development Instances CA' : null }}" - commonName: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'Zowe Development Instances Certificate' : null }}" - orgUnit: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'API Mediation Layer' : null }}" - org: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'Zowe Sample' : null }}" - locality: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'Prague' : null }}" - state: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'Prague' : null }}" - country: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.label) ? 'CZ' : null }}" + caCommonName: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'Zowe Development Instances CA' : null }}" + commonName: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'Zowe Development Instances Certificate' : null }}" + orgUnit: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'API Mediation Layer' : null }}" + org: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'Zowe Sample' : null }}" + locality: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'Prague' : null }}" + state: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'Prague' : null }}" + country: "${{ (zowe.setup.certificate.pkcs12?.name || zowe.setup.certificate.keyring?.name) ? 'CZ' : null }}" # Validity days for Zowe generated certificates - validity: "${{ (zowe.setup.certificate.pkcs12?.import || zowe.setup.certificate.keyring?.label) ? null : 3650 }}" + validity: "${{ (zowe.setup.certificate.pkcs12?.import || zowe.setup.certificate.keyring?.name) ? null : 3650 }}" vsam: # Default to caching service entry as it predates this one @@ -88,7 +88,7 @@ zowe: configmgr: # STRICT=quit on any error, including missing schema # COMPONENT-COMPAT=if component missing schema, skip it with warning instead of quit - validation: "COMPONENT-COMPAT" + validation: "STRICT" # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> # runtime z/OS job name @@ -152,32 +152,19 @@ components: auth: provider: zosmf zosmf: - jwtAutoconfiguration: auto - serviceId: zosmf + jwtAutoconfiguration: jwt + serviceId: ibmzosmf authorization: endpoint: enabled: false - provider: "" + provider: "native" x509: enabled: false - server: - internal: - # gateway supports internal connector - enabled: false - port: 7550 - ssl: - enabled: false - - # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - metrics-service: - enabled: false - port: 7551 - debug: false # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - cloud-gateway: - enabled: false - port: 7563 + zaas: + enabled: true + port: 7558 debug: false # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -201,16 +188,13 @@ components: storage: evictionStrategy: reject # can be inMemory, VSAM, redis or infinispan - mode: VSAM - size: 10000 - vsam: - # your VSAM data set created by "zwe init vsam" command or ZWECSVSM JCL - # this is required if storage mode is VSAM - name: "" + mode: infinispan infinispan: # this is required if storage mode is infinispan jgroups: port: 7600 + keyExchange: + port: 7601 # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> app-server: diff --git a/files/sca/zowe_base_server.json b/files/sca/zowe_base_sca.json similarity index 66% rename from files/sca/zowe_base_server.json rename to files/sca/zowe_base_sca.json index 6cfd05c68c..7300cfa3fe 100644 --- a/files/sca/zowe_base_server.json +++ b/files/sca/zowe_base_sca.json @@ -1,21 +1,21 @@ { - "ServiceId": "AZWE001BASE0S", + "ServiceId": "AZWE003BASE0S", "ServiceName": "Zowe Configuration - Server", - "MetaValidationItemVersion": 1.0, + "MetaValidationItemVersion": 2.0, "Vendor": "OPEN MAINFRAME PROJECT", "SecurityValidationItems": [ { - "ItemID": "AZWE001BASE0SI00001000", + "ItemID": "AZWE003BASE0SI00001000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "ZWES.IS", "ResourceClass": "FACILITY", "WhoNeedsAccess": "ZWESVUSR", "LevelOfAccessRequired": "READ", - "ItemDescription": "To allow Zowe ZWESVSTC processes to access the Zowe ZIS cross memory server." + "ItemDescription": "To allow Zowe ZWESVSTC processes to access the Zowe ZIS cross-memory server." }, { - "ItemID": "AZWE001BASE0SI00002000", + "ItemID": "AZWE003BASE0SI00002000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "BPX.SERVER", @@ -25,7 +25,7 @@ "ItemDescription": "To allow the Zowe Desktop ZLUX server to run code on behalf of the API requester's TSO user ID." }, { - "ItemID": "AZWE001BASE0SI00003000", + "ItemID": "AZWE003BASE0SI00003000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "BPX.DAEMON", @@ -35,7 +35,7 @@ "ItemDescription": "To allow the Zowe Desktop ZLUX server to run code on behalf of the API requester's TSO user ID." }, { - "ItemID": "AZWE001BASE0SI00004000", + "ItemID": "AZWE003BASE0SI00004000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "BPX.JOBNAME", @@ -45,7 +45,7 @@ "ItemDescription": "To allow z/OS address spaces for unix processes to be renamed for ease of identification." }, { - "ItemID": "AZWE001BASE0SI00005000", + "ItemID": "AZWE003BASE0SI00005000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "CSFRNGL", @@ -55,7 +55,17 @@ "ItemDescription": "To generate symmetric keys using ICSF that is used by Zowe Desktop cookies." }, { - "ItemID": "AZWE001BASE0SI00006000", + "ItemID": "AZWE003BASE0SI00006000", + "ItemType": "PROGRAMMABLE", + "ItemCategory": "SERVER", + "ResourceProfile": "IRR.RAUDITX", + "ResourceClass": "FACILITY", + "WhoNeedsAccess": "ZWESVUSR", + "LevelOfAccessRequired": "READ", + "ItemDescription": "To allow Zowe Zowe main server to cut SMF records." + }, + { + "ItemID": "AZWE003BASE0SI00007000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "IRR.RUSERMAP", @@ -65,7 +75,7 @@ "ItemDescription": "To allow Zowe to map an X.509 client certificate to a z/OS identity." }, { - "ItemID": "AZWE001BASE0SI00007000", + "ItemID": "AZWE003BASE0SI00008000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "IRR.RADMIN.LISTUSER", @@ -75,7 +85,7 @@ "ItemDescription": "To allow Zowe to obtain information about OMVS segment of the user profile using LISTUSER TSO command." }, { - "ItemID": "AZWE001BASE0SI00008000", + "ItemID": "AZWE003BASE0SI00009000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "OMVSAPPL", @@ -85,7 +95,7 @@ "ItemDescription": "To allow Zowe Desktop vendor extensions the ability to use single-sign on." }, { - "ItemID": "AZWE001BASE0SI00009000", + "ItemID": "AZWE003BASE0SI00010000", "ItemType": "PROGRAMMABLE", "ItemCategory": "SERVER", "ResourceProfile": "SUPERUSER.FILESYS", @@ -95,44 +105,64 @@ "ItemDescription": "An alternative option to allow Zowe user ID to write persistent data in the Zowe directory structure." }, { - "ItemID": "AZWE001BASE0SI00010000", - "ItemType": "SEMI-PROGRAMMABLE", - "ItemCategory": "SERVER", - "ResourceProfile": "IRRPTAUTH..ANYUSER", - "ResourceClass": "PTKTDATA", + "ItemID": "AZWE003BASE0SI00011000", + "ItemType": "PROGRAMMABLE", + "ItemCategory": "CERTIFICATE", + "ResourceProfile": "IRR.DIGTCERT.LISTRING", + "ResourceClass": "FACILITY", "WhoNeedsAccess": "ZWESVUSR", - "LevelOfAccessRequired": "UPDATE", - "ItemDescription": "To allow Zowe APIML to generate passtickets for application. Used for SSO and client certificate authentication." + "LevelOfAccessRequired": "READ", + "ItemDescription": "Permit the Zowe SERVER ID to access the key ring." + }, + { + "ItemID": "AZWE003BASE0SI00012000", + "ItemType": "PROGRAMMABLE", + "ItemCategory": "CERTIFICATE", + "ResourceProfile": "IRR.DIGTCERT.GENCERT", + "ResourceClass": "FACILITY", + "WhoNeedsAccess": "ZWESVUSR", + "LevelOfAccessRequired": "CONTROL", + "ItemDescription": "Permit the Zowe SERVER ID to access the private key." }, { - "ItemID": "AZWE001BASE0SI00011000", + "ItemID": "AZWE003BASE0SI00013000", + "ItemType": "PROGRAMMABLE", + "ItemCategory": "RDATALIB class", + "ResourceProfile": "..LST", + "ResourceClass": "RDATALIB", + "WhoNeedsAccess": "ZWESVUSR", + "LevelOfAccessRequired": "READ", + "ItemDescription": "To allow Zowe SERVER ID to access the key ring." + }, + { + "ItemID": "AZWE003BASE0SI00014000", "ItemType": "SEMI-PROGRAMMABLE", - "ItemCategory": "SERVER", - "ResourceProfile": "IRRPTAUTH..ANYUSER", - "ResourceClass": "PTKTDATA", + "ItemCategory": "PASS TICKET", + "ResourceProfile": "", + "ResourceClass": "APPL", "WhoNeedsAccess": "ZWESVUSR", "LevelOfAccessRequired": "READ", "ItemDescription": "To allow Zowe APIML to evaluate passtickets for application. Used for SSO and client certificate authentication." }, { - "ItemID": "AZWE001BASE0SI00012000", - "ItemType": "PROGRAMMABLE", + "ItemID": "AZWE003BASE0SI00015000", + "ItemType": "SEMI-PROGRAMMABLE", "ItemCategory": "SERVER", - "ResourceProfile": "IRR.DIGTCERT.LISTRING", - "ResourceClass": "FACILITY", + "ResourceProfile": "IRRPTAUTH..ANYUSER", + "ResourceClass": "PTKTDATA", "WhoNeedsAccess": "ZWESVUSR", - "LevelOfAccessRequired": "READ", - "ItemDescription": "To allow Zowe user id to access his own keyring." + "LevelOfAccessRequired": "UPDATE", + "ItemDescription": "To allow Zowe APIML to evaluate passtickets for application. Used for SSO and client certificate authentication." }, { - "ItemID": "AZWE001BASE0SI00013000", + "ItemID": "AZWE003BASE0SI00016000", "ItemType": "PROGRAMMABLE", - "ItemCategory": "SERVER", - "ResourceProfile": "IRR.DIGTCERT.GENCERT", - "ResourceClass": "FACILITY", - "WhoNeedsAccess": "ZWESVUSR", - "LevelOfAccessRequired": "CONTROL", - "ItemDescription": "To optionally allow Zowe user id to use SITE owned certificate as a server certificate." + "ItemCategory": "USER", + "ResourceProfile": "APIML.SERVICES", + "ResourceClass": "ZOWE", + "WhoNeedsAccess": "", + "LevelOfAccessRequired": "READ", + "ItemDescription": "To allow Zowe user to use API Mediation Layer services." } ] } diff --git a/files/sca/zowe_base_user.json b/files/sca/zowe_base_user.json deleted file mode 100644 index 7653fe28b5..0000000000 --- a/files/sca/zowe_base_user.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "ServiceId": "AZWE001BASE0U", - "ServiceName": "Zowe Configuration - User", - "MetaValidationItemVersion": 1.0, - "Vendor": "OPEN MAINFRAME PROJECT", - "SecurityValidationItems": [ - { - "ItemID": "AZWE001BASE0UI00001000", - "ItemType": "PROGRAMMABLE", - "ItemCategory": "USER", - "ResourceProfile": "APIML.SERVICES", - "ResourceClass": "ZOWE", - "WhoNeedsAccess": "", - "LevelOfAccessRequired": "READ", - "ItemDescription": "To allow Zowe user to use API Mediation Layer services." - } - ] -} diff --git a/files/zlux/config/allowedPlugins.json b/files/zlux/config/allowedPlugins.json index 368cac3a02..dcc69a094f 100644 --- a/files/zlux/config/allowedPlugins.json +++ b/files/zlux/config/allowedPlugins.json @@ -28,14 +28,6 @@ "identifier": "org.zowe.zlux.auth.trivial", "versions": ["*"] }, - { - "identifier": "org.zowe.zlux.auth.zosmf", - "versions": ["*"] - }, - { - "identifier": "org.zowe.zlux.auth.zss", - "versions": ["*"] - }, { "identifier": "org.zowe.zlux.auth.safsso", "versions": ["*"] @@ -53,11 +45,11 @@ "versions": ["*"] }, { - "identifier": "org.zowe.zlux.ng2desktop.settings", + "identifier": "org.zowe.zlux.ivydesktop", "versions": ["*"] }, { - "identifier": "org.zowe.zlux.proxy.zosmf", + "identifier": "org.zowe.zlux.ng2desktop.settings", "versions": ["*"] }, { @@ -72,10 +64,6 @@ "identifier": "org.zowe.zlux.sample.iframe", "versions": ["*"] }, - { - "identifier": "org.zowe.zosmf.workflows", - "versions": ["*"] - }, { "identifier": "org.openmainframe.zowe.workshop-starter", "versions": ["*"] diff --git a/files/zlux/config/plugins/org.zowe.zlux.ivydesktop.json b/files/zlux/config/plugins/org.zowe.zlux.ivydesktop.json new file mode 100644 index 0000000000..1a791b6331 --- /dev/null +++ b/files/zlux/config/plugins/org.zowe.zlux.ivydesktop.json @@ -0,0 +1,5 @@ +{ + "identifier": "org.zowe.zlux.ivydesktop", + "pluginLocation": "zlux-app-manager/virtual-desktop", + "relativeTo": "$ZLUX_ROOT_DIR" +} diff --git a/files/zlux/config/plugins/org.zowe.zlux.ng2desktop.json b/files/zlux/config/plugins/org.zowe.zlux.ng2desktop.json index 2fd18ed29b..44a33568d3 100644 --- a/files/zlux/config/plugins/org.zowe.zlux.ng2desktop.json +++ b/files/zlux/config/plugins/org.zowe.zlux.ng2desktop.json @@ -1,5 +1,5 @@ { "identifier": "org.zowe.zlux.ng2desktop", - "pluginLocation": "zlux-app-manager/virtual-desktop", + "pluginLocation": "zlux-app-manager-v2/virtual-desktop", "relativeTo": "$ZLUX_ROOT_DIR" } diff --git a/files/zlux/config/zluxserver.json b/files/zlux/config/zluxserver.json deleted file mode 100644 index 9283155557..0000000000 --- a/files/zlux/config/zluxserver.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "node": { - "https": { - "ipAddresses": ["0.0.0.0"], - "port": 7556, - //pfx (string), keys, certificates, certificateAuthorities, and certificateRevocationLists are all valid here. - "keys": ["../defaults/serverConfig/zlux.keystore.key"], - "certificates": ["../defaults/serverConfig/zlux.keystore.cer"], - "certificateAuthorities": ["../defaults/serverConfig/apiml-localca.cer"] - }, - "mediationLayer": { - "server": { - "hostname": "localhost", - "port": 7554, - "isHttps": true - }, - //environmentally set to true when apiml available - "enabled": false - }, - "headers": { - "X-frame-Options": { - "override": true, - "value": "sameorigin" - } - } - }, - "agent": { - //host is for zlux to know, not zss - "host": "localhost", - "jwt": { - "fallback": true - }, - "https": { - "ipAddresses": ["127.0.0.1"], - //to be a replacement for zssPort - "port": 7557 - }, - "mediationLayer": { - "serviceName": "zss", - //environmentally set to true when apiml available - "enabled": false - } - }, - //Zowe cross memory server name - "privilegedServerName": "ZWESIS_STD", - -// All paths relative to ZLUX/node or ZLUX/bin -// In real installations, these values will be configured during the install. - "productDir":"../defaults", - "siteDir":"../deploy/site", - "instanceDir":"../deploy/instance", - "groupsDir":"../deploy/instance/groups", - "usersDir":"../deploy/instance/users", - "pluginsDir":"../defaults/plugins", - - "dataserviceAuthentication": { - //this specifies the default authentication type for dataservices that didn't specify which type to use. These dataservices therefore should not expect a particular type of authentication to be used. - "defaultAuthentication": "saf", - //enable this to use role-based access control (RBAC) for Zowe dataservice endpoints - "rbac": false, - - //each authentication type may have more than one implementing plugin, but the specification below just describes the priority of them. Every one that is found in the pluginsDir is loaded. - "implementationDefaults": { - //each type has an object which describes which implementation to use based on some criteria to find which is best for the task. For now, just "plugins" will - //be used to state that you want a particular plugin. - "saf": { - "plugins": ["org.zowe.zlux.auth.safsso"] - } - - } - } -} diff --git a/manifest.json.template b/manifest.json.template index 551b31a6fe..cc66f39770 100644 --- a/manifest.json.template +++ b/manifest.json.template @@ -1,6 +1,6 @@ { "name": "Zowe", - "version": "2.17.0", + "version": "3.1.0", "description": "Zowe is an open source project created to host technologies that benefit the Z platform from all members of the Z community (Integrated Software Vendors, System Integrators and z/OS consumers). Zowe, like Mac or Windows, comes with a set of APIs and OS capabilities that applications build on and also includes some applications out of the box. Zowe offers modern interfaces to interact with z/OS and allows you to work with z/OS in a way that is similar to what you experience on cloud platforms today. You can use these interfaces as delivered or through plug-ins and extensions that are created by clients or third-party vendors.", "license": "EPL-2.0", "homepage": "https://zowe.org", @@ -12,87 +12,72 @@ }, "binaryDependencies": { "org.zowe.zlux.zlux-core": { - "version": "^2.0.0-V2.X-STAGING-ZLUX-CORE", + "version": "^3.0.0-V3.X-STAGING-ZLUX-CORE", "artifact": "*.pax" }, "org.zowe.zlux.sample-angular-app": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.zlux.sample-iframe-app": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.zlux.sample-react-app": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.zlux.tn3270-ng2": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.zlux.vt-ng2": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.zlux.zlux-editor": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.zss": { - "version": "^2.17.0-STAGING", + "version": "^3.1.0-PR-739", "artifact": "*.pax" }, - "org.zowe.explorer.jobs.jobs-api-package": { - "version": "^2.0.7-SNAPSHOT", - "artifact": "jobs-api-package-*.zip", - "exclusions": ["*PR*.zip","*BRANCH*"] - }, - "org.zowe.explorer.files.files-api-package": { - "version": "^2.0.7-SNAPSHOT", - "artifact": "files-api-package-*.zip", - "exclusions": ["*PR*.zip","*BRANCH*"] - }, "org.zowe.explorer-jes": { - "version": "~2.0.2-SNAPSHOT" + "version": "^3.0.0-SNAPSHOT" }, "org.zowe.explorer-mvs": { - "version": "~2.0.2-SNAPSHOT" + "version": "^3.0.0-SNAPSHOT" }, "org.zowe.explorer-uss": { - "version": "~2.0.2-SNAPSHOT" + "version": "^3.0.0-SNAPSHOT" }, "org.zowe.explorer-ip": { - "version": "~2.0.0-SNAPSHOT", + "version": "^3.0.0-SNAPSHOT", "artifact": "*.pax" }, "org.zowe.apiml.api-catalog-package": { - "version": "^2.1.1-SNAPSHOT", + "version": "^3.0.3-SNAPSHOT", "artifact": "api-catalog-*.zip", "exclusions": ["*PR*.zip"] }, "org.zowe.apiml.discovery-package": { - "version": "^2.1.1-SNAPSHOT", + "version": "^3.0.3-SNAPSHOT", "artifact": "discovery-*.zip", "exclusions": ["*PR*.zip"] }, "org.zowe.apiml.gateway-package": { - "version": "^2.1.1-SNAPSHOT", + "version": "^3.0.3-SNAPSHOT", "artifact": "gateway-*.zip", "exclusions": ["*PR*.zip"] }, "org.zowe.apiml.caching-service-package": { - "version": "^2.1.1-SNAPSHOT", + "version": "^3.0.3-SNAPSHOT", "artifact": "caching-service-*.zip", "exclusions": ["*PR*.zip"] }, - "org.zowe.apiml.metrics-service-package": { - "version": "^2.1.1-SNAPSHOT", - "artifact": "metrics-service-*.zip", - "exclusions": ["*PR*.zip"] - }, "org.zowe.apiml.apiml-common-lib-package": { - "version": "^2.1.1-SNAPSHOT", + "version": "^3.0.3-SNAPSHOT", "artifact": "apiml-common-lib-*.zip", "exclusions": ["*PR*.zip"] }, @@ -102,29 +87,29 @@ "exclusions": ["*PR*.zip"] }, "org.zowe.apiml.sdk.apiml-sample-extension-package": { - "version": "^2.1.1-SNAPSHOT", + "version": "^3.0.3-SNAPSHOT", "artifact": "apiml-sample-extension-*.zip", "exclusions": ["*PR*.zip"] }, - "org.zowe.apiml.cloud-gateway-package": { - "version": "^2.4.4-SNAPSHOT", - "artifact": "cloud-gateway-*.zip", + "org.zowe.apiml.zaas-package": { + "version": "^3.0.3-SNAPSHOT", + "artifact": "zaas-package-*.zip", "exclusions": ["*PR*.zip"] }, "org.zowe.getesm": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.configmgr": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.configmgr-rexx": { - "version": "^2.0.0-V2.X-STAGING", + "version": "^3.0.0-V3.X-STAGING", "artifact": "*.pax" }, "org.zowe.launcher": { - "version": "^2.0.0-SNAPSHOT" + "version": "^3.0.0-STAGING" }, "org.zowe.keyring-utilities": { "version": "1.0.4", @@ -137,7 +122,7 @@ "version": "~2.0.0-SNAPSHOT" }, "org.zowe.licenses": { - "version": "2.3.0", + "version": "3.0.0", "artifact": "zowe_licenses_full.zip" } }, @@ -146,7 +131,7 @@ "componentGroup": "Zowe API Mediation Layer", "entries": [{ "repository": "api-layer", - "tag": "v2.x.x", + "tag": "v3.x.x", "destinations": ["Zowe PAX"] }] }, { @@ -160,12 +145,12 @@ "componentGroup": "Zowe Application Framework", "entries": [{ "repository": "zlux-app-manager", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { "repository": "zlux-app-server", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { @@ -180,17 +165,17 @@ }, { "repository": "zlux-platform", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { "repository": "zlux-server-framework", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { "repository": "zlux-shared", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { @@ -200,17 +185,17 @@ }, { "repository": "zlux-build", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { "repository": "zss", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] }, { "repository": "zowe-common-c", - "tag": "v2.x/staging", + "tag": "v3.x/staging", "destinations": ["Zowe PAX"] } ] @@ -256,13 +241,6 @@ "tag": "master", "destinations": ["Zowe CLI Package"] }] - }, { - "componentGroup": "IBM® IMS® Plug-in for Zowe CLI", - "entries": [{ - "repository": "zowe-cli-ims-plugin", - "tag": "master", - "destinations": ["Zowe CLI Package"] - }] }, { "componentGroup": "Zowe Desktop Data Sets UI Plugin", "entries": [{ @@ -292,28 +270,6 @@ "destinations": ["Zowe PAX"] }] }, { - "componentGroup": "Zowe Explorer Common REST Server", - "entries": [{ - "repository": "explorer-api-common", - "tag": "v2.x/master", - "destinations": ["Zowe PAX"] - }] - }, { - "componentGroup": "Zowe Explorer Data Sets REST Server", - "entries": [{ - "repository": "data-sets", - "tag": "v2.x/master", - "destinations": ["Zowe PAX"] - }] - }, { - "componentGroup": "Zowe Explorer Jobs REST Server", - "entries": [{ - "repository": "jobs", - "tag": "v2.x/master", - "destinations": ["Zowe PAX"] - }] - }, - { "componentGroup": "Zowe Desktop TN3270 Emulator Plug-in", "entries": [{ "repository": "tn3270-ng2", @@ -391,6 +347,14 @@ "tag": "v2.x/master", "destinations": ["Zowe PAX"] }] + }, { + "componentGroup": "Zowe Client Python SDK", + "entries": [{ + "repository": "zowe-client-python-sdk", + "core": false, + "tag": "main", + "destinations": ["Zowe Client Python SDK"] + }] } ], "imageDependencies": { @@ -402,23 +366,28 @@ "api-catalog": { "registry": "zowe-docker-snapshot.jfrog.io", "name": "ompzowe/api-catalog-services", - "tag" : "2.1.1-SNAPSHOT-ubuntu.v2-x-x" + "tag" : "3.0.21-SNAPSHOT-ubuntu.v2-x-x" + }, + "gateway": { + "registry": "zowe-docker-snapshot.jfrog.io", + "name": "ompzowe/gateway-service", + "tag" : "3.0.21-SNAPSHOT-ubuntu.v2-x-x" }, "caching": { "registry": "zowe-docker-snapshot.jfrog.io", "name": "ompzowe/caching-service", - "tag" : "2.1.1-SNAPSHOT-ubuntu.v2-x-x" + "tag" : "3.0.21-SNAPSHOT-ubuntu.v2-x-x" }, "discovery": { "kind": "statefulset", "registry": "zowe-docker-snapshot.jfrog.io", "name": "ompzowe/discovery-service", - "tag" : "2.1.1-SNAPSHOT-ubuntu.v2-x-x" + "tag" : "3.0.21-SNAPSHOT-ubuntu.v2-x-x" }, - "gateway": { + "zaas": { "registry": "zowe-docker-snapshot.jfrog.io", - "name": "ompzowe/gateway-service", - "tag" : "2.1.1-SNAPSHOT-ubuntu.v2-x-x" + "name": "ompzowe/zaas-service", + "tag" : "3.0.21-SNAPSHOT-ubuntu.v2-x-x" }, "app-server": { "registry": "zowe-docker-snapshot.jfrog.io", @@ -449,16 +418,6 @@ "name": "ompzowe/explorer-uss", "tag" : "2-ubuntu" }, - "files-api": { - "registry": "zowe-docker-release.jfrog.io", - "name": "ompzowe/files-api", - "tag" : "2-ubuntu" - }, - "jobs-api": { - "registry": "zowe-docker-release.jfrog.io", - "name": "ompzowe/jobs-api", - "tag" : "2-ubuntu" - }, "base": { "registry": "zowe-docker-release.jfrog.io", "name": "ompzowe/base", diff --git a/playbooks/README.md b/playbooks/README.md index 4223f0c004..dbb118cf0b 100644 --- a/playbooks/README.md +++ b/playbooks/README.md @@ -176,7 +176,7 @@ ansible-playbook -l install-kubernetes.yml -e kubeconfig= install-ext.yml -v --extra-vars "zowe_ext_url=https://zowe.jfrog.io/artifactory/libs-snapshot-local/org/zowe/sample-node-api/1.0.0-SNAPSHOT/sample-node-api-1.0.0-snapshot-6-20210126212259.pax" +$ ansible-playbook -l install-ext.yml -v --extra-vars "zowe_ext_url=https://zowe.jfrog.io/artifactory/libs-snapshot-local/org/zowe/sample-node-api/3.0.0-SNAPSHOT/sample-node-api-3.0.0-snapshot-66-20241002205335.pax" ``` You can also install an extension that exists in your local directory by using the `zowe_ext_local` variable. This will transfer the file from your local to the remote server and install the extension: diff --git a/playbooks/all_host_vars_list.yml b/playbooks/all_host_vars_list.yml index d3528c7fa7..30cf5605e6 100644 --- a/playbooks/all_host_vars_list.yml +++ b/playbooks/all_host_vars_list.yml @@ -12,7 +12,7 @@ k8s_gateway_domain: k8s_list_domain_ip: localhost k8s_networking: k8s_pv_name: -k8s_required_apps: ["api-catalog", "app-server", "caching", "explorer-jes", "explorer-mvs", "explorer-uss", "discovery", "files-api", "gateway", "jobs-api"] +k8s_required_apps: ["api-catalog", "app-server", "caching", "explorer-jes", "explorer-mvs", "explorer-uss", "discovery", "gateway"] k8s_service: loadbalancer k8s_storageclass: kubeconfig: @@ -28,21 +28,21 @@ zos_zosmf_user: IZUSVR zowe_apiml_catalog_port: 7552 zowe_apiml_discovery_port: 7553 zowe_apiml_gateway_port: 7554 -zowe_apiml_cloud_gateway_port: 7563 +zowe_apiml_zaas_port: 7558 zowe_apiml_gateway_timeout_millis: 600000 -zowe_apiml_metrics_service_port: 7551 zowe_apiml_nonstrict_verify_certficates_of_services: true zowe_apiml_security_auth_provider: zosmf zowe_apiml_security_x509_enabled: false +zowe_apiml_service_forwardClientCertEnabled: true zowe_apiml_security_oidc_enabled: false zowe_apiml_security_oidc_client_id: zowe_apiml_security_oidc_client_secret: zowe_apiml_security_oidc_registry: zowe_apiml_security_zosmf_applid: IZUDFLT -zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: auto +zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: LTPA zowe_apiml_verify_certficates_of_services: true zowe_auto_create_user_group: false -zowe_caching_service_persistent: VSAM +zowe_caching_service_persistent: infinispan zowe_caching_service_port: 7555 zowe_caching_service_vsam_dsprefix: CACHE zowe_caching_vsam_storage_class: @@ -63,7 +63,6 @@ zowe_instance_dir: ~/.zowe/instance zowe_instance_id: 1 zowe_jcllib: zowe_job_prefix: ZWE -zowe_jobs_api_port: 7558 zowe_jobs_explorer_port: 7560 zowe_keyring_alias: ZoweKeyring zowe_keyring_certname: ZoweCert @@ -75,7 +74,6 @@ zowe_keystore_password: password zowe_launch_components: zowe_launch_scripts_loglevel: zowe_lock_keystore: true -zowe_mvs_api_port: 7559 zowe_mvs_explorer_port: 7561 zowe_proclib_dsname: auto zowe_proclib_membername: ZWESLSTC diff --git a/playbooks/host_vars/marist-7.yml b/playbooks/host_vars/marist-10.yml similarity index 100% rename from playbooks/host_vars/marist-7.yml rename to playbooks/host_vars/marist-10.yml diff --git a/playbooks/host_vars/marist-8.yml b/playbooks/host_vars/marist-11.yml similarity index 63% rename from playbooks/host_vars/marist-8.yml rename to playbooks/host_vars/marist-11.yml index 4fd32f3177..f89f719ca1 100644 --- a/playbooks/host_vars/marist-8.yml +++ b/playbooks/host_vars/marist-11.yml @@ -3,13 +3,6 @@ zowe_sanity_test_testcases: "./test/**/!(api-doc-gen).js" zowe_apiml_security_x509_enabled: true zowe_apiml_security_oidc_enabled: true -work_dir_remote: /ZOWE/ansible -zowe_root_dir: /ZOWE/runtime -zowe_instance_dir: /ZOWE/instance -zowe_extension_dir: /ZOWE/extensions -zowe_keystore_dir: /ZOWE/keystore -zowe_install_logs_dir: /ZOWE/logs - zowe_smpe_volser: ZOWE03 zowe_caching_vsam_volume: ZOWE03 diff --git a/playbooks/host_vars/marist-6.yml b/playbooks/host_vars/marist-9.yml similarity index 100% rename from playbooks/host_vars/marist-6.yml rename to playbooks/host_vars/marist-9.yml diff --git a/playbooks/host_vars/tvt4188.yml b/playbooks/host_vars/tvt4188.yml index ce58c19764..d158b19685 100644 --- a/playbooks/host_vars/tvt4188.yml +++ b/playbooks/host_vars/tvt4188.yml @@ -1,5 +1,5 @@ --- -ansible_ssh_host: tvt4188.svl.ibm.com +ansible_ssh_host: tvt4188.pok.stglabs.ibm.com ansible_user: ansible_password: @@ -16,7 +16,7 @@ zowe_smpe_volser: T41882 # caching service volume zowe_caching_vsam_volume: T41882 -zowe_external_ip_address: 9.30.241.209 +zowe_external_ip_address: 9.47.90.163 zowe_zlux_terminal_telnet_port: 992 zowe_zlux_terminal_telnet_security_type: tls zowe_apiml_security_x509_enabled: true diff --git a/playbooks/hosts b/playbooks/hosts index f53a1884e8..85fcbfebf3 100644 --- a/playbooks/hosts +++ b/playbooks/hosts @@ -1,7 +1,7 @@ [marist] -marist-6 -marist-7 -marist-8 +marist-9 +marist-10 +marist-11 [tvt] tvt4188 diff --git a/playbooks/roles/api-generation/defaults/main.yml b/playbooks/roles/api-generation/defaults/main.yml index 8593d6c2e2..8dd779c07e 100644 --- a/playbooks/roles/api-generation/defaults/main.yml +++ b/playbooks/roles/api-generation/defaults/main.yml @@ -27,6 +27,4 @@ zowe_job_prefix: ZWE zowe_proclib_membername: ZWESLSTC # ports will be tested zowe_apiml_gateway_port: 7554 -zowe_jobs_api_port: 7558 -zowe_mvs_api_port: 7559 zowe_zlux_port: 7556 diff --git a/playbooks/roles/api-generation/tasks/main.yml b/playbooks/roles/api-generation/tasks/main.yml index 48b9197b9b..4c737270ce 100644 --- a/playbooks/roles/api-generation/tasks/main.yml +++ b/playbooks/roles/api-generation/tasks/main.yml @@ -16,8 +16,6 @@ - zowe_job_prefix - zowe_zlux_port - zowe_apiml_gateway_port - - zowe_jobs_api_port - - zowe_mvs_api_port # ============================================================================ - name: Delete old reports @@ -50,7 +48,5 @@ ZOWE_JOB_PREFIX: "{{ zowe_job_prefix }}" ZOWE_ZLUX_HTTPS_PORT: "{{ zowe_zlux_port }}" ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT: "{{ zowe_apiml_gateway_port }}" - ZOWE_EXPLORER_JOBS_PORT: "{{ zowe_jobs_api_port }}" - ZOWE_EXPLORER_DATASETS_PORT: "{{ zowe_mvs_api_port }}" DEBUG: "{{ zowe_api_gen_debug_mode | default('') }}" delegate_to: localhost diff --git a/playbooks/roles/configfmid/defaults/main.yml b/playbooks/roles/configfmid/defaults/main.yml index 322e90b06d..ba662c7ebe 100644 --- a/playbooks/roles/configfmid/defaults/main.yml +++ b/playbooks/roles/configfmid/defaults/main.yml @@ -5,16 +5,13 @@ # full core components list, they should show up in components section in zowe.yaml zowe_core_components: +- zaas - gateway -- cloud-gateway -- metrics-service - api-catalog - discovery - caching-service - app-server - zss -- jobs-api -- files-api - explorer-jes - explorer-mvs - explorer-uss @@ -54,7 +51,6 @@ zos_zosmf_user: IZUSVR # default z/OSMF Certificate Authority zos_zosmf_ca: # APIML ports -zowe_apiml_metrics_service_port: 7551 zowe_apiml_catalog_port: 7552 zowe_apiml_discovery_port: 7553 zowe_apiml_gateway_port: 7554 @@ -65,15 +61,13 @@ zowe_apiml_gateway_timeout_millis: 600000 zowe_apiml_security_x509_enabled: false zowe_apiml_security_zosmf_applid: IZUDFLT zowe_apiml_security_auth_provider: zosmf -zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: auto +zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: LTPA zowe_apiml_security_oidc_enabled: false zowe_apiml_security_oidc_client_id: zowe_apiml_security_oidc_client_secret: zowe_apiml_security_oidc_registry: zowe_apiml_security_oidc_jwks_uri: # explorer APIs/plugins ports -zowe_jobs_api_port: 7558 -zowe_mvs_api_port: 7559 zowe_jobs_explorer_port: 7560 zowe_mvs_explorer_port: 7561 zowe_uss_explorer_port: 7562 diff --git a/playbooks/roles/configfmid/tasks/main.yml b/playbooks/roles/configfmid/tasks/main.yml index 2c7dca58e7..220325d46c 100644 --- a/playbooks/roles/configfmid/tasks/main.yml +++ b/playbooks/roles/configfmid/tasks/main.yml @@ -33,6 +33,7 @@ - zowe_apiml_gateway_port - zowe_apiml_gateway_timeout_millis - zowe_apiml_security_x509_enabled + - zowe_apiml_service_forwardClientCertEnabled - zowe_apiml_security_zosmf_applid - zowe_apiml_security_auth_provider - zowe_apiml_security_oidc_enabled @@ -40,8 +41,6 @@ - zowe_apiml_security_oidc_client_secret - zowe_apiml_security_oidc_registry - zowe_apiml_security_oidc_jwks_uri - - zowe_jobs_api_port - - zowe_mvs_api_port - zowe_jobs_explorer_port - zowe_mvs_explorer_port - zowe_uss_explorer_port @@ -283,16 +282,15 @@ vars: configs: "components.gateway.port": "{{ zowe_apiml_gateway_port }}" - "components.metrics-service.port": "{{ zowe_apiml_metrics_service_port }}" "components.api-catalog.port": "{{ zowe_apiml_catalog_port }}" "components.discovery.port": "{{ zowe_apiml_discovery_port }}" "components.caching-service.port": "{{ zowe_caching_service_port }}" "components.app-server.port": "{{ zowe_zlux_port }}" "components.zss.port": "{{ zowe_zss_port }}" - "components.jobs-api.port": "{{ zowe_jobs_api_port }}" - "components.files-api.port": "{{ zowe_mvs_api_port }}" # other gateway configs "components.gateway.apiml.gateway.timeoutMillis": "{{ zowe_apiml_gateway_timeout_millis }}" + + # zaas settings "components.gateway.apiml.security.x509.enabled": "{{ zowe_apiml_security_x509_enabled|string|lower }}" "components.gateway.apiml.security.auth.provider": "{{ zowe_apiml_security_auth_provider|string|lower }}" "components.gateway.apiml.security.auth.zosmf.jwtAutoconfiguration": "{{ zowe_apiml_security_zosmf_jwt_autoconfiguration_mode }}" diff --git a/playbooks/roles/configure/defaults/main.yml b/playbooks/roles/configure/defaults/main.yml index 085bfb42c5..8727485f76 100644 --- a/playbooks/roles/configure/defaults/main.yml +++ b/playbooks/roles/configure/defaults/main.yml @@ -5,16 +5,13 @@ # full core components list, they should show up in components section in zowe.yaml zowe_core_components: +- zaas - gateway -- cloud-gateway -- metrics-service - api-catalog - discovery - caching-service - app-server - zss -- jobs-api -- files-api - explorer-jes - explorer-mvs - explorer-uss @@ -54,33 +51,31 @@ zos_zosmf_user: IZUSVR # default z/OSMF Certificate Authority zos_zosmf_ca: # APIML ports -zowe_apiml_metrics_service_port: 7551 zowe_apiml_catalog_port: 7552 zowe_apiml_discovery_port: 7553 zowe_apiml_gateway_port: 7554 -zowe_apiml_cloud_gateway_port: 7563 +zowe_apiml_zaas_port: 7558 zowe_apiml_verify_certficates_of_services: true zowe_apiml_nonstrict_verify_certficates_of_services: true # APIML configuration properties zowe_apiml_gateway_timeout_millis: 600000 zowe_apiml_security_x509_enabled: false +zowe_apiml_service_forwardClientCertEnabled: true zowe_apiml_security_zosmf_applid: IZUDFLT zowe_apiml_security_auth_provider: zosmf -zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: auto +zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: LTPA zowe_apiml_security_oidc_enabled: false zowe_apiml_security_oidc_client_id: zowe_apiml_security_oidc_client_secret: zowe_apiml_security_oidc_registry: zowe_apiml_security_oidc_jwks_uri: # explorer APIs/plugins ports -zowe_jobs_api_port: 7558 -zowe_mvs_api_port: 7559 zowe_jobs_explorer_port: 7560 zowe_mvs_explorer_port: 7561 zowe_uss_explorer_port: 7562 # caching service zowe_caching_service_port: 7555 -zowe_caching_service_persistent: VSAM +zowe_caching_service_persistent: infinispan # the final data set name will be: {zowe_dataset_prefix}.{zowe_caching_service_vsam_dsprefix}{zowe_instance_id} # for example: IBMUSER.ZWE.CACHE1 zowe_caching_service_vsam_dsprefix: CACHE diff --git a/playbooks/roles/configure/tasks/main.yml b/playbooks/roles/configure/tasks/main.yml index 173fbf4d4d..11c4613eb8 100644 --- a/playbooks/roles/configure/tasks/main.yml +++ b/playbooks/roles/configure/tasks/main.yml @@ -33,6 +33,7 @@ - zowe_apiml_gateway_port - zowe_apiml_gateway_timeout_millis - zowe_apiml_security_x509_enabled + - zowe_apiml_service_forwardClientCertEnabled - zowe_apiml_security_zosmf_applid - zowe_apiml_security_auth_provider - zowe_apiml_security_oidc_enabled @@ -40,8 +41,6 @@ - zowe_apiml_security_oidc_client_secret - zowe_apiml_security_oidc_registry - zowe_apiml_security_oidc_jwks_uri - - zowe_jobs_api_port - - zowe_mvs_api_port - zowe_jobs_explorer_port - zowe_mvs_explorer_port - zowe_uss_explorer_port @@ -298,18 +297,18 @@ tasks_from: update_zowe_yaml vars: configs: + "components.zaas.port": "{{ zowe_apiml_zaas_port }}" "components.gateway.port": "{{ zowe_apiml_gateway_port }}" - "components.cloud-gateway.port": "{{ zowe_apiml_cloud_gateway_port }}" - "components.metrics-service.port": "{{ zowe_apiml_metrics_service_port }}" "components.api-catalog.port": "{{ zowe_apiml_catalog_port }}" "components.discovery.port": "{{ zowe_apiml_discovery_port }}" "components.caching-service.port": "{{ zowe_caching_service_port }}" "components.app-server.port": "{{ zowe_zlux_port }}" "components.zss.port": "{{ zowe_zss_port }}" - "components.jobs-api.port": "{{ zowe_jobs_api_port }}" - "components.files-api.port": "{{ zowe_mvs_api_port }}" # other gateway configs "components.gateway.apiml.gateway.timeoutMillis": "{{ zowe_apiml_gateway_timeout_millis }}" + "components.gateway.apiml.service.forwardClientCertEnabled": "{{ zowe_apiml_service_forwardClientCertEnabled|string|lower }}" + + # zaas configs "components.gateway.apiml.security.x509.enabled": "{{ zowe_apiml_security_x509_enabled|string|lower }}" "components.gateway.apiml.security.auth.provider": "{{ zowe_apiml_security_auth_provider|string|lower }}" "components.gateway.apiml.security.auth.zosmf.jwtAutoconfiguration": "{{ zowe_apiml_security_zosmf_jwt_autoconfiguration_mode }}" diff --git a/playbooks/roles/custom_for_test/defaults/main.yml b/playbooks/roles/custom_for_test/defaults/main.yml index 0f223bc20e..9a2bfcdd33 100644 --- a/playbooks/roles/custom_for_test/defaults/main.yml +++ b/playbooks/roles/custom_for_test/defaults/main.yml @@ -5,16 +5,13 @@ # full core components list, they should show up in components section in zowe.yaml zowe_core_components: +- zaas - gateway -- cloud-gateway -- metrics-service - api-catalog - discovery - caching-service - app-server - zss -- jobs-api -- files-api - explorer-jes - explorer-mvs - explorer-uss @@ -54,11 +51,10 @@ zos_zosmf_user: IZUSVR # default z/OSMF Certificate Authority zos_zosmf_ca: # APIML ports -zowe_apiml_metrics_service_port: 7551 zowe_apiml_catalog_port: 7552 zowe_apiml_discovery_port: 7553 zowe_apiml_gateway_port: 7554 -zowe_apiml_cloud_gateway_port: 7563 +zowe_apiml_zaas_port: 7558 zowe_apiml_verify_certficates_of_services: true zowe_apiml_nonstrict_verify_certficates_of_services: true # APIML configuration properties @@ -71,16 +67,14 @@ zowe_apiml_security_oidc_registry: zowe_apiml_security_oidc_jwks_uri: zowe_apiml_security_zosmf_applid: IZUDFLT zowe_apiml_security_auth_provider: zosmf -zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: auto +zowe_apiml_security_zosmf_jwt_autoconfiguration_mode: LTPA # explorer APIs/plugins ports -zowe_jobs_api_port: 7558 -zowe_mvs_api_port: 7559 zowe_jobs_explorer_port: 7560 zowe_mvs_explorer_port: 7561 zowe_uss_explorer_port: 7562 # caching service zowe_caching_service_port: 7555 -zowe_caching_service_persistent: VSAM +zowe_caching_service_persistent: infinispan # the final data set name will be: {zowe_dataset_prefix}.{zowe_caching_service_vsam_dsprefix}{zowe_instance_id} # for example: IBMUSER.ZWE.CACHE1 zowe_caching_service_vsam_dsprefix: CACHE diff --git a/playbooks/roles/custom_for_test/tasks/main.yml b/playbooks/roles/custom_for_test/tasks/main.yml index 2ca66723e5..ea85b09568 100644 --- a/playbooks/roles/custom_for_test/tasks/main.yml +++ b/playbooks/roles/custom_for_test/tasks/main.yml @@ -33,10 +33,9 @@ # - zowe_apiml_gateway_port # - zowe_apiml_gateway_timeout_millis # - zowe_apiml_security_x509_enabled + # - zowe_apiml_service_forwardClientCertEnabled # - zowe_apiml_security_zosmf_applid # - zowe_apiml_security_auth_provider - # - zowe_jobs_api_port - # - zowe_mvs_api_port # - zowe_jobs_explorer_port # - zowe_mvs_explorer_port # - zowe_uss_explorer_port @@ -152,14 +151,12 @@ # ============================================================================ # Enable disabled services -- name: Update zowe.yaml zowe.setup.vsam +- name: Update zowe.yaml import_role: name: zos tasks_from: update_zowe_yaml vars: configs: - "components.files-api.enabled": "true" - "components.jobs-api.enabled": "true" "components.apiml-sample-extension.enabled": "true" # debug mode for troubleshooting/profiling "zowe.launchScript.logLevel": "trace" diff --git a/playbooks/roles/fmid/defaults/main.yml b/playbooks/roles/fmid/defaults/main.yml index 0ba0f6f32b..15fb4797b4 100644 --- a/playbooks/roles/fmid/defaults/main.yml +++ b/playbooks/roles/fmid/defaults/main.yml @@ -9,6 +9,7 @@ work_dir_local: .tmp zowe_smpe_knwon_fmids: - AZWE001 - AZWE002 +- AZWE003 # default install path for SMP/e zowe_smpe_default_path: usr/lpp/zowe diff --git a/playbooks/roles/kubernetes/defaults/main.yml b/playbooks/roles/kubernetes/defaults/main.yml index 98867d5662..877dbf1618 100644 --- a/playbooks/roles/kubernetes/defaults/main.yml +++ b/playbooks/roles/kubernetes/defaults/main.yml @@ -48,4 +48,4 @@ k8s_gateway_domain: k8s_discovery_domain: #list of the apps required for zowe -k8s_required_apps: ["api-catalog", "app-server", "caching", "discovery", "files-api", "gateway", "jobs-api"] +k8s_required_apps: ["api-catalog", "app-server", "caching", "discovery", "gateway", "zaas"] diff --git a/playbooks/roles/start/defaults/main.yml b/playbooks/roles/start/defaults/main.yml index b1a964bc85..c70e867f4e 100644 --- a/playbooks/roles/start/defaults/main.yml +++ b/playbooks/roles/start/defaults/main.yml @@ -25,5 +25,4 @@ zowe_test_password: # ports will be tested #zowe_zss_port: 7557 zowe_zlux_port: 7556 -zowe_jobs_api_port: 7558 zowe_apiml_gateway_port: 7554 diff --git a/playbooks/roles/start/tasks/wait_for_zowe.yml b/playbooks/roles/start/tasks/wait_for_zowe.yml index 9d24092d02..1909385dc3 100644 --- a/playbooks/roles/start/tasks/wait_for_zowe.yml +++ b/playbooks/roles/start/tasks/wait_for_zowe.yml @@ -25,7 +25,6 @@ - zowe_external_domain_name #- zowe_zss_port - zowe_zlux_port - - zowe_jobs_api_port - zowe_apiml_gateway_port - name: Check if zowe_test_user has a value @@ -84,25 +83,6 @@ # hide log to avoid exposing zowe_test_user and zowe_test_password no_log: True -- name: Wait for Jobs API port {{ zowe_jobs_api_port }} to be available - uri: - url: "https://{{ zowe_zos_host }}:{{ zowe_jobs_api_port }}/jobs/api/v1?prefix=ZWE*&status=ACTIVE" - url_password: "{{ zowe_test_password }}" - url_username: "{{ zowe_test_user }}" - follow_redirects: none - method: GET - validate_certs: false - register: _result - until: _result.status == 200 - retries: "{{ wait_for_zowe_service_retries | int }}" - delay: "{{ wait_for_zowe_service_delay | int }}" - # if zowe_zos_host and zowe_external_domain_name are not same, zlux could be - # started off z/OS and then we couldn't test right now - when: zowe_zos_host == zowe_external_domain_name and (zowe_launch_components is not none and "jobs-api" in zowe_launch_components) - delegate_to: localhost - # hide log to avoid exposing zowe_test_user and zowe_test_password - no_log: True - - name: Wait for Desktop at {{zowe_zos_host}} port {{ zowe_zlux_port }} to be available uri: url: "https://{{ zowe_zos_host }}:{{ zowe_zlux_port }}" diff --git a/playbooks/roles/verify/defaults/main.yml b/playbooks/roles/verify/defaults/main.yml index 625b9cdc16..1f1888134a 100644 --- a/playbooks/roles/verify/defaults/main.yml +++ b/playbooks/roles/verify/defaults/main.yml @@ -27,5 +27,6 @@ zowe_job_prefix: ZWE zowe_proclib_membername: ZWESLSTC zowe_instance_id: 1 # ports will be tested +zowe_apiml_zaas_port: 7558 zowe_apiml_gateway_port: 7554 zowe_zlux_port: 7556 diff --git a/pswi/.gitignore b/pswi/.gitignore new file mode 100644 index 0000000000..a5e2c10550 --- /dev/null +++ b/pswi/.gitignore @@ -0,0 +1,4 @@ +logs/ +EXP* +report.txt +unzipped/ diff --git a/pswi/01_smpe.sh b/pswi/01_smpe.sh index 8370b9ef54..38a40b11c3 100644 --- a/pswi/01_smpe.sh +++ b/pswi/01_smpe.sh @@ -18,7 +18,7 @@ echo "SMPE workflow name :" $SMPE_WF_NAME CREATE_SMPE_WF_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows" SMPE_WF_LIST_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows?owner=${ZOSMF_USER}&workflowName=${SMPE_WF_NAME}" -# JSONs +# JSONs ADD_WORKFLOW_JSON='{"workflowName":"'$SMPE_WF_NAME'", "workflowDefinitionFile":"'${DIR}'/SMPE20", @@ -43,7 +43,7 @@ echo "Uploading workflow SMPE into ${DIR} directory thru SSH" cd workflows -sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} << EOF +sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} <>$LOG_DIR/report.txt + echo $RESP >>$LOG_DIR/report.txt + exit -1 + elif [ "$STATUS_NAME" = "complete" ]; then + echo "Workflow finished successfully." + STATUS="FINISHED" + fi done - diff --git a/pswi/02_ptf.sh b/pswi/02_ptf.sh index e2c23e54e3..c6f189e43a 100644 --- a/pswi/02_ptf.sh +++ b/pswi/02_ptf.sh @@ -22,7 +22,7 @@ echo "PTF workflow name :" $PTF_WF_NAME CREATE_PTF_WF_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows" PTF_WF_LIST_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows?owner=${ZOSMF_USER}&workflowName=${PTF_WF_NAME}" -# JSONs +# JSONs ADD_WORKFLOW_JSON='{"workflowName":"'$PTF_WF_NAME'", "workflowDefinitionFile":"'${DIR}'/WFPTF", "system":"'$ZOSMF_SYSTEM'", @@ -38,7 +38,7 @@ ADD_WORKFLOW_JSON='{"workflowName":"'$PTF_WF_NAME'", cd workflows -sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} << EOF +sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} <>$LOG_DIR/report.txt + echo $RESP >>$LOG_DIR/report.txt + exit -1 + elif [ "$STATUS_NAME" = "complete" ]; then + echo "Workflow finished successfully." + STATUS="FINISHED" + fi done diff --git a/pswi/03_create.sh b/pswi/03_create.sh index 3f9e30fb84..9915adfd2b 100644 --- a/pswi/03_create.sh +++ b/pswi/03_create.sh @@ -16,7 +16,7 @@ echo "SWI name :" $SWI_NAME echo "Existing DSN :" $EXPORT_DSN echo "Temporary zFS :" $TMP_ZFS echo "Temporary directory:" $TMP_MOUNT -echo "Work zFS :" $WORK_ZFS # For z/OSMF v2.3 +echo "Work zFS :" $WORK_ZFS # For z/OSMF v2.3 echo "Work mount point :" $WORK_MOUNT # For z/OSMF v2.3 echo "ZOWE zFS :" $ZOWE_ZFS echo "ZOWE mount point :" $ZOWE_MOUNT @@ -25,10 +25,10 @@ echo "ACCOUNT :" $ACCOUNT echo "SYSAFF :" $SYSAFF echo "z/OSMF version :" $ZOSMF_V -# JSONs +# JSONs ADD_SWI_JSON='{"name":"'${SWI_NAME}'","system":"'${ZOSMF_SYSTEM}'","description":"ZOWE v'${VERSION}' Portable Software Instance", "globalzone":"'${GLOBAL_ZONE}'","targetzones":["'${TZONE}'"],"workflows":[{"name":"ZOWE Mount Workflow","description":"This workflow performs mount action of ZOWE zFS.", -"location": {"dsname":"'${WORKFLOW_DSN}'(ZWEWRF02)"}},{"name":"ZOWE Configuration of Zowe 2.0","description":"This workflow configures Zowe v2.0.", +"location": {"dsname":"'${WORKFLOW_DSN}'(ZWEWRF02)"}},{"name":"ZOWE Configuration of Zowe 3.0","description":"This workflow configures Zowe v3.0.", "location": {"dsname":"'${WORKFLOW_DSN}'(ZWECONF)"}},{"name":"ZOWE Creation of CSR request workflow","description":"This workflow creates a certificate sign request.", "location": {"dsname":"'${WORKFLOW_DSN}'(ZWECRECR)"}},{"name":"ZOWE Sign a CSR request","description":"This workflow signs the certificate sign request by a local CA.", "location": {"dsname":"'${WORKFLOW_DSN}'(ZWESIGNC)"}},{"name":"ZOWE Load Authentication Certificate into ESM","description":"This workflow loads a signed client authentication certificate to the ESM.", @@ -39,7 +39,7 @@ ADD_EXPORT_DSN_JSON='{"dsorg":"PO","alcunit":"TRK","primary":10,"secondary":5,"d EXPORT_JCL_JSON='{"packagedir":"'${EXPORT}'","jcldataset":"'${EXPORT_DSN}'","workvolume":"'${VOLUME}'"}' MOUNT_ZOWE_ZFS_JSON='{"action":"mount","mount-point":"'${ZOWE_MOUNT}'","fs-type":"zFS","mode":"rdwr"}' -# URLs +# URLs ADD_SWI_URL="${BASE_URL}/zosmf/swmgmt/swi" LOAD_PRODUCTS_URL="${BASE_URL}/zosmf/swmgmt/swi/${ZOSMF_SYSTEM}/${SWI_NAME}/products" WORKFLOW_DSN_URL="${BASE_URL}/zosmf/restfiles/ds/${WORKFLOW_DSN}" @@ -55,132 +55,128 @@ CHECK_EXPORT_DSN_URL="${BASE_URL}/zosmf/restfiles/ds?dslevel=${EXPORT_DSN}" # Check if temp zFS for PSWI is mounted echo "Checking/mounting ${TMP_ZFS}" sh scripts/tmp_mounts.sh "${TMP_ZFS}" "${TMP_MOUNT}" -if [ $? -gt 0 ];then exit -1;fi - -if [ "$ZOSMF_V" = "2.3" ] -then -# z/OSMF 2.3 +if [ $? -gt 0 ]; then exit -1; fi # Check if work zFS for PSWI is mounted echo "Checking/mounting ${WORK_ZFS}" sh scripts/tmp_mounts.sh "${WORK_ZFS}" "${WORK_MOUNT}" -if [ $? -gt 0 ];then exit -1;fi -fi - +if [ $? -gt 0 ]; then exit -1; fi + # Check if ZOWE zFS is mounted echo "Checking if file system ${ZOWE_ZFS} is mounted." -RESP=`curl -s $GET_ZOWE_ZFS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -MOUNTZ=`echo $RESP | grep -o '"mountpoint":".*"' | cut -f4 -d\"` +RESP=$(curl -s $GET_ZOWE_ZFS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +MOUNTZ=$(echo $RESP | grep -o '"mountpoint":".*"' | cut -f4 -d\") -if [ -n "$MOUNTZ" ] -then +if [ -n "$MOUNTZ" ]; then # Check if ZOWE zFS is mounted to given ZOWE mountpoint - if [ "$MOUNTZ/" = "$ZOWE_MOUNT" ] - then + if [ "$MOUNTZ/" = "$ZOWE_MOUNT" ]; then echo "${ZOWE_MOUNT} with zFS ${ZOWE_ZFS} mounted will be used." else - echo "The file system ${ZOWE_ZFS} exists but is mounted to different mount point ${MOUNTZ}." - echo "It is required to have the file system ${ZOWE_ZFS} mounted to the exact mount point (${ZOWE_MOUNT}) to successfully export Zowe PSWI." + echo "The file system ${ZOWE_ZFS} exists but is mounted to different mount point ${MOUNTZ}." >>$LOG_DIR/report.txt + echo "It is required to have the file system ${ZOWE_ZFS} mounted to the exact mount point (${ZOWE_MOUNT}) to successfully export Zowe PSWI." >>$LOG_DIR/report.txt exit -1 fi else echo "${ZOWE_ZFS} is not mounted anywhere. Checking if ${ZOWE_MOUNT} has any zFS mounted." - RESP=`curl -s $GET_ZOWE_PATH_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` - MOUNTZFS=`echo $RESP | grep -o "name":".*" | cut -f4 -d\"` - if [ -n "$MOUNTZFS" ] - then + RESP=$(curl -s $GET_ZOWE_PATH_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + MOUNTZFS=$(echo $RESP | grep -o "name":".*" | cut -f4 -d\") + if [ -n "$MOUNTZFS" ]; then # If ZFS is not mounted to the mountpoint then this ZOWE mountpoint has different zFS - echo "The mountpoint ${ZOWE_MOUNT} has different zFS ${MOUNTZFS}." + echo "The mountpoint ${ZOWE_MOUNT} has different zFS ${MOUNTZFS}." >>$LOG_DIR/report.txt exit -1 else - # Mount zFS to Zowe mountpoint - echo "Mounting zFS ${ZOWE_ZFS} to ${ZOWE_MOUNT} mount point." - RESP=`curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$MOUNT_ZOWE_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` - sh scripts/check_response.sh "${RESP}" $? - if [ $? -gt 0 ];then exit -1;fi + # Mount zFS to Zowe mountpoint + echo "Mounting zFS ${ZOWE_ZFS} to ${ZOWE_MOUNT} mount point." + RESP=$(curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$MOUNT_ZOWE_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + sh scripts/check_response.sh "${RESP}" $? + if [ $? -gt 0 ]; then exit -1; fi fi fi # Add workflow to ZOWE data sets echo "Checking if WORKFLOW data set already exists." -RESP=`curl -s $CHECK_WORKFLOW_DSN_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -DS_COUNT=`echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:` -if [ $DS_COUNT -ne 0 ] -then - echo "The ${WORKFLOW_DSN} already exist. Because there is a possibility that it contains something unwanted the script does not continue." - exit -1 +RESP=$(curl -s $CHECK_WORKFLOW_DSN_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +DS_COUNT=$(echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:) +if [ $DS_COUNT -ne 0 ]; then + echo "The ${WORKFLOW_DSN} already exist. Because there is a possibility that it contains something unwanted the script does not continue." >>$LOG_DIR/report.txt + exit -1 else echo "Creating a data set where the post-Deployment workflow will be stored." - RESP=`curl -s $WORKFLOW_DSN_URL -k -X "POST" -d "$ADD_WORKFLOW_DSN_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` - if [ -n "$RESP" ] - then - echo "The creation of the ${WORKFLOW_DSN} was not successful. Error message: ${RESP}" + RESP=$(curl -s $WORKFLOW_DSN_URL -k -X "POST" -d "$ADD_WORKFLOW_DSN_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + if [ -n "$RESP" ]; then + echo "The creation of the ${WORKFLOW_DSN} was not successful. Error message: ${RESP}" >>$LOG_DIR/report.txt exit -1 - fi + fi fi echo "Copying workflows to ${WORKFLOW_DSN} data set." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//COPYWRFS EXEC PGM=BPXBATCH" >> JCL -echo "//STDOUT DD SYSOUT=*" >> JCL -echo "//STDERR DD SYSOUT=*" >> JCL -echo "//STDPARM DD *" >> JCL -echo "SH set -x;set -e;" >> JCL -echo "cd ${WORK_MOUNT};" >> JCL -echo "source=\"${ZOWE_MOUNT}files/workflows/ZWEWRF02.xml\";" >> JCL -echo "target=\"//'${WORKFLOW_DSN}(ZWEWRF02)'\";" >> JCL -echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWEWRF02;" >> JCL -echo "sed 's|UTF-8|IBM-1047|g' _ZWEWRF02 > ZWEWRF02;" >> JCL -echo "cp -T ZWEWRF02 \$target;" >> JCL -echo "source=\"${ZOWE_MOUNT}files/workflows/ZWECRECR.xml\";" >> JCL -echo "target=\"//'${WORKFLOW_DSN}(ZWECRECR)'\";" >> JCL -echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWECRECR;" >> JCL -echo "sed 's|UTF-8|IBM-1047|g' _ZWECRECR > ZWECRECR;" >> JCL -echo "cp -T ZWECRECR \$target;" >> JCL -echo "source=\"${ZOWE_MOUNT}files/workflows/ZWEKRING.xml\";" >> JCL -echo "target=\"//'${WORKFLOW_DSN}(ZWEKRING)'\";" >> JCL -echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWEKRING;" >> JCL -echo "sed 's|UTF-8|IBM-1047|g' _ZWEKRING > ZWEKRING;" >> JCL -echo "cp -T ZWEKRING \$target;" >> JCL -echo "source=\"${ZOWE_MOUNT}files/workflows/ZWELOADC.xml\";" >> JCL -echo "target=\"//'${WORKFLOW_DSN}(ZWELOADC)'\";" >> JCL -echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWELOADC;" >> JCL -echo "sed 's|UTF-8|IBM-1047|g' _ZWELOADC > ZWELOADC;" >> JCL -echo "cp -T ZWELOADC \$target;" >> JCL -echo "source=\"${ZOWE_MOUNT}files/workflows/ZWESIGNC.xml\";" >> JCL -echo "target=\"//'${WORKFLOW_DSN}(ZWESIGNC)'\";" >> JCL -echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWESIGNC;" >> JCL -echo "sed 's|UTF-8|IBM-1047|g' _ZWESIGNC > ZWESIGNC;" >> JCL -echo "cp -T ZWESIGNC \$target;" >> JCL -echo "source=\"${ZOWE_MOUNT}files/workflows/ZWECONF.xml\";" >> JCL -echo "target=\"//'${WORKFLOW_DSN}(ZWECONF)'\";" >> JCL -echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWECONF;" >> JCL -echo "sed 's|UTF-8|IBM-1047|g' _ZWECONF > ZWECONF;" >> JCL -echo "cp -T ZWECONF \$target;" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" -if [ $? -gt 0 ];then exit -1;fi +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//COPYWRFS EXEC PGM=BPXBATCH" >>JCL +echo "//STDOUT DD SYSOUT=*" >>JCL +echo "//STDERR DD SYSOUT=*" >>JCL +echo "//STDPARM DD *" >>JCL +echo "SH set -x;set -e;" >>JCL +echo "cd ${WORK_MOUNT};" >>JCL +echo "source=\"${ZOWE_MOUNT}files/workflows/ZWEWRF02.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWEWRF02)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWEWRF02;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWEWRF02 > ZWEWRF02;" >>JCL +echo "cp -T ZWEWRF02 \$target;" >>JCL +echo "source=\"${ZOWE_MOUNT}files/workflows/ZWECRECR.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWECRECR)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWECRECR;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWECRECR > ZWECRECR;" >>JCL +echo "cp -T ZWECRECR \$target;" >>JCL +echo "source=\"${ZOWE_MOUNT}files/workflows/ZWEKRING.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWEKRING)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWEKRING;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWEKRING > ZWEKRING;" >>JCL +echo "cp -T ZWEKRING \$target;" >>JCL +echo "source=\"${ZOWE_MOUNT}files/workflows/ZWELOADC.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWELOADC)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWELOADC;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWELOADC > ZWELOADC;" >>JCL +echo "cp -T ZWELOADC \$target;" >>JCL +echo "source=\"${ZOWE_MOUNT}files/workflows/ZWESIGNC.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWESIGNC)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWESIGNC;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWESIGNC > ZWESIGNC;" >>JCL +echo "cp -T ZWESIGNC \$target;" >>JCL +echo "source=\"${ZOWE_MOUNT}files/workflows/ZWECONF.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWECONF)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWECONF;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWECONF > ZWECONF;" >>JCL +echo "cp -T ZWECONF \$target;" >>JCL +echo "/*" >>JCL +echo "//CHMODZWE EXEC PGM=BPXBATCH" >>JCL +echo "//STDOUT DD SYSOUT=*" >>JCL +echo "//STDERR DD SYSOUT=*" >>JCL +echo "//STDPARM DD *" >>JCL +echo "SH set -x;set -e;" >>JCL +echo "chmod -R 777 ${ZOWE_MOUNT};" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" +if [ $? -gt 0 ]; then exit -1; fi rm JCL # Add data set for export jobs echo "Checking if the data set for export jobs already exists." -RESP=`curl -s $CHECK_EXPORT_DSN_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -DSN_COUNT=`echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:` -if [ $DSN_COUNT -ne 0 ] -then - echo "The ${EXPORT_DSN} already exist. Because there is a possibility that it contains something unwanted the script does not continue." +RESP=$(curl -s $CHECK_EXPORT_DSN_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +DSN_COUNT=$(echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:) +if [ $DSN_COUNT -ne 0 ]; then + echo "The ${EXPORT_DSN} already exist. Because there is a possibility that it contains something unwanted the script does not continue." >>$LOG_DIR/report.txt exit -1 else echo "Creating a data set where the export jobs will be stored." - RESP=`curl -s $EXPORT_DSN_URL -k -X "POST" -d "$ADD_EXPORT_DSN_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` - if [ -n "$RESP" ] - then echo "The creation of the ${EXPORT_DSN} was not successful. Error message: ${RESP}" - fi + RESP=$(curl -s $EXPORT_DSN_URL -k -X "POST" -d "$ADD_EXPORT_DSN_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + if [ -n "$RESP" ]; then + echo "The creation of the ${EXPORT_DSN} was not successful. Error message: ${RESP}" + fi fi # Delete Software instance if it already exists @@ -192,24 +188,22 @@ curl -s $DELETE_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X # Add Software Instance echo 'Invoking REST API to add a Software Instance.' -RESP=`curl -s $ADD_SWI_URL -k -X "POST" -d "$ADD_SWI_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $ADD_SWI_URL -k -X "POST" -d "$ADD_SWI_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? -if [ $? -gt 0 ];then exit -1;fi +if [ $? -gt 0 ]; then exit -1; fi # Load the products, features, and FMIDs for a software instance # The response is in format "statusurl":"https:\/\/:ZOSMF_URL:post\/restofurl" # On statusurl can be checked actual status of loading the products, features, and FMIDs echo 'Invoking REST API to load SMP/E managed products from the SMP/E CSI.' - -RESP=`curl -s $LOAD_PRODUCTS_URL -k -X "PUT" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $LOAD_PRODUCTS_URL -k -X "PUT" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? -if [ $? -gt 0 ];then exit -1;fi +if [ $? -gt 0 ]; then exit -1; fi -LOAD_STATUS_URL=`echo $RESP | grep -o '"statusurl":".*"' | cut -f4 -d\" | tr -d '\' 2>/dev/null` -if [ -z "$LOAD_STATUS_URL" ] -then - echo "No response from the REST API call." +LOAD_STATUS_URL=$(echo $RESP | grep -o '"statusurl":".*"' | cut -f4 -d\" | tr -d '\' 2>/dev/null) +if [ -z "$LOAD_STATUS_URL" ]; then + echo "No response from the load product REST API call." >>$LOG_DIR/report.txt exit -1 fi @@ -217,29 +211,26 @@ fi echo 'Invoking REST API to check if load products has finished.' STATUS="" -until [ "$STATUS" = "complete" ] -do -RESP=`curl -s $LOAD_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -sh scripts/check_response.sh "${RESP}" $? -if [ $? -gt 0 ];then exit -1;fi -STATUS=`echo $RESP | grep -o '"status":".*"' | cut -f4 -d\"` -sleep 3 +until [ "$STATUS" = "complete" ]; do + RESP=$(curl -s $LOAD_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + sh scripts/check_response.sh "${RESP}" $? + if [ $? -gt 0 ]; then exit -1; fi + STATUS=$(echo $RESP | grep -o '"status":".*"' | cut -f4 -d\") + sleep 3 done echo "Load Products finished successfully." - # Create JCL that will export Portable Software Instance # The response is in format "statusurl":"https:\/\/:ZOSMF_URL:post\/restofurl" echo 'Invoking REST API to export the software instance.' -RESP=`curl -s $EXPORT_JCL_URL -k -X "POST" -d "$EXPORT_JCL_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS ` +RESP=$(curl -s $EXPORT_JCL_URL -k -X "POST" -d "$EXPORT_JCL_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? -if [ $? -gt 0 ];then exit -1;fi -EXPORT_STATUS_URL=`echo $RESP | grep -o '"statusurl":".*"' | cut -f4 -d\" | tr -d '\' 2>/dev/null` -if [ -z "$EXPORT_STATUS_URL" ] -then - echo "No response from the REST API call." +if [ $? -gt 0 ]; then exit -1; fi +EXPORT_STATUS_URL=$(echo $RESP | grep -o '"statusurl":".*"' | cut -f4 -d\" | tr -d '\' 2>/dev/null) +if [ -z "$EXPORT_STATUS_URL" ]; then + echo "No response from the export REST API call." >>$LOG_DIR/report.txt exit -1 fi @@ -247,96 +238,100 @@ fi echo 'Invoking REST API to check if export has finished.' STATUS="" -until [ "$STATUS" = "complete" ] -do -# Status is not shown until the recentage is not 100 -RESP=`curl -s $EXPORT_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -sh scripts/check_response.sh "${RESP}" $? -if [ $? -gt 0 ];then exit -1;fi -PERCENTAGE=`echo ${RESP} | grep -o '"percentcomplete":".*"' | cut -f4 -d\"` +until [ "$STATUS" = "complete" ]; do + # Status is not shown until the recentage is not 100 + RESP=$(curl -s $EXPORT_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + sh scripts/check_response.sh "${RESP}" $? + if [ $? -gt 0 ]; then exit -1; fi + PERCENTAGE=$(echo ${RESP} | grep -o '"percentcomplete":".*"' | cut -f4 -d\") -echo ${PERCENTAGE} "% of the Export JCL created." + echo ${PERCENTAGE} "% of the Export JCL created." -if [ "$PERCENTAGE" = "100" ] -then - STATUS=`echo $RESP | grep -o '"status":".*"' | cut -f4 -d\"` - DSN=`echo $RESP | grep -o '"jcl":.*\]' | cut -f4 -d\"` + if [ "$PERCENTAGE" = "100" ]; then + STATUS=$(echo $RESP | grep -o '"status":".*"' | cut -f4 -d\") + DSN=$(echo $RESP | grep -o '"jcl":.*\]' | cut -f4 -d\") - echo "The status is: "$STATUS - # Can be 100% but still running - if [ "$STATUS" != "complete" ] && [ "$STATUS" != "running" ] - then - echo "Status of generation of Export JCL failed." - exit -1 + echo "The status is: "$STATUS + # Can be 100% but still running + if [ "$STATUS" != "complete" ] && [ "$STATUS" != "running" ]; then + echo "Status of generation of Export JCL failed." >>$LOG_DIR/report.txt + exit -1 + fi fi -fi -sleep 3 + sleep 3 done -if [ -z "$DSN" ] -then - echo "The creation of export JCL failed" +if [ -z "$DSN" ]; then + echo "The creation of export JCL failed" >>$LOG_DIR/report.txt exit -1 fi echo "Downloading export JCL" -curl -s ${BASE_URL}/zosmf/restfiles/ds/${DSN} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS > EXPORT - -if [ "$ZOSMF_V" = "2.3" ] -then +curl -s ${BASE_URL}/zosmf/restfiles/ds/${DSN} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS >EXPORT + +echo "Showing EXPORT JCL how it looks before the change" +#if [ "$ZOSMF_V" = "2.3" ] +#then +#echo "Changing jobcard and adding SYSAFF" +#sed "s|//IZUD01EX JOB (ACCOUNT),'NAME'|$JOBST1\n$JOBST2|g" EXPORT > EXPJCL0 +# +#echo "Changing working directory from /tmp/ to ${WORK_MOUNT} directory where is zFS mounted" +#sed "s|//SMPWKDIR DD PATH='/tmp/.*'|//SMPWKDIR DD PATH='$WORK_MOUNT'|g" EXPJCL0 > EXPJCL1 +# +#echo "Switching WORKFLOW and CSI datasets because of internal GIMZIP setting" # It is not working when CSI is in the beginning (1st or 2nd) +#sed "s|\.CSI|\.1WORKFLOW|g" EXPJCL1 > EXPJCL2 +#sed "s|\.WORKFLOW|\.CSI|g" EXPJCL2 > EXPJCL3 +#sed "s|\.1WORKFLOW|\.WORKFLOW|g" EXPJCL3 > EXPJCL4 +#sed "s|DSNTYPE=LARGE|DSNTYPE=LARGE,VOL=SER=$VOLUME|g" EXPJCL4 > EXPJCL +# +#rm ./EXPJCL0 +#rm ./EXPJCL1 +#rm ./EXPJCL2 +#rm ./EXPJCL3 +#rm ./EXPJCL4 +# +#else echo "Changing jobcard and adding SYSAFF" -sed "s|//IZUD01EX JOB (ACCOUNT),'NAME'|$JOBST1\n$JOBST2|g" EXPORT > EXPJCL0 - -echo "Changing working directory from /tmp/ to ${WORK_MOUNT} directory where is zFS mounted" -sed "s|//SMPWKDIR DD PATH='/tmp/.*'|//SMPWKDIR DD PATH='$WORK_MOUNT'|g" EXPJCL0 > EXPJCL1 +sed "s|//IZUD01EX JOB (ACCOUNT),'NAME'|$JOBST1\n$JOBST2|g" EXPORT >EXPJCL0 +sed "s|//.*gimzipInputFile.*,|EXPJCL1 +sed "s|// FILEDATA=TEXT| archid=\"ZOS003.ZWE.PSWI.AZWE003.ZFS\"/>|g" EXPJCL1 >EXPJCL2 +sed "s|// DD \*||g" EXPJCL2 >EXPJCL +# sed "s|ZOS003.ZWE.PSWI.|ZWE.PSWI.|g" EXPJCL3 >EXPJCL -echo "Switching WORKFLOW and CSI datasets because of internal GIMZIP setting" # It is not working when CSI is in the beginning (1st or 2nd) -sed "s|\.CSI|\.1WORKFLOW|g" EXPJCL1 > EXPJCL2 -sed "s|\.WORKFLOW|\.CSI|g" EXPJCL2 > EXPJCL3 -sed "s|\.1WORKFLOW|\.WORKFLOW|g" EXPJCL3 > EXPJCL4 -sed "s|DSNTYPE=LARGE|DSNTYPE=LARGE,VOL=SER=$VOLUME|g" EXPJCL4 > EXPJCL - -rm ./EXPJCL0 -rm ./EXPJCL1 -rm ./EXPJCL2 -rm ./EXPJCL3 -rm ./EXPJCL4 - -else -echo "Changing jobcard and adding SYSAFF" -sed "s|//IZUD01EX JOB (ACCOUNT),'NAME'|$JOBST1\n$JOBST2|g" EXPORT > EXPJCL -fi +#fi -sh scripts/submit_jcl.sh "`cat EXPJCL`" -if [ $? -gt 0 ];then exit -1;fi +sh scripts/submit_jcl.sh "$(cat EXPJCL)" +if [ $? -gt 0 ]; then exit -1; fi rm ./EXPJCL rm ./EXPORT -# Pax the directory +# Pax the directory echo "PAXing the final PSWI." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//PAXDIREC EXEC PGM=BPXBATCH" >> JCL -echo "//STDOUT DD SYSOUT=*" >> JCL -echo "//STDERR DD SYSOUT=*" >> JCL -echo "//STDPARM DD *" >> JCL -echo "SH set -x;set -e;" >> JCL -echo "cd ${EXPORT};" >> JCL -echo "pax -wv -f ${TMP_MOUNT}/${SWI_NAME}.pax.Z ." >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" -if [ $? -gt 0 ];then exit -1;fi +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//PAXDIREC EXEC PGM=BPXBATCH" >>JCL +echo "//STDOUT DD SYSOUT=*" >>JCL +echo "//STDERR DD SYSOUT=*" >>JCL +echo "//STDPARM DD *" >>JCL +echo "SH set -x;set -e;" >>JCL +echo "cd ${EXPORT};" >>JCL +echo "pax -wv -f ${TMP_MOUNT}/${SWI_NAME}.pax.Z ." >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" +if [ $? -gt 0 ]; then exit -1; fi rm JCL cd ../.pax -sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} << EOF +set -x +pwd +sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} <> $LOG_FILE + + REASON=$(echo $RESP | grep -o '"reason":') + EMPTY=$(echo $RESP | grep -o '\[\]') + MSG=$(echo $RESP | grep -o '"messageText":') + if [ -n "$REASON" ] || [ -n "$MSG" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ -n "$EMPTY" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE + if [ -n "$EMPTY" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ $RESPCODE -ne 0 ] - then - echo "Info: Logging to file ${LOG_FILE}." - if [ "$RESP" != "" ] - then - echo "$RESP" >> $LOG_FILE + if [ $RESPCODE -ne 0 ]; then + echo "Info: Logging to file ${LOG_FILE}." + if [ "$RESP" != "" ]; then + echo "$RESP" >>$LOG_FILE else - echo "REST API call wasn't successful." >> $LOG_FILE - fi + echo "REST API call wasn't successful." >>$LOG_FILE + fi else echo "REST API call was successful." fi - - return - } + + return +} # Create a log file touch $LOG_FILE @@ -68,69 +63,67 @@ touch $LOG_FILE # Delete the Software instance echo 'Invoking REST API to delete the first Software Instance.' -RESP=`curl -s $DELETE_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $DELETE_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) check_response "${RESP}" $? # Delete data set with export jobs echo "Invoking REST API to delete ${EXPORT_DSN} data set with export jobs." -RESP=`curl -s $EXPORT_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $EXPORT_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) check_response "${RESP}" $? # Delete echo "Invoking REST API to delete ${WORKFLOW_DSN} data set." -RESP=`curl -s $WORKFLOW_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $WORKFLOW_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) check_response "${RESP}" $? # Unmount and delete echo "Unmounting and deleting zFS ${TMP_ZFS}." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL -echo "//SYSTSPRT DD SYSOUT=*" >> JCL -echo "//SYSTSOUT DD SYSOUT=*" >> JCL -echo "//SYSTSIN DD * " >> JCL -echo "UNMOUNT FILESYSTEM('${TMP_ZFS}') + " >> JCL -echo "IMMEDIATE" >> JCL -echo "/*" >> JCL -echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${TMP_ZFS}" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL +echo "//SYSTSPRT DD SYSOUT=*" >>JCL +echo "//SYSTSOUT DD SYSOUT=*" >>JCL +echo "//SYSTSIN DD * " >>JCL +echo "UNMOUNT FILESYSTEM('${TMP_ZFS}') + " >>JCL +echo "IMMEDIATE" >>JCL +echo "/*" >>JCL +echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${TMP_ZFS}" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" # Not checking results so the script doesn't fail rm JCL -if [ "$ZOSMF_V" = "2.3" ] -then + # Unmount and delete echo "Unmounting and deleting zFS ${WORK_ZFS}." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL -echo "//SYSTSPRT DD SYSOUT=*" >> JCL -echo "//SYSTSOUT DD SYSOUT=*" >> JCL -echo "//SYSTSIN DD * " >> JCL -echo "UNMOUNT FILESYSTEM('${WORK_ZFS}') + " >> JCL -echo "IMMEDIATE" >> JCL -echo "/*" >> JCL -echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${WORK_ZFS}" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL +echo "//SYSTSPRT DD SYSOUT=*" >>JCL +echo "//SYSTSOUT DD SYSOUT=*" >>JCL +echo "//SYSTSIN DD * " >>JCL +echo "UNMOUNT FILESYSTEM('${WORK_ZFS}') + " >>JCL +echo "IMMEDIATE" >>JCL +echo "/*" >>JCL +echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${WORK_ZFS}" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" # Not checking results so the script doesn't fail rm JCL -fi echo "Invoking REST API to unmount Zowe zFS ${ZOWE_ZFS} from its mountpoint." -RESP=`curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$UNMOUNT_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$UNMOUNT_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) check_response "${RESP}" $? diff --git a/pswi/051_test_workflows.sh b/pswi/051_test_workflows.sh new file mode 100644 index 0000000000..fed47c1345 --- /dev/null +++ b/pswi/051_test_workflows.sh @@ -0,0 +1,28 @@ +#!/bin/sh +#version=1.0 + +export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}" + +echo "" +echo "" +echo "Script for testing workflows..." +echo "Host :" $ZOSMF_URL +echo "Port :" $ZOSMF_PORT +echo "SSH Port :" $ZZOW_SSH_PORT +echo "z/OSMF system :" $ZOSMF_SYSTEM +echo "Test HLQ :" $TEST_HLQ +echo "Test mount point :" $TEST_MOUNT +echo "Work zFS :" $WORK_ZFS # For z/OSMF v2.3 +echo "Work mount point :" $WORK_MOUNT # For z/OSMF v2.3 + +echo "Mounting ${TEST_HLQ}.ZFS" +sh scripts/tmp_mounts.sh "${TEST_HLQ}.ZFS" "${TEST_MOUNT}" +if [ $? -gt 0 ]; then exit -1; fi + +echo "Registering/testing the configuration workflow ${TEST_HLQ}.WORKFLOW(ZWECONF)" +sh scripts/wf_run_test.sh "${TEST_HLQ}.WORKFLOW(ZWECONF)" +if [ $? -gt 0 ];then exit -1;fi + +echo "Registering/testing the configuration workflow ${TEST_MOUNT}/files/workflows/ZWECONF.xml" +sh scripts/wf_run_test.sh "${TEST_MOUNT}/files/workflows/ZWECONF.xml" +if [ $? -gt 0 ];then exit -1;fi diff --git a/pswi/05_test.sh b/pswi/05_test.sh index 523458b3c3..94afd818a2 100644 --- a/pswi/05_test.sh +++ b/pswi/05_test.sh @@ -15,10 +15,10 @@ echo "Test HLQ :" $TEST_HLQ echo "Test mount point :" $TEST_MOUNT echo "Job name :" $JOBNAME echo "Deploy name :" $DEPLOY_NAME -echo "Software instance name :" $DEPLOY_NAME +echo "Software instance name :" $DEPLOY_NAME echo "Temporary directory :" $TMP_MOUNT echo "Temporary zFS :" $TMP_ZFS -echo "Work zFS :" $WORK_ZFS # For z/OSMF v2.3 +echo "Work zFS :" $WORK_ZFS # For z/OSMF v2.3 echo "Work mount point :" $WORK_MOUNT # For z/OSMF v2.3 echo "Storage Class :" $STORCLAS echo "Volume :" $VOLUME @@ -31,10 +31,10 @@ NEW_PSWI_JSON='{"name":"'${PSWI}'","system":"'${ZOSMF_SYSTEM}'","description":"Z # Check if temp zFS for PSWI is mounted echo "Checking/mounting ${TMP_ZFS}" sh scripts/tmp_mounts.sh "${TMP_ZFS}" "${TMP_MOUNT}" -if [ $? -gt 0 ];then exit -1;fi +if [ $? -gt 0 ]; then exit -1; fi cd ../.pax -sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} << EOF +sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} < JCL -echo ${JOBST2} >> JCL -echo "//UNPAXDIR EXEC PGM=BPXBATCH" >> JCL -echo "//STDOUT DD SYSOUT=*" >> JCL -echo "//STDERR DD SYSOUT=*" >> JCL -echo "//STDPARM DD *" >> JCL -echo "SH set -x;set -e;" >> JCL -echo "mkdir -p ${EXPORT};" >> JCL -echo "cd ${EXPORT};" >> JCL -echo "pax -rv -f ${TMP_MOUNT}/${SWI_NAME}.pax.Z;" >> JCL -echo "rm ${TMP_MOUNT}/${SWI_NAME}.pax.Z;" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" -if [ $? -gt 0 ];then exit -1;fi +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//UNPAXDIR EXEC PGM=BPXBATCH" >>JCL +echo "//STDOUT DD SYSOUT=*" >>JCL +echo "//STDERR DD SYSOUT=*" >>JCL +echo "//STDPARM DD *" >>JCL +echo "SH set -x;set -e;" >>JCL +echo "mkdir -p ${EXPORT};" >>JCL +echo "cd ${EXPORT};" >>JCL +echo "pax -rv -f ${TMP_MOUNT}/${SWI_NAME}.pax.Z;" >>JCL +echo "rm ${TMP_MOUNT}/${SWI_NAME}.pax.Z;" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" +if [ $? -gt 0 ]; then exit -1; fi rm JCL - -if [ "$ZOSMF_V" = "2.4" ]; then - echo "Not covering deployment on z/OSMF 2.4 yet." -#TODO: it's same as for 2.3 without work zfs - manage this in deploy_test_2_3.py and add api call to register PSWI -# z/OSMF 2.4 - -# Delete Portable Software Instance if it already exists -# No check of return code because if it does not exist the script would fail (return code 404) -#echo 'Invoking REST API to delete the portable software instance if the previous test did not delete it.' -# -#RESP=`curl -s ${BASE_URL}/zosmf/swmgmt/pswi/${ZOSMF_SYSTEM}/${PSWI} -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS ` -# -## The response is in format "statusurl":"https:\/\/:ZOSMF_URL:post\/restofurl" -#echo 'Invoking REST API to register a Portable Software Instance' -# -#RESP=`curl -s ${BASE_URL}/zosmf/swmgmt/pswi -k -X "POST" -d "$NEW_PSWI_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS ` -#sh scripts/check_response.sh "${RESP}" $? -#if [ $? -gt 0 ];then exit -1;fi -# -#EXPORT_STATUS_URL=`echo $RESP | grep -o '"statusurl":".*"' | cut -f4 -d\" | tr -d '\' 2>/dev/null` -#if [ "$EXPORT_STATUS_URL" == "" ] -#then -# echo "No response from the REST API call." -# exit -1 -#fi -# -#STATUS="" -#until [ "$STATUS" == "complete" ] -#do -#RESP=`curl -s $EXPORT_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -#sh scripts/check_response.sh "${RESP}" $? -#if [ $? -gt 0 ];then exit -1;fi -# -#STATUS=`echo $RESP | grep -o '"status":".*"' | cut -f4 -d\"` -#echo "The status is: "$STATUS -# -#if [ "$STATUS" != "complete" ] && [ "$STATUS" != "running" ] -#then -# echo "Registration of PSWI in z/OSMF failed." -# exit -1 -#fi -#sleep 3 -#done -# -#google-chrome --version -#RC=$? -# -#if [ $RC -gt 0 ]; -#then -#echo "Checking if the system is CentOS or RHEL." -#yum version -#RC=$? -# -#if [ $RC -gt 0 ]; -#then -# echo "Installing Chrome on Debian/Ubuntu." -# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -# sudo apt-get install ./google-chrome-stable_current_*.rpm -#else -# echo "Installing Chrome on CentOS or RHEL." -# wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm -# sudo yum install ./google-chrome-stable_current_*.rpm -#fi -#fi -# -#echo "Downloading Chromedriver" -#version=`google-chrome --product-version` -#url="https://chromedriver.storage.googleapis.com/"${version}"/chromedriver_linux64.zip" -#rm chromedriver.zip -#rm chromedriver -#wget $url -nc -O chromedriver.zip -# -## Run the deployment test -#echo " Running the deployment test for z/OSMF version 2.4" -#DIR=`pwd` -#PATH=$DIR/scripts/spool_files.sh:$PATH -#pip install selenium -#pip install requests -# -#export HEADLESS="true" -#python ../PSI_testing/deploy_test.py -# -#rm chromedriver - -else # z/OSMF 2.3 # Check if work zFS for PSWI is mounted echo "Checking/mounting ${WORK_ZFS}" sh scripts/tmp_mounts.sh "${WORK_ZFS}" "${WORK_MOUNT}" -if [ $? -gt 0 ];then exit -1;fi +if [ $? -gt 0 ]; then exit -1; fi # Run the deployment test echo " Running the deployment test for z/OSMF version 2.3" pip install requests python scripts/deploy_test_2_3.py - -fi diff --git a/pswi/06_test_cleanup.sh b/pswi/06_test_cleanup.sh index f426f11ed5..a45144a454 100644 --- a/pswi/06_test_cleanup.sh +++ b/pswi/06_test_cleanup.sh @@ -2,7 +2,7 @@ #version=1.0 export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}" -LOG_FILE=${LOGDIR}log_pswi_"`date +%y-%j-%H-%M-%S`" +LOG_FILE=$LOG_DIR/log_test_cleanup.txt echo "" echo "" @@ -20,166 +20,156 @@ echo "ACCOUNT :" $ACCOUNT echo "SYSAFF :" $SYSAFF echo "z/OSMF version :" $ZOSMF_V - # URLs DELETE_PSWI_URL="${BASE_URL}/zosmf/swmgmt/pswi/${ZOSMF_SYSTEM}/${PSWI}" WORKFLOW_LIST_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows?owner=${ZOSMF_USER}&workflowName=${WORKFLOW_NAME}.*" DELETE_DEPL_SWI_URL="${BASE_URL}/zosmf/swmgmt/swi/${ZOSMF_SYSTEM}/${DEPLOY_NAME}" - check_response() { RESP=$1 RESPCODE=$2 - - REASON=`echo $RESP | grep -o '"reason":'` - EMPTY=`echo $RESP | grep -o '\[\]'` - MSG=`echo $RESP | grep -o '"messageText":'` - if [ -n "$REASON" ] || [ -n "$MSG" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE - fi - if [ -n "$EMPTY" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE + + REASON=$(echo $RESP | grep -o '"reason":') + EMPTY=$(echo $RESP | grep -o '\[\]') + MSG=$(echo $RESP | grep -o '"messageText":') + if [ -n "$REASON" ] || [ -n "$MSG" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE + fi + if [ -n "$EMPTY" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ $RESPCODE -ne 0 ] - then - echo "Info: Logging to file ${LOG_FILE}." - if [ -n "$RESP" ] - then - echo "$RESP" >> $LOG_FILE + if [ $RESPCODE -ne 0 ]; then + echo "Info: Logging to file ${LOG_FILE}." + if [ -n "$RESP" ]; then + echo "$RESP" >>$LOG_FILE else - echo "REST API call wasn't successful." >> $LOG_FILE - fi + echo "REST API call wasn't successful." >>$LOG_FILE + fi else echo "REST API call was successful." fi - - return - } + + return +} # Create a log file touch $LOG_FILE - + # Delete the Software instance echo "Invoking REST API to delete the Software Instance created by deployment." -RESP=`curl -s $DELETE_DEPL_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $DELETE_DEPL_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) check_response "${RESP}" $? -if [ "$ZOSMF_V" = "2.4" ] -then +if [ "$ZOSMF_V" = "2.4" ]; then -# Delete the Portable Software Instance -echo "Invoking REST API to delete the portable software instance." + # Delete the Portable Software Instance + echo "Invoking REST API to delete the portable software instance." -RESP=`curl -s $DELETE_PSWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -check_response "${RESP}" $? + RESP=$(curl -s $DELETE_PSWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + check_response "${RESP}" $? fi # Unmount and delete echo "Unmounting and deleting zFS ${TMP_ZFS}." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL -echo "//SYSTSPRT DD SYSOUT=*" >> JCL -echo "//SYSTSOUT DD SYSOUT=*" >> JCL -echo "//SYSTSIN DD * " >> JCL -echo "UNMOUNT FILESYSTEM('${TMP_ZFS}') + " >> JCL -echo "IMMEDIATE" >> JCL -echo "/*" >> JCL -echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${TMP_ZFS}" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL +echo "//SYSTSPRT DD SYSOUT=*" >>JCL +echo "//SYSTSOUT DD SYSOUT=*" >>JCL +echo "//SYSTSIN DD * " >>JCL +echo "UNMOUNT FILESYSTEM('${TMP_ZFS}') + " >>JCL +echo "IMMEDIATE" >>JCL +echo "/*" >>JCL +echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${TMP_ZFS}" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" # Not checking results so the script doesn't fail rm JCL -if [ "$ZOSMF_V" = "2.3" ] -then -# Unmount and delete -echo "Unmounting and deleting zFS ${WORK_ZFS}." - -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL -echo "//SYSTSPRT DD SYSOUT=*" >> JCL -echo "//SYSTSOUT DD SYSOUT=*" >> JCL -echo "//SYSTSIN DD * " >> JCL -echo "UNMOUNT FILESYSTEM('${WORK_ZFS}') + " >> JCL -echo "IMMEDIATE" >> JCL -echo "/*" >> JCL -echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${WORK_ZFS}" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" -# Not checking results so the script doesn't fail -rm JCL -fi +if [ "$ZOSMF_V" = "2.3" ]; then + # Unmount and delete + echo "Unmounting and deleting zFS ${WORK_ZFS}." + + echo ${JOBST1} >JCL + echo ${JOBST2} >>JCL + echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL + echo "//SYSTSPRT DD SYSOUT=*" >>JCL + echo "//SYSTSOUT DD SYSOUT=*" >>JCL + echo "//SYSTSIN DD * " >>JCL + echo "UNMOUNT FILESYSTEM('${WORK_ZFS}') + " >>JCL + echo "IMMEDIATE" >>JCL + echo "/*" >>JCL + echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL + echo "//SYSPRINT DD SYSOUT=*" >>JCL + echo "//SYSIN DD *" >>JCL + echo " DELETE ${WORK_ZFS}" >>JCL + echo "/*" >>JCL + + sh scripts/submit_jcl.sh "$(cat JCL)" + # Not checking results so the script doesn't fail + rm JCL +fi # Unmount and delete echo "Unmounting and deleting zFS ${TEST_HLQ}.ZFS." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL -echo "//SYSTSPRT DD SYSOUT=*" >> JCL -echo "//SYSTSOUT DD SYSOUT=*" >> JCL -echo "//SYSTSIN DD * " >> JCL -echo "UNMOUNT FILESYSTEM('${TEST_HLQ}.ZFS') + " >> JCL -echo "IMMEDIATE" >> JCL -echo "/*" >> JCL -echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${TEST_HLQ}.ZFS" >> JCL -echo "/*" >> JCL - -sh scripts/submit_jcl.sh "`cat JCL`" +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL +echo "//SYSTSPRT DD SYSOUT=*" >>JCL +echo "//SYSTSOUT DD SYSOUT=*" >>JCL +echo "//SYSTSIN DD * " >>JCL +echo "UNMOUNT FILESYSTEM('${TEST_HLQ}.ZFS') + " >>JCL +echo "IMMEDIATE" >>JCL +echo "/*" >>JCL +echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${TEST_HLQ}.ZFS" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" # Not checking results so the script doesn't fail rm JCL # Delete deployed datasets echo "Deleting deployed datasets." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//DELTZOWE EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${TEST_HLQ}.** MASK" >> JCL -echo " SET MAXCC=0" >> JCL -echo "/*" >> JCL +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//DELTZOWE EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${TEST_HLQ}.** MASK" >>JCL +echo " SET MAXCC=0" >>JCL +echo "/*" >>JCL -sh scripts/submit_jcl.sh "`cat JCL`" +sh scripts/submit_jcl.sh "$(cat JCL)" rm JCL -if [ "$ZOSMF_V" = "2.4" ] -then -# Delete Post-deployment workflow in z/OSMF -echo "Invoking REST API to delete Post-deployment workflows." +if [ "$ZOSMF_V" = "2.4" ]; then + # Delete Post-deployment workflow in z/OSMF + echo "Invoking REST API to delete Post-deployment workflows." -# Get workflowKey for Post-deployment workflow owned by user -RESP=`curl -s $WORKFLOW_LIST_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -check_response "${RESP}" $? -WFKEYS=`echo $RESP | sed 's/},/},\n/g' | grep -oP '"workflowKey":".*"' | cut -f4 -d\"` + # Get workflowKey for Post-deployment workflow owned by user + RESP=$(curl -s $WORKFLOW_LIST_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + check_response "${RESP}" $? + WFKEYS=$(echo $RESP | sed 's/},/},\n/g' | grep -oP '"workflowKey":".*"' | cut -f4 -d\") -IFS=$'\n' -for KEY in $WFKEYS -do + IFS=$'\n' + for KEY in $WFKEYS; do -echo "Deleting a workflow." -RESP=`curl -s ${BASE_URL}/zosmf/workflow/rest/1.0/workflows/${KEY} -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -check_response "${RESP}" $? - -done + echo "Deleting a workflow." + RESP=$(curl -s ${BASE_URL}/zosmf/workflow/rest/1.0/workflows/${KEY} -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + check_response "${RESP}" $? + + done fi diff --git a/pswi/07_smpe_cleanup.sh b/pswi/07_smpe_cleanup.sh index 53106174b3..97e7830b9f 100644 --- a/pswi/07_smpe_cleanup.sh +++ b/pswi/07_smpe_cleanup.sh @@ -2,7 +2,7 @@ #version=1.0 export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}" -LOG_FILE=${LOGDIR}log_pswi_"`date +%y-%j-%H-%M-%S`" +LOG_FILE=$LOG_DIR/log_pswi_smpe_cleanup.txt echo "" echo "" @@ -17,60 +17,56 @@ echo "Directory for logs :" $LOGDIR # URLs ACTION_ZOWE_ZFS_URL="${BASE_URL}/zosmf/restfiles/mfs/${ZOWE_ZFS}" -# JSONs +# JSONs UNMOUNT_ZFS_JSON='{"action":"unmount"}' check_response() { RESP=$1 RESPCODE=$2 - - REASON=`echo $RESP | grep -o '"reason":'` - EMPTY=`echo $RESP | grep -o '\[\]'` - MSG=`echo $RESP | grep -o '"messageText":'` - if [ -n "$REASON" ] || [ -n "$MSG" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE + + REASON=$(echo $RESP | grep -o '"reason":') + EMPTY=$(echo $RESP | grep -o '\[\]') + MSG=$(echo $RESP | grep -o '"messageText":') + if [ -n "$REASON" ] || [ -n "$MSG" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ -n "$EMPTY" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE + if [ -n "$EMPTY" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ $RESPCODE -ne 0 ] - then - echo "Info: Logging to file ${LOG_FILE}." - if [ -n "$RESP" ] - then - echo "$RESP" >> $LOG_FILE + if [ $RESPCODE -ne 0 ]; then + echo "Info: Logging to file ${LOG_FILE}." + if [ -n "$RESP" ]; then + echo "$RESP" >>$LOG_FILE else - echo "REST API call wasn't successful." >> $LOG_FILE - fi + echo "REST API call wasn't successful." >>$LOG_FILE + fi else echo "REST API call was successful." fi - - return - } + + return +} # Create a log file touch $LOG_FILE echo "Invoking REST API to unmount SMPE zFS ${ZOWE_ZFS} from its mountpoint." -RESP=`curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$UNMOUNT_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$UNMOUNT_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) check_response "${RESP}" $? # Delete SMPE datasets -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//DELTZOWE EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${CSIHLQ}.** MASK" >> JCL -echo " SET MAXCC=0" >> JCL -echo "/*" >> JCL +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//DELTZOWE EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${CSIHLQ}.** MASK" >>JCL +echo " SET MAXCC=0" >>JCL +echo "/*" >>JCL -sh scripts/submit_jcl.sh "`cat JCL`" +sh scripts/submit_jcl.sh "$(cat JCL)" rm JCL diff --git a/pswi/08_presmpe_cleanup.sh b/pswi/08_presmpe_cleanup.sh index df0a83805c..df7521e12a 100644 --- a/pswi/08_presmpe_cleanup.sh +++ b/pswi/08_presmpe_cleanup.sh @@ -2,7 +2,7 @@ #version=1.0 export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}" -LOG_FILE=${LOGDIR}log_pswi_"`date +%y-%j-%H-%M-%S`" +LOG_FILE=$LOG_DIR/log_pswi_presmpe_cleanup echo "" echo "" @@ -17,49 +17,45 @@ echo "Directory for logs :" $LOGDIR check_response() { RESP=$1 RESPCODE=$2 - - REASON=`echo $RESP | grep -o '"reason":'` - EMPTY=`echo $RESP | grep -o '\[\]'` - MSG=`echo $RESP | grep -o '"messageText":'` - if [ -n "$REASON" ] || [ -n "$MSG" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE + + REASON=$(echo $RESP | grep -o '"reason":') + EMPTY=$(echo $RESP | grep -o '\[\]') + MSG=$(echo $RESP | grep -o '"messageText":') + if [ -n "$REASON" ] || [ -n "$MSG" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ -n "$EMPTY" ] - then - echo "Info: Logging to file ${LOG_FILE}." - echo "$RESP" >> $LOG_FILE + if [ -n "$EMPTY" ]; then + echo "Info: Logging to file ${LOG_FILE}." + echo "$RESP" >>$LOG_FILE fi - if [ $RESPCODE -ne 0 ] - then - echo "Info: Logging to file ${LOG_FILE}." - if [ -n "$RESP" ] - then - echo "$RESP" >> $LOG_FILE + if [ $RESPCODE -ne 0 ]; then + echo "Info: Logging to file ${LOG_FILE}." + if [ -n "$RESP" ]; then + echo "$RESP" >>$LOG_FILE else - echo "REST API call wasn't successful." >> $LOG_FILE - fi + echo "REST API call wasn't successful." >>$LOG_FILE + fi else echo "REST API call was successful." fi - - return - } + + return +} # Create a log file touch $LOG_FILE # Delete pre-SMPE datasets -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//DELTZOWE EXEC PGM=IDCAMS" >> JCL -echo "//SYSPRINT DD SYSOUT=*" >> JCL -echo "//SYSIN DD *" >> JCL -echo " DELETE ${SMPE}.** MASK" >> JCL -echo " SET MAXCC=0" >> JCL -echo "/*" >> JCL +echo ${JOBST1} >JCL +echo ${JOBST2} >>JCL +echo "//DELTZOWE EXEC PGM=IDCAMS" >>JCL +echo "//SYSPRINT DD SYSOUT=*" >>JCL +echo "//SYSIN DD *" >>JCL +echo " DELETE ${SMPE}.** MASK" >>JCL +echo " SET MAXCC=0" >>JCL +echo "/*" >>JCL -sh scripts/submit_jcl.sh "`cat JCL`" +sh scripts/submit_jcl.sh "$(cat JCL)" rm JCL diff --git a/pswi/PSWI-marist.sh b/pswi/PSWI-marist.sh index 80441508af..50c719367d 100755 --- a/pswi/PSWI-marist.sh +++ b/pswi/PSWI-marist.sh @@ -1,4 +1,4 @@ -export ZOSMF_URL="https://zzow07.zowe.marist.cloud" +export ZOSMF_URL="https://zzow10.zowe.marist.cloud" export ZOSMF_PORT=10443 export ZOSMF_SYSTEM="S0W1" export DIR="/u/zowead2" @@ -9,7 +9,9 @@ export VOLUME="ZOS003" export TEST_HLQ="ZOWEAD2.PSWIT" export SYSAFF="(S0W1)" export ACCOUNT=1 - +CURR_TIME=$(date +%s) +export LOG_DIR="logs/$CURR_TIME" +mkdir -p $LOG_DIR # Variables for workflows # SMPE export TZONE="TZONE" @@ -30,7 +32,7 @@ export TEST_MOUNT="${DIR}/test_mount" export EXPORT="${TMP_MOUNT}/export/" export WORK_MOUNT="${DIR}/work" export WORK_ZFS="ZOWEAD2.WORK.ZFS" -export ZOSMF_V="2.3" +export ZOSMF_V="3.1" export SMPE_WF_NAME="ZOWE_SMPE_WF" export PTF_WF_NAME="ZOWE_PTF_WF" export HOST=${ZOSMF_URL#https:\/\/} @@ -41,7 +43,7 @@ if [ -f ../.pax/zowe-smpe.zip ]; then mkdir -p "unzipped" unzip ../.pax/zowe-smpe.zip -d unzipped else - echo "zowe-smpe file not found" + echo "zowe-smpe file not found" >>"$LOG_DIR/report.txt" exit -1 fi @@ -73,7 +75,7 @@ else if [ -f ../.pax/${FMID}.zip ]; then unzip ../.pax/${FMID}.zip -d unzipped else - echo "File with FMID not found" + echo "File with FMID not found" >>"$LOG_DIR/report.txt" exit -1 fi fi @@ -90,6 +92,14 @@ export WORKFLOW_DSN=${CSIHLQ}.WORKFLOW export ZOWE_ZFS="${CSIHLQ}.ZFS" export VERSION=$(cat ../manifest.json.template | grep -o '"version": ".*"' | head -1 | cut -f4 -d\") +# Initialize variables +presmpe=0 +smpe=0 +ptf=0 +create=0 +test=0 +wf_test=0 + # Upload and prepare all files sh 00_presmpe.sh presmpe=$? @@ -126,6 +136,11 @@ if [ $presmpe -eq 0 ]; then sh 05_test.sh test=$? + if [ $test -eq 0 ]; then + #test the workflows + sh 051_test_workflows.sh + wf_test=$? + fi # Cleanup after the test sh 06_test_cleanup.sh fi @@ -141,23 +156,28 @@ if [ $presmpe -eq 0 ]; then # Clean RELFILEs and PTFs sh 08_presmpe_cleanup.sh fi +else + # Clean RELFILEs and PTFs + sh 08_presmpe_cleanup.sh fi echo "" echo "" -if [ $smpe -ne 0 ] || [ $ptf -ne 0 ] || [ $create -ne 0 ] || [ $test -ne 0 ] || [ $presmpe -ne 0 ]; then - echo "Build unsuccessful!" +if [ $smpe -ne 0 ] || [ $ptf -ne 0 ] || [ $create -ne 0 ] || [ $test -ne 0 ] || [ $presmpe -ne 0 ] || [ $wf_test -ne 0 ]; then + echo "Build unsuccessful!" >>"$LOG_DIR/report.txt" if [ $presmpe -ne 0 ]; then - echo "Pre-SMP/E wasn't successful." + echo "Pre-SMP/E wasn't successful." >>"$LOG_DIR/report.txt" elif [ $smpe -ne 0 ]; then - echo "SMP/E wasn't successful." + echo "SMP/E wasn't successful." >>"$LOG_DIR/report.txt" elif [ $ptf -ne 0 ]; then - echo "Applying PTFs wasn't successful." + echo "Applying PTFs wasn't successful." >>"$LOG_DIR/report.txt" elif [ $create -ne 0 ]; then - echo "Creation of PSWI wasn't successful." + echo "Creation of PSWI wasn't successful." >>"$LOG_DIR/report.txt" elif [ $test -ne 0 ]; then - echo "Testing of PSWI wasn't successful." + echo "Testing of PSWI wasn't successful." >>"$LOG_DIR/report.txt" + elif [ $wf_test -ne 0 ]; then + echo "Workflow testing wasn't successful." >>"$LOG_DIR/report.txt" fi exit -1 else diff --git a/pswi/ZWECONF_test.sh b/pswi/ZWECONF_test.sh new file mode 100755 index 0000000000..2fb2696dc3 --- /dev/null +++ b/pswi/ZWECONF_test.sh @@ -0,0 +1,87 @@ +export ZOSMF_URL="https://zzow10.zowe.marist.cloud" +export ZOSMF_PORT=10443 +export ZOSMF_SYSTEM="S0W1" +export JOBNAME="ZWECONF1" +export HOST=${ZOSMF_URL#https:\/\/} +export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}" +CURR_TIME=$(date +%s) +export LOG_DIR="logs/$CURR_TIME" +mkdir -p $LOG_DIR +WORK_MOUNT="/tmp" + +echo "Changing runtime path in ZWECONF.properties." + +cp ../workflows/files/ZWECONF.properties ./ZWECONF.properties +sed "s|runtimeDirectory=|runtimeDirectory=${WORK_MOUNT}|g" ./ZWECONF.properties >_ZWECONF +sed "s|java_home=|java_home=#delete_me#|g" _ZWECONF >ZWECONF +sed "s|node_home=|node_home=#delete_me#|g" ZWECONF >_ZWECONF + +echo "Changing the configuration workflow to be fully automated." + +cp ../workflows/files/ZWECONF.xml ./ZWECONF.xml +sed "s|false|true|g" ./ZWECONF.xml >ZWECONFX + +sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} <JCL +echo "/*JOBPARM SYSAFF=(${ZOSMF_SYSTEM})" >>JCL +echo "//UNPAXDIR EXEC PGM=BPXBATCH" >>JCL +echo "//STDOUT DD SYSOUT=*" >>JCL +echo "//STDERR DD SYSOUT=*" >>JCL +echo "//STDPARM DD *" >>JCL +echo "SH set -x;set -e;" >>JCL +echo "cd ${WORK_MOUNT};" >>JCL +echo "iconv -f IBM-1047 -t ISO8859-1 zowe.yaml > zowe_.yaml;" >>JCL +echo "/*" >>JCL + +sh scripts/submit_jcl.sh "$(cat JCL)" +if [ $? -gt 0 ]; then exit -1; fi +rm JCL + +sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} <diff.txt || true + +diff diff.txt scripts/base_diff.txt >final_diff.txt || true + +concat=$(cat final_diff.txt) + +if [ -n "$concat" ] +then + echo "There are some discrepancies between the example-zowe.yaml and the zowe.yaml created by ZWECONF.xml workflow." + echo "Please add to or delete from the ZWECONF.xml workflow what needs or doesn't need to be there." + echo "E.g. if there is a new variable you need to add it first to the workflow variables, then add the variable to the" + echo "'main_variables' step and then also to the step where the zowe.yaml is created." + echo "If there was added/deleted just a comment in the example-zowe.yaml please add it also to the workflow so" + echo "this step is not failing." + echo "Here is the output from the diff command:" # They will surely know what is diff cmd, right + while read -r line; do + if [[ "$line" =~ ^\< ]]; then + echo $line >> final_final_diff.txt + fi + done # Security related configurations. This setup is optional. +> security: +> # security product name. Can be RACF, ACF2 or TSS +> product: RACF +> # security group name +> groups: +> # Zowe admin user group +> admin: ZWEADMIN +> # Zowe STC group +> stc: ZWEADMIN +> # Zowe SysProg group +> sysProg: ZWEADMIN +> # security user name +> users: +> # Zowe runtime user name of main service +> zowe: ZWESVUSR +> # Zowe runtime user name of ZIS +> zis: ZWESIUSR +> # STC names +> stcs: +> # STC name of Zowe main service +> zowe: ZWESLSTC +> # STC name of Zowe ZIS +> zis: ZWESISTC +> # STC name of Zowe ZIS Auxiliary Server +> aux: ZWESASTC +100,103c100,103 +< certificate: +< # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS +< type: PKCS12 +< pkcs12: +--- +> # certificate: +> # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS +> # type: +> # pkcs12: +106c106 +< directory: /var/zowe/keystore +--- +> # directory: +281c281 +< runtimeDirectory: "" +--- +> runtimeDirectory: "/tmp" +456c456 +< home: "" +--- +> home: "#delete_me#" +471c471 +< home: "" +--- +> home: "#delete_me#" diff --git a/pswi/scripts/check_response.sh b/pswi/scripts/check_response.sh index b9b280848e..2a2deb11cd 100644 --- a/pswi/scripts/check_response.sh +++ b/pswi/scripts/check_response.sh @@ -1,17 +1,15 @@ RESP=$1 RESPCODE=$2 - -REASON=`echo $RESP | grep -o '"reason":'` -MSG=`echo $RESP | grep -o '"messageText":'` -if [ -n "$REASON" ] || [ -n "$MSG" ] -then - echo $RESP + +REASON=$(echo $RESP | grep -o '"reason":') +MSG=$(echo $RESP | grep -o '"messageText":') +if [ -n "$REASON" ] || [ -n "$MSG" ]; then + echo $RESP >>$LOG_DIR/report.txt exit -1 -fi -if [ $RESPCODE -ne 0 ] -then - echo "REST API call failed." - echo $RESP +fi +if [ $RESPCODE -ne 0 ]; then + echo "REST API call failed." >>$LOG_DIR/report.txt + echo $RESP >>$LOG_DIR/report.txt exit -1 else echo "REST API call was successful." diff --git a/pswi/scripts/deploy_test_2_3.py b/pswi/scripts/deploy_test_2_3.py index f06a631379..7163577ce5 100644 --- a/pswi/scripts/deploy_test_2_3.py +++ b/pswi/scripts/deploy_test_2_3.py @@ -196,8 +196,8 @@ def create_swi(self): {"name": "ZOWE Mount Workflow", "description": "This workflow performs mount action of ZOWE zFS.", "location": {"dsname": self.hlq + ".WORKFLOW(ZWEWRF02)"}}, - {"name": "ZOWE Configuration of Zowe 2.0", - "description": "This workflow configures Zowe v2.0.", + {"name": "ZOWE Configuration of Zowe 3.0", + "description": "This workflow configures Zowe v3.0.", "location": {"dsname": self.hlq + ".WORKFLOW(ZWECONF)"}}, {"name":"ZOWE Creation of CSR request workflow", "description":"This workflow creates a certificate sign request.", diff --git a/pswi/scripts/spool_files.sh b/pswi/scripts/spool_files.sh index ff8fd0df4f..289fe3ce8c 100644 --- a/pswi/scripts/spool_files.sh +++ b/pswi/scripts/spool_files.sh @@ -1,22 +1,23 @@ # $1 = JOBNAME # $2 = JOBID - + IDENTIFIER="${1}/${2}" JOBNAME=${1} +JOB_OUTPUT_DIR=$LOG_DIR/jobs/output +JOB_OUTPUT_FILE=$JOB_OUTPUT_DIR/$JOBNAME_$2 -RESP=`curl -s ${BASE_URL}/zosmf/restjobs/jobs/${IDENTIFIER}/files -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +RESP=$(curl -s ${BASE_URL}/zosmf/restjobs/jobs/${IDENTIFIER}/files -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "$RESP" $? -if [ $? -gt 0 ];then exit $?;fi +if [ $? -gt 0 ]; then exit $?; fi echo $RESP | sed 's/},/},\n/g' | grep -o '"records-url":".*records"' | cut -f4 -d\" | tr -d '\' 2>/dev/null 1>urls - -mkdir -p $JOBNAME -while read -r line -do - curl -s $line?mode=text -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS >> $IDENTIFIER -done < urls - +mkdir -p $JOB_OUTPUT_DIR + +while read -r line; do + curl -s $line?mode=text -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS >>$JOB_OUTPUT_FILE +done /dev/null` -if [ -z "$JOB_STATUS_URL" ] -then - echo "No response from the REST API call." +JOB_STATUS_URL=$(echo $RESP | grep -o '"url":".*"' | cut -f4 -d\" | tr -d '\' 2>/dev/null) +if [ -z "$JOB_STATUS_URL" ]; then + echo "No response from the REST API call." >>$LOG_DIR/report.txt exit -1 fi -JOBID=`echo $RESP | grep -o '"jobid":".*"' | cut -f4 -d\"` -JOBNAME=`echo $RESP | grep -o '"jobname":".*"' | cut -f4 -d\"` +JOBID=$(echo $RESP | grep -o '"jobid":".*"' | cut -f4 -d\") +JOBNAME=$(echo $RESP | grep -o '"jobname":".*"' | cut -f4 -d\") echo "Job ${JOBNAME} ${JOBID} submitted." @@ -23,14 +25,12 @@ echo "Job ${JOBNAME} ${JOBID} submitted." echo "Invoking REST API to check if the job ${JOBNAME} ${JOBID} has finished." STATUS="" -until [ "$STATUS" = "OUTPUT" ] -do - RESP=`curl -s $JOB_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` +until [ "$STATUS" = "OUTPUT" ]; do + RESP=$(curl -s $JOB_STATUS_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? - STATUS=`echo $RESP | grep -o '"status":".*"' | cut -f4 -d\"` + STATUS=$(echo $RESP | grep -o '"status":".*"' | cut -f4 -d\") echo "The status of the job is ${STATUS}" - if [ -f EXPJCL ] # If file with export JCL exists that mean that export JCL was submitted and it needs to wait longer - then + if [ -f EXPJCL ]; then # If file with export JCL exists that mean that export JCL was submitted and it needs to wait longer sleep 30 else sleep 5 @@ -38,18 +38,19 @@ do done # Check return code -RC=`echo $RESP | grep -o '"retcode":".*"' | cut -f4 -d\"` +RC=$(echo $RESP | grep -o '"retcode":".*"' | cut -f4 -d\") echo "Return code of the job ${JOBNAME} ${JOBID} is ${RC}." - + # Download spool files echo "Downloading spool files." sh scripts/spool_files.sh $JOBNAME $JOBID - -if [ "$RC" = "CC 0000" ] -then + +echo "$JCL" >>$JCL_LOG_DIR/JCL_$JOBNAME_$JOBID + +if [ "$RC" = "CC 0000" ]; then echo "${JOBNAME} ${JOBID} was completed." else - echo "${JOBNAME} ${JOBID} failed." - cat $JOBNAME/$JOBID + echo "${JOBNAME} ${JOBID} failed." >>$LOG_DIR/report.txt + cat $JOBNAME/$JOBID >>$LOG_DIR/report.txt exit -1 -fi +fi diff --git a/pswi/scripts/tmp_mounts.sh b/pswi/scripts/tmp_mounts.sh index c2e5f89370..9f8d55e724 100644 --- a/pswi/scripts/tmp_mounts.sh +++ b/pswi/scripts/tmp_mounts.sh @@ -6,83 +6,76 @@ MOUNT=${2} MOUNTED=false echo "Checking if file system ${ZFS} is mounted." -RESP=`curl -s "${BASE_URL}/zosmf/restfiles/mfs?fsname=${ZFS}" -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` -MOUNTP=`echo $RESP | grep -o '"mountpoint":".*"' | cut -f4 -d\"` +RESP=$(curl -s "${BASE_URL}/zosmf/restfiles/mfs?fsname=${ZFS}" -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +MOUNTP=$(echo $RESP | grep -o '"mountpoint":".*"' | cut -f4 -d\") NEW_ZFS_JSON='{"cylsPri":2000,"cylsSec": 140,"volumes":[ "'${VOLUME}'" ]}' - - -if [ -n "$MOUNTP" ] -then + +if [ -n "$MOUNTP" ]; then # Check if temp zFS is mounted to given mount point - if [ "$MOUNTP" = "$MOUNT" ] - then + if [ "$MOUNTP" = "$MOUNT" ]; then echo "${MOUNT} with zFS ${ZFS} mounted will be used as is." MOUNTED=true else - echo "The file system ${ZFS} exists but is mounted to different mount point(${MOUNTP})." - echo "Use different name of zFS or ${MOUNTP} for mount point." + echo "The file system ${ZFS} exists but is mounted to different mount point(${MOUNTP})." >>$LOG_DIR/report.txt + echo "Use different name of zFS or ${MOUNTP} for mount point." >>$LOG_DIR/report.txt exit -1 fi else echo "Temporary zFS isn't mounted. Now checking if mount point has any other zFS mounted." - RESP=`curl -s "${BASE_URL}/zosmf/restfiles/mfs?path=${MOUNT}" -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` + RESP=$(curl -s "${BASE_URL}/zosmf/restfiles/mfs?path=${MOUNT}" -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? - if [ $? -gt 0 ];then exit -1;fi - MOUNTZFS=`echo $RESP | grep -o "name":".*" | cut -f4 -d\"` - if [ -n "$MOUNTZFS" ] - then + if [ $? -gt 0 ]; then exit -1; fi + MOUNTZFS=$(echo $RESP | grep -o "name":".*" | cut -f4 -d\") + if [ -n "$MOUNTZFS" ]; then # If zFS is not mounted to the mount point then this mount point has different zFS - echo "The mount point ${MOUNT} has different zFS (${MOUNTZFS}) mounted." - echo "Use different mount point (not ${MOUNT})." - echo "Or use ${MOUNTZFS} for zFS." + echo "The mount point ${MOUNT} has different zFS (${MOUNTZFS}) mounted." >>$LOG_DIR/report.txt + echo "Use different mount point (not ${MOUNT})." >>$LOG_DIR/report.txt + echo "Or use ${MOUNTZFS} for zFS." >>$LOG_DIR/report.txt exit -1 fi fi - -if [ "$MOUNTED" = false ] -then +if [ "$MOUNTED" = false ]; then # Check if data set exists - echo "Checking if temporary zFS ${TMP_ZFS} exists." - RESP=`curl -s "${BASE_URL}/zosmf/restfiles/ds?dslevel=${ZFS}" -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` + echo "Checking if temporary zFS ${ZFS} exists." + RESP=$(curl -s "${BASE_URL}/zosmf/restfiles/ds?dslevel=${ZFS}" -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? - if [ $? -gt 0 ];then exit -1;fi - ZFS_COUNT=`echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:` - if [ "$ZFS_COUNT" = "0" ] - then + if [ $? -gt 0 ]; then exit -1; fi + ZFS_COUNT=$(echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:) + if [ "$ZFS_COUNT" = "0" ]; then # Create new zFS if not echo "${ZFS} does not exists." echo "Creating new zFS ${ZFS}." - RESP=`curl -s "${BASE_URL}/zosmf/restfiles/mfs/zfs/${ZFS}" -k -X "POST" -d "$NEW_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS` + RESP=$(curl -s "${BASE_URL}/zosmf/restfiles/mfs/zfs/${ZFS}" -k -X "POST" -d "$NEW_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) sh scripts/check_response.sh "${RESP}" $? - if [ $? -gt 0 ];then exit -1;fi + if [ $? -gt 0 ]; then exit -1; fi else #TODO: also check the first dsname because it can be something that just has tmp_zfs as HLQ echo fi - # Mount zFS to TMP_MOUNT + # Mount zFS to MOUNT echo "Mounting zFS ${ZFS} to ${MOUNT} mount point with JCL because REST API doesn't allow AGGRGROW parm." -echo ${JOBST1} > JCL -echo ${JOBST2} >> JCL -echo "//MKDIR EXEC PGM=BPXBATCH" >> JCL -echo "//STDOUT DD SYSOUT=*" >> JCL -echo "//STDERR DD SYSOUT=*" >> JCL -echo "//STDPARM DD *" >> JCL -echo "SH mkdir -p ${MOUNT}" >> JCL -echo "/*" >> JCL -echo "//MNT1ZFS1 EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL -echo "//SYSTSPRT DD SYSOUT=*" >> JCL -echo "//SYSTSOUT DD SYSOUT=*" >> JCL -echo "//SYSTSIN DD * " >> JCL -echo "MOUNT FILESYSTEM('${ZFS}') + " >> JCL -echo "TYPE(ZFS) MODE(RDWR) + " >> JCL -echo "PARM('AGGRGROW') + " >> JCL -echo "MOUNTPOINT('${MOUNT}') " >> JCL -echo "/*" >> JCL + echo ${JOBST1} >JCL + echo ${JOBST2} >>JCL + echo "//MKDIR EXEC PGM=BPXBATCH" >>JCL + echo "//STDOUT DD SYSOUT=*" >>JCL + echo "//STDERR DD SYSOUT=*" >>JCL + echo "//STDPARM DD *" >>JCL + echo "SH mkdir -p ${MOUNT}" >>JCL + echo "/*" >>JCL + echo "//MNT1ZFS1 EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL + echo "//SYSTSPRT DD SYSOUT=*" >>JCL + echo "//SYSTSOUT DD SYSOUT=*" >>JCL + echo "//SYSTSIN DD * " >>JCL + echo "MOUNT FILESYSTEM('${ZFS}') + " >>JCL + echo "TYPE(ZFS) MODE(RDWR) + " >>JCL + echo "PARM('AGGRGROW') + " >>JCL + echo "MOUNTPOINT('${MOUNT}') " >>JCL + echo "/*" >>JCL - sh scripts/submit_jcl.sh "`cat JCL`" - if [ $? -gt 0 ];then exit -1;fi + sh scripts/submit_jcl.sh "$(cat JCL)" + if [ $? -gt 0 ]; then exit -1; fi rm JCL fi diff --git a/pswi/scripts/wf_run_test.sh b/pswi/scripts/wf_run_test.sh new file mode 100755 index 0000000000..7429c91a9a --- /dev/null +++ b/pswi/scripts/wf_run_test.sh @@ -0,0 +1,107 @@ +#!/bin/sh +#version=1.0 + +export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}" +WF_DEF_FILE=$1 +run=$2 +ZWECONF=$3 +INPUT_FILE=$4 + +echo "" +echo "" +echo "Script for testing workflow and if specified running with defaults/variable input file as well..." +echo "Host :" $ZOSMF_URL +echo "Port :" $ZOSMF_PORT +echo "z/OSMF system :" $ZOSMF_SYSTEM +echo "Workflow definition file :" $WF_DEF_FILE +echo "Variable Input file :" $INPUT_FILE + +WF_NAME="Testing_workflows" +# URLs +CREATE_WF_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows" +WF_LIST_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows?owner=${ZOSMF_USER}&workflowName=${WF_NAME}" + +# JSONs +if [ -n "$INPUT_FILE" ]; then + ADD_WORKFLOW_JSON='{"workflowName":"'$WF_NAME'", +"workflowDefinitionFile":"'${WF_DEF_FILE}'", +"variableInputFile":"'${INPUT_FILE}'", +"system":"'$ZOSMF_SYSTEM'", +"owner":"'$ZOSMF_USER'", +"assignToOwner" :true}' +else + ADD_WORKFLOW_JSON='{"workflowName":"'$WF_NAME'", +"workflowDefinitionFile":"'${WF_DEF_FILE}'", +"system":"'$ZOSMF_SYSTEM'", +"owner":"'$ZOSMF_USER'", +"assignToOwner" :true}' +fi + +set -x +# Get workflowKey for the workflow owned by user +echo "Get workflowKey for the workflow if it exists." + +RESP=$(curl -s $WF_LIST_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +WFKEY=$(echo $RESP | grep -o '"workflowKey":".*"' | cut -f4 -d\") + +if [ -n "$WFKEY" ]; then + WORKFLOW_URL="${CREATE_WF_URL}/${WFKEY}" + + echo "Deleting the workflow." + RESP=$(curl -s $WORKFLOW_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + sh scripts/check_response.sh "${RESP}" $? +fi + +# Create workflow with REST API +echo 'Invoking REST API to create the workflow.' + +RESP=$(curl -s $CREATE_WF_URL -k -X "POST" -d "$ADD_WORKFLOW_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +sh scripts/check_response.sh "${RESP}" $? +if [ $? -gt 0 ]; then exit -1; fi +WFKEY=$(echo $RESP | grep -o '"workflowKey":".*"' | cut -f4 -d\") +WORKFLOW_URL="${CREATE_WF_URL}/${WFKEY}" + +if [ "$run" = "run" ]; then + # Run workflow + echo "Invoking REST API to start the workflow." + + RESP=$(curl -s ${WORKFLOW_URL}/operations/start -k -X "PUT" -d "{}" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + sh scripts/check_response.sh "${RESP}" $? + if [ $? -gt 0 ]; then exit -1; fi + STATUS="" + until [ "$STATUS" = "FINISHED" ]; do + sleep 20 + + # Get the result of the workflow + RESP=$(curl -s ${WORKFLOW_URL} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) + if [ $? -gt 0 ]; then exit -1; fi + STATUS_NAME=$(echo $RESP | grep -o '"statusName":".*"' | cut -f4 -d\") + + if [ "$STATUS_NAME" = "in-progress" ]; then + echo "Workflow ended with an error." >>$LOG_DIR/report.txt + echo $RESP >>$LOG_DIR/report.txt + echo "Checking if the workflow is ZWECONF" >>$LOG_DIR/report.txt + if [ "$ZWECONF" = "ZWECONF" ]; then + STEP_NAME=$(echo $RESP | grep -o '"currentStepName":".*"' | cut -f4 -d\") + if [ "$STEP_NAME" = "init_zowe" ]; then + echo "The workflow is ZWECONF and should end in step 'init_zowe'" + STATUS="FINISHED" + else + echo "The workflow is ZWECONF but ended in different step: '$STEP_NAME'" >>$LOG_DIR/report.txt + exit -1 + fi + else + echo "Workflow ended with an error and it is not ZWECONF." >>$LOG_DIR/report.txt + echo $RESP >>$LOG_DIR/report.txt + exit -1 + fi + elif [ "$STATUS_NAME" = "complete" ]; then + echo "Workflow finished successfully." + STATUS="FINISHED" + fi + done +fi + +echo "Deleting the workflow." +RESP=$(curl -s $WORKFLOW_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS) +sh scripts/check_response.sh "${RESP}" $? diff --git a/schemas/manifest-schema.json b/schemas/manifest-schema.json index 16e89fd94b..49cdc39ebb 100644 --- a/schemas/manifest-schema.json +++ b/schemas/manifest-schema.json @@ -56,7 +56,7 @@ }, "autoEncoding": { "type": "array", - "description": "An array of paths to recursively search and automatically tag according to file extension, via execution of the tag-files script 'https://github.com/zowe/zowe-install-packaging/blob/v2.x/master/bin/utils/tag-files.sh'" + "description": "An array of paths to recursively search and automatically tag according to file extension, via execution of the tag-files script 'https://github.com/zowe/zowe-install-packaging/blob/v3.x/master/bin/utils/tag-files.sh'" }, "homepage": { "type": "string", @@ -120,6 +120,10 @@ "type": "string", "description": "This defines extra validations that the component requires other than global validations. It is for runtime purpose, and will be automatically executed each time Zowe is started." }, + "preConfigure": { + "type": "string", + "description": "This defines extra configuration steps before zwe startup code performs its own configuration steps. It is for runtime purpose, and will be automatically executed each time Zowe is started." + }, "configure": { "type": "string", "description": "This defines extra configuration steps before starting the component. It is for runtime purpose, and will be automatically executed each time Zowe is started." diff --git a/schemas/zowe-yaml-schema.json b/schemas/zowe-yaml-schema.json index 6a48801f34..2d4b822b20 100644 --- a/schemas/zowe-yaml-schema.json +++ b/schemas/zowe-yaml-schema.json @@ -161,208 +161,254 @@ } }, "certificate": { - "type": "object", - "additionalProperties": false, - "if": { - "properties": { - "type": { - "const": "PKCS12" - } - } - }, - "then": { - "required": ["pkcs12"] - }, - "else": { - "required": ["keyring"] - }, - "description": "Certificate related configurations", - "properties": { - "type": { - "type": "string", - "description": "Type of certificate storage method.", - "enum": ["PKCS12", "JCEKS", "JCECCAKS", "JCERACFKS", "JCECCARACFKS", "JCEHYBRIDRACFKS"], - "default": "PKCS12" - }, - "pkcs12": { + "oneOf": [ + { "type": "object", - "additionalProperties": false, - "description": "PKCS#12 keystore settings", + "required": [ "pkcs12" ], "properties": { - "directory": { - "type": [ "string", "null" ], - "description": "Keystore directory" - }, - "name": { - "type": [ "string", "null" ], - "description": "Certificate alias name. Note: please use all lower cases as alias.", - "default": "localhost" - }, - "password": { - "type": [ "string", "null" ], - "description": "Keystore password", - "default": "password" - }, - "caAlias": { - "type": [ "string", "null" ], - "description": "Alias name of self-signed certificate authority. Note: please use all lower cases as alias.", - "default": "local_ca" - }, - "caPassword": { - "type": [ "string", "null" ], - "description": "Password of keystore stored self-signed certificate authority.", - "default": "local_ca_password" - }, - "lock": { - "type": [ "boolean", "null" ], - "description": "Whether to restrict the permissions of the keystore after creation" - }, - "import": { + "type": { "const": "PKCS12" }, + "pkcs12": { "type": "object", "additionalProperties": false, - "description": "Configure this section if you want to import certificate from another PKCS#12 keystore.", + "description": "PKCS#12 keystore settings", "properties": { - "keystore": { - "type": "string", - "description": "Existing PKCS#12 keystore which holds the certificate issued by external CA." + "directory": { + "type": [ "string", "null" ], + "description": "Keystore directory" + }, + "name": { + "type": [ "string", "null" ], + "description": "Certificate alias name. Note: please use all lower cases as alias.", + "default": "localhost" }, "password": { - "type": "string", - "description": "Password of the above keystore" + "type": [ "string", "null" ], + "description": "Keystore password", + "default": "password" }, - "alias": { - "type": "string", - "description": "Certificate alias will be imported. Note: please use all lower cases as alias." + "caAlias": { + "type": [ "string", "null" ], + "description": "Alias name of self-signed certificate authority. Note: please use all lower cases as alias.", + "default": "local_ca" + }, + "caPassword": { + "type": [ "string", "null" ], + "description": "Password of keystore stored self-signed certificate authority.", + "default": "local_ca_password" + }, + "lock": { + "type": [ "boolean", "null" ], + "description": "Whether to restrict the permissions of the keystore after creation" + }, + "import": { + "type": "object", + "additionalProperties": false, + "description": "Configure this section if you want to import certificate from another PKCS#12 keystore.", + "properties": { + "keystore": { + "type": "string", + "description": "Existing PKCS#12 keystore which holds the certificate issued by external CA." + }, + "password": { + "type": "string", + "description": "Password of the above keystore" + }, + "alias": { + "type": "string", + "description": "Certificate alias will be imported. Note: please use all lower cases as alias." + } + } } } - } - } - }, - "keyring": { - "type": "object", - "additionalProperties": false, - "description": "Configure this section if you are using z/OS keyring", - "properties": { - "owner": { - "type": "string", - "description": "keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe." - }, - "name": { - "type": "string", - "description": "keyring name" - }, - "label": { - "type": "string", - "description": "Label of Zowe certificate.", - "default": "localhost" }, - "caLabel": { - "type": "string", - "description": "label of Zowe CA certificate.", - "default": "localca" - }, - "connect": { + "dname": { "type": "object", "additionalProperties": false, - "description": "Configure this section if you want to connect existing certificate in keyring to Zowe.", + "description": "Certificate distinguish name", "properties": { - "user": { - "type": "string", - "description": "Current owner of the existing certificate, can be SITE or an user ID." + "caCommonName": { + "type": [ "string", "null" ], + "description": "Common name of certificate authority generated by Zowe." }, - "label": { - "type": "string", - "description": "Label of the existing certificate will be connected to Zowe keyring." + "commonName": { + "type": [ "string", "null" ], + "description": "Common name of certificate generated by Zowe." + }, + "orgUnit": { + "type": [ "string", "null" ], + "description": "Organization unit of certificate generated by Zowe." + }, + "org": { + "type": [ "string", "null" ], + "description": "Organization of certificate generated by Zowe." + }, + "locality": { + "type": [ "string", "null" ], + "description": "Locality of certificate generated by Zowe. This is usually the city name." + }, + "state": { + "type": [ "string", "null" ], + "description": "State of certificate generated by Zowe. You can also put province name here." + }, + "country": { + "type": [ "string", "null" ], + "description": "2 letters country code of certificate generated by Zowe." } } }, - "import": { + "validity": { + "type": [ "integer", "null" ], + "description": "Validity days for Zowe generated certificates", + "default": 3650 + }, + "san": { + "type": "array", + "description": "Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.", + "items": { + "type": "string" + } + }, + "importCertificateAuthorities": { + "type": "array", + "description": "PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ "keyring" ], + "properties": { + "type": { "enum": ["JCEKS", "JCECCAKS", "JCERACFKS", "JCECCARACFKS", "JCEHYBRIDRACFKS"] }, + "keyring": { "type": "object", "additionalProperties": false, - "description": "Configure this section if you want to import existing certificate stored in data set to Zowe.", + "description": "Configure this section if you are using z/OS keyring", "properties": { - "dsName": { + "owner": { "type": "string", - "description": "Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key." + "description": "keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe." }, - "password": { + "name": { + "type": "string", + "description": "keyring name" + }, + "label": { + "type": "string", + "description": "Label of Zowe certificate.", + "default": "localhost" + }, + "caLabel": { "type": "string", - "description": "Password for the PKCS12 data set." + "description": "label of Zowe CA certificate.", + "default": "localca" + }, + "connect": { + "type": "object", + "additionalProperties": false, + "description": "Configure this section if you want to connect existing certificate in keyring to Zowe.", + "properties": { + "user": { + "type": "string", + "description": "Current owner of the existing certificate, can be SITE or an user ID." + }, + "label": { + "type": "string", + "description": "Label of the existing certificate will be connected to Zowe keyring." + } + } + }, + "import": { + "type": "object", + "additionalProperties": false, + "description": "Configure this section if you want to import existing certificate stored in data set to Zowe.", + "properties": { + "dsName": { + "type": "string", + "description": "Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key." + }, + "password": { + "type": "string", + "description": "Password for the PKCS12 data set." + } + } + }, + "zOSMF": { + "type": "object", + "additionalProperties": false, + "description": "Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.", + "properties": { + "ca": { + "type": "string", + "description": "z/OSMF certificate authority alias" + }, + "user": { + "type": "string", + "description": "z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input." + } + } } } }, - "zOSMF": { + "dname": { "type": "object", "additionalProperties": false, - "description": "Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.", + "description": "Certificate distinguish name", "properties": { - "ca": { - "type": "string", - "description": "z/OSMF certificate authority alias" + "caCommonName": { + "type": [ "string", "null" ], + "description": "Common name of certificate authority generated by Zowe." }, - "user": { - "type": "string", - "description": "z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input." + "commonName": { + "type": [ "string", "null" ], + "description": "Common name of certificate generated by Zowe." + }, + "orgUnit": { + "type": [ "string", "null" ], + "description": "Organization unit of certificate generated by Zowe." + }, + "org": { + "type": [ "string", "null" ], + "description": "Organization of certificate generated by Zowe." + }, + "locality": { + "type": [ "string", "null" ], + "description": "Locality of certificate generated by Zowe. This is usually the city name." + }, + "state": { + "type": [ "string", "null" ], + "description": "State of certificate generated by Zowe. You can also put province name here." + }, + "country": { + "type": [ "string", "null" ], + "description": "2 letters country code of certificate generated by Zowe." } } - } - } - }, - "dname": { - "type": "object", - "additionalProperties": false, - "description": "Certificate distinguish name", - "properties": { - "caCommonName": { - "type": [ "string", "null" ], - "description": "Common name of certificate authority generated by Zowe." - }, - "commonName": { - "type": [ "string", "null" ], - "description": "Common name of certificate generated by Zowe." }, - "orgUnit": { - "type": [ "string", "null" ], - "description": "Organization unit of certificate generated by Zowe." + "validity": { + "type": [ "integer", "null" ], + "description": "Validity days for Zowe generated certificates", + "default": 3650 }, - "org": { - "type": [ "string", "null" ], - "description": "Organization of certificate generated by Zowe." - }, - "locality": { - "type": [ "string", "null" ], - "description": "Locality of certificate generated by Zowe. This is usually the city name." - }, - "state": { - "type": [ "string", "null" ], - "description": "State of certificate generated by Zowe. You can also put province name here." + "san": { + "type": "array", + "description": "Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.", + "items": { + "type": "string" + } }, - "country": { - "type": [ "string", "null" ], - "description": "2 letters country code of certificate generated by Zowe." + "importCertificateAuthorities": { + "type": "array", + "description": "PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.", + "items": { + "type": "string" + } } } - }, - "validity": { - "type": [ "integer", "null" ], - "description": "Validity days for Zowe generated certificates", - "default": 3650 - }, - "san": { - "type": "array", - "description": "Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.", - "items": { - "type": "string" - } - }, - "importCertificateAuthorities": { - "type": "array", - "description": "PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.", - "items": { - "type": "string" - } } - } + ] }, "vsam": { "type": "object", @@ -419,11 +465,11 @@ "description": "Customize your Zowe z/OS JES job.", "properties": { "name": { - "type": "string", + "$ref": "/schemas/v2/server-common#zoweJobname", "description": "Job name of Zowe primary ZWESLSTC started task." }, "prefix": { - "type": "string", + "$ref": "/schemas/v2/server-common#zoweJobname", "description": "A short prefix to customize address spaces created by Zowe job." } } @@ -758,7 +804,7 @@ "file": { "type": "string", "description": "Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.", - "pattern": "^safkeyring:\/\/.*" + "pattern": "^safkeyring[a-z]*:\/\/.*" }, "password": { "type": "string", @@ -785,7 +831,7 @@ "file": { "type": "string", "description": "Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.", - "pattern": "^safkeyring:\/\/.*" + "pattern": "^safkeyring[a-z]*:\/\/.*" }, "password": { "type": "string", @@ -800,11 +846,11 @@ "description": "Certificate in PEM format.", "properties": { "key": { - "type": "string", + "type": [ "string", "null" ], "description": "Path to the certificate private key stored in PEM format." }, "certificate": { - "type": "string", + "type": [ "string", "null" ], "description": "Path to the certificate stored in PEM format." }, "certificateAuthorities": { diff --git a/smpe/bld/AZWE002.htm b/smpe/bld/AZWE003.htm similarity index 96% rename from smpe/bld/AZWE002.htm rename to smpe/bld/AZWE003.htm index 724b3fc1a1..b6689a4468 100644 --- a/smpe/bld/AZWE002.htm +++ b/smpe/bld/AZWE003.htm @@ -1,5 +1,4 @@ - Zowe Program Directory @@ -9,15 +8,15 @@

Program Directory for
Zowe Open Source Project

-

0.0.2

+

0.0.3

-

FMID AZWE002

+

FMID AZWE003

for use with
z/OS 2.3.0 or later

-

Document Date: April 2022

+

Document Date: March 2024

 
@@ -25,7 +24,7 @@

Before using this information and the product it supports, be sure to read the general information under "Notices". -

Copyright Contributors to the Zowe Project. 2019, 2022 +

Copyright Contributors to the Zowe Project. 2019, 2022, 2024


Table of Contents

Figures

Introduction
@@ -140,7 +139,7 @@


Zowe FMIDs

Zowe consists of the following FMIDs:

-
AZWE002 +
AZWE003

Program Materials

Basic Machine-Readable Materials are materials that are supplied @@ -236,7 +235,7 @@

PTFs that have been incorporated into the program.

Program Level Information

All APARs of previous releases of Zowe that were resolved -before April 2022 have been incorporated into Zowe. +before March 2024 have been incorporated into Zowe.


Service Level Information

No PTFs against this release of Zowe have been incorporated into the product package. @@ -932,7 +931,7 @@


Blks -hlq.ZOWE.AZWE002.F1 +hlq.ZOWE.AZWE003.F1 U PDSE FB @@ -940,7 +939,7 @@

7 N/A -hlq.ZOWE.AZWE002.F2 +hlq.ZOWE.AZWE003.F2 U PDSE FB @@ -948,7 +947,7 @@

13 N/A -hlq.ZOWE.AZWE002.F3 +hlq.ZOWE.AZWE003.F3 U PDSE U @@ -956,7 +955,7 @@

41 N/A -hlq.ZOWE.AZWE002.F4 +hlq.ZOWE.AZWE003.F4 U PDSE VB @@ -964,7 +963,7 @@

10722 N/A -hlq.ZOWE.AZWE002.SMPMCS +hlq.ZOWE.AZWE003.SMPMCS U SEQ FB @@ -1055,13 +1054,13 @@

  • Run REPORT CROSSZONE

    Allocate file system to hold web download package

    -

    These instructions are also in the AZWE002.readme.txt file that you +

    These instructions are also in the AZWE003.readme.txt file that you downloaded from the web.

    The SMP/E input data sets to install Zowe Open Source Project are provided as -compressed files in AZWE002.pax.Z, which must be uploaded to z/OS as a +compressed files in AZWE003.pax.Z, which must be uploaded to z/OS as a z/OS UNIX file. You can either create a new z/OS UNIX file system (zFS) or create a new directory in an existing file system to place -AZWE002.pax.Z. +AZWE003.pax.Z.

    You can use the following sample JCL to create a new file system, and directory, for the download package. @@ -1113,9 +1112,9 @@

    Expected Return Codes and Messages: You will receive a return code of 0 if this job runs correctly.

    Upload the web download package to the host

    -

    These instructions are also in the AZWE002.readme.txt file that you +

    These instructions are also in the AZWE003.readme.txt file that you downloaded from the web. -

    Upload the AZWE002.readme.txt file in text format and the AZWE002.pax.Z file +

    Upload the AZWE003.readme.txt file in text format and the AZWE003.pax.Z file in binary format from your workstation to the z/OS UNIX file system.

    In the following sample dialog, we use FTP from a Microsoft Windows command line to do the transfer. Commands or other information entered @@ -1155,26 +1154,26 @@

    250 HFS directory @zfs_path@ is the current working directory ftp> ascii 200 Representation type is Ascii NonPrint -ftp> put d:\AZWE002.readme.txt +ftp> put d:\AZWE003.readme.txt 200 Port request OK. -125 Storing data set @zfs_path@/AZWE002.readme.txt +125 Storing data set @zfs_path@/AZWE003.readme.txt 250 Transfer completed successfully. ftp: 9412 bytes sent in 0.01 sec. (1366.67 Kb/s) ftp> binary 200 Representation type is Image -ftp> put d:\AZWE002.pax.Z +ftp> put d:\AZWE003.pax.Z 200 Port request OK. -125 Storing data set @zfs_path@/AZWE002.pax.Z +125 Storing data set @zfs_path@/AZWE003.pax.Z 250 Transfer completed successfully. ftp: 481549824 bytes sent in 1.26 sec. (1040.52 Kb/s) ftp> quit 221 Quit command received. Goodbye.

    Extract and expand the compressed SMPMCS and RELFILEs

    -

    These instructions are also in the AZWE002.readme.txt file that you +

    These instructions are also in the AZWE003.readme.txt file that you downloaded from the web. -

    The AZWE002.readme.txt file uploaded in the previous step holds a sample +

    The AZWE003.readme.txt file uploaded in the previous step holds a sample JCL to expand the compressed SMPMCS and RELFILEs from the uploaded -AZWE002.pax.Z file into data sets for use by the SMP/E RECEIVE job. The +AZWE003.pax.Z file into data sets for use by the SMP/E RECEIVE job. The JCL is repeated here for your convenience.

    • @zfs_path@ matches the variable you specified in the previous step. @@ -1215,7 +1214,7 @@

      //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * oshell cd @zfs_path@/ ; + - pax -rvf AZWE002.pax.Z + pax -rvf AZWE003.pax.Z //* //GIMUNZIP EXEC PGM=GIMUNZIP,REGION=0M,COND=(0,LT) //*STEPLIB DD DISP=SHR,DSN=SYS1.MIGLIB @@ -1227,16 +1226,16 @@

      // PATH='@zfs_path@/' //SYSIN DD *
      <GIMUNZIP>
      -<ARCHDEF archid="AZWE002.SMPMCS"
      -         newname="@PREFIX@.ZOWE.AZWE002.SMPMCS"/>
      -<ARCHDEF archid="AZWE002.F1"
      -         newname="@PREFIX@.ZOWE.AZWE002.F1"/>
      -<ARCHDEF archid="AZWE002.F2"
      -         newname="@PREFIX@.ZOWE.AZWE002.F2"/>
      -<ARCHDEF archid="AZWE002.F3"
      -         newname="@PREFIX@.ZOWE.AZWE002.F3"/>
      -<ARCHDEF archid="AZWE002.F4"
      -         newname="@PREFIX@.ZOWE.AZWE002.F4"/>
      +<ARCHDEF archid="AZWE003.SMPMCS"
      +         newname="@PREFIX@.ZOWE.AZWE003.SMPMCS"/>
      +<ARCHDEF archid="AZWE003.F1"
      +         newname="@PREFIX@.ZOWE.AZWE003.F1"/>
      +<ARCHDEF archid="AZWE003.F2"
      +         newname="@PREFIX@.ZOWE.AZWE003.F2"/>
      +<ARCHDEF archid="AZWE003.F3"
      +         newname="@PREFIX@.ZOWE.AZWE003.F3"/>
      +<ARCHDEF archid="AZWE003.F4"
      +         newname="@PREFIX@.ZOWE.AZWE003.F4"/>
       </GIMUNZIP>
       //*
       

      Sample Jobs

      @@ -1254,43 +1253,43 @@

      ZWE1SMPE SMP/E Sample job to create an SMP/E environment (optional) -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE2RCVE RECEIVE Sample SMP/E RECEIVE job -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE3ALOC ALLOCATE Sample job to allocate target and distribution libraries -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE4ZFS ALLOMZFS Sample job to allocate, create mountpoint, and mount zFS data sets -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE5MKD MKDIR Sample job to invoke the supplied ZWEMKDIR EXEC to allocate file system paths -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE6DDEF DDDEF Sample job to define SMP/E DDDEFs -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE7APLY APPLY Sample SMP/E APPLY job -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 ZWE8ACPT ACCEPT Sample SMP/E ACCEPT job -ZOWE.AZWE002.F1 +ZOWE.AZWE003.F1 Note: When Zowe is downloaded from the web, the RELFILE data set name will be prefixed by your chosen high level qualifier, as @@ -1307,7 +1306,7 @@

      parameters to uppercase values to meet the requirements of your site.
      //STEP1    EXEC PGM=IEBCOPY
       //SYSPRINT DD SYSOUT=*
      -//IN       DD DSN=ZOWE.AZWE002.F1,
      +//IN       DD DSN=ZOWE.AZWE003.F1,
       //            DISP=SHR,
       //*           VOL=SER=filevol,
       //            UNIT=SYSALLDA
      @@ -1586,7 +1585,7 @@ 

      other companies.

      Reader's Comments

      -

      Program Directory for Zowe Open Source Project, April 2022 +

      Program Directory for Zowe Open Source Project, March 2024

      We appreciate your input on this publication. Feel free to comment on the clarity, accuracy, and completeness of the information or give us diff --git a/smpe/bld/SMPMCS.txt b/smpe/bld/SMPMCS.txt index 4faee84ef7..ea0aede564 100755 --- a/smpe/bld/SMPMCS.txt +++ b/smpe/bld/SMPMCS.txt @@ -17,8 +17,8 @@ */ . ++VER(Z038) /* zOS */ - SUP(AZWE001) - DELETE(AZWE001) + SUP(AZWE001 AZWE002) + DELETE(AZWE001 AZWE002) . ++SAMP(ZWEMKDIR) SYSLIB(SZWESAMP) DISTLIB(AZWESAMP) RELFILE(1) . ++SAMP(ZWE1SMPE) SYSLIB(SZWESAMP) DISTLIB(AZWESAMP) RELFILE(1) . @@ -108,12 +108,6 @@ ++HFS(ZWEPAX06) SYSLIB(SZWEZFS ) DISTLIB(AZWEZFS ) RELFILE(4) SHSCRIPT(ZWESHPAX,PRE,POST) BINARY PARM(PATHMODE(0,7,5,5)) . -++HFS(ZWEPAX07) SYSLIB(SZWEZFS ) DISTLIB(AZWEZFS ) RELFILE(4) - SHSCRIPT(ZWESHPAX,PRE,POST) - BINARY PARM(PATHMODE(0,7,5,5)) . -++HFS(ZWEPAX08) SYSLIB(SZWEZFS ) DISTLIB(AZWEZFS ) RELFILE(4) - SHSCRIPT(ZWESHPAX,PRE,POST) - BINARY PARM(PATHMODE(0,7,5,5)) . ++HFS(ZWEWRF01) SYSLIB(SZWEZFS ) DISTLIB(AZWEZFS ) RELFILE(4) TEXT PARM(PATHMODE(0,7,5,5)) . ++HFS(ZWEYML01) SYSLIB(SZWEZFS ) DISTLIB(AZWEZFS ) RELFILE(4) diff --git a/smpe/bld/_README.txt b/smpe/bld/_README.txt index 46f4570987..42cca658c1 100644 --- a/smpe/bld/_README.txt +++ b/smpe/bld/_README.txt @@ -153,6 +153,22 @@ site requirements. 8. Contact documentation team to update the Program Directory 9. Notify an IBM-employed build engineer to update the IBM processes +Adding or removing Zowe components +--------------------------- +When modifying Zowe components included in the PAX via manifest.json.template, +changes may be required to the SMPMCS.txt and smpe-split.sh scripts. The smpe-split.sh +script chunks the Zowe install into multiple PAX files, which are included in the SMPMCS.txt +file as HFS definitions. For example: +++HFS(ZWEPAX02) SYSLIB(SZWEZFS ) DISTLIB(AZWEZFS ) RELFILE(4) + +In general, adding new components will continue to work with the SMP/e build, +while removing components, either by renaming directories or deleting them outright, +will result in errors. + +See the smpe-split.sh script for additional inline documentation, and consult with an IBM SMP/e +engineer before finalizing any changes to the smpe-split.sh or SMPMCS.txt file. + + Add product member to build --------------------------- 1. Add member to files/..., e.g. files/jcl/ZWENOSEC.jcl diff --git a/smpe/bld/service/promoted-apar.txt b/smpe/bld/service/promoted-apar.txt deleted file mode 100644 index f9cd37ddc0..0000000000 --- a/smpe/bld/service/promoted-apar.txt +++ /dev/null @@ -1,54 +0,0 @@ -IO29424 -IO29425 -IO29426 -IO29349 -IO29350 -IO29351 -IO29346 -IO29347 -IO29348 -IO29343 -IO29344 -IO29345 -IO29289 -IO29290 -IO29291 -IO29286 -IO29287 -IO29288 -IO29185 -IO29186 -IO29187 -IO29182 -IO29183 -IO29184 -IO29174 -IO29175 -IO29176 -IO29092 -IO29093 -IO29094 -IO29089 -IO29090 -IO29091 -IO29086 -IO29087 -IO29088 -IO29009 -IO29010 -IO29011 -IO29006 -IO29007 -IO29008 -IO28898 -IO28899 -IO28904 -IO28896 -IO28897 -IO28903 -IO28861 -IO28862 -IO28866 -IO28859 -IO28860 -IO28865 diff --git a/smpe/bld/service/promoted-close.txt b/smpe/bld/service/promoted-close.txt deleted file mode 100644 index a2f51e8eaf..0000000000 --- a/smpe/bld/service/promoted-close.txt +++ /dev/null @@ -1,809 +0,0 @@ - IO29424 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.16.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29425 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.16.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29426 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.16.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29349 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.15.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29350 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.15.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29351 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.15.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29346 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.14.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29347 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.14.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29348 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.14.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29343 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.13.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29344 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.13.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29345 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.13.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29289 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.12.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29290 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.12.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29291 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.12.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29286 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.11.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29287 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.11.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29288 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.11.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29185 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.10.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29186 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.10.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29187 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.10.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29182 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.9.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29183 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.9.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29184 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.9.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29174 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.8.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29175 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.8.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29176 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.8.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29092 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.7.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29093 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.7.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29094 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.7.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29089 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.6.1. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29090 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.6.1. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29091 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.6.1. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29086 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.6.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29087 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.6.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29088 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.6.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29009 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.5.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29010 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.5.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29011 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.5.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29006 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.4.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29007 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.4.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO29008 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.4.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28898 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.3.1. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28899 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.3.1. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28904 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.3.1. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28896 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.3.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28897 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.3.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28903 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.3.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28861 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.2.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28862 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.2.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28866 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.2.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28859 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.1.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28860 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.1.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ - - IO28865 - - PROBLEM SUMMARY: - **************************************************************** - * USERS AFFECTED: All Zowe users * - **************************************************************** - * PROBLEM DESCRIPTION: Update Zowe FMID AZWE002 to match the * - * community release * - **************************************************************** - * RECOMMENDATION: Apply provided service * - **************************************************************** - The Zowe community version was updated to 2.1.0. - This PTF provides the community changes in SMP/E format. - Follow this link for more details on the community changes: - https://docs.zowe.org/stable/ diff --git a/smpe/bld/service/promoted-hold.txt b/smpe/bld/service/promoted-hold.txt deleted file mode 100644 index 2930ab1572..0000000000 --- a/smpe/bld/service/promoted-hold.txt +++ /dev/null @@ -1,490 +0,0 @@ -++HOLD(UO90057) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(24144) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90049) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(24068) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90047) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(24026) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90045) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23348) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90033) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23297) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90031) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23255) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90022) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23208) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90020) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23164) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO90018) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23116) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02066) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23074) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02064) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23041) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02062) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(23027) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02058) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(22346) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02056) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(22292) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02053) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(22272) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02051) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(22263) - COMMENT( - **************************************************************** - * Affected function: SMP/E install * - **************************************************************** - * Description: add DDDEF to CSI. * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: n/a * - **************************************************************** - Applying this maintenance requires the definition of a new - DDDEF in your CSI. - You can use the following JCL to update an existing CSI. - Substitute the #... placeholders with values that match your - site requirements. - - //SZWELOAD JOB - // EXPORT SYMLIST=(TZON,TRGT) - // SET TRGT=#target_hlq - // SET SMPE=#globalcsi_hlq - // SET TZON=#target_zone - //UCLIN EXEC PGM=GIMSMP,REGION=0M,COND=(4,LT) - //SZWELOAD DD SPACE=(TRK,(30,15,15)), - // UNIT=SYSALLDA, - // DISP=(MOD,CATLG), - // DSNTYPE=LIBRARY, - // RECFM=U, - // LRECL=0, - // BLKSIZE=32760, - // DSN=&TRGT..SZWELOAD - //SMPCSI DD DISP=OLD,DSN=&SMPE..CSI - //SMPCNTL DD *,SYMBOLS=JCLONLY - SET BDY(&TZON). - UCLIN. - ADD DDDEF (SZWELOAD) - DATASET(&TRGT..SZWELOAD) - UNIT(SYSALLDA) - WAITFORDSN - SHR . - ENDUCL. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02049) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(22206) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). -++HOLD(UO02047) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(22167) - COMMENT( - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: stop servers * - **************************************************************** - * Timing: pre-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Stop the Zowe servers before installing this update. - - **************************************************************** - * Affected function: Zowe servers * - **************************************************************** - * Description: start servers * - **************************************************************** - * Timing: post-APPLY * - **************************************************************** - * Part: ZWESLSTC and ZWESISTC * - **************************************************************** - Start the Zowe servers after installing this update. - - ). diff --git a/smpe/bld/service/promoted-ptf.txt b/smpe/bld/service/promoted-ptf.txt deleted file mode 100644 index 0e1d192cd2..0000000000 --- a/smpe/bld/service/promoted-ptf.txt +++ /dev/null @@ -1,36 +0,0 @@ -UO90057 -UO90058 -UO90049 -UO90050 -UO90047 -UO90048 -UO90045 -UO90046 -UO90033 -UO90034 -UO90031 -UO90032 -UO90022 -UO90023 -UO90020 -UO90021 -UO90018 -UO90019 -UO02066 -UO02067 -UO02064 -UO02065 -UO02062 -UO02063 -UO02058 -UO02059 -UO02056 -UO02057 -UO02053 -UO02054 -UO02051 -UO02052 -UO02049 -UO02050 -UO02047 -UO02048 diff --git a/smpe/bld/service/ptf-bucket.txt b/smpe/bld/service/ptf-bucket.txt deleted file mode 100644 index b63d0823e2..0000000000 --- a/smpe/bld/service/ptf-bucket.txt +++ /dev/null @@ -1,27 +0,0 @@ -#----------------------------------------------------------------------# -# NOTE FOR PULL REQUEST APPROVER: # -# This file may only be updated when IBM provides more PTF numbers, or # -# when a Release Candidate PTF is promoted. Reject ALL other updates. # -#----------------------------------------------------------------------# -# -# format: - [] -#UO02047 UO02048 - IO28859 IO28860 IO28865 - Thu Jun 16 19:09:50 UTC 2022 -#UO02049 UO02050 - IO28861 IO28862 IO28866 - Mon Jul 25 18:59:34 UTC 2022 -#UO02051 UO02052 - IO28896 IO28897 IO28903 - Wed Sep 21 14:00:05 UTC 2022 -#UO02053 UO02054 - IO28898 IO28899 IO28904 - Thu Sep 29 17:26:28 UTC 2022 -#UO02056 UO02057 - IO29006 IO29007 IO29008 - Wed Oct 19 20:50:03 UTC 2022 -#UO02058 UO02059 - IO29009 IO29010 IO29011 - Mon Dec 12 22:54:15 UTC 2022 -#UO02062 UO02063 - IO29086 IO29087 IO29088 - Fri Jan 27 20:05:55 UTC 2023 -#UO02064 UO02065 - IO29089 IO29090 IO29091 - Fri Feb 10 21:43:46 UTC 2023 v2r6m1 -#UO02066 UO02067 - IO29092 IO29093 IO29094 - Thu Mar 16 00:39:46 UTC 2023 v2r7 -#UO90018 UO90019 - IO29174 IO29175 IO29176 - Wed Apr 26 22:58:46 UTC 2023 -#UO90020 UO90021 - IO29182 IO29183 IO29184 - Tue Jun 13 21:20:27 UTC 2023 -#UO90022 UO90023 - IO29185 IO29186 IO29187 - Fri Jul 28 01:08:59 UTC 2023 -#UO90031 UO90032 - IO29286 IO29287 IO29288 - Tue Sep 12 18:27:05 UTC 2023 -#UO90033 UO90034 - IO29289 IO29290 IO29291 - Tue Oct 24 19:49:48 UTC 2023 -#UO90045 UO90046 - IO29343 IO29344 IO29345 - Thu Dec 14 16:23:26 UTC 2023 -#UO90047 UO90048 - IO29346 IO29347 IO29348 - Fri Jan 26 17:21:09 UTC 2024 -#UO90049 UO90050 - IO29349 IO29350 IO29351 - Fri Mar 8 19:42:44 UTC 2024 -#UO90057 UO90058 - IO29424 IO29425 IO29426 - Fri May 24 14:23:02 UTC 2024 -UO90059 UO90060 - IO29428 IO29429 IO29430 -UO90061 UO90062 - IO29431 IO29432 IO29433 \ No newline at end of file diff --git a/smpe/bld/smpe-split.sh b/smpe/bld/smpe-split.sh index c38c2c80ac..d279cb8c8d 100755 --- a/smpe/bld/smpe-split.sh +++ b/smpe/bld/smpe-split.sh @@ -91,26 +91,28 @@ _cmd mkdir -p $split # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cnt=0 # counter, part of target pax file name -# let will: increase $cnt -# "echo 0$cnt" will: create a counter at least 2 chars long -# sed will: take the last 2 chars of the expanded counter # --- # split large components/files into their own pax -# ACTION: update SMPMCS.txt when altering this logic +# ACTION: update SMPMCS.txt when adding/removing pax files +# ACTION: do NOT remove pax files in service stream without consulting +# an SMP/E specialist, as doing so without precautions will +# break the SUPersede chain of the PTFs (see also _README.txt). +# You can change pax content in the service stream. list="" # path based on $ZOWE_ROOT_DIR list="$list components/api-catalog" # pax01 list="$list components/caching-service" # pax02 list="$list components/discovery" # pax03 list="$list components/gateway" # pax04 list="$list components/app-server" # pax05 -list="$list components/files-api" # pax06 -list="$list components/jobs-api" # pax07 test "$debug" && echo "for f in $list" for f in $list do +# let will: increase $cnt +# "echo 0$cnt" will: create a counter at least 2 chars long +# sed will: take the last 2 chars of the expanded counter let cnt=$cnt+1 ; file=${mask}$(echo 0$cnt | sed 's/.*\(..\)$/\1/') _move $stage $split/$file echo $f done # for f @@ -118,6 +120,7 @@ done # for f # --- # all remaining files and directories +# see earlier for explanation of "file=" logic # ACTION: update SMPMCS.txt when altering this logic let cnt=$cnt+1 ; file=${mask}$(echo 0$cnt | sed 's/.*\(..\)$/\1/') _move $stage $split/$file ls -A $stage # pax08 diff --git a/tests/installation/src/__tests__/basic/install.ts b/tests/installation/src/__tests__/basic/install.ts index 9d49eddebb..dc95c8a8f4 100644 --- a/tests/installation/src/__tests__/basic/install.ts +++ b/tests/installation/src/__tests__/basic/install.ts @@ -30,6 +30,7 @@ describe(testSuiteName, () => { testSuiteName, process.env.TEST_SERVER, { + 'zos_java_home': '/ZOWE/node/J17.0_64', 'zowe_build_local': process.env['ZOWE_BUILD_LOCAL'], 'zowe_custom_for_test': 'true', 'zowe_lock_keystore': 'false', diff --git a/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts b/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts index 8b740588ee..8a8efd8916 100644 --- a/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts +++ b/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts @@ -18,7 +18,7 @@ import { KEYSTORE_MODE_KEYRING, } from '../../../constants'; -const testServer = 'marist-6'; +const testServer = 'marist-9'; const testSuiteName = 'Test convenience build installation with keystore pointing to an ACF2 keyring'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts b/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts index f2399de380..7b91837222 100644 --- a/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts +++ b/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts @@ -18,7 +18,7 @@ import { KEYSTORE_MODE_KEYRING, } from '../../../constants'; -const testServer = 'marist-8'; +const testServer = 'marist-11'; const testSuiteName = 'Test convenience build installation with keystore pointing to a RACF keyring'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts b/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts index fbd1f1f69d..b47a617dca 100644 --- a/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts +++ b/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts @@ -18,7 +18,7 @@ import { KEYSTORE_MODE_KEYRING, } from '../../../constants'; -const testServer = 'marist-7'; +const testServer = 'marist-10'; const testSuiteName = 'Test convenience build installation with keystore pointing to a TSS keyring'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/node-versions/node-v18.ts b/tests/installation/src/__tests__/extended/node-versions/node-v22.ts similarity index 85% rename from tests/installation/src/__tests__/extended/node-versions/node-v18.ts rename to tests/installation/src/__tests__/extended/node-versions/node-v22.ts index 4758b24904..8375055f01 100644 --- a/tests/installation/src/__tests__/extended/node-versions/node-v18.ts +++ b/tests/installation/src/__tests__/extended/node-versions/node-v22.ts @@ -5,7 +5,7 @@ * * SPDX-License-Identifier: EPL-2.0 * - * Copyright IBM Corporation 2022 + * Copyright Zowe Contributors 2024 */ import { @@ -15,9 +15,8 @@ import { } from '../../../utils'; import { TEST_TIMEOUT_CONVENIENCE_BUILD } from '../../../constants'; -// Only runs on zzow08 at time of change (04.2023). See cicd-test.yml and make_matrix.sh. const testServer = process.env.TEST_SERVER; -const testSuiteName = 'Test convenience build installation with node.js v18'; +const testSuiteName = 'Test convenience build installation with node.js v22'; describe(testSuiteName, () => { beforeAll(() => { // validate variables @@ -33,7 +32,7 @@ describe(testSuiteName, () => { { 'zowe_build_local': process.env['ZOWE_BUILD_LOCAL'], 'zowe_custom_for_test': 'true', - 'zos_node_home': '/ZOWE/node/node-v18.16.0', + 'zos_node_home': '/ZOWE/node/node-v22.10.0', 'zowe_lock_keystore': 'false', } ); diff --git a/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts b/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts index 7989dd6204..14df79ca42 100644 --- a/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts +++ b/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts @@ -18,10 +18,10 @@ import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-6 + * @worker marist-9 */ -// hard code to use marist-6 which we started with ACF2 -const testServer = 'marist-6'; +// hard code to use marist-9 which we started with ACF2 +const testServer = 'marist-9'; const testSuiteName = 'Test convenience build installation with ACF2'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts b/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts index 8f5a5a4c01..58f8ca56c7 100644 --- a/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts +++ b/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts @@ -18,9 +18,9 @@ import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-8 + * @worker marist-11 */ -const testServer = 'marist-8'; +const testServer = 'marist-11'; const testSuiteName = 'Test convenience build installation with RACF'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts b/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts index 22f339ae6b..cd4e7a1fd8 100644 --- a/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts +++ b/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts @@ -18,10 +18,10 @@ import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-7 + * @worker marist-10 */ -// hard code to use marist-7 which we started with Top Secret -const testServer = 'marist-7'; +// hard code to use marist-10 which we started with Top Secret +const testServer = 'marist-10'; const testSuiteName = 'Test convenience build installation with Top Secret'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts b/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts index 9a6e32810b..2c04aa470e 100644 --- a/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts +++ b/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts @@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_FMID} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-6 + * @worker marist-9 */ -// hard code to use marist-6 which we started with ACF2 -const testServer = 'marist-6'; +// hard code to use marist-9 which we started with ACF2 +const testServer = 'marist-9'; const testSuiteName = 'Test SMPE FMID installation with ACF2'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts b/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts index a283327624..32205c4ac2 100644 --- a/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts +++ b/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts @@ -18,9 +18,9 @@ import {TEST_TIMEOUT_SMPE_FMID} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-8 + * @worker marist-11 */ -const testServer = 'marist-8'; +const testServer = 'marist-11'; const testSuiteName = 'Test SMPE FMID installation with RACF'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts b/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts index d274358705..d15f77074c 100644 --- a/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts +++ b/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts @@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_FMID} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-7 + * @worker marist-10 */ -// hard code to use marist-7 which we started with Top Secret -const testServer = 'marist-7'; +// hard code to use marist-10 which we started with Top Secret +const testServer = 'marist-10'; const testSuiteName = 'Test SMPE FMID installation with Top Secret'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts b/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts index 3665c08d52..c5aceb2477 100644 --- a/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts +++ b/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts @@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_PTF} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-6 + * @worker marist-9 */ -// hard code to use marist-6 which we started with ACF2 -const testServer = 'marist-6'; +// hard code to use marist-9 which we started with ACF2 +const testServer = 'marist-9'; const testSuiteName = 'Test SMPE PTF installation with ACF2'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts b/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts index a796eed96c..cf9e56bd29 100644 --- a/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts +++ b/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts @@ -18,9 +18,9 @@ import {TEST_TIMEOUT_SMPE_PTF} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-8 + * @worker marist-11 */ -const testServer = 'marist-8'; +const testServer = 'marist-11'; const testSuiteName = 'Test SMPE PTF installation with RACF'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts b/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts index 43d08633ca..65f44cf010 100644 --- a/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts +++ b/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts @@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_PTF} from '../../../../constants'; /** * Define this test should run in a specific worker * - * @worker marist-7 + * @worker marist-10 */ -// hard code to use marist-7 which we started with Top Secret -const testServer = 'marist-7'; +// hard code to use marist-10 which we started with Top Secret +const testServer = 'marist-10'; const testSuiteName = 'Test SMPE PTF installation with Top Secret'; describe(testSuiteName, () => { beforeAll(() => { diff --git a/tests/installation/src/utils.ts b/tests/installation/src/utils.ts index 9b41514184..5bbde80017 100644 --- a/tests/installation/src/utils.ts +++ b/tests/installation/src/utils.ts @@ -96,6 +96,9 @@ export function importDefaultExtraVars(extraVars: {[key: string]: any}, serverId 'zos_node_home' : ['ZOS_NODE_HOME'], 'zowe_sanity_test_debug_mode': ['SANITY_TEST_DEBUG'], }; + const globalDefaults: { [key:string] : string } = { + 'zos_java_home': '/ZOWE/node/J17.0_64' + } const serverIdSanitized = serverId.replace(/[^A-Za-z0-9]/g, '_').toUpperCase(); defaultMapping['ansible_ssh_host'].push(`${serverIdSanitized}_SSH_HOST`); defaultMapping['ansible_port'].push(`${serverIdSanitized}_SSH_PORT`); @@ -109,6 +112,13 @@ export function importDefaultExtraVars(extraVars: {[key: string]: any}, serverId } } }); + + Object.keys(globalDefaults).forEach((item) => { + if (extraVars[item] == null) { + extraVars[item] = globalDefaults[item]; + } + }) + } type PlaybookResponse = { @@ -206,6 +216,8 @@ async function installAndVerifyZowe(testcase: string, installPlaybook: string, s debug(`installAndVerifyZowe(${testcase}, ${installPlaybook}, ${serverId}, ${JSON.stringify(extraVars)})`); debug(`run ${installPlaybook} on ${serverId}`); + + const resultInstall = await runAnsiblePlaybook( testcase, installPlaybook, diff --git a/tests/sanity/README.md b/tests/sanity/README.md index 843a27f1f2..2fcb50fccf 100644 --- a/tests/sanity/README.md +++ b/tests/sanity/README.md @@ -50,7 +50,7 @@ The existing test cases are tested on Firefox v61.0.2 which is pre-installed in Example command: ``` -ZOWE_ROOT_DIR=/path/to/zowe \ + ZOWE_ROOT_DIR=/path/to/zowe \ ZOWE_WORKSPACE_DIR=/path/to/zowe/workspaceDir \ ZOWE_EXTERNAL_HOST=test-server \ SSH_HOST=test-server \ diff --git a/tests/sanity/test/apiml/test-api-zosmf-via-gateway.js b/tests/sanity/test/apiml/test-api-zosmf-via-gateway.js index 9ab531ae0c..626665972e 100644 --- a/tests/sanity/test/apiml/test-api-zosmf-via-gateway.js +++ b/tests/sanity/test/apiml/test-api-zosmf-via-gateway.js @@ -31,13 +31,13 @@ describe('test api mediation layer zosmf api', function() { token = await apiml.login(); }); - it('should be able to get z/OS Info via the gateway port and endpoint (/api/v1/zosmf/info)', async function() { + it('should be able to get z/OS Info via the gateway port and endpoint (/ibmzosmf/api/v1/zosmf/info)', async function() { if (!token) { this.skip(); } const res = await hq.request({ - url: '/zosmf/api/v1/info', + url: '/ibmzosmf/api/v1/zosmf/info', method: 'get', headers: { Cookie: `${APIML_AUTH_COOKIE}=${token}`, diff --git a/tests/sanity/test/apiml/test-authentication-zosmf-via-gateway.js b/tests/sanity/test/apiml/test-authentication-zosmf-via-gateway.js index 7939ed0041..4f229c96f5 100644 --- a/tests/sanity/test/apiml/test-authentication-zosmf-via-gateway.js +++ b/tests/sanity/test/apiml/test-authentication-zosmf-via-gateway.js @@ -10,7 +10,7 @@ const expect = require('chai').expect; const { HTTPRequest, APIMLAuth } = require('../http-helper'); -const { APIML_AUTH_COOKIE, ZOSMF_TOKEN } = require('../constants'); +const { APIML_AUTH_COOKIE } = require('../constants'); describe('test api mediation layer zosmf authentication', function() { @@ -41,7 +41,7 @@ describe('test api mediation layer zosmf authentication', function() { it('with valid basic header', async function() { const token = Buffer.from(`${username}:${password}`, 'utf8').toString('base64'); const res = await hq.request({ - url: '/zosmf/api/v1/restfiles/ds?dslevel=SYS1.PARMLIB*', + url: '/ibmzosmf/api/v1/zosmf/restfiles/ds?dslevel=SYS1.PARMLIB*', headers: { 'Authorization': `Basic ${token}`, } @@ -53,7 +53,7 @@ describe('test api mediation layer zosmf authentication', function() { it('with valid cookie', async function() { const token = await apiml.login(); const res = await hq.request({ - url: '/zosmf/api/v1/restfiles/ds?dslevel=SYS1.PARMLIB*', + url: '/ibmzosmf/api/v1/zosmf/restfiles/ds?dslevel=SYS1.PARMLIB*', headers: { Cookie: `${APIML_AUTH_COOKIE}=${token}`, } @@ -62,30 +62,10 @@ describe('test api mediation layer zosmf authentication', function() { assertNotEmptyValidResponse(res); }); - it('with valid LTPA cookie', async function() { - const token = Buffer.from(`${username}:${password}`, 'utf8').toString('base64'); - const loginResponse = await hq.request({ - url: '/zosmf/api/v1/info', - headers: { - 'Authorization': `Basic ${token}`, - } - }); - - const ltpaCookie = hq.findCookieInResponse(loginResponse, ZOSMF_TOKEN); - const response = await hq.request({ - url: '/zosmf/api/v1/info', - headers: { - 'Cookie': ltpaCookie, - } - }); - - assertNotEmptyValidResponse(response); - }); - it('with valid JWT token via Bearer', async function() { const token = await apiml.login(); const res = await hq.request({ - url: '/zosmf/api/v1/restfiles/ds?dslevel=SYS1.PARMLIB*', + url: '/ibmzosmf/api/v1/zosmf/restfiles/ds?dslevel=SYS1.PARMLIB*', headers: { 'Authorization': `Bearer ${token}`, } diff --git a/tests/sanity/test/apiml/test-oidc-via-gateway.js b/tests/sanity/test/apiml/test-oidc-via-gateway.js index a9573d463b..193e1164a0 100644 --- a/tests/sanity/test/apiml/test-oidc-via-gateway.js +++ b/tests/sanity/test/apiml/test-oidc-via-gateway.js @@ -28,9 +28,9 @@ describe('test oidc mapping via gateway', function() { if (!token) { this.skip(); } - + const res = await hq.request({ - url: `jobs/api/v2?owner=${process.env.SSH_USER.toUpperCase()}&prefix=*`, + url: `ibmzosmf/api/v1/zosmf/restjobs/jobs?owner=${process.env.SSH_USER.toUpperCase()}&prefix=*`, headers: { Cookie: `${APIML_AUTH_COOKIE}=${token}`, 'X-CSRF-ZOSMF-HEADER': '*', diff --git a/tests/sanity/test/apiml/test-zss-via-gateway.js b/tests/sanity/test/apiml/test-zss-via-gateway.js index 214ac83e07..7a2a6a35ac 100644 --- a/tests/sanity/test/apiml/test-zss-via-gateway.js +++ b/tests/sanity/test/apiml/test-zss-via-gateway.js @@ -30,7 +30,7 @@ describe('test zss x509 certificate mapping via gateway', function() { } const res = await hq.request({ - url: `jobs/api/v2?owner=${process.env.SSH_USER.toUpperCase()}&prefix=*`, + url: `ibmzosmf/api/v1/zosmf/restjobs/jobs?owner=${process.env.SSH_USER.toUpperCase()}&prefix=*`, headers: { Cookie: `${APIML_AUTH_COOKIE}=${token}`, 'X-CSRF-ZOSMF-HEADER': '*', diff --git a/tests/sanity/test/e2e/test-01-login.js b/tests/sanity/test/e2e/test-01-login.js index 0b2b102a30..52687707c6 100644 --- a/tests/sanity/test/e2e/test-01-login.js +++ b/tests/sanity/test/e2e/test-01-login.js @@ -15,12 +15,12 @@ const addContext = require('mochawesome/addContext'); const testName = path.basename(__filename, path.extname(__filename)); const { - PRE_INSTALLED_APPS, - PRE_INSTALLED_APPS_DISABLED_FOR_DOCKER, - PRE_PINNED_APPS, +// PRE_INSTALLED_APPS, +// PRE_INSTALLED_APPS_DISABLED_FOR_DOCKER, +// PRE_PINNED_APPS, DEFAULT_PAGE_LOADING_TIMEOUT, DEFAULT_ELEMENT_CHECK_INTERVAL, - getElements, + // getElements, getElement, getElementText, waitUntilElement, @@ -252,8 +252,12 @@ describe('test MVD login page', function() { expect(launchbar).to.be.an('object'); // check we have known apps launched - const apps = await getElements(driver, 'rs-com-launchbar-icon'); + + + /*const apps = await getElements(driver, 'rs-com-launchbar-icon'); expect(apps).to.be.an('array').that.have.lengthOf(PRE_PINNED_APPS.length); + + */ // FIXME: ignore the title check now since title has been changed to show plugin description // for (let app of apps) { // const icon = await getElement(app, 'div.launchbar-icon-image'); @@ -265,8 +269,8 @@ describe('test MVD login page', function() { loginSuccessfully = true; }); - const zosHost = process.env.ZOWE_ZOS_HOST || process.env.ZOWE_EXTERNAL_HOST; - const dockerTest = process.env.ZOWE_EXTERNAL_HOST !== zosHost; + // const zosHost = process.env.ZOWE_ZOS_HOST || process.env.ZOWE_EXTERNAL_HOST; + // const dockerTest = process.env.ZOWE_EXTERNAL_HOST !== zosHost; it('should be able to popup apps menu', async function() { if (!loginSuccessfully) { @@ -293,7 +297,7 @@ describe('test MVD login page', function() { expect(popup).to.be.an('object'); // check popup menu items - const menuItems = await getElements(popup, '.launch-widget-row > .app-label'); + /* const menuItems = await getElements(popup, '.launch-widget-row > .app-label'); if (dockerTest) { // Docker scenario will not have IP Explorer, thus installed apps should be one less the total count @@ -305,7 +309,7 @@ describe('test MVD login page', function() { for (let item of menuItems) { const text = await item.getText(); expect(text).to.be.oneOf(PRE_INSTALLED_APPS); - } + }*/ }); diff --git a/tests/sanity/test/e2e/test-04-uss-explorer.js b/tests/sanity/test/e2e/test-04-uss-explorer.js index 9b2eca1576..abe547007f 100644 --- a/tests/sanity/test/e2e/test-04-uss-explorer.js +++ b/tests/sanity/test/e2e/test-04-uss-explorer.js @@ -127,6 +127,7 @@ describe(`test ${APP_TO_TEST}`, function() { // save screenshot await saveScreenshotWithIframeAppContext(this, driver, testName, 'file-list-loaded', APP_TO_TEST, MVD_IFRAME_APP_CONTEXT); treeContent = await waitUntilElement(driver, MVD_EXPLORER_TREE_SECTION); + await driver.sleep(3000); // buffer sleep time; tree content appeared but wasn't done populating // load children of DIR_TO_TEST const items = await getElements(treeContent, 'ul li'); diff --git a/tests/sanity/test/e2e/test-05-tn3270.js b/tests/sanity/test/e2e/test-05-tn3270.js index c55717398d..f2170ff912 100644 --- a/tests/sanity/test/e2e/test-05-tn3270.js +++ b/tests/sanity/test/e2e/test-05-tn3270.js @@ -8,6 +8,7 @@ * Copyright IBM Corporation 2018, 2019 */ +/* const path = require('path'); const expect = require('chai').expect; const debug = require('debug')('zowe-sanity-test:e2e:tn3270'); @@ -99,3 +100,4 @@ describe(`test ${APP_TO_TEST}`, function() { } }); }); +*/ diff --git a/tests/sanity/test/e2e/test-07-iframe.js b/tests/sanity/test/e2e/test-07-iframe.js index 2962918ba4..13c7b668b1 100644 --- a/tests/sanity/test/e2e/test-07-iframe.js +++ b/tests/sanity/test/e2e/test-07-iframe.js @@ -47,7 +47,7 @@ describe.skip(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); diff --git a/tests/sanity/test/e2e/test-08-subsys.js b/tests/sanity/test/e2e/test-08-subsys.js index d10735e604..f4cfcff868 100644 --- a/tests/sanity/test/e2e/test-08-subsys.js +++ b/tests/sanity/test/e2e/test-08-subsys.js @@ -40,7 +40,7 @@ describe.skip(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); diff --git a/tests/sanity/test/e2e/test-09-editor.js b/tests/sanity/test/e2e/test-09-editor.js index 14e24d8540..2504beb2e7 100644 --- a/tests/sanity/test/e2e/test-09-editor.js +++ b/tests/sanity/test/e2e/test-09-editor.js @@ -7,7 +7,7 @@ * * Copyright IBM Corporation 2019 */ - +/* const path = require('path'); const expect = require('chai').expect; const debug = require('debug')('zowe-sanity-test:e2e:editor'); @@ -89,3 +89,4 @@ describe(`test ${APP_TO_TEST}`, function() { } }); }); +*/ diff --git a/tests/sanity/test/e2e/test-10-api-catalog.js b/tests/sanity/test/e2e/test-10-api-catalog.js index ab42adab69..ba53108906 100644 --- a/tests/sanity/test/e2e/test-10-api-catalog.js +++ b/tests/sanity/test/e2e/test-10-api-catalog.js @@ -45,7 +45,7 @@ describe(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); @@ -79,6 +79,8 @@ describe(`test ${APP_TO_TEST}`, function() { try { const searchBox = await waitUntilElement(driver, '.search-bar'); expect(searchBox).to.be.an('object'); + await saveScreenshotWithIframeAppContext(this, driver, testName, 'login-pre-success', APP_TO_TEST, MVD_IFRAME_APP_CONTENT); + } catch (e) { // try to save screenshot for debug purpose await saveScreenshotWithIframeAppContext(this, driver, testName, 'login-failed', APP_TO_TEST, MVD_IFRAME_APP_CONTENT); diff --git a/tests/sanity/test/e2e/test-11-workflows.js b/tests/sanity/test/e2e/test-11-workflows.js index 2bfde0962d..df0b21dc77 100644 --- a/tests/sanity/test/e2e/test-11-workflows.js +++ b/tests/sanity/test/e2e/test-11-workflows.js @@ -40,7 +40,7 @@ describe.skip(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); diff --git a/tests/sanity/test/e2e/test-12-angular-sample.js b/tests/sanity/test/e2e/test-12-angular-sample.js index addeb9fc4c..57248ca41d 100644 --- a/tests/sanity/test/e2e/test-12-angular-sample.js +++ b/tests/sanity/test/e2e/test-12-angular-sample.js @@ -44,7 +44,7 @@ describe.skip(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); diff --git a/tests/sanity/test/e2e/test-13-react-sample.js b/tests/sanity/test/e2e/test-13-react-sample.js index d2fee77eca..ac01c05d0f 100644 --- a/tests/sanity/test/e2e/test-13-react-sample.js +++ b/tests/sanity/test/e2e/test-13-react-sample.js @@ -44,7 +44,7 @@ describe.skip(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); diff --git a/tests/sanity/test/e2e/test-14-ip-explorer.js b/tests/sanity/test/e2e/test-14-ip-explorer.js index 99f9eb3326..0b274fd66d 100644 --- a/tests/sanity/test/e2e/test-14-ip-explorer.js +++ b/tests/sanity/test/e2e/test-14-ip-explorer.js @@ -40,7 +40,7 @@ describe(`test ${APP_TO_TEST}`, function() { // load MVD login page await loginMVD( driver, - `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_ZLUX_HTTPS_PORT}/`, + `https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/`, process.env.SSH_USER, process.env.SSH_PASSWD ); diff --git a/tests/sanity/test/explorer-apis/test-api-datasets-v1.js b/tests/sanity/test/explorer-apis/test-api-datasets-v1.js deleted file mode 100644 index 08c98c3383..0000000000 --- a/tests/sanity/test/explorer-apis/test-api-datasets-v1.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS } = require('../http-helper'); -const { - EXPLORER_API_TEST_DATASET_PATTERN, - EXPLORER_API_TEST_DATASET_NAME, - EXPLORER_API_TEST_DATASET_MEMBER_NAME, -} = require('../constants'); - -const getDatasetHelper = async function(hq, manualDecompress=false) { - const res = await hq.request({ - url: '/datasets/api/v1/' + encodeURIComponent(EXPLORER_API_TEST_DATASET_PATTERN), - }, { - manualDecompress, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - - expect(res).to.have.property('headers'); - if (manualDecompress) { - expect(res.headers).to.have.property('content-encoding'); - expect(res.headers['content-encoding']).to.equal('gzip'); - } - - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('items'); - expect(res.data.items).to.be.an('array'); - expect(res.data.items.map(one => one.name)).to.include(EXPLORER_API_TEST_DATASET_NAME); -}; - -const getDatasetMemberHelper = async function(hq, manualDecompress=false) { - const res = await hq.request({ - url: '/datasets/api/v1/' + encodeURIComponent(EXPLORER_API_TEST_DATASET_NAME) + '/members', - }, { - manualDecompress, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - - expect(res).to.have.property('headers'); - if (manualDecompress) { - expect(res.headers).to.have.property('content-encoding'); - expect(res.headers['content-encoding']).to.equal('gzip'); - } - - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('items'); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.include(EXPLORER_API_TEST_DATASET_MEMBER_NAME); -}; - -const getDatasetContentHelper = async function(hq, manualDecompress=false) { - const res = await hq.request({ - url: '/datasets/api/v1/' + encodeURIComponent(`${EXPLORER_API_TEST_DATASET_NAME}(${EXPLORER_API_TEST_DATASET_MEMBER_NAME})`) + '/content', - }, { - manualDecompress, - ungzip: false, - }); - - //checks for both paths - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - - expect(res).to.have.property('headers'); - if (manualDecompress) { - expect(res.headers).to.have.property('content-encoding'); - expect(res.headers['content-encoding']).to.equal('gzip'); - return; - } - - // checks for default path only - content JSON.parse(data.toString()) parsing cause exception - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('records'); - expect(res.data.records).to.be.a('string'); -}; - -describe('test explorer server datasets api', function() { - - let hq; - - before('verify environment variables', function() { - expect(process.env.SSH_USER, 'SSH_USER is not defined').to.not.be.empty; - expect(process.env.SSH_PASSWD, 'SSH_PASSWD is not defined').to.not.be.empty; - - hq = new HTTPRequest(null, null, null, { - username: process.env.SSH_USER, - password: process.env.SSH_PASSWD, - }); - }); - - it(`should be able to list data sets of ${EXPLORER_API_TEST_DATASET_PATTERN} default`, async function() { - await getDatasetHelper(hq); - }); - - it(`should be able to list data sets of ${EXPLORER_API_TEST_DATASET_PATTERN} decompress with zlib`, async function() { - await getDatasetHelper(hq, true); - }); - - it(`should be able to get members of data set ${EXPLORER_API_TEST_DATASET_NAME} default`, async function() { - await getDatasetMemberHelper(hq); - }); - - it(`should be able to get members of data set ${EXPLORER_API_TEST_DATASET_NAME} decompress with zlib`, async function() { - await getDatasetMemberHelper(hq, true); - }); - - it(`should be able to get content of data set ${EXPLORER_API_TEST_DATASET_NAME} default`, async function() { - await getDatasetContentHelper(hq); - }); - - it(`should be able to get content of data set ${EXPLORER_API_TEST_DATASET_NAME} decompress with zlib`, async function() { - await getDatasetContentHelper(hq, true); - }); - - it('returns the current user\'s TSO userid', async function() { - const res = await hq.request({ - url: '/datasets/api/v1/username', - method: 'get', - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('username'); - expect(res.data.username).to.be.a('string'); - }); -}); diff --git a/tests/sanity/test/explorer-apis/test-api-datasets-v2.js b/tests/sanity/test/explorer-apis/test-api-datasets-v2.js deleted file mode 100644 index 9bf97bdd4d..0000000000 --- a/tests/sanity/test/explorer-apis/test-api-datasets-v2.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS, APIMLAuth } = require('../http-helper'); -const { - APIML_AUTH_COOKIE, - EXPLORER_API_TEST_DATASET_PATTERN, - EXPLORER_API_TEST_DATASET_NAME, - EXPLORER_API_TEST_DATASET_MEMBER_NAME, -} = require('../constants'); - -describe('test explorer server datasets api v2',async function() { - - let hq; - let apiml; - let token; - - before('verify environment variables', async function() { - hq = new HTTPRequest(); - apiml = new APIMLAuth(hq); - token = await apiml.login(); - }); - - it(`should be able to list data sets of ${EXPLORER_API_TEST_DATASET_PATTERN} (v2 API)`, async() => { - const req = { - url: '/datasets/api/v2/' + encodeURIComponent(EXPLORER_API_TEST_DATASET_PATTERN), - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }; - - const res = await hq.request(req); - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data.items).to.be.a('array'); - expect(res.data.items.map(one => one.name)).to.include(EXPLORER_API_TEST_DATASET_NAME); - }); - - it(`should be able to list data sets of ${EXPLORER_API_TEST_DATASET_PATTERN} (v2 API) (manual decompress)`, async() => { - const req = { - url: '/datasets/api/v2/' + encodeURIComponent(EXPLORER_API_TEST_DATASET_PATTERN), - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }; - - const res = await hq.request(req, { manualDecompress: true }); - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data.items).to.be.a('array'); - expect(res.data.items.map(one => one.name)).to.include(EXPLORER_API_TEST_DATASET_NAME); - }); - - it(`should be able to get members of data set ${EXPLORER_API_TEST_DATASET_NAME} (v2 API)`, async() => { - const req = { - url: '/datasets/api/v2/' + encodeURIComponent(EXPLORER_API_TEST_DATASET_NAME) + '/members', - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }; - - const res = await hq.request(req); - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('items'); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.include(EXPLORER_API_TEST_DATASET_MEMBER_NAME); - }); - - it(`should be able to get members of data set ${EXPLORER_API_TEST_DATASET_NAME} (v2 API) (manual decompress)`, async() => { - const req = { - url: '/datasets/api/v2/' + encodeURIComponent(EXPLORER_API_TEST_DATASET_NAME) + '/members', - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }; - - const res = await hq.request(req, { manualDecompress: true }); - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('items'); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.include(EXPLORER_API_TEST_DATASET_MEMBER_NAME); - }); - - it(`should be able to get content of a data set member ${EXPLORER_API_TEST_DATASET_NAME}(${EXPLORER_API_TEST_DATASET_MEMBER_NAME}) (v2 API)`, async() => { - const req = { - url:'/datasets/api/v2/' + encodeURIComponent(`${EXPLORER_API_TEST_DATASET_NAME}(${EXPLORER_API_TEST_DATASET_MEMBER_NAME})`) + '/content', - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }; - - const res = await hq.request(req); - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('records'); - expect(res.data.records).to.be.a('string'); - }); - - it(`should be able to get content of a data set member ${EXPLORER_API_TEST_DATASET_NAME}(${EXPLORER_API_TEST_DATASET_MEMBER_NAME}) (v2 API) (manual decompress)`, async() => { - const req = { - url:'/datasets/api/v2/' + encodeURIComponent(`${EXPLORER_API_TEST_DATASET_NAME}(${EXPLORER_API_TEST_DATASET_MEMBER_NAME})`) + '/content', - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }; - - const res = await hq.request(req, { manualDecompress: true, ungzip: false }); - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - }); -}); diff --git a/tests/sanity/test/explorer-apis/test-api-jobs-v1.js b/tests/sanity/test/explorer-apis/test-api-jobs-v1.js deleted file mode 100644 index 155c35e2b9..0000000000 --- a/tests/sanity/test/explorer-apis/test-api-jobs-v1.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS } = require('../http-helper'); -const { ZOWE_JOB_NAME } = require('../constants'); - -describe('test explorer server jobs api', function() { - - let hq; - - before('verify environment variables', function() { - expect(process.env.SSH_USER, 'SSH_USER is not defined').to.not.be.empty; - expect(process.env.SSH_PASSWD, 'SSH_PASSWD is not defined').to.not.be.empty; - - hq = new HTTPRequest(null, null, null, { - username: process.env.SSH_USER, - password: process.env.SSH_PASSWD, - }); - }); - - it(`should be able to list jobs and have a job ${ZOWE_JOB_NAME}`, async function() { - const res = await hq.request({ - url: '/jobs/api/v1', - params: { - prefix: `${ZOWE_JOB_NAME}*`, - owner: 'ZWE*', - status: 'ACTIVE', - }, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.have.lengthOf(1); - expect(res.data.items[0]).to.have.any.keys('jobName', 'jobId', 'owner', 'status', 'type', 'subsystem'); - expect(res.data.items[0].jobName).to.equal(ZOWE_JOB_NAME); - }); - - it(`should be able to list jobs and have a job ${ZOWE_JOB_NAME} (manual decompress)`, async function() { - const res = await hq.request({ - url: '/jobs/api/v1', - params: { - prefix: `${ZOWE_JOB_NAME}*`, - owner: 'ZWE*', - status: 'ACTIVE', - }, - }, { - manualDecompress: true, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.have.lengthOf(1); - expect(res.data.items[0]).to.have.any.keys('jobName', 'jobId', 'owner', 'status', 'type', 'subsystem'); - expect(res.data.items[0].jobName).to.equal(ZOWE_JOB_NAME); - }); - - it('returns the current user\'s TSO userid', async function() { - const res = await hq.request({ - url: '/jobs/api/v1/username', - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('username'); - expect(res.data.username).to.be.a('string'); - }); -}); diff --git a/tests/sanity/test/explorer-apis/test-api-jobs-v2.js b/tests/sanity/test/explorer-apis/test-api-jobs-v2.js deleted file mode 100644 index 8ff3fcd087..0000000000 --- a/tests/sanity/test/explorer-apis/test-api-jobs-v2.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS, APIMLAuth } = require('../http-helper'); -const { - APIML_AUTH_COOKIE, - ZOWE_JOB_NAME, -} = require('../constants'); - -describe('test explorer server jobs api v2', function() { - - let hq; - let apiml; - let token; - - before('verify environment variables', async function() { - hq = new HTTPRequest(); - apiml = new APIMLAuth(hq); - token = await apiml.login(); - }); - - it(`should be able to list jobs and have a job ${ZOWE_JOB_NAME} (v2 API)`, async function() { - const res = await hq.request({ - url:'/jobs/api/v2', - params: { - prefix: `${ZOWE_JOB_NAME}*`, - owner: 'ZWE*', - status: 'ACTIVE', - }, - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.have.lengthOf(1); - expect(res.data.items[0]).to.have.any.keys('jobName', 'jobId', 'owner', 'status', 'type', 'subsystem'); - expect(res.data.items[0].jobName).to.equal(ZOWE_JOB_NAME); - }); - - it(`should be able to list jobs and have a job ${ZOWE_JOB_NAME} (v2 API) (manual decompress)`, async function() { - const res = await hq.request({ - url:'/jobs/api/v2', - params: { - prefix: `${ZOWE_JOB_NAME}*`, - owner: 'ZWE*', - status: 'ACTIVE', - }, - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }, { - manualDecompress: true, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data.items).to.be.an('array'); - expect(res.data.items).to.have.lengthOf(1); - expect(res.data.items[0]).to.have.any.keys('jobName', 'jobId', 'owner', 'status', 'type', 'subsystem'); - expect(res.data.items[0].jobName).to.equal(ZOWE_JOB_NAME); - }); -}); diff --git a/tests/sanity/test/explorer-apis/test-api-uss-v1.js b/tests/sanity/test/explorer-apis/test-api-uss-v1.js deleted file mode 100644 index c8e5d97561..0000000000 --- a/tests/sanity/test/explorer-apis/test-api-uss-v1.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS } = require('../http-helper'); - -describe('test explorer server uss files api', function() { - - let hq; - - before('verify environment variables', function() { - expect(process.env.SSH_USER, 'SSH_USER is not defined').to.not.be.empty; - expect(process.env.SSH_PASSWD, 'SSH_PASSWD is not defined').to.not.be.empty; - - hq = new HTTPRequest(null, null, null, { - username: process.env.SSH_USER, - password: process.env.SSH_PASSWD, - }); - }); - - it('Gets a list of files and directories for a given path', async function() { - const res = await hq.request({ - url: `/unixfiles/api/v1?path=${process.env.ZOWE_WORKSPACE_DIR}`, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('type'); - expect(res.data.type).to.be.a('string'); - expect(res.data).to.have.property('owner'); - expect(res.data.owner).to.be.a('string'); - expect(res.data).to.have.property('group'); - expect(res.data.group).to.be.a('string'); - expect(res.data).to.have.property('permissionsSymbolic'); - expect(res.data.permissionsSymbolic).to.be.a('string'); - }); - - it('Gets a list of files and directories for a given path (manual decompress)', async function() { - const res = await hq.request({ - url: `/unixfiles/api/v1?path=${process.env.ZOWE_WORKSPACE_DIR}`, - }, { - manualDecompress: true, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('type'); - expect(res.data.type).to.be.a('string'); - expect(res.data).to.have.property('owner'); - expect(res.data.owner).to.be.a('string'); - expect(res.data).to.have.property('group'); - expect(res.data.group).to.be.a('string'); - expect(res.data).to.have.property('permissionsSymbolic'); - expect(res.data.permissionsSymbolic).to.be.a('string'); - }); -}); diff --git a/tests/sanity/test/explorer-apis/test-api-uss-v2.js b/tests/sanity/test/explorer-apis/test-api-uss-v2.js deleted file mode 100644 index 9f29009806..0000000000 --- a/tests/sanity/test/explorer-apis/test-api-uss-v2.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS, APIMLAuth } = require('../http-helper'); -const { APIML_AUTH_COOKIE } = require('../constants'); - -describe('test explorer server uss files api v2', function() { - - let hq; - let apiml; - let token; - - before('verify environment variables', async function() { - hq = new HTTPRequest(); - apiml = new APIMLAuth(hq); - token = await apiml.login(); - }); - - it('Gets a list of files and directories for a given path (v2 API)', async() => { - const res = await hq.request({ - url: `/unixfiles/api/v2?path=${process.env.ZOWE_WORKSPACE_DIR}`, - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('type'); - expect(res.data.type).to.be.a('string'); - expect(res.data).to.have.property('owner'); - expect(res.data.owner).to.be.a('string'); - expect(res.data).to.have.property('group'); - expect(res.data.group).to.be.a('string'); - expect(res.data).to.have.property('permissionsSymbolic'); - expect(res.data.permissionsSymbolic).to.be.a('string'); - }); - - it('Gets a list of files and directories for a given path (v2 API) (manual decompress)', async() => { - const res = await hq.request({ - url: `/unixfiles/api/v2?path=${process.env.ZOWE_WORKSPACE_DIR}`, - headers: { - Cookie: `${APIML_AUTH_COOKIE}=${token}`, - } - }, { - manualDecompress: true, - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.data).to.be.an('object'); - expect(res.data).to.have.property('type'); - expect(res.data.type).to.be.a('string'); - expect(res.data).to.have.property('owner'); - expect(res.data.owner).to.be.a('string'); - expect(res.data).to.have.property('group'); - expect(res.data.group).to.be.a('string'); - expect(res.data).to.have.property('permissionsSymbolic'); - expect(res.data.permissionsSymbolic).to.be.a('string'); - }); -}); diff --git a/tests/sanity/test/explorer-apis/test-explorer-api-docs.js b/tests/sanity/test/explorer-apis/test-explorer-api-docs.js deleted file mode 100644 index f7cd20fcd9..0000000000 --- a/tests/sanity/test/explorer-apis/test-explorer-api-docs.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const expect = require('chai').expect; -const { HTTPRequest, HTTP_STATUS } = require('../http-helper'); - -describe('test explorer(s) api docs', function() { - - let hq; - - before('verify environment variables', function() { - expect(process.env.SSH_USER, 'SSH_USER is not defined').to.not.be.empty; - expect(process.env.SSH_PASSWD, 'SSH_PASSWD is not defined').to.not.be.empty; - - hq = new HTTPRequest(`https://${process.env.ZOWE_EXTERNAL_HOST}:${process.env.ZOWE_API_MEDIATION_GATEWAY_HTTP_PORT}/apicatalog/api/v1/apidoc`, null, null, { - username: process.env.SSH_USER, - password: process.env.SSH_PASSWD, - }); - }); - - - it('should be able to access jobs swagger json', async function() { - const res = await hq.request({ - url: '/jobs', - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.headers).to.have.property('content-type'); - expect(res.headers['content-type']).to.equal('application/json'); - expect(res.data).to.have.property('openapi'); - }); - - it('should be able to access datasets swagger json', async function() { - const res = await hq.request({ - url: '/datasets', - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.headers).to.have.property('content-type'); - expect(res.headers['content-type']).to.equal('application/json'); - expect(res.data).to.have.property('openapi'); - }); - - it('should be able to access unixfiles swagger json', async function() { - const res = await hq.request({ - url: '/unixfiles', - }); - - expect(res).to.have.property('status'); - expect(res.status).to.equal(HTTP_STATUS.SUCCESS); - expect(res.headers).to.have.property('content-type'); - expect(res.headers['content-type']).to.equal('application/json'); - expect(res.data).to.have.property('openapi'); - }); -}); diff --git a/tests/sanity/test/http-helper.js b/tests/sanity/test/http-helper.js index a857869c82..2a7762740e 100644 --- a/tests/sanity/test/http-helper.js +++ b/tests/sanity/test/http-helper.js @@ -323,7 +323,7 @@ class APIMLAuth { debug('================================= APIMLAuth.isLoggedIn'); const res = await this.httpRequest.request({ - url: '/zosmf/api/v1/restfiles/ds?dslevel=SYS1.PARMLIB*', + url: '/ibmzosmf/api/v1/zosmf/restfiles/ds?dslevel=SYS1.PARMLIB*', headers: { ...headers, 'X-CSRF-ZOSMF-HEADER': '*', diff --git a/tests/sanity/test/install/test-installed-files.js b/tests/sanity/test/install/test-installed-files.js index 7686528180..976bcfd202 100644 --- a/tests/sanity/test/install/test-installed-files.js +++ b/tests/sanity/test/install/test-installed-files.js @@ -32,10 +32,6 @@ describe('verify installed files', function() { await sshHelper.executeCommandWithNoError(`test -f ${process.env.ZOWE_ROOT_DIR}/bin/utils/opercmd.rex`); }); - it('components/jobs-api/bin/jobs-api-server-*.jar should exist', async function() { - await sshHelper.executeCommandWithNoError(`test -f ${process.env.ZOWE_ROOT_DIR}/components/jobs-api/bin/jobs-api-server-*.jar`); - }); - it('fingerprint directory should exist', async function() { await sshHelper.executeCommandWithNoError(`test -d ${process.env.ZOWE_ROOT_DIR}/fingerprint`); }); @@ -46,7 +42,8 @@ describe('verify installed files', function() { it('fingerprint should match', async function() { // IMPORT: After 'source' the profile, JAVA_HOME environment variable must exist - const fingerprintStdout = await sshHelper.executeCommandWithNoError(`touch ~/.profile && . ~/.profile && ${process.env.ZOWE_ROOT_DIR}/bin/zwe support verify-fingerprints`); + // note the --config assumes the instance dir, which is set in ansible playbooks + const fingerprintStdout = await sshHelper.executeCommandWithNoError(`touch ~/.profile && . ~/.profile && ${process.env.ZOWE_ROOT_DIR}/bin/zwe support verify-fingerprints --config /ZOWE/tmp/.zowe/zowe.yaml`); debug('fingerprint show result:', fingerprintStdout); addContext(this, { title: 'fingerprint show result', diff --git a/workflows/files/ZWECONF.properties b/workflows/files/ZWECONF.properties index 876020cab4..405467602b 100644 --- a/workflows/files/ZWECONF.properties +++ b/workflows/files/ZWECONF.properties @@ -4,7 +4,7 @@ # Category: zowe # Description: # Where Zowe MVS data sets will be installed -zowe_setup_dataset_prefix=IBMUSER.ZWEV2 +zowe_setup_dataset_prefix=IBMUSER.ZWEV3 # zowe_setup_dataset_proclib # Label: Zowe setup MVS procedure library @@ -20,7 +20,7 @@ zowe_setup_dataset_proclib=USER.PROCLIB # Category: zowe # Description: # Zowe parameter library -zowe_setup_dataset_parmlib=IBMUSER.ZWEV2.CUST.PARMLIB +zowe_setup_dataset_parmlib=IBMUSER.ZWEV3.CUST.PARMLIB # zowe_setup_dataset_libzis # Label: Zowe setup PARMLIB members for ZIS plugins @@ -36,7 +36,7 @@ zowe_setup_dataset_libzis=ZWESIP00 # Category: zowe # Description: # JCL library where Zowe will store temporary JCLs during initialization -zowe_setup_dataset_jcllib=IBMUSER.ZWEV2.CUST.JCLLIB +zowe_setup_dataset_jcllib=IBMUSER.ZWEV3.CUST.JCLLIB # zowe_setup_dataset_loadlibPlugin # Label: Zowe setup Utilities and extensions library @@ -44,7 +44,7 @@ zowe_setup_dataset_jcllib=IBMUSER.ZWEV2.CUST.JCLLIB # Category: zowe # Description: # Load library for Utilities for use by Zowe and extensions -zowe_setup_dataset_loadlibPlugin=IBMUSER.ZWEV2.SZWELOAD +zowe_setup_dataset_loadlibPlugin=IBMUSER.ZWEV3.SZWELOAD # zowe_setup_dataset_authLoadlib # Label: Zowe setup MVS auth load library @@ -52,7 +52,7 @@ zowe_setup_dataset_loadlibPlugin=IBMUSER.ZWEV2.SZWELOAD # Category: zowe # Description: # APF authorized LOADLIB for Zowe core -zowe_setup_dataset_authLoadlib=IBMUSER.ZWEV2.SZWEAUTH +zowe_setup_dataset_authLoadlib=IBMUSER.ZWEV3.SZWEAUTH # zowe_setup_dataset_authPluginLib # Label: Zowe setup MVS auth plugin library @@ -60,14 +60,14 @@ zowe_setup_dataset_authLoadlib=IBMUSER.ZWEV2.SZWEAUTH # Category: zowe # Description: # APF authorized LOADLIB for Zowe ZIS Plugins -zowe_setup_dataset_authPluginLib=IBMUSER.ZWEV2.CUST.ZWESAPL +zowe_setup_dataset_authPluginLib=IBMUSER.ZWEV3.CUST.ZWESAPL # zowe_setup_vsam_mode # Label: Zowe setup VSAM mode -# Abstract: VSAM data set with Record-Level-Sharing enabled or not +# Abstract: VSAM data set with Record-Level-Sharing enabled or disabled # Category: components # Description: -# VSAM data set with Record-Level-Sharing enabled or not +# VSAM data set with Record-Level-Sharing enabled or disabled # Choices: NONRLS,RLS zowe_setup_vsam_mode=NONRLS @@ -140,15 +140,15 @@ zowe_job_prefix=ZWE1 # zowe_externalDomains # Label: Zowe external domains -# Abstract: This should be the domain name of your Dynamic VIP Address (DVIPA) +# Abstract: The list of external domains # Category: zowe # Description: -# This should be the domain name of your Dynamic VIP Address (DVIPA) +# Defines a list of external domains that will be used by the Zowe instance. zowe_externalDomains=sample-domain.com # zowe_externalPort # Label: Zowe external port -# Abstract: This is the port you use to access Zowe Gateway from your web browser +# Abstract: The port you use to access Zowe Gateway from your web browser # Category: zowe # Description: # This is the port you use to access Zowe Gateway from your web browser. @@ -174,6 +174,46 @@ zowe_launchScript_logLevel=info # Choices: warn,exit zowe_launchScript_CompConf=warn +# zowe_network_server_attls +# Label: Application Transparent Transport Layer Security for inbound +# Abstract: Enable on AT-TLS on inbound calls +# Category: network +# Description: +# Enable aware mode of inbound AT-TLS rules of all Zowe components. +zowe_network_server_attls=false + +# zowe_network_client_attls +# Label: Application Transparent Transport Layer Security for outbound +# Abstract: Enable on AT-TLS on outbound calls +# Category: network +# Description: +# Enable aware mode of outbound AT-TLS rules of all Zowe components. +zowe_network_client_attls=false + +# zowe_network_server_tls_min +# Label: Transport Layer Security - min version +# Abstract: TLS minimum version +# Category: network +# Description: +# The default configuration of the minimal version of a security transport protocol for inbound calls. +# TLS settings only apply when attls=false. +# Else you must use AT-TLS configuration for TLS customization. +# +# Choices: TLSv1.1,TLSv1.2,TLSv1.3 +zowe_network_server_tls_min=TLSv1.2 + +# zowe_network_server_tls_max +# Label: Transport Layer Security - max version +# Abstract: TLS maximum version +# Category: certificates +# Description: +# The default configuration of the maximum version of a security transport protocol for inbound calls. +# TLS settings only apply when attls=false. +# Else you must use AT-TLS configuration for TLS customization. +# +# Choices: TLSv1.1,TLSv1.2,TLSv1.3 +zowe_network_server_tls_max=TLSv1.3 + # zowe_certificate_keystore_type # Label: Zowe certificate keystore type # Abstract: Certificate keystore type (PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS) @@ -185,7 +225,7 @@ zowe_certificate_keystore_type=PKCS12 # zowe_certificate_keystore_file # Label: Zowe certificate keystore file -# Abstract: Zowe certificate keystore file. In case of keyring the format is "safkeyring://OWNER/KEYRING". +# Abstract: Zowe certificate keystore file. For keyring, the format is "safkeyring://OWNER/KEYRING". # Category: certificates # Description: # Zowe certificate keystore file @@ -218,7 +258,7 @@ zowe_certificate_truststore_type=PKCS12 # zowe_certificate_truststore_file # Label: Zowe certificate truststore file -# Abstract: File location for the certificate truststore. Keyring is in the format "safkeyring://OWNER/KEYRING". +# Abstract: File location for certificate truststore. For keyring, the format is "safkeyring://OWNER/KEYRING" # Category: certificates # Description: # File location for the certificate truststore @@ -306,19 +346,19 @@ zOSMF_port=443 zOSMF_applId=IZUDFLT # components_gateway_enabled -# Label: Enable gateway -# Abstract: Should the APIML gateway be enabled? +# Label: Enable the gateway +# Abstract: Check this option to enable the gateway # Category: components # Description: -# Should the APIML gateway be enabled? +# Check this option to enable the gateway components_gateway_enabled=true # components_gateway_port # Label: Gateway port -# Abstract: Port for the APIML gateway +# Abstract: Port for the API ML gateway # Category: components # Description: -# Port for the APIML gateway +# Port for the API ML gateway components_gateway_port=7554 # components_gateway_debug @@ -329,8 +369,32 @@ components_gateway_port=7554 # Switch on the debug mode for the gateway components_gateway_debug=false +# components_zaas_enabled +# Label: Enable ZAAS +# Abstract: Should the APIML ZAAS be enabled? +# Category: components +# Description: +# Should the APIML ZAAS be enabled? +components_zaas_enabled=true + +# components_zaas_port +# Label: ZAAS port +# Abstract: Port for the APIML ZAAS +# Category: components +# Description: +# Port for the APIML ZAAS +components_zaas_port=7558 + +# components_zaas_debug +# Label: ZAAS debug +# Abstract: Switch on the debug mode for the ZAAS +# Category: components +# Description: +# Switch on the debug mode for the ZAAS +components_zaas_debug=false + # components_gateway_apiml_security_auth_provider -# Label: Gateway APIML security auth provider +# Label: APIML security auth provider # Abstract: Authorization provider for the gateway # Category: components # Description: @@ -338,23 +402,24 @@ components_gateway_debug=false components_gateway_apiml_security_auth_provider=zosmf # components_gateway_apiml_security_auth_zosmf_jwtAutoconfiguration -# Label: Gateway APIML security auth z/OSMF jwtAutoconfiguration +# Label: APIML security auth z/OSMF jwtAutoconfiguration # Abstract: JWT auto configuration for gateway security auth # Category: components # Description: # JWT auto configuration for gateway security auth -components_gateway_apiml_security_auth_zosmf_jwtAutoconfiguration=auto +# Choices: jwt,ltpa +components_gateway_apiml_security_auth_zosmf_jwtAutoconfiguration=jwt # components_gateway_apiml_security_auth_zosmf_serviceId -# Label: Gateway APIML security auth z/OSMF serviceId +# Label: APIML security auth z/OSMF serviceId # Abstract: Service ID for gateway security auth # Category: components # Description: # Service ID for gateway security auth -components_gateway_apiml_security_auth_zosmf_serviceId=zosmf +components_gateway_apiml_security_auth_zosmf_serviceId=ibmzosmf # components_gateway_apiml_security_authorization_endpoint_enabled -# Label: Enable gateway APIML security authorization endpoint +# Label: Enable APIML security authorization endpoint # Abstract: Use this to enable the security authorization endpoint # Category: components # Description: @@ -362,147 +427,75 @@ components_gateway_apiml_security_auth_zosmf_serviceId=zosmf components_gateway_apiml_security_authorization_endpoint_enabled=false # components_gateway_apiml_security_authorization_provider -# Label: Gateway APIML security authorization provider +# Label: APIML security authorization provider # Abstract: Security authorization provider for the gateway # Category: components # Description: # Security authorization provider for the gateway -components_gateway_apiml_security_authorization_provider= +components_gateway_apiml_security_authorization_provider=native # components_gateway_apiml_security_x509_enabled -# Label: Enable gateway APIML security x509 +# Label: Enable APIML security x509 # Abstract: Check to enable the gateway security x509 # Category: components # Description: # Check to enable the gateway security x509 components_gateway_apiml_security_x509_enabled=false -# components_gateway_server_internal_enabled -# Label: Enable gateway server internal connector -# Abstract: Enable gateway server internal connector -# Category: components -# Description: -# Enable gateway server internal connector -components_gateway_server_internal_enabled=false - -# components_gateway_server_internal_port -# Label: Gateway server internal port -# Abstract: Gateway internal connector port -# Category: components -# Description: -# Gateway internal connector port -components_gateway_server_internal_port=7550 - -# components_gateway_server_internal_ssl_enabled -# Label: Enable gateway server internal SSL -# Abstract: Enable gateway internal connector SSL -# Category: components -# Description: -# Enable gateway internal connector SSL -components_gateway_server_internal_ssl_enabled=false - -# components_metrics_service_enabled -# Label: Enable metrics service -# Abstract: Use this option to enable the metrics seervice -# Category: components -# Description: -# Use this option to enable the metrics seervice -components_metrics_service_enabled=false - -# components_metrics_service_port -# Label: Metrics service port -# Abstract: Port for the metrics service -# Category: components -# Description: -# Port for the metrics service -components_metrics_service_port=7551 - -# components_metrics_service_debug -# Label: Metrics service debug -# Abstract: Check this value to get additional debugging -# Category: components -# Description: -# Check this value to get additional debugging -components_metrics_service_debug=false - -# components_cloud_gateway_enabled -# Label: Enable cloud gateway -# Abstract: Use this option to enable the cloud gateway -# Category: components -# Description: -# Use this option to enable the cloud gateway -components_cloud_gateway_enabled=false - -# components_cloud_gateway_port -# Label: Cloud gateway port -# Abstract: Port for the cloud gateway -# Category: components -# Description: -# Port for the cloud gateway -components_cloud_gateway_port=7563 - -# components_cloud_gatewaye_debug -# Label: Cloud gateway debug -# Abstract: Check this value to get additional debugging -# Category: components -# Description: -# Check this value to get additional debugging -components_cloud_gatewaye_debug=false - # components_api_catalog_enabled -# Label: Enable API catalog -# Abstract: Use this option to enable the API catalog +# Label: Enable API Catalog +# Abstract: Check this option to enable the API Catalog # Category: components # Description: -# Use this option to enable the API catalog +# Check this option to enable the API Catalog components_api_catalog_enabled=true # components_api_catalog_port # Label: API catalog port -# Abstract: Port on which the API catalog should be running. +# Abstract: Port on which the API Catalog should be running. # Category: components # Description: -# Port on which the API catalog should be running. +# Port on which the API Catalog should be running. components_api_catalog_port=7552 # components_api_catalog_debug # Label: API catalog debug -# Abstract: Extra debugging information from API catalog. +# Abstract: Extra debugging information from API Catalog. # Category: components # Description: -# Extra debugging information from API catalog. +# Extra debugging information from API Catalog. components_api_catalog_debug=false # components_discovery_enabled -# Label: Enable discovery -# Abstract: Should the automatic discovery be enabled? +# Label: Enable the Discovery service +# Abstract: Check this option to enable the Discovery service # Category: components # Description: -# Should the automatic discovery be enabled? +# Check this option to enable the Discovery service components_discovery_enabled=true # components_discovery_port # Label: Discovery port -# Abstract: Port on which the discovery service should be running +# Abstract: Port on which the Discovery service should be running # Category: components # Description: -# Port on which the discovery service should be running +# Port on which the Discovery service should be running components_discovery_port=7553 # components_discovery_debug # Label: Discovery debug -# Abstract: Should there be extra debugging information? +# Abstract: Check this option to include extra debugging information # Category: components # Description: -# Should there be extra debugging information? +# Check this option to include extra debugging information components_discovery_debug=false # components_caching_service_enabled -# Label: Enable caching service -# Abstract: Check to enable the caching service +# Label: Enable the Caching service +# Abstract: Check this option to enable the Caching service # Category: components # Description: -# Check to enable the caching service +# Check this option to enable the Caching service components_caching_service_enabled=true # components_caching_service_port @@ -523,7 +516,7 @@ components_caching_service_debug=false # components_caching_service_storage_evictionStrategy # Label: Caching service storage eviction strategy -# Abstract: Specifies the eviction strategy when storage size is achieved. +# Abstract: Specifies the eviction strategy when storage size is achieved # Category: components # Description: # Specifies the eviction strategy when storage size is achieved. @@ -535,17 +528,9 @@ components_caching_service_storage_evictionStrategy=reject # Abstract: Specifies the components caching service storage mode # Category: components # Description: -# Specifies the components caching service storage mode +# Specifies the components caching service storage mode. # Choices: inMemory,redis,infinispan,VSAM -components_caching_service_storage_mode=VSAM - -# components_caching_service_storage_size -# Label: Caching service storage size -# Abstract: Number of records before the eviction strategies kick in -# Category: components -# Description: -# Number of records before the eviction strategies kick in -components_caching_service_storage_size=10000 +components_caching_service_storage_mode=infinispan # components_caching_service_storage_vsam_name # Label: Caching service storage VSAM name @@ -563,12 +548,28 @@ components_caching_service_storage_vsam_name= # Port for jgroups. This is required if storage mode is infinispan. components_caching_service_storage_infinispan_jgroups_port=7600 +# components_caching_service_storage_infinispan_jgroups_host +# Label: Caching service storage jgroups host +# Abstract: Host for jgroups +# Category: components +# Description: +# Host for jgroups. Default value is the same as Zowe host and it is used if storage mode is infinispan. +components_caching_service_storage_infinispan_jgroups_host= + +# components_caching_service_storage_infinispan_jgroups_keyExchange_port +# Label: Caching service storage jgroups keyExchange port +# Abstract: Port for jgroups key exchange +# Category: components +# Description: +# Port for jgroups key exchange. This is required if storage mode is infinispan. +components_caching_service_storage_infinispan_jgroups_keyExchange_port=7601 + # components_app_server_enabled -# Label: Enable app server +# Label: Enable the app server # Abstract: Check this option to enable the app server # Category: components # Description: -# Check this option to enable the app server +# Check this option to enable the app server. components_app_server_enabled=true # components_app_server_debug @@ -576,7 +577,7 @@ components_app_server_enabled=true # Abstract: Check to get extra debug information from the service # Category: components # Description: -# Check to get extra debug information from the service +# Check to get extra debug information from the service. components_app_server_debug=false # components_app_server_port @@ -589,10 +590,10 @@ components_app_server_port=7556 # components_zss_enabled # Label: Enable ZSS -# Abstract: Check this option to enable the ZSS component +# Abstract: Check this option to enable ZSS # Category: components # Description: -# Check this option to enable the ZSS component +# Check this option to enable ZSS components_zss_enabled=true # components_zss_port @@ -611,14 +612,6 @@ components_zss_port=7557 # Name for the ZSS cross memory server components_zss_crossMemoryServerName=ZWESIS_STD -# components_zss_tls -# Label: ZSS TLS -# Abstract: Check this to enable TLS on ZSS -# Category: components -# Description: -# Check this to enable TLS on ZSS -components_zss_tls=true - # components_zss_agent_jwt_fallback # Label: ZSS JWT fallback # Abstract: Check this to enable fallback @@ -627,86 +620,38 @@ components_zss_tls=true # If fallback is enabled, the agent issues and accepts cookies from itself in the event a JWT cannot be provided. components_zss_agent_jwt_fallback=true -# components_jobs_api_enabled -# Label: Enable jobs API -# Abstract: Check this option to enable the jobs API -# Category: components -# Description: -# Check this option to enable the jobs API -components_jobs_api_enabled=false - -# components_jobs_api_debug -# Label: Jobs API debug -# Abstract: Check to get extra debug information from the service -# Category: components -# Description: -# Check to get extra debug information from the service -components_jobs_api_debug=false - -# components_jobs_api_port -# Label: Jobs API port -# Abstract: Port for the Jobs API -# Category: components -# Description: -# Port for the Jobs API -components_jobs_api_port=7558 - -# components_files_api_enabled -# Label: Enable files API -# Abstract: Check this option to enable the files API +# components_zss_agent_64bit +# Label: ZSS 64bit +# Abstract: Check this to enable 64bit mode # Category: components # Description: -# Check this option to enable the files API -components_files_api_enabled=false - -# components_files_api_debug -# Label: Files API debug -# Abstract: Check to get extra debug information from the service -# Category: components -# Description: -# Check to get extra debug information from the service -components_files_api_debug=false - -# components_files_api_port -# Label: Files API port -# Abstract: Port which will be used by the Files API -# Category: components -# Description: -# Port which will be used by the Files API -components_files_api_port=7559 +# If 64bit mode is disabled 31bit mode will be used. +components_zss_agent_64bit=true # components_explorer_jes_enabled # Label: Enable explorer JES -# Abstract: Check this to enable the JES explorer +# Abstract: Check this option to enable the JES explorer # Category: components # Description: -# Check this to enable the JES explorer +# Check this option to enable the JES explorer. components_explorer_jes_enabled=true # components_explorer_mvs_enabled # Label: Enable explorer MVS -# Abstract: Check this option to enable MVS explorer +# Abstract: Check this option to enable the MVS explorer # Category: components # Description: -# Check this option to enable MVS explorer +# Check this option to enable the MVS explorer. components_explorer_mvs_enabled=true # components_explorer_uss_enabled # Label: Enable explorer USS -# Abstract: Check this option to enable USS explorer +# Abstract: Check this option to enable the USS explorer # Category: components # Description: -# Check this option to enable USS explorer +# Check this option to enable the USS explorer. components_explorer_uss_enabled=true -# useconfig_manager_enabled -# Label: Enable Zowe configuration manager -# Abstract: Should Zowe configuration manager be enabled? -# Category: configManager -# Description: -# Should Zowe configuration manager be enabled? -useconfig_manager_enabled=true - # config_manager_validation # Label: Zowe configuration manager validation type # Abstract: STRICT or COMPONENT-COMPAT validation type @@ -714,7 +659,7 @@ useconfig_manager_enabled=true # Description: # STRICT=quit on any error, COMPONENT-COMPAT=if component missing schema, skip it with warning instead of quit # Choices: COMPONENT-COMPAT,STRICT -config_manager_validation=COMPONENT-COMPAT +config_manager_validation=STRICT # zowe_rbacProfileId # Label: Zowe Profile Identifier @@ -803,4 +748,14 @@ zowe_setup_security_stcs_zis=ZWESISTC # Category: security # Description: # STC name of Auxiliary Service -zowe_setup_security_stcs_aux=ZWESASTC \ No newline at end of file +zowe_setup_security_stcs_aux=ZWESASTC + +# zowe_setup_installStep_enabled +# Label: Install the MVS data sets +# Abstract: Check to enable this run step with the zwe install command. For convenience build only. +# Category: installMVSDatasets +# Description: +# Check this option to enable the optional workflow step with zwe install command. After Zowe convenience build is extracted, +# you can enable this flag to run the zwe install command to install MVS data sets within this workflow run. +# This option is for convenience build only. SMP/E installs the MVS data sets during installation. +zowe_setup_installStep_enabled=false diff --git a/workflows/files/ZWECONF.xml b/workflows/files/ZWECONF.xml index 8f4ee7b153..6d2c03e443 100644 --- a/workflows/files/ZWECONF.xml +++ b/workflows/files/ZWECONF.xml @@ -3,23 +3,23 @@ true - config_zowe_20 - Configuration of Zowe 2.0 - Use this workflow to configure the Zowe 2.0 + config_zowe_30 + Configuration of Zowe 3.0 + Use this workflow to configure the Zowe 3.0 ###ZOWE_VERSION### Zowe - - Where Zowe MVS data sets will be installed - Where Zowe MVS data sets will be installed + + Prefix of existing SZWEEXEC Target libraries created during PSWI or SMP/E + Prefix of existing SZWEEXEC Target libraries created during PSWI or SMP/E installation phase zowe - IBMUSER.ZWEV2 + IBMUSER.ZWEV3 @@ -41,7 +41,7 @@ - IBMUSER.ZWEV2.CUST.PARMLIB + IBMUSER.ZWEV3.CUST.PARMLIB @@ -63,7 +63,7 @@ - IBMUSER.ZWEV2.CUST.JCLLIB + IBMUSER.ZWEV3.CUST.JCLLIB @@ -74,7 +74,7 @@ - IBMUSER.ZWEV2.SZWELOAD + IBMUSER.ZWEV3.SZWELOAD @@ -85,7 +85,7 @@ - IBMUSER.ZWEV2.SZWEAUTH + IBMUSER.ZWEV3.SZWEAUTH @@ -96,13 +96,13 @@ - IBMUSER.ZWEV2.CUST.ZWESAPL + IBMUSER.ZWEV3.CUST.ZWESAPL - VSAM data set with Record-Level-Sharing enabled or not - VSAM data set with Record-Level-Sharing enabled or not + VSAM data set with Record-Level-Sharing enabled or disabled + VSAM data set with Record-Level-Sharing enabled or disabled components @@ -202,8 +202,8 @@ It is used by ZWESLSTC or by zwe command - This should be the domain name of your Dynamic VIP Address (DVIPA) - This should be the domain name of your Dynamic VIP Address (DVIPA) + The list of external domains + Defines a list of external domains that will be used by the Zowe instance. zowe @@ -213,7 +213,7 @@ It is used by ZWESLSTC or by zwe command - This is the port you use to access Zowe Gateway from your web browser + The port you use to access Zowe Gateway from your web browser This is the port you use to access Zowe Gateway from your web browser. In many use cases, this should be same as <b>components.gateway.port</b>. But in some use cases, like containerization, this port could be different. @@ -249,6 +249,60 @@ some use cases, like containerization, this port could be different.warn + + + Enable on AT-TLS on inbound calls + Enable aware mode of inbound AT-TLS rules of all Zowe components. + network + + + + false + + + + + Enable on AT-TLS on outbound calls + Enable aware mode of outbound AT-TLS rules of all Zowe components. + network + + + + false + + + + + TLS minimum version + The default configuration of the minimal version of a security transport protocol for inbound calls. + TLS settings only apply when attls=false. + Else you must use AT-TLS configuration for TLS customization. + + network + + + TLSv1.1 + TLSv1.2 + TLSv1.3 + TLSv1.2 + + + + + TLS maximum version + The default configuration of the maximum version of a security transport protocol for inbound calls. + TLS settings only apply when attls=false. + Else you must use AT-TLS configuration for TLS customization. + + network + + + TLSv1.1 + TLSv1.2 + TLSv1.3 + TLSv1.3 + + Certificate keystore type (PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS) @@ -268,7 +322,7 @@ some use cases, like containerization, this port could be different. - Zowe certificate keystore file. In case of keyring the format is "safkeyring://OWNER/KEYRING". + Zowe certificate keystore file. For keyring, the format is "safkeyring://OWNER/KEYRING". Zowe certificate keystore file certificates @@ -317,7 +371,7 @@ some use cases, like containerization, this port could be different. - File location for the certificate truststore. Keyring is in the format "safkeyring://OWNER/KEYRING". + File location for certificate truststore. For keyring, the format is "safkeyring://OWNER/KEYRING" File location for the certificate truststore certificates @@ -405,10 +459,10 @@ How we want to verify SSL certificates of services. Valid values are: - - Path to the NodeJS home - Path to the NodeJS home - node + + Path to the Node.js home + Path to the Node.js home + Node.js @@ -448,9 +502,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Should the APIML gateway be enabled? - Should the APIML gateway be enabled? + + Check this option to enable Gateway + Check this option to enable Gateway components @@ -460,8 +514,8 @@ How we want to verify SSL certificates of services. Valid values are: - Port for the APIML gateway - Port for the APIML gateway + Port for the APIML Gateway + Port for the APIML Gateway components @@ -471,8 +525,8 @@ How we want to verify SSL certificates of services. Valid values are: - Switch on the debug mode for the gateway - Switch on the debug mode for the gateway + Switch on the debug mode for Gateway + Switch on the debug mode for Gateway components @@ -480,10 +534,43 @@ How we want to verify SSL certificates of services. Valid values are: false + + + Check this option to enable APIML ZAAS + Check this option to enable APIML ZAAS + components + + + + true + + + + + Port for APIML ZAAS + Port for APIML ZAAS + components + + + + 7558 + + + + + Switch on the debug mode for ZAAS + Switch on the debug mode for ZAAS + components + + + + false + + - - Authorization provider for the gateway - Authorization provider for the gateway + + Authorization provider for the Gateway + Authorization provider for the Gateway components @@ -492,29 +579,31 @@ How we want to verify SSL certificates of services. Valid values are: - - JWT auto configuration for gateway security auth - JWT auto configuration for gateway security auth + + JWT auto configuration for Gateway security auth + JWT auto configuration for Gateway security auth components - auto + jwt + ltpa + jwt - - Service ID for gateway security auth - Service ID for gateway security auth + + Service ID for Gateway security auth + Service ID for Gateway security auth components - zosmf + ibmzosmf - + Use this to enable the security authorization endpoint Use this to enable the security authorization endpoint components @@ -525,118 +614,20 @@ How we want to verify SSL certificates of services. Valid values are: - - Security authorization provider for the gateway - Security authorization provider for the gateway + + Security authorization provider for the Gateway + Security authorization provider for the Gateway components + native - - Check to enable the gateway security x509 - Check to enable the gateway security x509 - components - - - - false - - - - - Enable gateway server internal connector - Enable gateway server internal connector - components - - - - false - - - - - Gateway internal connector port - Gateway internal connector port - components - - - - 7550 - - - - - Enable gateway internal connector SSL - Enable gateway internal connector SSL - components - - - - false - - - - - Use this option to enable the metrics seervice - Use this option to enable the metrics seervice - components - - - - false - - - - - Port for the metrics service - Port for the metrics service - components - - - - 7551 - - - - - Check this value to get additional debugging - Check this value to get additional debugging - components - - - - false - - - - - Use this option to enable the cloud gateway - Use this option to enable the cloud gateway - components - - - - false - - - - - Port for the cloud gateway - Port for the cloud gateway - components - - - - 7563 - - - - - Check this value to get additional debugging - Check this value to get additional debugging + + Check to enable the Gateway security x509 + Check to enable the Gateway security x509 components @@ -645,9 +636,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Use this option to enable the API catalog - Use this option to enable the API catalog + + Check this option to enable API Catalog + Check this option to enable API Catalog components @@ -657,8 +648,8 @@ How we want to verify SSL certificates of services. Valid values are: - Port on which the API catalog should be running. - Port on which the API catalog should be running. + Port on which the API Catalog should be running. + Port on which the API Catalog should be running. components @@ -668,8 +659,8 @@ How we want to verify SSL certificates of services. Valid values are: - Extra debugging information from API catalog. - Extra debugging information from API catalog. + Extra debugging information from API Catalog. + Extra debugging information from API Catalog. components @@ -678,9 +669,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Should the automatic discovery be enabled? - Should the automatic discovery be enabled? + + Check this option to enable Discovery service + Check this option to enable Discovery service components @@ -690,8 +681,8 @@ How we want to verify SSL certificates of services. Valid values are: - Port on which the discovery service should be running - Port on which the discovery service should be running + Port on which Discovery service should be running + Port on which Discovery service should be running components @@ -701,8 +692,8 @@ How we want to verify SSL certificates of services. Valid values are: - Should there be extra debugging information? - Should there be extra debugging information? + Check this option to include extra debugging information + Check this option to include extra debugging information components @@ -711,9 +702,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Check to enable the caching service - Check to enable the caching service + + Check this option to enable Caching service + Check this option to enable Caching service components @@ -723,8 +714,8 @@ How we want to verify SSL certificates of services. Valid values are: - Port for the caching service - Port for the caching service + Port for Caching service + Port for Caching service components @@ -745,7 +736,7 @@ How we want to verify SSL certificates of services. Valid values are: - Specifies the eviction strategy when storage size is achieved. + Specifies the eviction strategy when storage size is achieved Specifies the eviction strategy when storage size is achieved. components @@ -759,7 +750,7 @@ How we want to verify SSL certificates of services. Valid values are: Specifies the components caching service storage mode - Specifies the components caching service storage mode + Specifies the components caching service storage mode. components @@ -768,20 +759,9 @@ How we want to verify SSL certificates of services. Valid values are: redis infinispan VSAM - VSAM + infinispan - - - Number of records before the eviction strategies kick in - Number of records before the eviction strategies kick in - components - - - - 10000 - - VSAM name of the storage @@ -803,10 +783,28 @@ How we want to verify SSL certificates of services. Valid values are: 7600 + + + Host for jgroups + Host for jgroups. Default value is the same as Zowe host and it is used if storage mode is infinispan. + components + + + + + Port for jgroups key exchange + Port for jgroups key exchange. This is required if storage mode is infinispan. + components + + + + 7601 + + - - Check this option to enable the app server - Check this option to enable the app server + + Check this option to enable App server + Check this option to enable App server. components @@ -817,7 +815,7 @@ How we want to verify SSL certificates of services. Valid values are: Check to get extra debug information from the service - Check to get extra debug information from the service + Check to get extra debug information from the service. components @@ -827,8 +825,8 @@ How we want to verify SSL certificates of services. Valid values are: - Port for the app server - Port for the app server + Port for App server + Port for App server components @@ -838,8 +836,8 @@ How we want to verify SSL certificates of services. Valid values are: - Check this option to enable the ZSS component - Check this option to enable the ZSS component + Check this option to enable ZSS + Check this option to enable ZSS components @@ -869,17 +867,6 @@ How we want to verify SSL certificates of services. Valid values are: ZWESIS_STD - - - Check this to enable TLS on ZSS - Check this to enable TLS on ZSS - components - - - - true - - Check this to enable fallback @@ -891,76 +878,21 @@ How we want to verify SSL certificates of services. Valid values are: true - - - Check this option to enable the jobs API - Check this option to enable the jobs API - components - - - - false - - - - - Check to get extra debug information from the service - Check to get extra debug information from the service - components - - - - false - - - - - Port for the Jobs API - Port for the Jobs API - components - - - - 7558 - - - - - Check this option to enable the files API - Check this option to enable the files API + + + Check this to enable 64bit mode + If 64bit mode is disabled 31bit mode will be used. components - false - - - - - Check to get extra debug information from the service - Check to get extra debug information from the service - components - - - - false + true - - - Port which will be used by the Files API - Port which will be used by the Files API - components - - - - 7559 - - - Check this to enable the JES explorer - Check this to enable the JES explorer + Check this option to enable JES explorer + Check this option to enable JES explorer. components @@ -971,7 +903,7 @@ How we want to verify SSL certificates of services. Valid values are: Check this option to enable MVS explorer - Check this option to enable MVS explorer + Check this option to enable MVS explorer. components @@ -982,7 +914,7 @@ How we want to verify SSL certificates of services. Valid values are: Check this option to enable USS explorer - Check this option to enable USS explorer + Check this option to enable USS explorer. components @@ -990,17 +922,6 @@ How we want to verify SSL certificates of services. Valid values are: true - - - Should Zowe configuration manager be enabled? - Should Zowe configuration manager be enabled? - configManager - - - - true - - STRICT or COMPONENT-COMPAT validation type @@ -1011,7 +932,7 @@ How we want to verify SSL certificates of services. Valid values are: COMPONENT-COMPAT STRICT - COMPONENT-COMPAT + STRICT @@ -1147,6 +1068,19 @@ How we want to verify SSL certificates of services. Valid values are: ZWESASTC + + + Check to enable this run step with the zwe install command. For convenience build only. + Check this option to enable the optional workflow step with zwe install command. After Zowe convenience build is extracted, + you can enable this flag to run the zwe install command to install MVS data sets within this workflow run. + This option is for convenience build only. SMP/E installs the MVS data sets during installation. + installMVSDatasets + + + + false + + @@ -1175,6 +1109,10 @@ How we want to verify SSL certificates of services. Valid values are: + + + + @@ -1195,18 +1133,14 @@ How we want to verify SSL certificates of services. Valid values are: - - - + - - @@ -1219,6 +1153,7 @@ How we want to verify SSL certificates of services. Valid values are: + Run this step to fill base variables. 1 z/OS System Programmer @@ -1226,81 +1161,54 @@ How we want to verify SSL certificates of services. Valid values are: false - - Gateway component variables - Define the gateway component variables here - - - 1 == 1 - Always true - - - Skipped if gateway is not selected - !${instance-components_gateway_enabled} - skipped - - - - - - - - - - - - - - - Run this step to fill gateway component variables. - 1 - z/OS System Programmer - false - false - - - - Metrics component variables - Specify the variables for the metrics component - - - 1 == 1 - Always true - - - Skipped if the metrics component was not selected - !${instance-components_metrics_service_enabled} - skipped - - - - - - Run this step to specify the metrics variables - 1 - z/OS System Programmer - false - false - - - - Cloud gateway variables - Specify the variables for the cloud gateway component + + Gateway variables + Specify the variables for the Gateway component + + + 1 == 1 + Always true + + + Skipped if the Gateway was not selected + !${instance-components_gateway_enabled} + skipped + + + + + + + + + + + + Run this step to specify the Gateway variables + 1 + z/OS System Programmer + false + false + + + + ZAAS component variables + Define the ZAAS component variables here 1 == 1 Always true - Skipped if the cloud gateway was not selected - !${instance-components_cloud_gateway_enabled} + Skipped if ZAAS is not selected + !${instance-components_zaas_enabled} skipped - - - Run this step to specify the cloud gateway variables + + + Run this step to fill ZAAS component variables. 1 z/OS System Programmer false @@ -1377,7 +1285,6 @@ How we want to verify SSL certificates of services. Valid values are: - Run this step to specify the variables for the Caching Service 1 z/OS System Programmer @@ -1385,7 +1292,7 @@ How we want to verify SSL certificates of services. Valid values are: false - + Variables for Caching Service - VSAM mode Specify the variables for the VSAM mode of Caching Service @@ -1405,7 +1312,7 @@ How we want to verify SSL certificates of services. Valid values are: - + @@ -1438,6 +1345,8 @@ How we want to verify SSL certificates of services. Valid values are: + + Run this step to specify the variables for the Caching Service 1 z/OS System Programmer @@ -1487,8 +1396,8 @@ How we want to verify SSL certificates of services. Valid values are: - + Run this step to specify the values for the ZSS variables 1 z/OS System Programmer @@ -1496,54 +1405,6 @@ How we want to verify SSL certificates of services. Valid values are: false - - Jobs API Variables - Define variables for the Jobs API - - - 1==1 - Always true - - - Skips if the Jobs API wasn't selected - !${instance-components_jobs_api_enabled} - skipped - - - - - - Run this step to define the variables for the Jobs API - 1 - z/OS System Programmer - false - false - - - - Files API Variables - Specify the variables for Files API - - - 1==1 - Always true - - - Skips this step if the Files API wasn't selected - !${instance-components_files_api_enabled} - skipped - - - - - - Run this step to specify the variables for the Files API - 1 - z/OS System Programmer - false - false - - Create configuration @@ -1551,9 +1412,10 @@ How we want to verify SSL certificates of services. Valid values are: - + Ensure that the values are correct.
      - zowe.yaml file is created in the: ${instance-zowe_runtimeDirectory} directory

      + zowe.yaml file is created in the: ${instance-zowe_runtimeDirectory} directory
      + ${instance-zowe_setup_dataset_jcllib} is created.

      NOTE: If you run this workflow outside of PSWI (SMP/E or convenience build), you might encounter a folder write permission issue.
      To solve the issue, run the following command in USS:
      chmod 775 ${instance-zowe_runtimeDirectory}
      @@ -1614,7 +1476,7 @@ echo ' setup:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # MVS data set related configurations' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' dataset:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # where Zowe MVS data sets will be installed' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # where are existing Zowe SZWEEXEC Target libraries' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' prefix: $!{instance-zowe_setup_dataset_prefix}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # PROCLIB where Zowe STCs will be copied over' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1718,7 +1580,7 @@ echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # >>>> Certificate setup scenario 2' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # PKCS12 (keystore) with importing certificate generated by other CA.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # type: PKCS12' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # pkcs12:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1751,9 +1613,8 @@ echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # >>>> Certificate setup scenario 3' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # Zowe generated z/OS Keyring with Zowe generated certificates.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # type: JCERACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # createZosmfTrust: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # keyring:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # keyring name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1787,7 +1648,7 @@ echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # >>>> Certificate setup scenario 4' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # Zowe generated z/OS Keyring and connect to existing certificate' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # type: JCERACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # keyring:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1811,7 +1672,7 @@ echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # >>>> Certificate setup scenario 5' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # Zowe generated z/OS Keyring with importing certificate stored in data set' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # type: JCERACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # keyring:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1834,7 +1695,11 @@ echo ' # VSAM configurations if you are using VSAM as Caching Service storage echo ' vsam:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # VSAM data set with Record-Level-Sharing enabled or not' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # Valid values could be: NONRLS or RLS.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#if (${instance-zowe_setup_vsam_mode}) echo ' mode: $!{instance-zowe_setup_vsam_mode}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#else +echo ' mode: NONRLS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#end echo ' # Volume name if you are using VSAM in NONRLS mode' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' volume: "$!{instance-zowe_setup_vsam_volume}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # Storage class name if you are using VSAM in RLS mode' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1868,18 +1733,6 @@ echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.ya echo ' # Where extensions are installed' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' extensionDirectory: $!{instance-zowe_extensionDirectory}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' useConfigmgr: $!{instance-useconfig_manager_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # Setting to true will enable:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # * schema-backed validation of zowe.yaml' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # * should greatly improve startup time.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # * can supply multiple zowe.yaml as defaults & overrides in the format of' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # FILE(/my/customizations.yaml):PARMLIB(MYORG.ZOWE(YAML)):FILE(/zowe/defaults.yaml)' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # * allows templating in zowe.yaml by putting references within ${{ }} blocks such as' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # rewriting the job section below as' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # job:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # name: ${{ zowe.job.prefix }}SV' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # prefix: ZWE1' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' configmgr:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # STRICT=quit on any error, including missing schema' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # COMPONENT-COMPAT=if component missing schema, skip it with warning instead of quit' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1912,7 +1765,7 @@ echo ' # address bar.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' externalDomains:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # this should be the domain name to access Zowe APIML Gateway' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #foreach($externalDomain in ${instance-zowe_externalDomains.split("\n")}) -echo ' - ${externalDomain}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' - ${externalDomain}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1923,6 +1776,28 @@ echo ' # some use cases, like containerization, this port could be different.' echo ' externalPort: ${instance-zowe_externalPort}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # In this section, behavior such as which TLS levels, ciphers should be used, and if native TLS versus AT-TLS should be used.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # See the schema for options.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # This section applies to all components that support it.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # So far: "zss" and "app-server"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # This section can be overridden per-component by placing it' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # Under a "zowe" subsection of a component, as in "components.zss.zowe.network"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' network:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' tls:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' attls: ${instance-zowe_network_server_attls}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # TLS settings only apply when attls=false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # Else you must use AT-TLS configuration for TLS customization.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' minTls: "${instance-zowe_network_server_tls_min}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' maxTls: "${instance-zowe_network_server_tls_max}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' client:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' tls:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' attls: ${instance-zowe_network_client_attls}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # You can un-comment and define any extra environment variables as key/value' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # pairs here.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # environments:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -1935,7 +1810,7 @@ echo ' # ZWED_TN3270_PORT: 23' >> "${instance-zowe_runtimeDirectory}/zowe.yam echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # You can define any Zowe message portions to be checked for and the message added to the' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # system log upon its logging, truncated to 126 characters.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # system log upon its logging, truncated to 126 characters (wildcards are not supported).' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' sysMessages:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # # Zowe starting' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' - "ZWEL0021I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2025,17 +1900,17 @@ echo ' home: "$!{instance-java_home}"' >> "${instance-zowe_runtimeDirectory}/zo echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# node.js configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '# Node.js configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# Some Zowe components requires node.js. Define the path where you have your' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# node.js is installed.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '# Some Zowe components requires Node.js. Define the path where you have your' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '# Node.js is installed.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# **NOTE**: this field can be updated automatically if you pass `--update-config`' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# to `zwe init` command.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo 'node:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # Path to your node.js home directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # Path to your Node.js home directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' home: "$!{instance-node_home}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2075,62 +1950,38 @@ echo ' gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' enabled: ${instance-components_gateway_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' port: ${instance-components_gateway_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' debug: ${instance-components_gateway_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' apiml:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' security:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' auth:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' provider: "$!{instance-components_gateway_apiml_security_auth_provider}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' provider: $!{instance-components_gateway_apiml_security_auth_provider}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' zosmf:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' jwtAutoconfiguration: "$!{instance-components_gateway_apiml_security_auth_zosmf_jwtAutoconfiguration}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' serviceId: "$!{instance-components_gateway_apiml_security_auth_zosmf_serviceId}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' jwtAutoconfiguration: $!{instance-components_gateway_apiml_security_auth_zosmf_jwtAutoconfiguration}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' serviceId: $!{instance-components_gateway_apiml_security_auth_zosmf_serviceId}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' authorization:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' endpoint:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' enabled: ${instance-components_gateway_apiml_security_authorization_endpoint_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' provider: "$!{instance-components_gateway_apiml_security_authorization_provider}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' x509:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' enabled: ${instance-components_gateway_apiml_security_x509_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' internal:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # gateway supports internal connector' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_gateway_server_internal_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: ${instance-components_gateway_server_internal_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' ssl:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_gateway_server_internal_ssl_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # internal connector can use different certificate' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # keystore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # alias: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end #if (${instance-components_gateway_enabled} == "false" ) echo ' gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' enabled: ${instance-components_gateway_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' port: 7554' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' apiml:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' security:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' auth:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' provider: "zosmf"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' provider: zosmf' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' zosmf:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' jwtAutoconfiguration: "auto"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' serviceId: "zosmf"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' jwtAutoconfiguration: jwt' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' serviceId: ibmzosmf' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' authorization:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' endpoint:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' provider: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' provider: "native"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' x509:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' internal:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # gateway supports internal connector' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: 7550' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' ssl:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # internal connector can use different certificate' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # keystore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # alias: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # If we customize this to use different external certificate, than should also' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2140,33 +1991,18 @@ echo ' # keystore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # alias: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#if (${instance-components_metrics_service_enabled} == "true" ) -echo ' metrics-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_metrics_service_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: ${instance-components_metrics_service_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: ${instance-components_metrics_service_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#if (${instance-components_zaas_enabled} == "true" ) +echo ' zaas:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' enabled: ${instance-components_zaas_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' port: ${instance-components_zaas_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' debug: ${instance-components_zaas_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end -#if (${instance-components_metrics_service_enabled} == "false" ) -echo ' metrics-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_metrics_service_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: 7551' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#end -echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#if (${instance-components_cloud_gateway_enabled} == "true" ) -echo ' cloud-gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_cloud_gateway_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: ${instance-components_cloud_gateway_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: ${instance-components_cloud_gatewaye_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#end -#if (${instance-components_cloud_gateway_enabled} == "false" ) -echo ' cloud-gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_cloud_gateway_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: 7563' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#if (${instance-components_zaas_enabled} == "false" ) +echo ' zaas:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' enabled: ${instance-components_zaas_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' port: 7558' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end -echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #if (${instance-components_api_catalog_enabled} == "true" ) echo ' api-catalog:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2205,18 +2041,31 @@ echo ' port: ${instance-components_caching_service_port}' >> "${instance-zowe echo ' debug: ${instance-components_caching_service_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' storage:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' evictionStrategy: "$!{instance-components_caching_service_storage_evictionStrategy}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # can be inMemory, VSAM, redis or infinispan' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' mode: "$!{instance-components_caching_service_storage_mode}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' size: ${instance-components_caching_service_storage_size}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' evictionStrategy: $!{instance-components_caching_service_storage_evictionStrategy}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' # can be infinispan, inMemory, redis or VSAM(deprecated)' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' mode: $!{instance-components_caching_service_storage_mode}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#if (${instance-components_caching_service_storage_mode} == "VSAM" ) echo ' vsam:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # your VSAM data set created by "zwe init vsam" command or ZWECSVSM JCL' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # this is required if storage mode is VSAM' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' name: "$!{instance-components_caching_service_storage_vsam_name}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#end echo ' infinispan:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # this is required if storage mode is infinispan' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' jgroups:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#if (${instance-components_caching_service_storage_mode} == "infinispan" ) echo ' port: ${instance-components_caching_service_storage_infinispan_jgroups_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#if ($!{instance-components_caching_service_storage_infinispan_jgroups_host} and ${instance-components_caching_service_storage_infinispan_jgroups_host} != "" ) +echo ' host: ${instance-components_caching_service_storage_infinispan_jgroups_host}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#end +echo ' keyExchange:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' port: ${instance-components_caching_service_storage_infinispan_jgroups_keyExchange_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#else +echo ' port: 7600' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' host:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' keyExchange:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' port: 7601' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#end #end #if (${instance-components_caching_service_enabled} == "false" ) echo ' caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2225,9 +2074,9 @@ echo ' port: 7555' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' storage:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' evictionStrategy: "reject"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' evictionStrategy: reject' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # can be inMemory, VSAM, redis or infinispan' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' mode: "VSAM"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' mode: VSAM' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' size: 10000' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' vsam:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # your VSAM data set created by "zwe init vsam" command or ZWECSVSM JCL' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2237,6 +2086,9 @@ echo ' infinispan:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # this is required if storage mode is infinispan' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' jgroups:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' port: 7600' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' host:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' keyExchange:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' port: 7601' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2266,48 +2118,20 @@ echo ' zss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #if (${instance-components_zss_enabled} == "true" ) echo ' enabled: ${instance-components_zss_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' port: ${instance-components_zss_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' crossMemoryServerName: "$!{instance-components_zss_crossMemoryServerName}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' tls: ${instance-components_zss_tls}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' crossMemoryServerName: $!{instance-components_zss_crossMemoryServerName}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' agent:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' jwt:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' fallback: ${instance-components_zss_agent_jwt_fallback}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' 64bit: ${instance-components_zss_agent_64bit}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end #if (${instance-components_zss_enabled} == "false" ) echo ' enabled: ${instance-components_zss_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' port: 7557' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' crossMemoryServerName: "ZWESIS_STD"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' tls: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' crossMemoryServerName: ZWESIS_STD' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' agent:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' jwt:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' fallback: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#end -echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#if (${instance-components_jobs_api_enabled} == "true" ) -echo ' jobs-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_jobs_api_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: ${instance-components_jobs_api_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: ${instance-components_jobs_api_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#end -#if (${instance-components_jobs_api_enabled} == "false" ) -echo ' jobs-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_jobs_api_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: 7558' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#end -echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#if (${instance-components_files_api_enabled} == "true" ) -echo ' files-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_files_api_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: ${instance-components_files_api_debug}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: ${instance-components_files_api_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -#end -#if (${instance-components_files_api_enabled} == "false" ) -echo ' files-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' enabled: ${instance-components_files_api_enabled}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo ' port: 7559' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' 64bit: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" #end echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2347,7 +2171,7 @@ echo '# sysname: LPR1' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# # for this HA instance, we did not customize "components", so it will use default value.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# # HA instance ID, we will start 2 instances on LPAR2' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# # **NOTE**, we can only start one gateway in same LPAR.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '# # **NOTE**, we can only start one Gateway in same LPAR.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# lpar2a:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# # hostname where this instance will be started' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# hostname: lpar2.my-company.com' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2368,12 +2192,6 @@ echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# zss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# # no app-server in this instance' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# jobs-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# port: 18545' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# files-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# port: 18547' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# port: 17555' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2384,6 +2202,8 @@ echo '# sysname: LPR2' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# # These configurations will overwrite highest level default "components" configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# components:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '# zaas:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# discovery:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2395,12 +2215,14 @@ echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# port: 28544' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# zss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# port: 28542' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# jobs-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# files-api:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" -echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" + +export JAVA_HOME='${instance-java_home}' +export NODE_HOME='${instance-node_home}' +export PATH=$PATH:'${instance-zowe_runtimeDirectory}/bin' + +zwe init generate --allow-overwrite -c '${instance-zowe_runtimeDirectory}/zowe.yaml' ]]> shell-JCL 1024 @@ -2410,10 +2232,22 @@ echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" Zowe installation Zowe installation - - Run the Zowe install - Configure the Zowe - + + Run the Zowe install (only for convenience build) + Configure Zowe. + + + + 1==1 + Always true + + + Skips this step if Install the MVS data sets was not selected + !${instance-zowe_setup_installStep_enabled} + skipped + + + - Run the Zowe init - Executes the Zowe initialization + Run scripts for Zowe initialization + Executes scripts for Zowe initialization @@ -2456,10 +2290,9 @@ zwe install -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwritezwe init sub-command defines a configuration.

      • mvs: Copy the data sets provided with Zowe to custom data sets.
      • -
      • security: Create the user IDs and security manager settings.
      • -
      • apfauth: APF authorize the LOADLIB containing the modules that need to perform z/OS priviledged security calls.
      • -
      • certificate: Configure Zowe to use TLS certificates.
      • +#if (${instance-components_caching_service_storage_mode} == "VSAM" && ${instance-components_caching_service_enabled})
      • vsam: Configure the VSAM files needed to run the Zowe caching service used for high availability (HA).
      • +#end
      • stc: Configure the system to launch the Zowe started task.
      ]]> @@ -2487,24 +2320,20 @@ zwe init vsam -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite - Run the Zowe init security - Executes the Zowe initialization for security setup + Run scripts for Zowe security initialization + Executes Zowe initialization scripts for security setup - zwe init apfauth -c ${instance-zowe_runtimeDirectory}/zowe.yml
      zwe init security -c ${instance-zowe_runtimeDirectory}/zowe.yml --allow-overwrite
      + zwe init apfauth -c ${instance-zowe_runtimeDirectory}/zowe.yml

      NOTE: Each zwe init sub-command defines a configuration.
        -
      • mvs: Copy the data sets provided with Zowe to custom data sets.
      • security: Create the user IDs and security manager settings.
      • apfauth: APF authorize the LOADLIB containing the modules that need to perform z/OS priviledged security calls.
      • -
      • certificate: Configure Zowe to use TLS certificates.
      • -
      • vsam: Configure the VSAM files needed to run the Zowe caching service used for high availability (HA).
      • -
      • stc: Configure the system to launch the Zowe started task.
      ]]>
      1 diff --git a/workflows/files/ZWECRECR.xml b/workflows/files/ZWECRECR.xml index c5d3c3b812..9999de8573 100644 --- a/workflows/files/ZWECRECR.xml +++ b/workflows/files/ZWECRECR.xml @@ -33,7 +33,7 @@ Please, specify your security management software - Please, specify the ESM system you use on your workstation + Please, specify the ESM system you use General @@ -276,7 +276,8 @@ TSS GENREQ(${instance-tss_acid}) + - This step will generate the CSR request into the ${instance-output_dataset} + This step uses ACF2 command GENREQ

      ]]>
      1 Security Administrator true @@ -303,7 +304,7 @@ GENREQ ${instance-acf2_acid} + This step uses ACF2 command GENREQ

      ]]>
      +]]> 1 Security Administrator true diff --git a/workflows/files/ZWELOADC.xml b/workflows/files/ZWELOADC.xml index c823b2b813..786e28fb37 100644 --- a/workflows/files/ZWELOADC.xml +++ b/workflows/files/ZWELOADC.xml @@ -192,7 +192,7 @@ Use this step to define the variables for RACF.

      For more information about security system setup and it's variables, please open via right-click in new tab or window and refer to security documentation here - configure RACF security certificates + configure RACF security certificates or there RACDCERT ADD (Add certificate) command.

      ]]> 1 @@ -252,7 +252,7 @@ Use this step to define the variables for ACF2.

      For more information about security system setup and it's variables, please open via right-click in new tab or window and refer to security documentation - configure ACF2 security certificates.

      + configure ACF2 security certificates.

      ]]>
      1 Security Administrator @@ -367,7 +367,7 @@ This step will load signed client authentication certificate from the ${instance-output_dataset} into ESM

      For more information about security system setup and it's variables, please open via right-click in new tab or window and refer to security documentation here - configure RACF security certificates
      + configure RACF security certificates
      or there RACDCERT ADD (Add certificate) command.

      ]]>
      1 @@ -452,7 +452,7 @@ DCDSN(${instance-output_dataset}) TRUST This step will load signed client authentication certificate from the ${instance-output_dataset} into ESM

      For more information about security system setup and it's variables, please open via right-click in new tab or window and refer to security documentation - configure ACF2 security certificates.

      + configure ACF2 security certificates.

      ]]>
      1 Security Administrator diff --git a/workflows/files/ZWESIGNC.properties b/workflows/files/ZWESIGNC.properties index 5ffef27145..8a0f6a504b 100644 --- a/workflows/files/ZWESIGNC.properties +++ b/workflows/files/ZWESIGNC.properties @@ -44,4 +44,4 @@ validity=3650 # Category: General # Description: # JAVA home location -JAVA_HOME=/sys/java64bt/v8r0m0/usr/lpp/java/J8.0_64 +JAVA_HOME=/sys/java64bt/v17r0m0/usr/lpp/java/J17.0_64 diff --git a/workflows/files/ZWESIGNC.xml b/workflows/files/ZWESIGNC.xml index 7cc8bec1e5..258078600a 100644 --- a/workflows/files/ZWESIGNC.xml +++ b/workflows/files/ZWESIGNC.xml @@ -63,7 +63,7 @@ General ^\/.{0,50}[^\/]$ - /sys/java64bt/v8r0m0/usr/lpp/java/J8.0_64 + /sys/java64bt/v17r0m0/usr/lpp/java/J17.0_64
      diff --git a/workflows/templates/ZWESECUR.vtl b/workflows/templates/ZWESECUR.vtl index 71ad8efec8..7a794ae84c 100644 --- a/workflows/templates/ZWESECUR.vtl +++ b/workflows/templates/ZWESECUR.vtl @@ -678,7 +678,7 @@ $$ /* userid for ZOWE main server */ TSS LIST(&ZOWEUSER.) SEGMENT(OMVS) - TSS CREATE(&ZOWEUSER.) TYPE(USER) PASS(NOPW,0) + + TSS CREATE(&ZOWEUSER.) TYPE(USER) PROTECTED + NAME('ZOWE MAIN SERVER') + DEPT(&STCUDEP.) TSS ADD(&ZOWEUSER.) GROUP(&STCGRP.) + @@ -687,7 +687,7 @@ $$ /* userid for ZIS cross memory server */ TSS LIST(&ZISUSER.) SEGMENT(OMVS) - TSS CREATE(&ZISUSER.) TYPE(USER) PASS(NOPW,0) + + TSS CREATE(&ZISUSER.) TYPE(USER) PROTECTED + NAME('ZOWE ZIS CROSS MEMORY SERVER') + DEPT(&STCUDEP.) TSS ADD(&ZISUSER.) GROUP(&STCGRP.) +