diff --git a/.github/lychee.toml b/.github/lychee.toml new file mode 100644 index 0000000000..d256ce025a --- /dev/null +++ b/.github/lychee.toml @@ -0,0 +1,12 @@ +# This lychee configuration tries to find dead links in zwe, pswi, and smpe files which may be displayed to the user. +# This does not focus on dead links for internal-facing documentation, e.g. README.md. + +# We're including language sources as well as document files since the language sources embed URLs +# which can be displayed to the user, e.g. 'zwe' shell script commands displaying help information. + +exclude_path = ['smpe/bld/service/_README_sample_sysmod_builds.docx'] +# This exclude list covers known urls which should be ignored, including ones which contained +# templated values in typescript. The templates are covered by a wildcard. +exclude = [ 'https://www.eclipse.org/legal/epl-v20.html', 'https://zowe.org/schemas/*', 'https://www.zowe.org/schemas/*', 'https://discovery', 'https://github.com/zowe/launcher/blob/*', 'https://myregistry/url$', 'https://your-zos-host-name/zosmf/*{1,60}', '^http://service.software.ibm.com/holdata/390holddata.html', ] + +hidden = true diff --git a/.github/scripts/cicd_test/make_matrix.sh b/.github/scripts/cicd_test/make_matrix.sh index cee6b60426..eee2b97757 100644 --- a/.github/scripts/cicd_test/make_matrix.sh +++ b/.github/scripts/cicd_test/make_matrix.sh @@ -32,15 +32,22 @@ case $install_test_choice in test_file="$KEYRING_TESTFILE" ;; -"z/OS node v18") - test_file="$ZOS_NODE_V18_TESTFILE" - test_force_system="zzow08" - ;; - "z/OS node v20") test_file="$ZOS_NODE_V20_TESTFILE" ;; +"z/OS java 11 Pax") + test_file="$ZOS_JAVA_11_PAX_TESTFILE" + ;; + +"z/OS java 11 Keyring") + test_file="$ZOS_JAVA_11_KYRNG_TESTFILE" + ;; + +"z/OS node v22") + test_file="$ZOS_NODE_V22_TESTFILE" + ;; + "Non-strict Verify External Certificate") test_file="$NON_STRICT_VERIFY_EXTERNAL_CERTIFICATE_TESTFILE" ;; @@ -87,18 +94,18 @@ if [[ ! -z "$test_force_system" ]]; then else if [[ -z "$dont_parse_test_server" ]]; then if [[ "$test_server" == "Any zzow servers" ]]; then - test_server="zzow0"$(echo $(($RANDOM % 3 + 6))) + test_server="zzow"$(printf %02d $(($RANDOM % 3 + 9))) fi TEST_FILE_SERVER="$test_file($test_server)" else any_occurrence=$(echo $test_file | grep -o "(any)" | wc -l) interim_test_file_server=$test_file for i in $(seq $any_occurrence); do - # Generates zzow06, zzow07, zzow08 - interim_test_file_server=$(echo $interim_test_file_server | sed "s#(any)#(zzow0$(echo $(($RANDOM % 3 + 6))))#") + # Generates zzow09, zzow10, zzow11 + interim_test_file_server=$(echo $interim_test_file_server | sed "s#(any)#(zzow$(printf %02d $(($RANDOM % 3 + 9))))#") done - TEST_FILE_SERVER=$(echo $interim_test_file_server | sed "s#(all)#(zzow06,zzow07,zzow08)#g") + TEST_FILE_SERVER=$(echo $interim_test_file_server | sed "s#(all)#(zzow09,zzow10,zzow11)#g") fi fi diff --git a/.github/scripts/cicd_test/prep7_more_test_prep/03_process_test_server.sh b/.github/scripts/cicd_test/prep7_more_test_prep/03_process_test_server.sh index 7e7b80ad07..508d7d093e 100644 --- a/.github/scripts/cicd_test/prep7_more_test_prep/03_process_test_server.sh +++ b/.github/scripts/cicd_test/prep7_more_test_prep/03_process_test_server.sh @@ -14,16 +14,16 @@ TEST_SERVER=$(echo "$MATRIX_SERVER" | cut -d "-" -f2) case $TEST_SERVER in -"zzow06") - TEST_SERVER_NICKNAME=marist-6 +"zzow09") + TEST_SERVER_NICKNAME=marist-9 ;; -"zzow07") - TEST_SERVER_NICKNAME=marist-7 +"zzow10") + TEST_SERVER_NICKNAME=marist-10 ;; -"zzow08") - TEST_SERVER_NICKNAME=marist-8 +"zzow11") + TEST_SERVER_NICKNAME=marist-11 ;; *) diff --git a/.github/scripts/cicd_test/prep7_more_test_prep/06_process_outputs.sh b/.github/scripts/cicd_test/prep7_more_test_prep/06_process_outputs.sh index bce1d40594..89d12cf135 100644 --- a/.github/scripts/cicd_test/prep7_more_test_prep/06_process_outputs.sh +++ b/.github/scripts/cicd_test/prep7_more_test_prep/06_process_outputs.sh @@ -13,7 +13,7 @@ # Set outputs echo ZOWE_ARTIFACTORY_FINAL=$ZOWE_ARTIFACTORY_FINAL >>$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 diff --git a/.github/workflows/build-packaging.yml b/.github/workflows/build-packaging.yml index 1b64e08db8..fde84a73cb 100644 --- a/.github/workflows/build-packaging.yml +++ b/.github/workflows/build-packaging.yml @@ -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 != '' @@ -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' @@ -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..6867fd2979 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,9 @@ Workflow trigger is at [cicd-test](https://github.com/zowe/zowe-install-packagin - SMPE PTF - Extensions - Keyring - - z/OS node v18 + - z/OS java 11 Pax + - z/OS java 11 Keyring + - z/OS node v20 - Non-strict Verify External Certificate - Install PTF twice - VSAM Caching storage method @@ -109,7 +111,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,8 +123,11 @@ Selected test running elapsed time: | ---- | ------------ | | Convenience Pax | 53m | | SMPE PTF | 68m | -| z/OS node v18 | 45m | +| Keyring | 53m | | z/OS node v20 | 45m | +| z/OS node v22 | 45m | +| z/OS java 11 Pax | 53m | +| z/OS java 11 Keyring | 53m | | Keyring | 53m | | Non-strict Verify External Certificate | 51m | | Extensions | 67m diff --git a/.github/workflows/cicd-test.yml b/.github/workflows/cicd-test.yml index efa37bb2ca..2d189b10b5 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,10 @@ on: - SMPE PTF - Extensions - Keyring - - z/OS node v18 - z/OS node v20 + - z/OS node v22 + - z/OS java 11 Pax + - z/OS java 11 Keyring - Non-strict Verify External Certificate - Install PTF Twice - VSAM Caching Storage Method @@ -62,8 +71,8 @@ env: DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/*/{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,8 +83,10 @@ 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 + ZOS_JAVA_11_PAX_TESTFILE: extended/java-versions/java11/install-pax.ts + ZOS_JAVA_11_KYRNG_TESTFILE: extended/java-versions/java11/install-keyring.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 @@ -83,7 +94,7 @@ env: 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_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-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,12 +302,15 @@ jobs: case 'Keyring': eta = 53 break; - case 'z/OS node v18': - eta = 45 - break; case 'z/OS node v20': eta = 45 break; + case 'z/OS java 11 Pax': + eta = 53 + break; + case 'z/OS java 11 Keyring': + eta = 53 + break;q case 'Infinispan Caching Storage Method': eta = 51 break; @@ -378,7 +392,7 @@ jobs: - name: '[After Test 2] Upload test report' if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: InstallTestReports-${{ env.TEST_NAME }}-${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }}-${{ github.run_id }}-${{ env.CURRENT_TIME }} path: ${{ env.INSTALL_TEST_PATH }}/reports/ diff --git a/.github/workflows/diff-schema.yml b/.github/workflows/diff-schema.yml index ae8c8c4db7..3e47227461 100644 --- a/.github/workflows/diff-schema.yml +++ b/.github/workflows/diff-schema.yml @@ -34,7 +34,7 @@ jobs: - name: '[Build] Make diff' run: git diff ${{ env.FROM }} ${{ env.TO }} -- schemas > schemas.diff - name: '[Upload]' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: schemas.diff path: schemas.diff diff --git a/.github/workflows/diff-yaml b/.github/workflows/diff-yaml index 52212e980a..032656ef78 100644 --- a/.github/workflows/diff-yaml +++ b/.github/workflows/diff-yaml @@ -34,7 +34,7 @@ jobs: - name: '[Build] Make diff' run: git diff ${{ env.FROM }} ${{ env.TO }} -- example-zowe.yaml > example-yaml.diff - name: '[Upload]' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: example-yaml.diff path: example-yaml.diff 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/.pax/pre-packaging.sh b/.pax/pre-packaging.sh index cb17b8244b..dd95ee81f5 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/J8.0_64 +export PATH=$JAVA_HOME/bin:$PATH ZOWE_ROOT_DIR="${BASE_DIR}/content" cd "${BASE_DIR}" diff --git a/CHANGELOG.md b/CHANGELOG.md index 21961b12ea..c7e687ff08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,11 @@ All notable changes to the Zowe Installer will be documented in this file. #### Minor enhancements/defect fixes +## `2.18.1` +- Bugfix: When logging `zwe` command, sometimes the log has wrong file tag and the log is unreadable. [#4068](https://github.com/zowe/zowe-install-packaging/pull/4068) +- Bugfix: When `--log-dir` parameter for `zwe` command is a file, there might be an error "InternalError: stack overflow". [#4063](https://github.com/zowe/zowe-install-packaging/pull/4063) +- 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/README.md b/README.md index ff5b649cb5..d6e491fd59 100644 --- a/README.md +++ b/README.md @@ -192,3 +192,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/commands/.errors b/bin/commands/.errors index 89b56b008f..b41af191c9 100644 --- a/bin/commands/.errors +++ b/bin/commands/.errors @@ -32,4 +32,5 @@ ZWEL0200E||Failed to copy USS file %s to MVS data set %s. ZWEL0201E||File %s does not exist. ZWEL0202E||Unable to find samplib key for %s. ZWEL0203E||Env value in key-value pair %s has not been defined. -ZWEL0316E||Command requires zowe.useConfigmgr=true to use. \ No newline at end of file +ZWEL0316E||Command requires zowe.useConfigmgr=true to use. +ZWEL0319E||NodeJS required but not found. Errors such as ZWEL0157E may occur as a result. The value 'node.home' in the Zowe YAML is not correct. diff --git a/bin/commands/components/install/extract/.errors b/bin/commands/components/install/extract/.errors index 6d8180c649..cad360418d 100644 --- a/bin/commands/components/install/extract/.errors +++ b/bin/commands/components/install/extract/.errors @@ -4,4 +4,5 @@ ZWEL0154E|154|Temporary directory is empty. ZWEL0155E|155|Component %s already exists in %s. If you meant to upgrade this component, run the command 'zwe components upgrade' instead. ZWEL0167E|167|Cannot find component name from %s package manifest. ZWEL0204E|204|Symlink creation failure, error=%s -ZWEL0313E|313|Cannot file component file %s. +ZWEL0313E|313|Cannot find component file %s. +ZWEL0318E|318|File extension invalid. Supported file extensions: .pax, .tar, .zip diff --git a/bin/commands/components/install/extract/index.ts b/bin/commands/components/install/extract/index.ts index 9a7685904d..5da6d0b660 100644 --- a/bin/commands/components/install/extract/index.ts +++ b/bin/commands/components/install/extract/index.ts @@ -98,6 +98,8 @@ export function execute(componentFile: string, autoEncoding?: string, upgrade?: result = shell.execSync('sh', '-c', `cd ${tmpDir} && jar xf ${componentFile}`); } else if (componentFile.endsWith('.tar')) { result = shell.execSync('sh', '-c', `_CEE_RUNOPTS="FILETAG() POSIX(ON)" cd ${tmpDir} && pax -x tar -rf "${componentFile}"`); + } else { + common.printErrorAndExit(`Error ZWEL0318E File extension invalid. Supported file extensions: .pax, .tar, .zip`, undefined, 318); } if (result.rc) { common.printError(`Extract completed with rc=${result.rc}`); @@ -106,7 +108,7 @@ export function execute(componentFile: string, autoEncoding?: string, upgrade?: result = shell.execOutSync('sh', '-c', `cd ${tmpDir} && ls -la 2>&1`); common.printTrace(stringlib.paddingLeft(result.out, " ")); } else { - common.printErrorAndExit(`Error ZWEL0313E: Cannot file component file ${componentFile}.`, undefined, 313); + common.printErrorAndExit(`Error ZWEL0313E: Cannot find component file ${componentFile}.`, undefined, 313); } // automatically tag files diff --git a/bin/commands/internal/start/prepare/index.sh b/bin/commands/internal/start/prepare/index.sh index 85ca4ad100..464ae53205 100644 --- a/bin/commands/internal/start/prepare/index.sh +++ b/bin/commands/internal/start/prepare/index.sh @@ -142,8 +142,11 @@ global_validate() { 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}" 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}" + if [ "${ZWE_components_discovery_enabled}" = "false" -a "${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 check_runtime_validation_result "zwe-internal-start-prepare,global_validate:${LINENO}" diff --git a/bin/commands/internal/start/prepare/index.ts b/bin/commands/internal/start/prepare/index.ts index cf9463fbdc..30c67135f2 100644 --- a/bin/commands/internal/start/prepare/index.ts +++ b/bin/commands/internal/start/prepare/index.ts @@ -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); } } @@ -172,12 +172,11 @@ function globalValidate(enabledComponents:string[]): void { 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.printFormattedError('ZWELS', "zwe-internal-start-prepare,global_validate", "Zosmf validation failed"); - } + } + if (!enabledComponents.includes('discovery') && std.getenv('ZWE_components_gateway_apiml_security_auth_provider') == "zosmf") { + 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"); } } diff --git a/bin/libs/common.ts b/bin/libs/common.ts index 7eabf33f5f..23bca323be 100644 --- a/bin/libs/common.ts +++ b/bin/libs/common.ts @@ -128,36 +128,21 @@ export function date(...args: string[]): string|undefined { let logExists = false; -let logFile:std.File|null = null; function writeLog(message: string): boolean { + const filename = std.getenv('ZWE_PRIVATE_LOG_FILE'); + if (!filename) { + return false; + } + logExists = fs.fileExists(filename); if (!logExists) { - const filename = std.getenv('ZWE_PRIVATE_LOG_FILE'); - 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; - } - } - } - } - if (logFile===undefined || logFile===null) { - return false; } else { - //TODO this does utf8. should we flip it to 1047 on zos? - logFile.puts(message); - return true; + xplatform.appendFileUTF8(filename, xplatform.AUTO_DETECT, message); + return true; } + return logExists; } @@ -345,7 +330,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); diff --git a/bin/libs/component.ts b/bin/libs/component.ts index 457a12364c..39f2de2176 100644 --- a/bin/libs/component.ts +++ b/bin/libs/component.ts @@ -387,6 +387,32 @@ export function findAllLaunchComponents2(): string[] { }); } +function getBooleanEnv(variableName) { + const value = std.getenv(`${variableName}`); + if (value === "true") { + return true + } + if (value === "false") { + return false + } + return undefined +} + + +function isClientAttls() { + const clientGlobalAttls = getBooleanEnv('ZWE_zowe_network_client_tls_attls'); + const serverGlobalAttls = getBooleanEnv('ZWE_zowe_network_server_tls_attls'); + const clientLocalAttls = getBooleanEnv('ZWE_components_zaas_zowe_network_client_tls_attls'); + const serverLocalAttls = getBooleanEnv('ZWE_components_zaas_zowe_network_server_tls_attls'); + const clientAttls = clientGlobalAttls || clientLocalAttls; + if ((clientGlobalAttls !== false) && (clientLocalAttls !== false) && (!clientAttls)) { + // If client attls not explicitly false OR truthy, have client follow server attls variable. it simplifies common case in which users want both. + return serverGlobalAttls || serverLocalAttls; + } else { + return clientAttls; + } +} + export function processComponentApimlStaticDefinitions(componentDir: string): boolean { const STATIC_DEF_DIR=std.getenv('ZWE_STATIC_DEFINITIONS_DIR'); if (!STATIC_DEF_DIR) { @@ -418,6 +444,22 @@ export function processComponentApimlStaticDefinitions(componentDir: string): bo const contents = xplatform.loadFileUTF8(path,xplatform.AUTO_DETECT); if (contents) { + const zosmfScheme = std.getenv("ZOSMF_SCHEME"); + const attls = isClientAttls() + const schemeEnv = std.getenv("ZWE_zOSMF_scheme"); + + let scheme = "https"; + + if (zosmfScheme) { + scheme = zosmfScheme; + } else if (schemeEnv) { + scheme = schemeEnv; + } else if (attls) { + scheme = "http"; + } + + std.setenv('ZOSMF_SCHEME', scheme); + const resolvedContents = varlib.resolveShellTemplate(contents); const zweCliParameterHaInstance=std.getenv("ZWE_CLI_PARAMETER_HA_INSTANCE"); diff --git a/bin/libs/json.sh b/bin/libs/json.sh index 5b5342a4a3..bf41777c1a 100644 --- a/bin/libs/json.sh +++ b/bin/libs/json.sh @@ -83,6 +83,13 @@ read_yaml() { code=$? print_trace " * Exit code: ${code}" if [ ${code} -ne 0 ]; then + # Check for "node ... FSUM7351 not found". Common user error that we can solve more quickly by providing advice below. + missing_id_check=$(echo "${ZWE_PRIVATE_YAML_CACHE}" | grep "FSUM7351" 2>&1) + if [ -n "${missing_id_check}" ]; then + print_error "Error ZWEL0319E: NodeJS required but not found. Errors such as ZWEL0157E may occur as a result." + print_error "The value 'node.home' in the Zowe YAML is not correct. Set it to the parent directory of 'bin/node'." + print_error "For example, if NodeJS is at '/opt/nodejs/bin/node', then set 'node.home' to '/opt/nodejs'." + fi print_error " * Output:" print_error "$(padding_left "${ZWE_PRIVATE_YAML_CACHE}" " ")" return ${code} 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 d457c76b2f..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 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/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 949c0eddf6..9e05a98be0 100644 --- a/bin/libs/zosmf.ts +++ b/bin/libs/zosmf.ts @@ -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/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/containers/base-jdk/ubi/Dockerfile b/containers/base-jdk/ubi/Dockerfile index b87b254888..e4618a38bb 100644 --- a/containers/base-jdk/ubi/Dockerfile +++ b/containers/base-jdk/ubi/Dockerfile @@ -9,7 +9,7 @@ # Copyright Contributors to the Zowe Project. ####################################################################### -FROM zowe-docker-release.jfrog.io/ompzowe/base:latest-ubi +FROM zowe-docker-release.jfrog.io/ompzowe/base:2-ubi ################################## # labels diff --git a/containers/base-jdk/ubuntu/Dockerfile b/containers/base-jdk/ubuntu/Dockerfile index 3ce76a688a..bdb950bbc6 100644 --- a/containers/base-jdk/ubuntu/Dockerfile +++ b/containers/base-jdk/ubuntu/Dockerfile @@ -9,7 +9,7 @@ # Copyright Contributors to the Zowe Project. ####################################################################### -FROM zowe-docker-release.jfrog.io/ompzowe/base:latest-ubuntu +FROM zowe-docker-release.jfrog.io/ompzowe/base:2-ubuntu ################################## # labels diff --git a/containers/base-node/Dockerfile b/containers/base-node/Dockerfile index e3cd778ccd..345a3a3118 100644 --- a/containers/base-node/Dockerfile +++ b/containers/base-node/Dockerfile @@ -10,7 +10,7 @@ ####################################################################### # base image tag -ARG ZOWE_BASE_IMAGE=latest-ubuntu +ARG ZOWE_BASE_IMAGE=2-ubuntu FROM zowe-docker-release.jfrog.io/ompzowe/base:${ZOWE_BASE_IMAGE} diff --git a/containers/zowe-launch-scripts/Dockerfile b/containers/zowe-launch-scripts/Dockerfile index 4c969ce1d7..4334923c61 100644 --- a/containers/zowe-launch-scripts/Dockerfile +++ b/containers/zowe-launch-scripts/Dockerfile @@ -10,7 +10,7 @@ ####################################################################### # base image tag -ARG ZOWE_BASE_IMAGE=latest-ubuntu +ARG ZOWE_BASE_IMAGE=2-ubuntu FROM zowe-docker-release.jfrog.io/ompzowe/base-node:${ZOWE_BASE_IMAGE} diff --git a/example-zowe.yaml b/example-zowe.yaml index 1f8a36c801..11444cd9d6 100644 --- a/example-zowe.yaml +++ b/example-zowe.yaml @@ -469,17 +469,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 your node.js home directory + # Path to your Node.js home directory home: "" @@ -667,7 +667,7 @@ components: # # 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 diff --git a/files/SZWESAMP/ZWEIMVS b/files/SZWESAMP/ZWEIMVS index e8e4b6caef..500c060492 100644 --- a/files/SZWESAMP/ZWEIMVS +++ b/files/SZWESAMP/ZWEIMVS @@ -15,9 +15,9 @@ //* Instances represent a configuration of Zowe, different from the //* "runtime" datasets that are created upon install of Zowe / SMPE. //* -//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not -//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', -//* Then you must also run "ZWEIMVS2". +//* If your chosen value of 'zowe.setup.dataset.authLoadlib' is not +//* equal to 'zowe.setup.dataset.prefix' + 'SZWEAUTH', +//* then you must also run "ZWEIMVS2". //* //********************************************************************* //MKPDSE EXEC PGM=IKJEFT01 diff --git a/files/SZWESAMP/ZWEIMVS2 b/files/SZWESAMP/ZWEIMVS2 index 93a3213a62..a4bb428c72 100644 --- a/files/SZWESAMP/ZWEIMVS2 +++ b/files/SZWESAMP/ZWEIMVS2 @@ -12,9 +12,9 @@ //********************************************************************* //* //* This job is used to create the APF load library for an instance -//* Of Zowe. It is not needed if your choosen value of +//* of Zowe. It is not needed if your chosen value of //* 'zowe.setup.dataset.authLoadlib' is equal to -//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* 'zowe.setup.dataset.prefix' + 'SZWEAUTH'. //* //* When running this job, you should also run ZWEIMVS //* diff --git a/files/SZWESAMP/ZWERMVS b/files/SZWESAMP/ZWERMVS index 844e027dcf..8aa58885d7 100644 --- a/files/SZWESAMP/ZWERMVS +++ b/files/SZWESAMP/ZWERMVS @@ -15,9 +15,9 @@ //* Instances represent a configuration of Zowe, different from the //* "runtime" datasets that are created upon install of Zowe / SMPE. //* -//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not -//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', -//* Then you must also run "ZWERMVS2". +//* If your chosen value of 'zowe.setup.dataset.authLoadlib' is not +//* equal to 'zowe.setup.dataset.prefix' + 'SZWEAUTH', +//* then you must also run "ZWERMVS2". //* //********************************************************************* //RMPDSE EXEC PGM=IKJEFT01 diff --git a/files/SZWESAMP/ZWERMVS2 b/files/SZWESAMP/ZWERMVS2 index 266f60099a..5848ec5933 100644 --- a/files/SZWESAMP/ZWERMVS2 +++ b/files/SZWESAMP/ZWERMVS2 @@ -12,9 +12,9 @@ //********************************************************************* //* //* This job is used to remove the APF load library for an instance -//* Of Zowe. It is not needed if your choosen value of +//* of Zowe. It is not needed if your chosen value of //* 'zowe.setup.dataset.authLoadlib' is equal to -//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* 'zowe.setup.dataset.prefix' + 'SZWEAUTH'. //* //* When running this job, you should also run ZWERMVS //* diff --git a/manifest.json.template b/manifest.json.template index 36b17b84eb..5b212433a4 100644 --- a/manifest.json.template +++ b/manifest.json.template @@ -1,6 +1,6 @@ { "name": "Zowe", - "version": "2.18.0", + "version": "2.18.1", "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", @@ -391,6 +391,14 @@ "tag": "configmgr-v2.18.0-RC1", "destinations": ["Zowe PAX"] }] + }, { + "componentGroup": "Zowe Client Python SDK", + "entries": [{ + "repository": "zowe-client-python-sdk", + "core": false, + "tag": "main", + "destinations": ["Zowe Client Python SDK"] + }] } ], "imageDependencies": { diff --git a/playbooks/group_vars/marist.yml b/playbooks/group_vars/marist.yml index d6eed7dbfc..92ff54eb00 100644 --- a/playbooks/group_vars/marist.yml +++ b/playbooks/group_vars/marist.yml @@ -9,6 +9,7 @@ zowe_keystore_dir: /ZOWE/tmp/keystore zowe_install_logs_dir: /ZOWE/tmp/logs zowe_dataset_prefix: ZOWEAD3.ZWE zowe_apiml_verify_certficates_of_services: false +zos_java_home: /ZOWE/node/J8.0_64 # enable Non-Strict verify certificates by default zowe_apiml_nonstrict_verify_certficates_of_services: true zowe_jcllib: ZOWEAD3.ZWE.JCLLIB 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 100% rename from playbooks/host_vars/marist-8.yml rename to playbooks/host_vars/marist-11.yml 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/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/common/templates/scp.with-key.sh.j2 b/playbooks/roles/common/templates/scp.with-key.sh.j2 index e4eb9b7891..c61ac836c1 100644 --- a/playbooks/roles/common/templates/scp.with-key.sh.j2 +++ b/playbooks/roles/common/templates/scp.with-key.sh.j2 @@ -4,4 +4,4 @@ FILE_LOCAL=$1 FILE_REMOTE=$2 echo "SCP $FILE_LOCAL ==> $FILE_REMOTE" -scp -oHostKeyAlgorithms=+ssh-rsa -P {{ hostvars[inventory_hostname].ansible_port | default('22') }} -i {{ hostvars[inventory_hostname].ansible_ssh_private_key_file }} $FILE_LOCAL {{ hostvars[inventory_hostname].ansible_user }}@{{ hostvars[inventory_hostname].ansible_ssh_host }}:$FILE_REMOTE +scp -O -oHostKeyAlgorithms=+ssh-rsa -P {{ hostvars[inventory_hostname].ansible_port | default('22') }} -i {{ hostvars[inventory_hostname].ansible_ssh_private_key_file }} $FILE_LOCAL {{ hostvars[inventory_hostname].ansible_user }}@{{ hostvars[inventory_hostname].ansible_ssh_host }}:$FILE_REMOTE diff --git a/playbooks/roles/common/templates/scp.with-pwd.sh.j2 b/playbooks/roles/common/templates/scp.with-pwd.sh.j2 index 7a3c48bf9a..d522b3bebe 100644 --- a/playbooks/roles/common/templates/scp.with-pwd.sh.j2 +++ b/playbooks/roles/common/templates/scp.with-pwd.sh.j2 @@ -4,4 +4,4 @@ FILE_LOCAL=$1 FILE_REMOTE=$2 echo "SCP $FILE_LOCAL ==> $FILE_REMOTE" -sshpass -p "{{ hostvars[inventory_hostname].ansible_password }}" scp -oHostKeyAlgorithms=+ssh-rsa -P {{ hostvars[inventory_hostname].ansible_port | default('22') }} $FILE_LOCAL {{ hostvars[inventory_hostname].ansible_user }}@{{ hostvars[inventory_hostname].ansible_ssh_host }}:$FILE_REMOTE +sshpass -p "{{ hostvars[inventory_hostname].ansible_password }}" scp -O -oHostKeyAlgorithms=+ssh-rsa -P {{ hostvars[inventory_hostname].ansible_port | default('22') }} $FILE_LOCAL {{ hostvars[inventory_hostname].ansible_user }}@{{ hostvars[inventory_hostname].ansible_ssh_host }}:$FILE_REMOTE diff --git a/playbooks/roles/ptf/tasks/main.yml b/playbooks/roles/ptf/tasks/main.yml index f8cd402414..539484efdc 100644 --- a/playbooks/roles/ptf/tasks/main.yml +++ b/playbooks/roles/ptf/tasks/main.yml @@ -128,6 +128,8 @@ dest: "{{ work_dir_local }}/{{ inventory_hostname }}/HOLDDATA.jcl" newline_sequence: '\n' mode: 0700 + vars: + smpe_csi: "{{ zowe_smpe_hlq_csi }}.CSI" delegate_to: localhost - name: Upload HOLDDATA.jcl to server 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..49b218da98 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,11 @@ 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":"Stand-alone Zowe API ML Configuration","description":"This workflow configures only API ML for Zowe 2.0.", +"location": {"dsname":"'${WORKFLOW_DSN}'(ZWEAMLCF)"}},{"name":"Full Zowe server-side configuration for Zowe 2.0","description":"This workflow configures all Zowe server-side components for Zowe v2.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 +40,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 +56,126 @@ 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/ZWEAMLCF.xml\";" >>JCL +echo "target=\"//'${WORKFLOW_DSN}(ZWEAMLCF)'\";" >>JCL +echo "iconv -f ISO8859-1 -t IBM-1047 \$source > _ZWEAMLCF;" >>JCL +echo "sed 's|UTF-8|IBM-1047|g' _ZWEAMLCF > ZWEAMLCF;" >>JCL +echo "cp -T ZWEAMLCF \$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 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 +187,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 +210,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 +237,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.AZWE002.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,68 @@ 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`" -# 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 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/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..98c269be04 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 @@ -147,17 +149,17 @@ echo "" echo "" if [ $smpe -ne 0 ] || [ $ptf -ne 0 ] || [ $create -ne 0 ] || [ $test -ne 0 ] || [ $presmpe -ne 0 ]; then - echo "Build unsuccessful!" + 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" fi exit -1 else 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..152223aedf 100644 --- a/pswi/scripts/deploy_test_2_3.py +++ b/pswi/scripts/deploy_test_2_3.py @@ -196,9 +196,12 @@ 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.", - "location": {"dsname": self.hlq + ".WORKFLOW(ZWECONF)"}}, + {"name": "Stand-alone Zowe API ML Configuration", + "description": "This workflow configures only API ML for Zowe 2.0.", + "location": {"dsname": self.hlq + ".WORKFLOW(ZWEAMLCF)"}}, + {"name": "Full Zowe server-side configuration for Zowe 2.0", + "description": "This workflow configures all Zowe server-side components for Zowe v2.0.", + "location": {"dsname": self.hlq + ".WORKFLOW(ZWECONF)"}}, {"name":"ZOWE Creation of CSR request workflow", "description":"This workflow creates a certificate sign request.", "location": {"dsname": self.hlq + ".WORKFLOW(ZWECRECR)"}}, 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..9408588af8 100644 --- a/pswi/scripts/tmp_mounts.sh +++ b/pswi/scripts/tmp_mounts.sh @@ -6,57 +6,50 @@ 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 @@ -64,25 +57,25 @@ then # Mount zFS to TMP_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/smpe/bld/service/promoted-apar.txt b/smpe/bld/service/promoted-apar.txt index e65ef7390f..df37f324c7 100644 --- a/smpe/bld/service/promoted-apar.txt +++ b/smpe/bld/service/promoted-apar.txt @@ -1,3 +1,6 @@ +IO29431 +IO29432 +IO29433 IO29428 IO29429 IO29430 diff --git a/smpe/bld/service/promoted-close.txt b/smpe/bld/service/promoted-close.txt index b0196523e5..49972ae814 100644 --- a/smpe/bld/service/promoted-close.txt +++ b/smpe/bld/service/promoted-close.txt @@ -1,3 +1,48 @@ + IO29431 - + 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.18.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/ + + IO29432 - + 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.18.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/ + + IO29433 - + 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.18.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/ + IO29428 - PROBLEM SUMMARY: **************************************************************** diff --git a/smpe/bld/service/promoted-hold.txt b/smpe/bld/service/promoted-hold.txt index e5d2bfc0ca..2974e256e5 100644 --- a/smpe/bld/service/promoted-hold.txt +++ b/smpe/bld/service/promoted-hold.txt @@ -1,3 +1,28 @@ +++HOLD(UO90061) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(24240) + 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(UO90059) SYSTEM FMID(AZWE002) REASON(ACTION) DATE(24200) COMMENT( **************************************************************** diff --git a/smpe/bld/service/promoted-ptf.txt b/smpe/bld/service/promoted-ptf.txt index a3922dcc47..c76a55c053 100644 --- a/smpe/bld/service/promoted-ptf.txt +++ b/smpe/bld/service/promoted-ptf.txt @@ -1,3 +1,5 @@ +UO90061 +UO90062 UO90059 UO90060 UO90057 diff --git a/smpe/bld/service/ptf-bucket.txt b/smpe/bld/service/ptf-bucket.txt index 11868e20ab..b787a4ea5c 100644 --- a/smpe/bld/service/ptf-bucket.txt +++ b/smpe/bld/service/ptf-bucket.txt @@ -24,4 +24,7 @@ #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 - Thu Jul 18 16:30:14 UTC 2024 -UO90061 UO90062 - IO29431 IO29432 IO29433 +#UO90061 UO90062 - IO29431 IO29432 IO29433 - Tue Aug 27 14:35:44 UTC 2024 +UO90074 UO90075 - IO29454 IO29456 IO29457 +UO90076 UO90077 - IO29458 IO29459 IO29460 +UO90078 UO90079 - IO29461 IO29462 IO29463 diff --git a/tests/installation/src/__tests__/extended/java-versions/java11/install-keyring.ts b/tests/installation/src/__tests__/extended/java-versions/java11/install-keyring.ts new file mode 100644 index 0000000000..30e2651bce --- /dev/null +++ b/tests/installation/src/__tests__/extended/java-versions/java11/install-keyring.ts @@ -0,0 +1,50 @@ +/** + * 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 IBM Corporation 2020 + */ + +import { + checkMandatoryEnvironmentVariables, + installAndVerifyConvenienceBuild, + showZoweRuntimeLogs, +} from '../../../../utils'; +import { + TEST_TIMEOUT_CONVENIENCE_BUILD, + KEYSTORE_MODE_KEYRING, +} from '../../../../constants'; + +const testServer = process.env.TEST_SERVER; +const testSuiteName = 'Test convenience build installation by enabling VERIFY_CERTIFICATES with java 11'; +describe(testSuiteName, () => { + beforeAll(() => { + // validate variables + checkMandatoryEnvironmentVariables([ + 'TEST_SERVER', + 'ZOWE_BUILD_LOCAL', + ]); + }); + + test('install and verify', async () => { + await installAndVerifyConvenienceBuild( + testSuiteName, + testServer, + { + 'zowe_build_local': process.env['ZOWE_BUILD_LOCAL'], + 'zowe_custom_for_test': 'true', + 'zos_keystore_mode': KEYSTORE_MODE_KEYRING, + 'zos_java_home': '/ZOWE/node/J11.0_64', + 'zowe_lock_keystore': 'false', + } + ); + }, TEST_TIMEOUT_CONVENIENCE_BUILD); + + afterAll(async () => { + await showZoweRuntimeLogs(testServer); + }) +}); + \ No newline at end of file diff --git a/tests/installation/src/__tests__/extended/java-versions/java11/install-pax.ts b/tests/installation/src/__tests__/extended/java-versions/java11/install-pax.ts new file mode 100644 index 0000000000..bfcd461b8b --- /dev/null +++ b/tests/installation/src/__tests__/extended/java-versions/java11/install-pax.ts @@ -0,0 +1,45 @@ +/** + * 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 IBM Corporation 2020 + */ + +import { + checkMandatoryEnvironmentVariables, + installAndVerifyConvenienceBuild, + showZoweRuntimeLogs, +} from '../../../../utils'; +import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants'; + +const testSuiteName = 'Test convenience build installation with java 11'; +describe(testSuiteName, () => { + beforeAll(() => { + // validate variables + checkMandatoryEnvironmentVariables([ + 'TEST_SERVER', + 'ZOWE_BUILD_LOCAL', + ]); + }); + + test('install and verify', async () => { + await installAndVerifyConvenienceBuild( + testSuiteName, + process.env.TEST_SERVER, + { + 'zowe_build_local': process.env['ZOWE_BUILD_LOCAL'], + 'zowe_custom_for_test': 'true', + 'zos_java_home': '/ZOWE/node/J11.0_64', + 'zowe_lock_keystore': 'false', + } + ); + }, TEST_TIMEOUT_CONVENIENCE_BUILD); + + afterAll(async () => { + await showZoweRuntimeLogs(process.env.TEST_SERVER); + }) +}); + \ No newline at end of file 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/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-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/workflows/files/ZWEAMLCF.xml b/workflows/files/ZWEAMLCF.xml new file mode 100644 index 0000000000..07bd8ffa03 --- /dev/null +++ b/workflows/files/ZWEAMLCF.xml @@ -0,0 +1,1433 @@ + + + true + + + config_apiml_zowe_20 + Configuration of API ML for Zowe 2.0 + Use this simplified workflow to configure API ML for Zowe 2.0 + ###ZOWE_VERSION### + Zowe + + + + + + Prefix of datasets where remaining runtime datasets will be created + Prefix of datasets where remaining runtime libraries will be created within execution of Zowe install step (SZWEAUTH, SZWESAMP, SZWEEXEC, SZWELOAD) + zowe + + + + IBMUSER.ZWEV2 + + + + + Where Zowe STCs will be copied over + Where Zowe STCs will be copied over + zowe + + + + USER.PROCLIB + + + + + Zowe PARMLIB + Zowe parameter library + zowe + + + + IBMUSER.ZWEV2.CUST.PARMLIB + + + + + Zowe ZIS plugins PARMLIB + Holds PARMLIB members for ZIS plugins + zowe + + + + ZWESIP00 + + + + + JCL library where Zowe will store temporary JCLs during initialization + JCL library where Zowe will store temporary JCLs during initialization + zowe + + + + IBMUSER.ZWEV2.CUST.JCLLIB + + + + + Load library where Zowe stores libraries for Utilities for use by Zowe and extensions + Load library for Utilities for use by Zowe and extensions + zowe + + + + IBMUSER.ZWEV2.SZWELOAD + + + + + APF authorized LOADLIB for Zowe + APF authorized LOADLIB for Zowe core + zowe + + + + IBMUSER.ZWEV2.SZWEAUTH + + + + + APF authorized LOADLIB for Zowe ZIS Plugins + APF authorized LOADLIB for Zowe ZIS Plugins + zowe + + + + IBMUSER.ZWEV2.CUST.ZWESAPL + + + + + Zowe runtime (root) directory with libraries + Existing Zowe runtime.<br /> +If you created ZOWE via PSWI, <br /> +zowe runtime is your Target Mount Point from PSWI deployment. <br /> +It is used by ZWESLSTC or by zwe command + zowe + + ~?(\/[^\/]+)+ + Please specify proper full USS path ending without a trailing slash. + + + + + Where to store runtime logs + Where to store runtime logs + zowe + + + + /global/zowe/logs + + + + + Zowe runtime workspace directory + Zowe runtime workspace directory + zowe + + + + /global/zowe/workspace + + + + + Where extensions are installed + zowe_extensionDirectory + zowe + + + + /global/zowe/extensions + + + + + Zowe JES job name + Zowe JES job name + zowe + + + + ZWE1SV + + + + + Prefix of component address space + Prefix of component address space + zowe + + + + ZWE1 + + + + + The list of external domains + Defines a list of external domains that will be used by the Zowe instance. + zowe + + + + sample-domain.com + + + + + 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. + zowe + + + + 7554 + + + + + Set to "debug" or "trace" to display extra debug information + Set to "debug" or "trace" to display extra debug information + zowe + + + info + debug + trace + info + + + + + Set to "exit" or "warn" if any component has an error + Set to "exit" if you want startup to exit if any component has an error in the configuration stage, otherwise zwe will issue a warning but continue running. + zowe + + + warn + exit + warn + + + + + Certificate keystore type (PKCS12, JCERACFKS) + Certificate keystore type (PKCS12, JCERACFKS) + certificates + + + + PKCS12 + JCERACFKS + JCERACFKS + + + + + Zowe certificate keystore file. For keyring, the format is "safkeyring://OWNER/KEYRING". + Zowe certificate keystore file + certificates + + + + safkeyring://OWNER/KEYRING + + + + + Certificate keystore password. + Certificate keystore password. + certificates + + + password + + + + + Alias for the certificate keystore + Alias for the certificate keystore + certificates + + + + localhost + + + + + Zowe certificate truststore type + Zowe certificate truststore type + certificates + + + + PKCS12 + JCERACFKS + JCERACFKS + + + + + File location for certificate truststore. For keyring, the format is "safkeyring://OWNER/KEYRING" + File location for the certificate truststore + certificates + + + + safkeyring://OWNER/KEYRING + + + + + Password for the certificate truststore + Password for the certificate truststore + certificates + + + + password + + + + + Path to the JAVA home + Path to the JAVA home + java + + + + + + + + Path to the Node.js home + Path to the Node.js home + Node.js + + + + + + + + Hostname of the running z/OSMF instance + Hostname of the running z/OSMF instance + zOSMF + + + + dvipa.my-company.com + + + + + Port of the z/OSMF instance + Port of the z/OSMF instance + zOSMF + + + + 443 + + + + + APPLID of the z/OSMF instance + APPLID of the z/OSMF instance + zOSMF + + + + IZUDFLT + + + + + Port for API ML Gateway + Port for API ML Gateway + components + + + + 7554 + + + + + Port on which API Catalog should be running. + Port on which API Catalog should be running. + components + + + + 7552 + + + + + Port on which Discovery service should be running + Port on which Discovery service should be running + components + + + + 7553 + + + + + Port for Caching service + Port for Caching service + components + + + + 7555 + + + + + Port for jgroups + Port for jgroups. This is required if storage mode is infinispan. + components + + + + 7559 + + + + + ID you use to separate multiple Zowe installs + ID when determining resource names used in RBAC authorization checks such as dataservices with RBAC expects this ID in SAF resources + zowe + + + + 1 + + + + + ID that can be used by servers to distinguish their cookies from unrelated Zowe installs + ID which allows multiple copies of Zowe to be used within the same client + zowe + + + + 1 + + + + + Security product name. Can be RACF, ACF2 or TSS + Security product name. Can be RACF, ACF2 or TSS + security + + + + + RACF + TSS + ACF2 + RACF + + + + + Zowe admin user group + Zowe admin user group + security + + + + ZWEADMIN + + + + + + Zowe STC group + Zowe STC group + security + + + + + ZWEADMIN + + + + + Zowe SysProg group + Zowe SysProg group + security + + + + + ZWEADMIN + + + + + Zowe runtime user name of main service + Zowe runtime user name of main service + security + + + + + ZWESVUSR + + + + + Zowe runtime user name of ZIS + Zowe runtime user name of ZIS + security + + + + + ZWESIUSR + + + + + STC name of main service + STC name of main service + security + + + + + ZWESLSTC + + + + + STC name of ZIS + STC name of ZIS + security + + + + + ZWESISTC + + + + + STC name of Auxiliary Service + STC name of Auxiliary Service + security + + + + + ZWESASTC + + + + + + Define variables + Use this step to define the variables for execution + + + Define the main variables + Use this step to define the main variables for Zowe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Run this step to fill base variables. + 1 + z/OS System Programmer + false + false + + + + Ports + Specify ports variables for components + + + + + + + Run this step to specify ports variables for components + 1 + z/OS System Programmer + false + false + + + + + Create configuration + Creates the configuration for the Zowe (API ML) + + + + + Generated yaml file is backward compatible with full Zowe,
+ this workflow is just simplified with focus on easier API ML configuration.
+ Ensure that the values are correct.
+ zowe.yaml file is created in the: ${instance-zowe_runtimeDirectory} directory

+ 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}
+ and change the folder UID to the ID of the user who executes this workflow.
+ Issue the following command:
+ chown ${_workflow-workflowOwner} ${instance-zowe_runtimeDirectory}
+ Re-run the step. +]]>
+ 1 + z/OS System Programmer + false + false + +
+ + Zowe installation + Zowe installation + + Run the Zowe install + Configure Zowe. + + + + zwe install -c ${instance-zowe_runtimeDirectory}/zowe.yml
+ Will create remaining runtime data sets under zowe.setup.dataset.prefix definition,
+ i.e. under specified prefix ${instance-zowe_setup_dataset_prefix}:
+ SZWEAUTH contains few Zowe load modules (++PROGRAM).
+ SZWESAMP contains several sample configurations.
+ SZWEEXEC contains few utilities used by Zowe.
+ SZWELOAD contains config manager for REXX.
+ ]]>
+ 1 + z/OS System Programmer + false + false + +
+ + Run scripts for Zowe initialization + Executes scripts for Zowe initialization + + + + + + zwe init mvs -c ${instance-zowe_runtimeDirectory}/zowe.yml --allow-overwrite
+ zwe init stc -c ${instance-zowe_runtimeDirectory}/zowe.yml --allow-overwrite
+
+ NOTE: + Each zwe init sub-command defines a configuration. +
    +
  • mvs: Copy the data sets provided with Zowe to custom data sets.
  • +
  • stc: Configure the system to launch the Zowe started task.
  • +
+ ]]>
+ 1 + z/OS System Programmer + false + false + +
+
+
diff --git a/workflows/files/ZWECONF.properties b/workflows/files/ZWECONF.properties index 876020cab4..5e76d2b27e 100644 --- a/workflows/files/ZWECONF.properties +++ b/workflows/files/ZWECONF.properties @@ -140,10 +140,10 @@ 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 diff --git a/workflows/files/ZWECONF.xml b/workflows/files/ZWECONF.xml index 5d725d8adf..5d72cf3f92 100644 --- a/workflows/files/ZWECONF.xml +++ b/workflows/files/ZWECONF.xml @@ -12,9 +12,9 @@ - - Where Zowe MVS data sets will be installed - Where Zowe MVS data sets will be installed + + Prefix of datasets where remaining runtime datasets will be created + Prefix of datasets where remaining runtime libraries will be created within execution of Zowe install step (SZWEAUTH, SZWESAMP, SZWEEXEC, SZWELOAD) zowe @@ -202,8 +202,8 @@ It is used by ZWESLSTC or by zwe command - The domain name of your Dynamic VIP Address (DVIPA) - 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 @@ -317,7 +317,7 @@ some use cases, like containerization, this port could be different. - File location for cert truststore. For keyring, the format is "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 +405,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 +448,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Check this option to enable the gateway - Check this option to enable the gateway + + Check this option to enable Gateway + Check this option to enable Gateway components @@ -460,8 +460,8 @@ How we want to verify SSL certificates of services. Valid values are: - Port for the API ML gateway - Port for the API ML gateway + Port for the API ML Gateway + Port for the API ML Gateway components @@ -469,10 +469,21 @@ How we want to verify SSL certificates of services. Valid values are: 7554 + + + Check this option to enable the Gateway internal ESM identity mapper + Check this option to enable Gateway internal ESM identity mapper + components + + + + false + + - 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 @@ -481,9 +492,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Authorization provider for the gateway - Authorization provider for the gateway + + Authorization provider for the Gateway + Authorization provider for the Gateway components @@ -492,9 +503,9 @@ 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 @@ -503,9 +514,9 @@ How we want to verify SSL certificates of services. Valid values are: - - 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 @@ -514,7 +525,7 @@ How we want to verify SSL certificates of services. Valid values are: - + Check to enable the security authorization endpoint Check to enable the security authorization endpoint components @@ -525,9 +536,9 @@ 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 @@ -535,9 +546,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Check to enable the gateway security x509 - Check to enable the gateway security x509 + + Check to enable the Gateway security x509 + Check to enable the Gateway security x509 components @@ -646,8 +657,8 @@ How we want to verify SSL certificates of services. Valid values are: - Check this option to enable the API Catalog - Check this option to enable the API Catalog + Check this option to enable API Catalog + Check this option to enable API Catalog components @@ -678,9 +689,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Check this option to enable the Discovery service - Check this option to enable the Discovery service + + Check this option to enable Discovery service + Check this option to enable Discovery service components @@ -690,8 +701,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 @@ -711,9 +722,9 @@ How we want to verify SSL certificates of services. Valid values are: - - Check this option to enable the Caching service - Check this option to enable the Caching service + + Check this option to enable Caching service + Check this option to enable Caching service components @@ -723,8 +734,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 @@ -804,9 +815,9 @@ How we want to verify SSL certificates of services. Valid values are: - - 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 @@ -827,8 +838,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 @@ -959,8 +970,8 @@ How we want to verify SSL certificates of services. Valid values are: - Check this option to enable the JES explorer - Check this option to enable the JES explorer. + Check this option to enable JES explorer + Check this option to enable JES explorer. components @@ -970,8 +981,8 @@ How we want to verify SSL certificates of services. Valid values are: - Check this option to enable the MVS explorer - Check this option to enable the MVS explorer. + Check this option to enable MVS explorer + Check this option to enable MVS explorer. components @@ -981,8 +992,8 @@ How we want to verify SSL certificates of services. Valid values are: - Check this option to enable the USS explorer - Check this option to enable the USS explorer. + Check this option to enable USS explorer + Check this option to enable USS explorer. components @@ -1146,20 +1157,7 @@ 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 - - + @@ -1231,8 +1229,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 @@ -1256,6 +1253,7 @@ How we want to verify SSL certificates of services. Valid values are: + @@ -2043,17 +2041,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" @@ -2096,6 +2094,7 @@ echo ' debug: ${instance-components_gateway_debug}' >> "${instance-zowe_runti echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' apiml:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' security:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +echo ' useInternalMapper: ${instance-components_gateway_internalMapper}' >> "${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 ' zosmf:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2127,6 +2126,7 @@ 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 ' useInternalMapper: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' auth:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' provider: "zosmf"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" echo ' zosmf:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2234,7 +2234,11 @@ echo ' name: "$!{instance-components_caching_service_storage_vsam_name}"' 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" +#else +echo ' port: 7600' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" +#end #end #if (${instance-components_caching_service_enabled} == "false" ) echo ' caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" @@ -2365,7 +2369,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" @@ -2428,26 +2432,21 @@ echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" Zowe installation Zowe installation - - Run the Zowe install (only for convenience build) + + Run the Zowe install Configure Zowe. - - 1==1 - Always true - - - Skips this step if Install the MVS data sets was not selected - !${instance-zowe_setup_installStep_enabled} - skipped - - - zwe install -c ${instance-zowe_runtimeDirectory}/zowe.yml + This step runs the command: zwe install -c ${instance-zowe_runtimeDirectory}/zowe.yml
+ Will create remaining runtime data sets under zowe.setup.dataset.prefix definition,
+ i.e. under specified prefix ${instance-zowe_setup_dataset_prefix}:
+ SZWEAUTH contains few Zowe load modules (++PROGRAM).
+ SZWESAMP contains several sample configurations.
+ SZWEEXEC contains few utilities used by Zowe.
+ SZWELOAD contains config manager for REXX.
]]>
1 z/OS System Programmer @@ -2469,8 +2468,8 @@ zwe install -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
- Run the Zowe init - Executes the Zowe initialization + Run scripts for Zowe initialization + Executes scripts for Zowe initialization @@ -2486,11 +2485,10 @@ 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.
  • -
  • 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.
  • +#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
]]> 1 @@ -2517,24 +2515,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..094f05cc32 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 @@ -302,8 +303,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