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..4aea7a10ae 100644
--- a/.github/scripts/cicd_test/make_matrix.sh
+++ b/.github/scripts/cicd_test/make_matrix.sh
@@ -32,15 +32,14 @@ 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 node v22")
+ test_file="$ZOS_NODE_V22_TESTFILE"
+ ;;
+
"Non-strict Verify External Certificate")
test_file="$NON_STRICT_VERIFY_EXTERNAL_CERTIFICATE_TESTFILE"
;;
@@ -87,18 +86,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/05_process_ext_list.sh b/.github/scripts/cicd_test/prep7_more_test_prep/05_process_ext_list.sh
index 22027e3c93..806af8fee0 100644
--- a/.github/scripts/cicd_test/prep7_more_test_prep/05_process_ext_list.sh
+++ b/.github/scripts/cicd_test/prep7_more_test_prep/05_process_ext_list.sh
@@ -35,11 +35,12 @@ if [[ "$MATRIX_TEST" == *"install-ext"* ]]; then
if [[ "$each_ext" == *"("* ]] && [[ "$each_ext" == *")"* ]] ; then
# user provides custom artifactory pattern
ext_name=$(echo "$each_ext" | cut -d "(" -f1)
- ext_pattern=$(echo "$each_ext" | cut -d "(" -f2 | cut -d ")" -f1)
+ ext_version=$(echo "$each_ext" | cut -d "(" -f2 | cut -d ")" -f1)
+ ext_pattern=$(echo "$DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN" | sed "s#{ext-name}#$ext_name#g" | sed "s#{ext-version}#$ext_version#g" )
else
# use default
ext_name="$each_ext"
- ext_pattern=$(echo "$DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN" | sed "s#{ext-name}#$ext_name#g")
+ ext_pattern=$(echo "$DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN" | sed "s#{ext-name}#$ext_name#g" | sed "s#{ext-version}#*#g" )
fi
echo "[Check 4 INFO] extension name is $ext_name"
@@ -58,4 +59,4 @@ if [[ "$MATRIX_TEST" == *"install-ext"* ]]; then
EXTENSION_LIST=$(echo $EXTENSION_LIST | sed 's/;$//g')
assert_env_var EXTENSION_LIST
printf "${GREEN}[Check 4/$TOTAL_CHECK] Zowe extension list processing complete!${NC}\n"
-fi
\ No newline at end of file
+fi
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..a3865351c8 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
@@ -28,4 +28,4 @@ printf "Zowe CLI artifactory path: ${CYAN}$ZOWE_CLI_ARTIFACTORY_FINAL${NC}\n"
printf "Zowe extension list: ${CYAN}$EXTENSION_LIST${NC}\n"
printf "Test server: ${CYAN}$TEST_SERVER${NC}\n"
printf "Test server nickname: ${CYAN}$TEST_SERVER_NICKNAME${NC}\n"
-printf "Node home pattern on z/OS: ${CYAN}/ZOWE/node/node-$ZOS_NODE_VERSION-os390-s390x${NC}\n"
+printf "Node home pattern on z/OS: ${CYAN}/ZOWE/node/node-$ZOS_NODE_VERSION${NC}\n"
diff --git a/.github/workflows/build-packaging.yml b/.github/workflows/build-packaging.yml
index 267ac7ea05..a5bd922b52 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,13 +345,13 @@ 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'
if: env.INPUTS_BUILD_PSWI == 'true' && github.event.inputs.PSWI_SMPE_ARTIFACTORY_PATH != '' && github.event.inputs.PSWI_SMPE_AZWE_ARTIFACTORY_PATH != ''
run: |
- jfrog rt dl ${{github.event.inputs.PSWI_SMPE_AZWE_ARTIFACTORY_PATH}}/AZWE002*.zip --flat=true .pax/AZWE002.zip
+ jfrog rt dl ${{github.event.inputs.PSWI_SMPE_AZWE_ARTIFACTORY_PATH}}/AZWE003*.zip --flat=true .pax/AZWE003.zip
jfrog rt dl ${{github.event.inputs.PSWI_SMPE_ARTIFACTORY_PATH}}/zowe-smpe-*.zip --flat=true .pax/zowe-smpe.zip
- name: '[SMPE Pax 4] Build PSWI'
@@ -373,7 +374,7 @@ jobs:
with:
name: pswi-folder
path: |
- pswi/**
+ pswi/logs/**
- name: '[K8S] Build Kubernetes'
timeout-minutes: 10
diff --git a/.github/workflows/cicd-test-readme.md b/.github/workflows/cicd-test-readme.md
index 082639da7b..66d1a58c12 100644
--- a/.github/workflows/cicd-test-readme.md
+++ b/.github/workflows/cicd-test-readme.md
@@ -4,9 +4,9 @@ This guide will describe how you should input into Github Actions workflow input
Currently we support three testing z/OS servers:
-- zzow06 (ACF2)
-- zzow07 (Top Secret/TSS)
-- zzow08 (RACF)
+- zzow09 (ACF2)
+- zzow10 (Top Secret/TSS)
+- zzow11 (RACF)
Testing pipeline is running tests in parallel. The workflow will try to acquire the resource lock if available. If the resource lock is occupied, the workflow will wait until the lock is succesfully acquired.
@@ -17,7 +17,7 @@ Workflow trigger is at [cicd-test](https://github.com/zowe/zowe-install-packagin
### Choose Test Server
- This input is a choice, and it's mandatory.
-- You can choose from one of `zzow06`, `zzow07`, `zzow08`, `zzow06,zzow07,zzow08` (if you want to run the test on all zzow servers), or `Any zzow servers` (pick any zzow servers, potentially help reduce wait time)
+- You can choose from one of `zzow09`, `zzow10`, `zzow11`, `zzow09,zzow10,zzow11` (if you want to run the test on all zzow servers), or `Any zzow servers` (pick any zzow servers, potentially help reduce wait time)
- Default is `Any zzow servers`
### Choose Install Test
@@ -29,7 +29,7 @@ Workflow trigger is at [cicd-test](https://github.com/zowe/zowe-install-packagin
- SMPE PTF
- Extensions
- Keyring
- - z/OS node v18
+ - z/OS node v20
- Non-strict Verify External Certificate
- Install PTF twice
- VSAM Caching storage method
@@ -91,7 +91,7 @@ Background: CICD testing relies on a `zowe.pax` or `zowe-smpe.zip` (for SMPE ins
- This input is pre-filled with `sample-node-api;sample-trial-app` to test [sample-node-api](https://github.com/zowe/sample-node-api) and [sample-trial-app](https://github.com/zowe/sample-trial-app) projects. In normal circumstances, you probably don't need to modify the pre-filled value here.
- By default, the extension artifact search pattern is using format `libs-snapshot-local/org/zowe/{ext-name}/*/{ext-name}-*.pax` where `{ext-name}` will be processed and substituted from this input (as an example above, `sample-node-api`). Then the latest uploaded artifact will be used.
-- Optionally, you can customized your extension artifact path. Customized jfrog artifactory path should exist, be valid, and enclosed in brackets and put after the extension name, eg. `sample-node-api(my/new/path/sample-node-api-cus.pax)`. A pattern contains `*` is also supported, which the latest artifact will be picked up. If multiple extensions are included, make sure to separate them by semi-colon. In addition to the artifactory path/pattern, you can also put a full http URL to any other remote location that points to an extension pax here.
+- Optionally, you can customized your extension artifact version. Customized jfrog artifactory version should exist, be valid, and enclosed in brackets and put after the extension name, eg. `sample-node-api(3.0.0-SNAPSHOT)`. This example will create a search pattern like the following, where the latest artifact in the folder is picked up: `libs-snapshot-local/org/zowe/sample-node-api/3.0.0-SNAPSHOT/sample-node-api-*.pax`. A pattern containing `*` is also supported, which will result in the latest artifact in the latest folder matching the pattern. For example: `sample-node-api(1.0.0-*)` will create this search pattern: `libs-snapshot-local/org/zowe/sample-node-api/1.0.0-*/sample-node-api-*.pax`, which could match folders `1.0.0-SNAPSHOT`, `1.0.0-MAIN`, `1.0.0-user-pr-build`, etc.
- The following regular expression will be used to check against your input
```
@@ -109,7 +109,7 @@ Background: CICD testing relies on a `zowe.pax` or `zowe-smpe.zip` (for SMPE ins
When running CICD integration tests during RC stage, the following string will be parsed into the Github Actions matrix. As a result, a total of 21 independent jobs will be spawned.
```
-basic/install.ts(zzow06,zzow07,zzow08);basic/install-ptf.ts(zzow06,zzow07,zzow08);basic/install-ext.ts(zzow07);extended/keyring.ts(zzow06,zzow07,zzow08);extended/node-versions/node-v18.ts(zzow06,zzow07,zzow08);extended/node-versions/node-v20.ts(zzow06,zzow07,zzow08);extended/certificates/nonstrict-verify-external-certificate.ts(zzow06)
+basic/install.ts(zzow09,zzow10,zzow11);basic/install-ptf.ts(zzow09,zzow10,zzow11);basic/install-ext.ts(zzow10);extended/keyring.ts(zzow09,zzow10,zzow11);extended/node-versions/node-v20.ts(zzow09,zzow10,zzow11);extended/node-versions/node-v20.ts(zzow09,zzow10,zzow11);extended/certificates/nonstrict-verify-external-certificate.ts(zzow09)
```
Total elapsed time when running in parallel is approximately 3.5 hours on paper idealy if all parallel jobs are executing at the same time. In reality, from numerous tests performed, total elapsed time is around 4 hours.
@@ -121,7 +121,6 @@ Selected test running elapsed time:
| ---- | ------------ |
| Convenience Pax | 53m |
| SMPE PTF | 68m |
-| z/OS node v18 | 45m |
| z/OS node v20 | 45m |
| Keyring | 53m |
| Non-strict Verify External Certificate | 51m |
diff --git a/.github/workflows/cicd-test.yml b/.github/workflows/cicd-test.yml
index 2df637d7ec..e2adc55541 100644
--- a/.github/workflows/cicd-test.yml
+++ b/.github/workflows/cicd-test.yml
@@ -16,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
@@ -31,8 +31,8 @@ on:
- SMPE PTF
- Extensions
- Keyring
- - z/OS node v18
- z/OS node v20
+ - z/OS node v22
- Non-strict Verify External Certificate
- Install PTF Twice
- VSAM Caching Storage Method
@@ -52,7 +52,7 @@ on:
required: false
# FIXME: too slow to test 2, temporarily only test 1
# default: 'sample-node-api;sample-trial-app'
- default: 'sample-node-api'
+ default: 'sample-node-api(3.0.0-SNAPSHOT)'
RANDOM_DISPATCH_EVENT_ID:
description: 'random dispatch event id'
required: false
@@ -65,12 +65,12 @@ env:
SANITY_TEST_PATH: tests/sanity
DEFAULT_ZOWE_PAX_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe*{branch-name}*.pax
DEFAULT_ZOWE_SMPE_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe-smpe*{branch-name}*.zip
- DEFAULT_ZOWE_CLI_ARTIFACTORY_PATTERN: PLACE_HOLDER/org/zowe/cli/zowe-cli-package/*zowe-cli-package-2*.zip
- DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/*/{ext-name}-*.pax
+ DEFAULT_ZOWE_CLI_ARTIFACTORY_PATTERN: PLACE_HOLDER/org/zowe/cli/zowe-cli-package/*zowe-cli-package-3*.zip
+ DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/{ext-version}/{ext-name}-*.pax
# below block can be overwritten, adjusted by DevOps only
- # ZOS_NODE_VERSION more to choose from: v16.20.1, v18.16.0
- ZOS_NODE_VERSION: v16.20.1
+ # ZOS_NODE_VERSION more to choose from: v18.16.0, v20.11.0
+ ZOS_NODE_VERSION: v18.16.0
CLIENT_NODE_VERSION: v12.18.3
INSTALL_TEST_DEBUG_INFORMATION: zowe-install-test:*
SANITY_TEST_DEBUG_INFORMATION: zowe-sanity-test:*
@@ -81,16 +81,16 @@ env:
SMPE_PTF_TESTFILE: basic/install-ptf.ts
EXTENSIONS_TESTFILE: basic/install-ext.ts
KEYRING_TESTFILE: extended/keyring.ts
- ZOS_NODE_V18_TESTFILE: extended/node-versions/node-v18.ts
ZOS_NODE_V20_TESTFILE: extended/node-versions/node-v20.ts
+ ZOS_NODE_V22_TESTFILE: extended/node-versions/node-v22.ts
NON_STRICT_VERIFY_EXTERNAL_CERTIFICATE_TESTFILE: extended/certificates/nonstrict-verify-external-certificate.ts
INSTALL_PTF_TWICE_TESTFILE: extended/install-ptf-two-times.ts
VSAM_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/vsam-storage.ts
INFINISPAN_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/infinispan-storage.ts
CONFIG_MANAGER_TESTFILE: extended/config-manager/enable-config-manager.ts
GENERAL_API_DOCUMENTATION_TESTFILE: basic/install-api-gen.ts
- ZOWE_NIGHTLY_TESTS_FULL: basic/install.ts(all);basic/install-fmid.ts(all)
- ZOWE_RELEASE_TESTS_FULL: basic/install.ts(all);basic/install-fmid.ts(all);basic/install-ext.ts(any);extended/keyring.ts(all);extended/node-versions/node-v18.ts(zzow08):extended/certificates/nonstrict-verify-external-certificate.ts(any);extended/caching-storages/infinispan-storage.ts(any);extended/config-manager/enable-config-manager.ts(any)
+ ZOWE_NIGHTLY_TESTS_FULL: basic/install.ts(all);basic/install-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-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:
@@ -298,9 +298,6 @@ jobs:
case 'Keyring':
eta = 53
break;
- case 'z/OS node v18':
- eta = 45
- break;
case 'z/OS node v20':
eta = 45
break;
@@ -385,7 +382,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-weekly.yml b/.github/workflows/link-check-weekly.yml
deleted file mode 100644
index 21a91b5417..0000000000
--- a/.github/workflows/link-check-weekly.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-permissions: read-all
-
-name: Check Markdown Links - Weekly
-
-on:
- push:
- branches:
- - 'v3.x/master'
- - 'v3.x/staging'
- - 'v2.x/master'
- - 'v2.x/staging'
- - 'v1.x/master'
- - 'v1.x/staging'
- schedule:
- # Every day @ 4 AM
- - cron: "0 4 * * *"
-
-jobs:
- markdown-link-check:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
-
- - uses: gaurav-nelson/github-action-markdown-link-check@d53a906aa6b22b8979d33bc86170567e619495ec # v1.0.15
diff --git a/.github/workflows/link-check.yml b/.github/workflows/link-check.yml
new file mode 100644
index 0000000000..d11b069c7a
--- /dev/null
+++ b/.github/workflows/link-check.yml
@@ -0,0 +1,49 @@
+# This link checker focuses on covering end-user facing links, not developer documentation.
+# This means we cover the smp/e, pswi, and zwe content.
+# The lychee toml files are set to ignore links which popped up in comments or variables.
+permissions: read-all
+
+name: Link Check CI
+
+on:
+ pull_request:
+ types: [opened, synchronize]
+ push:
+ branches:
+ - 'v3.x/staging'
+ - 'v2.x/staging'
+ workflow_dispatch:
+
+jobs:
+ lychee-link-check:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Link Checker
+ id: lychee
+ uses: lycheeverse/lychee-action@f81112d0d2814ded911bd23e3beaa9dda9093915 # v2.1.0
+ with:
+ fail: true
+ format: json
+ output: lychee_output.json
+ args: --config ./.github/lychee.toml --no-progress --verbose --max-retries 10 'bin/**/*' 'smpe/**/*' 'workflows/**/*'
+
+ - name: Output failed links in console
+ id: quick-output
+ if: always()
+ run: |
+ if [[ -f "lychee_output.json" ]]; then
+ jq .fail_map lychee_output.json
+ else
+ echo "lychee command failed and didn't produce output"
+ fi
+
+ - name: Publish Output
+ id: publish
+ if: always()
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882
+ with:
+ name: lychee_results.json
+ path: lychee_output.json
diff --git a/.github/workflows/pswi-zowe-config-test.yml b/.github/workflows/pswi-zowe-config-test.yml
index 0d25066436..5fcf430e54 100644
--- a/.github/workflows/pswi-zowe-config-test.yml
+++ b/.github/workflows/pswi-zowe-config-test.yml
@@ -35,7 +35,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: 30
- name: 'Test ZWECONF workflow'
@@ -58,3 +58,4 @@ jobs:
pswi/**.txt
pswi/zowe_.yaml
pswi/ZWECONF1/**
+ pswi/logs/**
diff --git a/.pax/pre-packaging.sh b/.pax/pre-packaging.sh
index 15bad07711..531bef0ea3 100755
--- a/.pax/pre-packaging.sh
+++ b/.pax/pre-packaging.sh
@@ -190,8 +190,8 @@ BASE_DIR=$(
pwd
) # /.pax
-# use node v16 to build
-export NODE_HOME=/ZOWE/node/node-v16.20.1-os390-s390x
+# use node v18 to build
+export NODE_HOME=/ZOWE/node/node-v18.16.0
export JAVA_HOME=/ZOWE/node/J17.0_64
export PATH=$JAVA_HOME/bin:$PATH
ZOWE_ROOT_DIR="${BASE_DIR}/content"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b2c4502bd5..88cdd0a1ea 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,11 +2,23 @@
All notable changes to the Zowe Installer will be documented in this file.
+## `3.1.0`
+- Bugfix: When logging `zwe` command, sometimes the log has wrong file tag and the log is unreadable. [#4071](https://github.com/zowe/zowe-install-packaging/pull/4071)
+- Bugfix: When `--log-dir` parameter for `zwe` command is a file, there might be an error "InternalError: stack overflow". [#4064](https://github.com/zowe/zowe-install-packaging/pull/4064)
+- Enhancement: command `zwe init` does not require NodeJS [#4088](https://github.com/zowe/zowe-install-packaging/pull/4088)
+- Enhancement: command `zwe install` does not require NodeJS [#4069](https://github.com/zowe/zowe-install-packaging/pull/4069)
+- Enhancement: new javascript funtion `getStatvfs()` to obtain information about the file sysytem [#3994](https://github.com/zowe/zowe-install-packaging/pull/3994)
+- Enhancement: command `zwe diagnose` in javascript only [#4061](https://github.com/zowe/zowe-install-packaging/pull/4061)
+- Enhancement: schema validation update for `zowe.job.name` and `zowe.job.prefix` [#4060](https://github.com/zowe/zowe-install-packaging/pull/4060)
+
## `3.0.0`
### Breaking Changes
-- `zowe.yaml` changed its default z/OSMF Service ID definition from `zosmf` to `ibmzosmf`, which may impact Zowe Clients. For more information on this change, please see the API Mediation Layer's 3.0.0 Breaking Changes.
+- The Zowe YAML now requires the `zaas` component for the API Mediation Layer to work. See example-zowe.yaml for new component values.
+- The Zowe YAML attribute `components.gateway.apiml.security.auth.zosmf.serviceId` for the “gateway” component has changed from “zosmf” to “ibmzosmf”. This may impact Zowe Clients. See example-zowe.yaml for new component values. For more information on this change, please see the API Mediation Layer's 3.0.0 Breaking Changes.
+- The Zowe YAML parameter `components.gateway.apiml.security.auth.zosmf.jwtAutoconfiguration` for the “gateway” component has changed. The value “auto” is no longer allowed, and you must choose either the default of “jwt” or “ltpa” depending on if your z/OSMF is set up for JWT use as recommended See example-zowe.yaml for new component values. For more information on this change, please see the API Mediation Layer's 3.0.0 Breaking Changes.
+
### New features and enhancements
- Enhancement: Added explanation to possible error message when checking z/OSMF setting. [#3956](https://github.com/zowe/zowe-install-packaging/pull/3956)
diff --git a/bin/commands/diagnose/index.sh b/bin/commands/diagnose/index.sh
index e45a33a2bb..db76d7c37a 100644
--- a/bin/commands/diagnose/index.sh
+++ b/bin/commands/diagnose/index.sh
@@ -11,59 +11,4 @@
# Copyright Contributors to the Zowe Project.
#######################################################################
-USE_CONFIGMGR=$(check_configmgr_enabled)
-if [ "${USE_CONFIGMGR}" = "true" ]; then
- _CEE_RUNOPTS="XPLINK(ON),HEAPPOOLS(OFF),HEAPPOOLS64(OFF)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/diagnose/cli.js"
-else
-
- error_code="${ZWE_CLI_PARAMETER_ERROR_CODE}"
-
- print_message ""
-
- if echo $error_code | grep -q -E "^[zZ][wW][eE][AaSsDdLl][A-Za-z]?[0-9]{3,4}[A-Za-z]$"; then
- server_code=$(echo "${error_code}" | cut -c4)
- if [[ "$server_code" == [Dd] ]]; then
- print_message "This code corresponds to the errors related to the ZOWE Desktop and the App Server."
- print_message ""
- print_message "To find the description of this error code, refer to the:"
- print_message ""
- print_message " Zowe documentation for Application framework"
- print_message " https://docs.zowe.org/stable/troubleshoot/app-framework/appserver-error-codes"
- elif [[ "$server_code" == [Ss] ]]; then
- print_message "This code corresponds to the errors related to the Zowe Subsystem Services (ZSS) and Zowe Installation Services (ZIS)."
- print_message ""
- print_message "To find the description of this error code, refer to the:"
- print_message ""
- print_message " Zowe documentation for ZSS"
- print_message " https://docs.zowe.org/stable/troubleshoot/app-framework/zss-error-codes"
- print_message " Zowe documentation for ZIS"
- print_message " https://docs.zowe.org/stable/troubleshoot/app-framework/zis-error-codes"
- elif [[ "$server_code" == [Aa] ]]; then
- print_message "This code corresponds to the errors related to the Zowe API Mediation Layer (APIML)."
- print_message ""
- print_message "To find the description of this error code, refer to the:"
- print_message ""
- print_message " Zowe documentation for API Mediation Layer"
- print_message " https://docs.zowe.org/stable/troubleshoot/troubleshoot-apiml-error-codes"
- elif [[ "$server_code" == [Ll] ]]; then
- print_message "This code corresponds to the errors related to the Zowe Launcher and ZWE."
- print_message ""
- print_message "To find the description of this error code, refer to the:"
- print_message ""
- print_message " Zowe documentation for Launcher"
- print_message " https://docs.zowe.org/stable/troubleshoot/launcher/launcher-error-codes"
- print_message " Launcher error codes"
- print_message " https://github.com/zowe/launcher/blob/v2.x/master/src/msg.h"
- print_message " Zowe documentation for ZWE"
- print_message " https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/"
- fi
- print_message ""
- print_message "You may also explore reports from other users experiencing the same error by searching"
- print_message "https://github.com/search?q=org%3Azowe+${error_code}&type=discussions"
- else
- print_error_and_exit "ZWEL0102E: Invalid parameter --error-code='${error_code}'" "" 102
- fi
-
- print_message ""
-
-fi
+_CEE_RUNOPTS="XPLINK(ON)" ${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr -script "${ZWE_zowe_runtimeDirectory}/bin/commands/diagnose/cli.js"
diff --git a/bin/commands/diagnose/index.ts b/bin/commands/diagnose/index.ts
index 8fb6518277..4535f7e2fa 100644
--- a/bin/commands/diagnose/index.ts
+++ b/bin/commands/diagnose/index.ts
@@ -3,65 +3,64 @@
under the terms of the Eclipse Public License v2.0 which
accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-v20.html
-
+
SPDX-License-Identifier: EPL-2.0
-
+
Copyright Contributors to the Zowe Project.
*/
+
import * as std from 'cm_std';
import * as common from '../../libs/common';
-const THIS_CODE = "\nThis code corresponds to the errors related to the";
-const FIND_DESC = "To find the description of this error code, refer to the:\n ";
-const URL = {
- apiML: "https://docs.zowe.org/stable/troubleshoot/troubleshoot-apiml-error-codes",
- appFW : "https://docs.zowe.org/stable/troubleshoot/app-framework/appserver-error-codes",
- launcher: "https://docs.zowe.org/stable/troubleshoot/launcher/launcher-error-codes",
- launcherGit: "https://github.com/zowe/launcher/blob/v2.x/master/src/msg.h",
- zss: "https://docs.zowe.org/stable/troubleshoot/app-framework/zss-error-codes",
- zis: "https://docs.zowe.org/stable/troubleshoot/app-framework/zis-error-codes",
- zwe: "https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/"
-}
-
-function thisCodeCorrespondsTo(component: string){
- common.printMessage(`${THIS_CODE} ${component}.\n`);
- common.printMessage(`${FIND_DESC}`);
+const COMPONENTS = {
+ a: {
+ title: 'Zowe API Mediation Layer (APIML)',
+ urls: [
+ { text: 'API Mediation Layer', link: 'https://docs.zowe.org/stable/troubleshoot/troubleshoot-apiml-error-codes' }
+ ]
+ },
+ d: {
+ title: 'Zowe Desktop and the App Server',
+ urls: [
+ { text: 'Application framework', link: 'https://docs.zowe.org/stable/troubleshoot/app-framework/appserver-error-codes' }
+ ]
+ },
+ l: {
+ title: 'Zowe Launcher and zwe',
+ urls: [
+ { text: 'Launcher', link: 'https://docs.zowe.org/stable/troubleshoot/launcher/launcher-error-codes' },
+ { text: 'Launcher error codes', link: `https://github.com/zowe/launcher/blob/v${common.getZoweVersion().substring(0,1)}.x/master/src/msg.h`, git: true },
+ { text: 'zwe', link: 'https://docs.zowe.org/stable/appendix/zwe_server_command_reference/zwe/' },
+ ]
+ },
+ s: {
+ title: 'Zowe Subsystem Services (ZSS) and Zowe Installation Services (ZIS)',
+ urls: [
+ { text: 'ZSS', link: 'https://docs.zowe.org/stable/troubleshoot/app-framework/zss-error-codes' },
+ { text: 'ZIS', link: 'https://docs.zowe.org/stable/troubleshoot/app-framework/zis-error-codes' }
+ ]
+ }
}
-function printLinks(description: string, link: string){
- if (link.indexOf('github') > 0)
- common.printMessage(` ${description}`)
- else
- common.printMessage(` Zowe documentation for ${description}`)
- common.printMessage(` ${link}`);
+function printComponent(component: any): void {
+ common.printMessage(`\nThis code corresponds to the errors related to the ${component.title}.\n`);
+ common.printMessage(`To find the description of this error code, refer to the:\n`);
+ for (let url in component.urls) {
+ let zoweDocFor = component.urls[url].git ? '' : 'Zowe documentation for ';
+ common.printMessage(` ${zoweDocFor}${component.urls[url].text}`);
+ common.printMessage(` ${component.urls[url].link}`);
+ }
}
-export function execute() {
+export function execute(): void {
const errorCode = std.getenv('ZWE_CLI_PARAMETER_ERROR_CODE');
if (/^[zZ][wW][eE][AaSsDdLl][A-Za-z]?[0-9]{3,4}[A-Za-z]$/.test(errorCode)) {
- const serverCode = errorCode.charAt(3);
- if (serverCode.toLowerCase() === 'd') {
- thisCodeCorrespondsTo('ZOWE Desktop and the App Server');
- printLinks('Application framework', `${URL.appFW}`);
- }
- else if (serverCode.toLowerCase() === 's') {
- thisCodeCorrespondsTo('Zowe Subsystem Services (ZSS) and Zowe Installation Services (ZIS)');
- printLinks('ZSS', `${URL.zss}`);
- printLinks('ZIS', `${URL.zis}`);
- }
- else if (serverCode.toLowerCase() === 'a') {
- thisCodeCorrespondsTo('Zowe API Mediation Layer (APIML)');
- printLinks('API Mediation Layer', `${URL.apiML}`);
+ const serverCode = errorCode.charAt(3).toLowerCase();
+ if ('adls'.includes(serverCode)) {
+ printComponent(COMPONENTS[serverCode]);
+ common.printMessage(`\nYou may also explore reports from other users experiencing the same error by searching\nhttps://github.com/search?q=org%3Azowe+${errorCode}&type=discussions\n`);
}
- else if (serverCode.toLowerCase() === 'l') {
- thisCodeCorrespondsTo('Zowe Launcher and ZWE');
- printLinks('Launcher', `${URL.launcher}`);
- printLinks('Launcher error codes', `${URL.launcherGit}`);
- printLinks('ZWE', `${URL.zwe}`);
- }
- common.printMessage(`\nYou may also explore reports from other users experiencing the same error by searching\nhttps://github.com/search?q=org%3Azowe+${errorCode}&type=discussions\n`);
- }
- else {
+ } else {
common.printErrorAndExit(`ZWEL0102E: Invalid parameter --error-code='${errorCode}'`, undefined, 102);
}
}
diff --git a/bin/commands/init/apfauth/index.sh b/bin/commands/init/apfauth/index.sh
index d248cbb904..06398f846d 100644
--- a/bin/commands/init/apfauth/index.sh
+++ b/bin/commands/init/apfauth/index.sh
@@ -19,10 +19,10 @@ auth_libs="authLoadlib authPluginLib"
###############################
# validation
-require_zowe_yaml
+require_zowe_yaml "skipnode"
# read prefix and validate
-prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
@@ -32,7 +32,7 @@ fi
job_has_failures=
for key in ${auth_libs}; do
# read def and validate
- ds=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.${key}")
+ ds=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.${key}")
if [ -z "${ds}" ]; then
# authLoadlib can be empty
if [ "${key}" = "authLoadlib" ]; then
diff --git a/bin/commands/init/certificate/index.sh b/bin/commands/init/certificate/index.sh
index a1d2f5c8dd..90106839fb 100644
--- a/bin/commands/init/certificate/index.sh
+++ b/bin/commands/init/certificate/index.sh
@@ -13,24 +13,24 @@
###############################
# validation
-require_zowe_yaml
+require_zowe_yaml "skipnode"
###############################
# read prefix and validate
-prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
# read JCL library and validate
-jcllib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
+jcllib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
if [ -z "${jcllib}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe custom JCL library (zowe.setup.dataset.jcllib) is not defined in Zowe YAML configuration file." "" 157
fi
-security_product=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.product")
-security_users_zowe=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zowe")
-security_groups_admin=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.admin")
+security_product=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.product")
+security_users_zowe=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zowe")
+security_groups_admin=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.admin")
# read cert type and validate
-cert_type=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.type")
+cert_type=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.type")
if [ -z "${cert_type}" ]; then
print_error_and_exit "Error ZWEL0157E: Certificate type (zowe.setup.certificate.type) is not defined in Zowe YAML configuration file." "" 157
fi
@@ -41,16 +41,16 @@ fi
# read cert dname
for item in caCommonName commonName orgUnit org locality state country; do
var_name="dname_${item}"
- var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.dname.${item}")
+ var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.dname.${item}")
eval "${var_name}=\"${var_val}\""
done
# read cert validity
-cert_validity=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.validity")
+cert_validity=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.validity")
if [ "${cert_type}" = "PKCS12" ]; then
# read keystore info
for item in directory lock name password caAlias caPassword; do
var_name="pkcs12_${item}"
- var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.pkcs12.${item}")
+ var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.pkcs12.${item}")
eval "${var_name}=\"${var_val}\""
done
if [ -z "${pkcs12_directory}" ]; then
@@ -59,7 +59,7 @@ if [ "${cert_type}" = "PKCS12" ]; then
# read keystore import info
for item in keystore password alias; do
var_name="pkcs12_import_${item}"
- var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.pkcs12.import.${item}")
+ var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.pkcs12.import.${item}")
eval "${var_name}=\"${var_val}\""
done
if [ -n "${pkcs12_import_keystore}" ]; then
@@ -75,47 +75,51 @@ elif [[ "${cert_type}" == JCE*KS ]]; then
# read keyring info
for item in owner name label caLabel; do
var_name="keyring_${item}"
- var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.${item}")
+ var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.${item}")
eval "${var_name}=\"${var_val}\""
done
if [ -z "${keyring_name}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe keyring name (zowe.setup.certificate.keyring.name) is not defined in Zowe YAML configuration file." "" 157
fi
- keyring_import_dsName=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.dsName")
- keyring_import_password=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.password")
+ keyring_import_dsName=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.dsName")
+ keyring_import_password=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.import.password")
if [ -n "${keyring_import_dsName}" ]; then
keyring_option=3
if [ -z "${keyring_import_password}" ]; then
print_error_and_exit "Error ZWEL0157E: The password for data set storing importing certificate (zowe.setup.certificate.keyring.import.password) is not defined in Zowe YAML configuration file." "" 157
fi
fi
- keyring_connect_user=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.connect.user")
- keyring_connect_label=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.connect.label")
+ keyring_connect_user=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.connect.user")
+ keyring_connect_label=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.connect.label")
if [ -n "${keyring_connect_label}" ]; then
keyring_option=2
fi
fi
+# Trace or debug information will be part of the output, let's turn it off for the inline zwe commands
+save_trace=$ZWE_PRIVATE_LOG_LEVEL_ZWELS
+ZWE_PRIVATE_LOG_LEVEL_ZWELS=
# read keystore domains
-cert_import_CAs=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.importCertificateAuthorities" | tr '\n' ',')
+cert_import_CAs=$(zwecli_inline_execute_command internal config get --config "${ZWE_CLI_PARAMETER_CONFIG}" --path ".zowe.setup.certificate.importCertificateAuthorities" | tr '\n' ',' | awk '{ print substr( $0, 1, length($0)-1 ) }')
# read keystore domains
-cert_domains=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.san" | tr '\n' ',')
+cert_domains=$(zwecli_inline_execute_command internal config get --config "${ZWE_CLI_PARAMETER_CONFIG}" --path ".zowe.setup.certificate.san" | tr '\n' ',' | awk '{ print substr( $0, 1, length($0)-1 ) }')
if [ -z "${cert_domains}" ]; then
- cert_domains=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.externalDomains" | tr '\n' ',')
+ cert_domains=$(zwecli_inline_execute_command internal config get --config "${ZWE_CLI_PARAMETER_CONFIG}" --path ".zowe.externalDomains" | tr '\n' ',' | awk '{ print substr( $0, 1, length($0)-1 ) }')
fi
+ZWE_PRIVATE_LOG_LEVEL_ZWELS=$save_trace
# read z/OSMF info
for item in user ca; do
var_name="zosmf_${item}"
- var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.zOSMF.${item}")
+ var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.certificate.keyring.zOSMF.${item}")
eval "${var_name}=\"${var_val}\""
done
for item in host port; do
var_name="zosmf_${item}"
- var_val=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zOSMF.${item}")
+ var_val=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zOSMF.${item}")
eval "${var_name}=\"${var_val}\""
done
keyring_trust_zosmf=
-verify_certificates=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.verifyCertificates" | upper_case)
+verify_certificates=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.verifyCertificates" | upper_case)
if [ "${verify_certificates}" = "STRICT" -o "${verify_certificates}" = "NONSTRICT" ]; then
keyring_trust_zosmf="--trust-zosmf"
else
diff --git a/bin/commands/init/index.sh b/bin/commands/init/index.sh
index a2815f2b49..ba87c5ee57 100755
--- a/bin/commands/init/index.sh
+++ b/bin/commands/init/index.sh
@@ -36,10 +36,10 @@ if [ -z "${yaml_java_home}" ]; then
fi
fi
# zowe.runtimeDirectory
-require_zowe_yaml
+require_zowe_yaml "skipnode"
update_zowe_runtime_dir=
# do we have zowe.runtimeDirectory defined in zowe.yaml?
-yaml_runtime_dir=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.runtimeDirectory")
+yaml_runtime_dir=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.runtimeDirectory")
if [ -n "${yaml_runtime_dir}" ]; then
result=$(are_directories_same "${yaml_runtime_dir}" "${ZWE_zowe_runtimeDirectory}")
code=$?
diff --git a/bin/commands/init/mvs/index.sh b/bin/commands/init/mvs/index.sh
index 7f1102c95d..ab724fa206 100644
--- a/bin/commands/init/mvs/index.sh
+++ b/bin/commands/init/mvs/index.sh
@@ -22,10 +22,10 @@ authPluginLib|Zowe authorized plugin library|dsntype(library) dsorg(po) recfm(u)
###############################
# validation
-require_zowe_yaml
+require_zowe_yaml "skipnode"
# read prefix and validate
-prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
@@ -39,7 +39,7 @@ while read -r line; do
spec=$(echo "${line}" | awk -F"|" '{print $3}')
# read def and validate
- ds=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.${key}")
+ ds=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.${key}")
if [ -z "${ds}" ]; then
# authLoadlib can be empty
if [ "${key}" = "authLoadlib" ]; then
@@ -76,7 +76,7 @@ if [ "${ds_existence}" = "true" ] && [ "${ZWE_CLI_PARAMETER_ALLOW_OVERWRITE}" !
else
###############################
# copy sample lib members
- parmlib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.parmlib")
+ parmlib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.parmlib")
for ds in ZWESIP00; do
print_message "Copy ${prefix}.${ZWE_PRIVATE_DS_SZWESAMP}(${ds}) to ${parmlib}(${ds})"
data_set_copy_to_data_set "${prefix}" "${prefix}.${ZWE_PRIVATE_DS_SZWESAMP}(${ds})" "${parmlib}(${ds})" "${ZWE_CLI_PARAMETER_ALLOW_OVERWRITE}"
@@ -88,7 +88,7 @@ else
###############################
# copy auth lib members
# FIXME: data_set_copy_to_data_set cannot be used to copy program?
- authLoadlib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.authLoadlib")
+ authLoadlib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.authLoadlib")
if [ -n "${authLoadlib}" ]; then
for ds in ZWESIS01 ZWESAUX ZWESISDL; do
print_message "Copy components/zss/LOADLIB/${ds} to ${authLoadlib}(${ds})"
diff --git a/bin/commands/init/security/index.sh b/bin/commands/init/security/index.sh
index b0d2c48551..a07c135ef8 100644
--- a/bin/commands/init/security/index.sh
+++ b/bin/commands/init/security/index.sh
@@ -18,51 +18,51 @@ print_level1_message "Run Zowe security configurations"
###############################
# validation
-require_zowe_yaml
+require_zowe_yaml "skipnode"
# read prefix and validate
-prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
# read JCL library and validate
-jcllib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
+jcllib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
if [ -z "${jcllib}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe custom JCL library (zowe.setup.dataset.jcllib) is not defined in Zowe YAML configuration file." "" 157
fi
-security_product=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.product")
+security_product=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.product")
if [ -z "${security_product}" ]; then
security_product=RACF
fi
-security_groups_admin=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.admin")
+security_groups_admin=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.admin")
if [ -z "${security_groups_admin}" ]; then
security_groups_admin=${ZWE_PRIVATE_DEFAULT_ADMIN_GROUP}
fi
-security_groups_stc=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.stc")
+security_groups_stc=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.stc")
if [ -z "${security_groups_stc}" ]; then
security_groups_stc=${ZWE_PRIVATE_DEFAULT_ADMIN_GROUP}
fi
-security_groups_sysProg=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.sysProg")
+security_groups_sysProg=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.groups.sysProg")
if [ -z "${security_groups_sysProg}" ]; then
security_groups_sysProg=${ZWE_PRIVATE_DEFAULT_ADMIN_GROUP}
fi
-security_users_zowe=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zowe")
+security_users_zowe=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zowe")
if [ -z "${security_users_zowe}" ]; then
security_users_zowe=${ZWE_PRIVATE_DEFAULT_ZOWE_USER}
fi
-security_users_zis=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zis")
+security_users_zis=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.users.zis")
if [ -z "${security_users_zis}" ]; then
security_users_zis=${ZWE_PRIVATE_DEFAULT_ZIS_USER}
fi
-security_stcs_zowe=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zowe")
+security_stcs_zowe=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zowe")
if [ -z "${security_stcs_zowe}" ]; then
security_stcs_zowe=${ZWE_PRIVATE_DEFAULT_ZOWE_STC}
fi
-security_stcs_zis=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zis")
+security_stcs_zis=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zis")
if [ -z "${security_stcs_zis}" ]; then
security_stcs_zis=${ZWE_PRIVATE_DEFAULT_ZIS_STC}
fi
-security_stcs_aux=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.aux")
+security_stcs_aux=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.aux")
if [ -z "${security_stcs_aux}" ]; then
security_stcs_aux=${ZWE_PRIVATE_DEFAULT_AUX_STC}
fi
diff --git a/bin/commands/init/stc/index.sh b/bin/commands/init/stc/index.sh
index c26cf6e7e8..f3de7377e9 100644
--- a/bin/commands/init/stc/index.sh
+++ b/bin/commands/init/stc/index.sh
@@ -19,47 +19,47 @@ proclibs="ZWESLSTC ZWESISTC ZWESASTC"
###############################
# validation
-require_zowe_yaml
+require_zowe_yaml "skipnode"
# read prefix and validate
-prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
# read PROCLIB and validate
-proclib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.proclib")
+proclib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.proclib")
if [ -z "${proclib}" ]; then
print_error_and_exit "Error ZWEL0157E: PROCLIB (zowe.setup.dataset.proclib) is not defined in Zowe YAML configuration file." "" 157
fi
# read JCL library and validate
-jcllib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
+jcllib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
if [ -z "${jcllib}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe custom JCL library (zowe.setup.dataset.jcllib) is not defined in Zowe YAML configuration file." "" 157
fi
# read PARMLIB and validate
-parmlib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.parmlib")
+parmlib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.parmlib")
if [ -z "${parmlib}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe custom parameter library (zowe.setup.dataset.parmlib) is not defined in Zowe YAML configuration file." "" 157
fi
# read LOADLIB and validate
-authLoadlib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.authLoadlib")
+authLoadlib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.authLoadlib")
if [ -z "${authLoadlib}" ]; then
# authLoadlib can be empty
authLoadlib="${prefix}.${ZWE_PRIVATE_DS_SZWEAUTH}"
fi
-authPluginLib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.authPluginLib")
+authPluginLib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.authPluginLib")
if [ -z "${authPluginLib}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe custom load library (zowe.setup.dataset.authPluginLib) is not defined in Zowe YAML configuration file." "" 157
fi
-security_stcs_zowe=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zowe")
+security_stcs_zowe=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zowe")
if [ -z "${security_stcs_zowe}" ]; then
security_stcs_zowe=${ZWE_PRIVATE_DEFAULT_ZOWE_STC}
fi
-security_stcs_zis=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zis")
+security_stcs_zis=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.zis")
if [ -z "${security_stcs_zis}" ]; then
security_stcs_zis=${ZWE_PRIVATE_DEFAULT_ZIS_STC}
fi
-security_stcs_aux=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.aux")
+security_stcs_aux=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.security.stcs.aux")
if [ -z "${security_stcs_aux}" ]; then
security_stcs_aux=${ZWE_PRIVATE_DEFAULT_AUX_STC}
fi
diff --git a/bin/commands/init/vsam/index.sh b/bin/commands/init/vsam/index.sh
index f40e606b6a..e279ff07b7 100644
--- a/bin/commands/init/vsam/index.sh
+++ b/bin/commands/init/vsam/index.sh
@@ -18,43 +18,43 @@ print_level1_message "Create VSAM storage for Zowe Caching Service"
###############################
# validation
-require_zowe_yaml
+require_zowe_yaml "skipnode"
-caching_storage=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".components.caching-service.storage.mode" | upper_case)
+caching_storage=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".components.caching-service.storage.mode" | upper_case)
if [ "${caching_storage}" != "VSAM" ]; then
print_error "Warning ZWEL0301W: Zowe Caching Service is not configured to use VSAM. Command skipped."
return 0
fi
# read prefix and validate
-prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
# read JCL library and validate
-jcllib=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
+jcllib=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.jcllib")
if [ -z "${jcllib}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe custom JCL library (zowe.setup.dataset.jcllib) is not defined in Zowe YAML configuration file." "" 157
fi
-vsam_mode=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.vsam.mode")
+vsam_mode=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.vsam.mode")
if [ -z "${vsam_mode}" ]; then
vsam_mode=NONRLS
fi
vsam_volume=
if [ "${vsam_mode}" = "NONRLS" ]; then
- vsam_volume=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.vsam.volume")
+ vsam_volume=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.vsam.volume")
if [ -z "${vsam_volume}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe Caching Service VSAM data set volume (zowe.setup.vsam.volume) is not defined in Zowe YAML configuration file." "" 157
fi
fi
vsam_storageClass=
if [ "${vsam_mode}" = "RLS" ]; then
- vsam_storageClass=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.vsam.storageClass")
+ vsam_storageClass=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.vsam.storageClass")
if [ -z "${vsam_storageClass}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe Caching Service VSAM data set RLS storage class (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." "" 157
fi
fi
-vsam_name=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".components.caching-service.storage.vsam.name")
+vsam_name=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".components.caching-service.storage.vsam.name")
if [ -z "${vsam_name}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe Caching Service VSAM data set name (components.caching-service.storage.vsam.name) is not defined in Zowe YAML configuration file." "" 157
fi
diff --git a/bin/commands/install/index.sh b/bin/commands/install/index.sh
index 0fc9e7fad6..05a0455e6d 100644
--- a/bin/commands/install/index.sh
+++ b/bin/commands/install/index.sh
@@ -26,10 +26,10 @@ ${ZWE_PRIVATE_DS_SZWEEXEC}|Zowe executable utilities library|dsntype(library) ds
if [ -n "${ZWE_CLI_PARAMETER_DATASET_PREFIX}" ]; then
prefix="${ZWE_CLI_PARAMETER_DATASET_PREFIX}"
else
- require_zowe_yaml
+ require_zowe_yaml "skipnode"
# read prefix and validate
- prefix=$(read_yaml "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
+ prefix=$(read_yaml_configmgr "${ZWE_CLI_PARAMETER_CONFIG}" ".zowe.setup.dataset.prefix")
if [ -z "${prefix}" ]; then
print_error_and_exit "Error ZWEL0157E: Zowe dataset prefix (zowe.setup.dataset.prefix) is not defined in Zowe YAML configuration file." "" 157
fi
diff --git a/bin/libs/certificate.sh b/bin/libs/certificate.sh
index 1daf58fd49..4d9981d612 100644
--- a/bin/libs/certificate.sh
+++ b/bin/libs/certificate.sh
@@ -646,8 +646,14 @@ EOF
return 1
fi
if [ `uname` = "OS/390" ]; then
- iconv -f ISO8859-1 -t IBM-1047 "${keystore_dir}/${alias_lc}.cer" > "${keystore_dir}/${alias_lc}.cer-ebcdic"
- mv "${keystore_dir}/${alias_lc}.cer-ebcdic" "${keystore_dir}/${alias_lc}.cer"
+ # check if certificate is in EBCDIC before converting
+ if [[ "$(head -c 10 ${keystore_dir}/${alias_lc}.cer)" = "-----BEGIN" ]]; then
+ print_message ">>>> Certificate \"${keystore_dir}/${alias_lc}.cer is in EBCDIC."
+ else
+ print_message ">>>> Converting certificate \"${keystore_dir}/${alias_lc}.cer\" to EBCDIC."
+ iconv -f ISO8859-1 -t IBM-1047 "${keystore_dir}/${alias_lc}.cer" >"${keystore_dir}/${alias_lc}.cer-ebcdic"
+ mv "${keystore_dir}/${alias_lc}.cer-ebcdic" "${keystore_dir}/${alias_lc}.cer"
+ fi
ensure_file_encoding "${keystore_dir}/${alias_lc}.cer" "CERTIFICATE"
fi
fi
diff --git a/bin/libs/common.sh b/bin/libs/common.sh
index 5db74cc256..52815dfe6a 100644
--- a/bin/libs/common.sh
+++ b/bin/libs/common.sh
@@ -46,9 +46,9 @@ check_configmgr_enabled() {
}
require_zowe_yaml() {
- # node is required to read yaml file
- require_node
-
+ if [ -z "${1}" ]; then
+ require_node
+ fi
if [ -z "${ZWE_CLI_PARAMETER_CONFIG}" ]; then
print_error_and_exit "Error ZWEL0108E: Zowe YAML config file is required." "" 108
elif [ ! -f "${ZWE_CLI_PARAMETER_CONFIG}" ]; then
diff --git a/bin/libs/common.ts b/bin/libs/common.ts
index 76f94ae3c0..47bdd94dcc 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 5f5bbe5160..4669741400 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..322361c3dc 100644
--- a/bin/libs/json.sh
+++ b/bin/libs/json.sh
@@ -109,6 +109,40 @@ read_yaml() {
return ${code}
}
+read_yaml_configmgr() {
+ file="${1}"
+ key=$(echo "${2}" | tr '.' '/')
+ ignore_null="${3:-true}"
+
+ print_trace "- read_yaml_configmgr process ${file} and extract '${2} -> ${key}'"
+
+ configmgr="${ZWE_zowe_runtimeDirectory}/bin/utils/configmgr"
+ schema="${ZWE_zowe_runtimeDirectory}/schemas/server-common.json:${ZWE_zowe_runtimeDirectory}/schemas/zowe-yaml-schema.json"
+
+ result=$(_CEE_RUNOPTS="XPLINK(ON)" "${configmgr}" -s "$schema" -p "FILE(${file})" extract "${key}" 2>&1);
+ code=$?
+
+ # When the item is not defined in config, configmgr returns
+ # code 0 and
+ # stdout = "error not found, reason=nnn"
+ if [[ "${result}" == "error not found, reason="* ]]; then
+ result=""
+ fi
+
+ print_trace " * Exit code: ${code}"
+ print_trace " * Output:"
+ print_trace "$(padding_left "${result}" " ")"
+
+ if [ ${code} -eq 0 ]; then
+ if [ "${ignore_null}" = "true" ]; then
+ if [ "${result}" = "null" -o "${result}" = "undefined" ]; then
+ result=
+ fi
+ fi
+ printf "${result}"
+ fi
+}
+
read_json() {
file="${1}"
key="${2}"
diff --git a/bin/libs/logging.sh b/bin/libs/logging.sh
index 6e41778aca..787c4fe7a4 100755
--- a/bin/libs/logging.sh
+++ b/bin/libs/logging.sh
@@ -14,6 +14,9 @@
export ZWE_PRIVATE_LOG_FILE=
prepare_log_file() {
+ if [ -f "${1}" ]; then
+ print_error_and_exit "Error ZWEL0102E: Invalid parameter --log-dir=${1} (not a directory)" "" 102
+ fi
# use absolute path to make sure we can always write to correct location even
# if other scripts changed current working directory
log_dir=$(convert_to_absolute_path "${1}" | remove_trailing_slash)
diff --git a/bin/libs/node.sh b/bin/libs/node.sh
index 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/zos-fs.ts b/bin/libs/zos-fs.ts
index e0023a449f..9e6e9bf46f 100644
--- a/bin/libs/zos-fs.ts
+++ b/bin/libs/zos-fs.ts
@@ -116,3 +116,32 @@ export function ensureFileEncoding(file: string, expectedSample: string, expecte
common.printTrace(`- Failed to detect encoding of ${file}.`);
}
}
+
+export type fileSystemFlagsReturn = {
+ rc: number,
+ exported?: boolean,
+ rdonly?: boolean,
+ nosuid?: boolean,
+ nosecurity?: boolean,
+};
+
+export function getFileSystemFlags(path: string): fileSystemFlagsReturn {
+ const ST_OEEXPORTED = 0x40000000
+ const ST_RDONLY = 0x00000001
+ const ST_NOSUID = 0x00000002
+ const ST_NOSECURITY = 0x00000004
+ let flags : fileSystemFlagsReturn = { rc: 1 };
+ if (path) {
+ const result = zos.getStatvfs(path);
+ if (result[1] == 0) {
+ flags = {
+ rc: 0,
+ exported: !!(result[0].flag & ST_OEEXPORTED),
+ rdonly: !!(result[0].flag & ST_RDONLY),
+ nosuid: !!(result[0].flag & ST_NOSUID),
+ nosecurity: !!(result[0].flag & ST_NOSECURITY)
+ }
+ }
+ }
+ return flags;
+}
diff --git a/build/zwe/types/@qjstypes/xplatform.d.ts b/build/zwe/types/@qjstypes/xplatform.d.ts
index f139e1ac00..6d4572936e 100644
--- a/build/zwe/types/@qjstypes/xplatform.d.ts
+++ b/build/zwe/types/@qjstypes/xplatform.d.ts
@@ -27,6 +27,7 @@ export function stringFromBytes(data:ArrayBuffer, offset:number, length:number,
*/
export function loadFileUTF8(path:string, sourceCCSID:number):string;
export function storeFileUTF8(path:string, targetCCSID:number, content:string):number;
+export function appendFileUTF8(path: string, targetCCSID:number, content:string):number;
export var AUTO_DETECT:number;
export var NO_CONVERT:number;
diff --git a/build/zwe/types/@qjstypes/zos.d.ts b/build/zwe/types/@qjstypes/zos.d.ts
index a1fb69517a..a47ec8e407 100644
--- a/build/zwe/types/@qjstypes/zos.d.ts
+++ b/build/zwe/types/@qjstypes/zos.d.ts
@@ -26,10 +26,29 @@ export type ZStat = {
ccsid: number;
};
+export type Statvfs = {
+ bsize: number;
+ blocks: number;
+ bavail: number;
+ fsid: number;
+ flag: number;
+ frsize: number;
+ bfree: number;
+ files: number;
+ ffree: number;
+ favail: number;
+ namemax: number;
+ OEmaxfilesizehw: number;
+ OEmaxfilesizelw: number;
+ OEusedspace: number;
+ OEinvarsec: number;
+}
+
export function getEsm(): string;
export function getZosVersion(): number;
export function changeTag(path:string, ccsid:number):number;
export function changeExtAttr(path: string, extattr:number, onOff:boolean):number;
export function zstat(path:string):[ZStat, number];
+export function getStatvfs(path: string): [Statvfs, number];
export var EXTATTR_SHARELIB:number;
export var EXTATTR_PROGCTL:number;
diff --git a/example-zowe.yaml b/example-zowe.yaml
index 79d9c61186..78d0ffb1c2 100644
--- a/example-zowe.yaml
+++ b/example-zowe.yaml
@@ -457,17 +457,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: ""
@@ -623,7 +623,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/defaults.yaml b/files/defaults.yaml
index 94cd675cdf..8e319ea090 100644
--- a/files/defaults.yaml
+++ b/files/defaults.yaml
@@ -88,7 +88,7 @@ zowe:
configmgr:
# STRICT=quit on any error, including missing schema
# COMPONENT-COMPAT=if component missing schema, skip it with warning instead of quit
- validation: "COMPONENT-COMPAT"
+ validation: "STRICT"
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# runtime z/OS job name
diff --git a/files/zlux/config/allowedPlugins.json b/files/zlux/config/allowedPlugins.json
index 8a46519147..dcc69a094f 100644
--- a/files/zlux/config/allowedPlugins.json
+++ b/files/zlux/config/allowedPlugins.json
@@ -28,14 +28,6 @@
"identifier": "org.zowe.zlux.auth.trivial",
"versions": ["*"]
},
- {
- "identifier": "org.zowe.zlux.auth.zosmf",
- "versions": ["*"]
- },
- {
- "identifier": "org.zowe.zlux.auth.zss",
- "versions": ["*"]
- },
{
"identifier": "org.zowe.zlux.auth.safsso",
"versions": ["*"]
@@ -60,10 +52,6 @@
"identifier": "org.zowe.zlux.ng2desktop.settings",
"versions": ["*"]
},
- {
- "identifier": "org.zowe.zlux.proxy.zosmf",
- "versions": ["*"]
- },
{
"identifier": "org.zowe.zlux.sample.angular",
"versions": ["*"]
@@ -76,10 +64,6 @@
"identifier": "org.zowe.zlux.sample.iframe",
"versions": ["*"]
},
- {
- "identifier": "org.zowe.zosmf.workflows",
- "versions": ["*"]
- },
{
"identifier": "org.openmainframe.zowe.workshop-starter",
"versions": ["*"]
diff --git a/files/zlux/config/zluxserver.json b/files/zlux/config/zluxserver.json
deleted file mode 100644
index 9283155557..0000000000
--- a/files/zlux/config/zluxserver.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "node": {
- "https": {
- "ipAddresses": ["0.0.0.0"],
- "port": 7556,
- //pfx (string), keys, certificates, certificateAuthorities, and certificateRevocationLists are all valid here.
- "keys": ["../defaults/serverConfig/zlux.keystore.key"],
- "certificates": ["../defaults/serverConfig/zlux.keystore.cer"],
- "certificateAuthorities": ["../defaults/serverConfig/apiml-localca.cer"]
- },
- "mediationLayer": {
- "server": {
- "hostname": "localhost",
- "port": 7554,
- "isHttps": true
- },
- //environmentally set to true when apiml available
- "enabled": false
- },
- "headers": {
- "X-frame-Options": {
- "override": true,
- "value": "sameorigin"
- }
- }
- },
- "agent": {
- //host is for zlux to know, not zss
- "host": "localhost",
- "jwt": {
- "fallback": true
- },
- "https": {
- "ipAddresses": ["127.0.0.1"],
- //to be a replacement for zssPort
- "port": 7557
- },
- "mediationLayer": {
- "serviceName": "zss",
- //environmentally set to true when apiml available
- "enabled": false
- }
- },
- //Zowe cross memory server name
- "privilegedServerName": "ZWESIS_STD",
-
-// All paths relative to ZLUX/node or ZLUX/bin
-// In real installations, these values will be configured during the install.
- "productDir":"../defaults",
- "siteDir":"../deploy/site",
- "instanceDir":"../deploy/instance",
- "groupsDir":"../deploy/instance/groups",
- "usersDir":"../deploy/instance/users",
- "pluginsDir":"../defaults/plugins",
-
- "dataserviceAuthentication": {
- //this specifies the default authentication type for dataservices that didn't specify which type to use. These dataservices therefore should not expect a particular type of authentication to be used.
- "defaultAuthentication": "saf",
- //enable this to use role-based access control (RBAC) for Zowe dataservice endpoints
- "rbac": false,
-
- //each authentication type may have more than one implementing plugin, but the specification below just describes the priority of them. Every one that is found in the pluginsDir is loaded.
- "implementationDefaults": {
- //each type has an object which describes which implementation to use based on some criteria to find which is best for the task. For now, just "plugins" will
- //be used to state that you want a particular plugin.
- "saf": {
- "plugins": ["org.zowe.zlux.auth.safsso"]
- }
-
- }
- }
-}
diff --git a/manifest.json.template b/manifest.json.template
index 6a389fd83c..bb4c24389b 100644
--- a/manifest.json.template
+++ b/manifest.json.template
@@ -1,6 +1,6 @@
{
"name": "Zowe",
- "version": "3.0.0",
+ "version": "3.1.0",
"description": "Zowe is an open source project created to host technologies that benefit the Z platform from all members of the Z community (Integrated Software Vendors, System Integrators and z/OS consumers). Zowe, like Mac or Windows, comes with a set of APIs and OS capabilities that applications build on and also includes some applications out of the box. Zowe offers modern interfaces to interact with z/OS and allows you to work with z/OS in a way that is similar to what you experience on cloud platforms today. You can use these interfaces as delivered or through plug-ins and extensions that are created by clients or third-party vendors.",
"license": "EPL-2.0",
"homepage": "https://zowe.org",
@@ -12,9 +12,9 @@
},
"binaryDependencies": {
"org.zowe.zlux.zlux-core": {
- "version": "3.0.0-RC",
+ "version": "3.1.0-RC",
"repository": "libs-snapshot-local",
- "artifact": "zlux-core-3.0.0-20240925.185019.pax"
+ "artifact": "zlux-core-3.1.0-20250117.161154.pax"
},
"org.zowe.zlux.sample-angular-app": {
"version": "2.18.0-V2.X-RC",
@@ -32,14 +32,14 @@
"artifact": "sample-react-app-2.18.0-20240814.141704.pax"
},
"org.zowe.zlux.tn3270-ng2": {
- "version": "3.0.0-V3.X-RC",
+ "version": "3.1.0-V3.X-RC",
"repository": "libs-snapshot-local",
- "artifact": "tn3270-ng2-3.0.0-20240919.130824.pax"
+ "artifact": "tn3270-ng2-3.1.0-20250108.141502.pax"
},
"org.zowe.zlux.vt-ng2": {
- "version": "3.0.0-V3.X-RC",
+ "version": "3.1.0-V3.X-RC",
"repository": "libs-snapshot-local",
- "artifact": "vt-ng2-3.0.0-20240919.130822.pax"
+ "artifact": "vt-ng2-3.1.0-20250108.141509.pax"
},
"org.zowe.zlux.zlux-editor": {
"version": "2.18.0-V2.X-RC",
@@ -47,9 +47,9 @@
"artifact": "zlux-editor-2.18.0-20240814.141840.pax"
},
"org.zowe.zss": {
- "version": "3.0.0-RC",
+ "version": "3.1.0-RC",
"repository": "libs-snapshot-local",
- "artifact": "zss-3.0.0-rc-1202-20240919131259.pax"
+ "artifact": "zss-3.1.0-rc-1249-20250108143217.pax"
},
"org.zowe.explorer-jes": {
"version": "3.0.0"
@@ -65,23 +65,23 @@
"artifact": "explorer-ip*.pax"
},
"org.zowe.apiml.api-catalog-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "api-catalog-*.zip"
},
"org.zowe.apiml.discovery-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "discovery-*.zip"
},
"org.zowe.apiml.gateway-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "gateway-*.zip"
},
"org.zowe.apiml.caching-service-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "caching-service-*.zip"
},
"org.zowe.apiml.apiml-common-lib-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "apiml-common-lib-*.zip"
},
"org.zowe.apiml.sdk.common-java-lib-package": {
@@ -89,30 +89,30 @@
"artifact": "common-java-lib-*.zip"
},
"org.zowe.apiml.sdk.apiml-sample-extension-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "apiml-sample-extension-*.zip"
},
"org.zowe.apiml.zaas-package": {
- "version": "3.0.36",
+ "version": "3.1.5",
"artifact": "zaas-package-*.zip"
},
"org.zowe.getesm": {
- "version": "3.0.0-V3.X-RC",
+ "version": "3.1.0-V3.X-RC",
"repository": "libs-snapshot-local",
- "artifact": "getesm-3.0.0-2024091917.pax"
+ "artifact": "getesm-3.1.0-2025010749.pax"
},
"org.zowe.configmgr": {
- "version": "3.0.0-V3.X-RC",
+ "version": "3.1.0-V3.X-RC",
"repository": "libs-snapshot-local",
- "artifact": "configmgr-3.0.0-2024091929.pax"
+ "artifact": "configmgr-3.1.0-2025010752.pax"
},
"org.zowe.configmgr-rexx": {
- "version": "3.0.0-V3.X-RC",
+ "version": "3.1.0-V3.X-RC",
"repository": "libs-snapshot-local",
- "artifact": "configmgr-rexx-3.0.0-2024091935.pax"
+ "artifact": "configmgr-rexx-3.1.0-2025010754.pax"
},
"org.zowe.launcher": {
- "version": "3.0.0"
+ "version": "3.1.0"
},
"org.zowe.keyring-utilities": {
"version": "1.0.4",
@@ -124,7 +124,7 @@
"version": "2.0.3"
},
"org.zowe.licenses": {
- "version": "3.0.0",
+ "version": "3.1.0",
"artifact": "zowe_licenses_full.zip"
}
},
@@ -133,7 +133,7 @@
"componentGroup": "Zowe API Mediation Layer",
"entries": [{
"repository": "api-layer",
- "tag": "v3.0.36",
+ "tag": "v3.1.5",
"destinations": ["Zowe PAX"]
}]
}, {
@@ -147,12 +147,12 @@
"componentGroup": "Zowe Application Framework",
"entries": [{
"repository": "zlux-app-manager",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
},
{
"repository": "zlux-app-server",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
},
{
@@ -167,17 +167,17 @@
},
{
"repository": "zlux-platform",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
},
{
"repository": "zlux-server-framework",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC2",
"destinations": ["Zowe PAX"]
},
{
"repository": "zlux-shared",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
},
{
@@ -187,17 +187,17 @@
},
{
"repository": "zlux-build",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
},
{
"repository": "zss",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
},
{
"repository": "zowe-common-c",
- "tag": "zss-v3.0.0-RC1",
+ "tag": "zss-v3.1.0-RC1",
"destinations": ["Zowe PAX"]
}
]
@@ -205,21 +205,21 @@
"componentGroup": "Zowe CLI",
"entries": [{
"repository": "zowe-cli",
- "tag": "v8.0.0",
+ "tag": "v8.10.4",
"destinations": ["Zowe CLI Package"]
}]
}, {
"componentGroup": "IBM® CICS® Plug-in for Zowe CLI",
"entries": [{
"repository": "cics-for-zowe-client",
- "tag": "v6.0.0",
+ "tag": "v6.2.4",
"destinations": ["Zowe CLI Package"]
}]
}, {
"componentGroup": "IBM® Db2® Plug-in for Zowe CLI",
"entries": [{
"repository": "zowe-cli-db2-plugin",
- "tag": "v6.0.0",
+ "tag": "v6.1.0",
"destinations": ["Zowe CLI Package"]
}]
}, {
@@ -268,7 +268,7 @@
"componentGroup": "Zowe Desktop TN3270 Emulator Plug-in",
"entries": [{
"repository": "tn3270-ng2",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
}]
}, {
@@ -299,7 +299,7 @@
"componentGroup": "Zowe Desktop VT Emulator Plugin-in",
"entries": [{
"repository": "vt-ng2",
- "tag": "v3.0.0-RC1",
+ "tag": "v3.1.0-RC1",
"destinations": ["Zowe PAX"]
}]
},
@@ -323,7 +323,7 @@
"destinations": ["Zowe PAX"]
}, {
"repository": "launcher",
- "tag": "v3.0.0",
+ "tag": "v3.1.0",
"destinations": ["Zowe PAX"]
}]
},
@@ -347,9 +347,17 @@
"componentGroup": "Configmgr",
"entries": [{
"repository": "zowe-common-c",
- "tag": "configmgr-v3.0.0-RC1",
+ "tag": "configmgr-v3.1.0-RC1",
"destinations": ["Zowe PAX"]
}]
+ }, {
+ "componentGroup": "Zowe Client Python SDK",
+ "entries": [{
+ "repository": "zowe-client-python-sdk",
+ "core": false,
+ "tag": "91366a0e5cd1f2680c0ccf87e8493d099d9e35f7",
+ "destinations": ["Zowe Client Python SDK"]
+ }]
}
],
"imageDependencies": {
@@ -361,28 +369,28 @@
"api-catalog": {
"registry": "zowe-docker-release.jfrog.io",
"name": "ompzowe/api-catalog-services",
- "tag" : "3.0.36-ubuntu"
+ "tag" : "3.1.5-ubuntu"
},
"gateway": {
- "registry": "zowe-docker-snapshot.jfrog.io",
+ "registry": "zowe-docker-release.jfrog.io",
"name": "ompzowe/gateway-service",
- "tag" : "3.0.36-ubuntu"
+ "tag" : "3.1.5-ubuntu"
},
"caching": {
"registry": "zowe-docker-release.jfrog.io",
"name": "ompzowe/caching-service",
- "tag" : "3.0.36-ubuntu"
+ "tag" : "3.1.5-ubuntu"
},
"discovery": {
"kind": "statefulset",
"registry": "zowe-docker-release.jfrog.io",
"name": "ompzowe/discovery-service",
- "tag" : "3.0.36-ubuntu"
+ "tag" : "3.1.5-ubuntu"
},
"zaas": {
- "registry": "zowe-docker-snapshot.jfrog.io",
+ "registry": "zowe-docker-release.jfrog.io",
"name": "ompzowe/zaas-service",
- "tag" : "3.0.36-ubuntu"
+ "tag" : "3.1.5-ubuntu"
},
"app-server": {
"registry": "zowe-docker-release.jfrog.io",
diff --git a/playbooks/README.md b/playbooks/README.md
index 4223f0c004..dbb118cf0b 100644
--- a/playbooks/README.md
+++ b/playbooks/README.md
@@ -176,7 +176,7 @@ ansible-playbook -l install-kubernetes.yml -e kubeconfig= install-ext.yml -v --extra-vars "zowe_ext_url=https://zowe.jfrog.io/artifactory/libs-snapshot-local/org/zowe/sample-node-api/1.0.0-SNAPSHOT/sample-node-api-1.0.0-snapshot-6-20210126212259.pax"
+$ ansible-playbook -l install-ext.yml -v --extra-vars "zowe_ext_url=https://zowe.jfrog.io/artifactory/libs-snapshot-local/org/zowe/sample-node-api/3.0.0-SNAPSHOT/sample-node-api-3.0.0-snapshot-66-20241002205335.pax"
```
You can also install an extension that exists in your local directory by using the `zowe_ext_local` variable. This will transfer the file from your local to the remote server and install the extension:
diff --git a/playbooks/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/install-fmid.yml b/playbooks/install-fmid.yml
index 715838ec28..0c2602776b 100644
--- a/playbooks/install-fmid.yml
+++ b/playbooks/install-fmid.yml
@@ -60,7 +60,7 @@
# ============================================================================
# if zowe_build_remote is set, we copy the FMID from zowe_fmids_dir_remote to our work folder
- # the value of zowe_build_remote should be FMID like AZWE002
+ # the value of zowe_build_remote should be FMID like AZWE003
- name: Copy Zowe FMID files from {{ zowe_fmids_dir_remote }}/{{ zowe_build_remote }} if it has value
when: zowe_build_remote is defined
import_role:
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/custom_for_test/tasks/main.yml b/playbooks/roles/custom_for_test/tasks/main.yml
index ea85b09568..193f46397f 100644
--- a/playbooks/roles/custom_for_test/tasks/main.yml
+++ b/playbooks/roles/custom_for_test/tasks/main.yml
@@ -162,6 +162,7 @@
"zowe.launchScript.logLevel": "trace"
# # this must be commented out to avoid flooding spool
# "components.gateway.debug": "true"
+ # "components.gateway.sslDebug": "all"
# # trace java apps
# "zowe.environments.LOGGING_LEVEL_ORG_APACHE_HTTP": "TRACE"
# "zowe.environments.LOGGING_LEVEL_ORG_APACHE": "TRACE"
diff --git a/playbooks/roles/ptf/templates/HOLDDATA.jcl.j2 b/playbooks/roles/ptf/templates/HOLDDATA.jcl.j2
index dcd56f1979..927a40c9d5 100644
--- a/playbooks/roles/ptf/templates/HOLDDATA.jcl.j2
+++ b/playbooks/roles/ptf/templates/HOLDDATA.jcl.j2
@@ -1,24 +1,5 @@
-//SZWELOAD JOB
-// EXPORT SYMLIST=(TZON,TRGT)
-// SET TRGT={{ zowe_smpe_hlq_tzone }}
-// SET SMPE={{ zowe_smpe_hlq_csi }}
-// SET TZON=TZONE
-//UCLIN EXEC PGM=GIMSMP,REGION=0M,COND=(4,LT)
-//SZWELOAD DD SPACE=(TRK,(30,15,15)),
-// UNIT=SYSALLDA,
-// DISP=(MOD,CATLG),
-// DSNTYPE=LIBRARY,
-// RECFM=U,
-// LRECL=0,
-// BLKSIZE=32760,
-// DSN=&TRGT..SZWELOAD
-//SMPCSI DD DISP=OLD,DSN={{ smpe_csi }}
-//SMPCNTL DD *,SYMBOLS=JCLONLY
- SET BDY(&TZON).
- UCLIN.
- ADD DDDEF (SZWELOAD)
- DATASET(&TRGT..SZWELOAD)
- UNIT(SYSALLDA)
- WAITFORDSN
- SHR .
- ENDUCL.
+//HOLDDATA JOB
+//* This job can be customized if holddata actions are added to Zowe PTFs
+//* For example, adding a new load module to an SMP/e-managed dataset.
+//DUMMY EXEC PGM=IEFBR14
+//*
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 42d9f89aff..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} <> report.txt
- echo $RESP >> report.txt
- exit -1
-elif [ "$STATUS_NAME" = "complete" ]
-then
- echo "Workflow finished successfully."
- STATUS="FINISHED"
-fi
+until [ "$STATUS" = "FINISHED" ]; do
+ sleep 20
+
+ # Get the result of the workflow
+ RESP=$(curl -s ${WORKFLOW_URL} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
+ if [ $? -gt 0 ]; then exit -1; fi
+ STATUS_NAME=$(echo $RESP | grep -o '"statusName":".*"' | cut -f4 -d\")
+
+ if [ "$STATUS_NAME" = "in-progress" ]; then
+ echo "Workflow with SMP/E ended with an error." >>$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 e5174333d7..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} <> report.txt
- echo $RESP >> report.txt
- exit -1
-elif [ "$STATUS_NAME" = "complete" ]
-then
- echo "Workflow finished successfully."
- STATUS="FINISHED"
-fi
+until [ "$STATUS" = "FINISHED" ]; do
+ sleep 20
+
+ # Get the result of the workflow
+ RESP=$(curl -s ${WORKFLOW_URL} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
+ if [ $? -gt 0 ]; then exit -1; fi
+
+ STATUS_NAME=$(echo $RESP | grep -o '"statusName":".*"' | cut -f4 -d\")
+
+ if [ "$STATUS_NAME" = "in-progress" ]; then
+ echo "Workflow with PTFs ended with an error." >>$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 6feb2d56a7..cacd595748 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 3.0","description":"This workflow configures Zowe v3.0.",
+"location": {"dsname":"'${WORKFLOW_DSN}'(ZWEWRF02)"}},{"name":"Stand-alone Zowe API ML Configuration","description":"This workflow configures only API ML for Zowe 3.0.",
+"location": {"dsname":"'${WORKFLOW_DSN}'(ZWEAMLCF)"}},{"name":"Full Zowe server-side configuration for Zowe 3.0","description":"This workflow configures all Zowe server-side components for Zowe v3.0.",
"location": {"dsname":"'${WORKFLOW_DSN}'(ZWECONF)"}},{"name":"ZOWE Creation of CSR request workflow","description":"This workflow creates a certificate sign request.",
"location": {"dsname":"'${WORKFLOW_DSN}'(ZWECRECR)"}},{"name":"ZOWE Sign a CSR request","description":"This workflow signs the certificate sign request by a local CA.",
"location": {"dsname":"'${WORKFLOW_DSN}'(ZWESIGNC)"}},{"name":"ZOWE Load Authentication Certificate into ESM","description":"This workflow loads a signed client authentication certificate to the ESM.",
@@ -39,7 +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,133 @@ 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}." >> 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." >> report.txt
+ 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}." >> report.txt
+ 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." >> report.txt
- 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}" >> report.txt
+ 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
+echo "//CHMODZWE EXEC PGM=BPXBATCH" >>JCL
+echo "//STDOUT DD SYSOUT=*" >>JCL
+echo "//STDERR DD SYSOUT=*" >>JCL
+echo "//STDPARM DD *" >>JCL
+echo "SH set -x;set -e;" >>JCL
+echo "chmod -R 777 ${ZOWE_MOUNT};" >>JCL
+echo "/*" >>JCL
+
+sh scripts/submit_jcl.sh "$(cat JCL)"
+if [ $? -gt 0 ]; then exit -1; fi
rm JCL
# Add data set for export jobs
echo "Checking if the data set for export jobs already exists."
-RESP=`curl -s $CHECK_EXPORT_DSN_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
-DSN_COUNT=`echo $RESP | grep -o '"returnedRows":[0-9]*' | cut -f2 -d:`
-if [ $DSN_COUNT -ne 0 ]
-then
- echo "The ${EXPORT_DSN} already exist. Because there is a possibility that it contains something unwanted the script does not continue." >> report.txt
+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 +194,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 load product REST API call." >> report.txt
+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 +217,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 export REST API call." >> report.txt
+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 +244,99 @@ 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." >> report.txt
- 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" >> report.txt
+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
+sed "s|//IZUD01EX JOB (ACCOUNT),'NAME'|$JOBST1\n$JOBST2|g" EXPORT >EXPJCL0
+#sed "s|//.*gimzipInputFile.*,|EXPJCL1
+#sed "s|// FILEDATA=TEXT| archid=\"ZOS003.ZWE.PSWI.AZWE003.ZFS\"/>|g" EXPJCL1 >EXPJCL2
+#sed "s|// DD \*||g" EXPJCL2 >EXPJCL
+# sed "s|ZOS003.ZWE.PSWI.|ZWE.PSWI.|g" EXPJCL3 >EXPJCL
-echo "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
+#fi
-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
+sh scripts/submit_jcl.sh "$(cat EXPJCL0)"
+if [ $? -gt 0 ]; then exit -1; fi
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
-
-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,66 @@ touch $LOG_FILE
# Delete the Software instance
echo 'Invoking REST API to delete the first Software Instance.'
-RESP=`curl -s $DELETE_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
+RESP=$(curl -s $DELETE_SWI_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
check_response "${RESP}" $?
# Delete data set with export jobs
echo "Invoking REST API to delete ${EXPORT_DSN} data set with export jobs."
-RESP=`curl -s $EXPORT_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
+RESP=$(curl -s $EXPORT_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
check_response "${RESP}" $?
# Delete
echo "Invoking REST API to delete ${WORKFLOW_DSN} data set."
-RESP=`curl -s $WORKFLOW_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
+RESP=$(curl -s $WORKFLOW_DSN_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
check_response "${RESP}" $?
# Unmount and delete
echo "Unmounting and deleting zFS ${TMP_ZFS}."
-echo ${JOBST1} > JCL
-echo ${JOBST2} >> JCL
-echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL
-echo "//SYSTSPRT DD SYSOUT=*" >> JCL
-echo "//SYSTSOUT DD SYSOUT=*" >> JCL
-echo "//SYSTSIN DD * " >> JCL
-echo "UNMOUNT FILESYSTEM('${TMP_ZFS}') + " >> JCL
-echo "IMMEDIATE" >> JCL
-echo "/*" >> JCL
-echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL
-echo "//SYSPRINT DD SYSOUT=*" >> JCL
-echo "//SYSIN DD *" >> JCL
-echo " DELETE ${TMP_ZFS}" >> JCL
-echo "/*" >> JCL
-
-sh scripts/submit_jcl.sh "`cat JCL`"
+echo ${JOBST1} >JCL
+echo ${JOBST2} >>JCL
+echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL
+echo "//SYSTSPRT DD SYSOUT=*" >>JCL
+echo "//SYSTSOUT DD SYSOUT=*" >>JCL
+echo "//SYSTSIN DD * " >>JCL
+echo "UNMOUNT FILESYSTEM('${TMP_ZFS}') + " >>JCL
+echo "IMMEDIATE" >>JCL
+echo "/*" >>JCL
+echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL
+echo "//SYSPRINT DD SYSOUT=*" >>JCL
+echo "//SYSIN DD *" >>JCL
+echo " DELETE ${TMP_ZFS}" >>JCL
+echo "/*" >>JCL
+
+sh scripts/submit_jcl.sh "$(cat JCL)"
# Not checking results so the script doesn't fail
rm JCL
-if [ "$ZOSMF_V" = "2.3" ]
-then
# Unmount and delete
echo "Unmounting and deleting zFS ${WORK_ZFS}."
-echo ${JOBST1} > JCL
-echo ${JOBST2} >> JCL
-echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL
-echo "//SYSTSPRT DD SYSOUT=*" >> JCL
-echo "//SYSTSOUT DD SYSOUT=*" >> JCL
-echo "//SYSTSIN DD * " >> JCL
-echo "UNMOUNT FILESYSTEM('${WORK_ZFS}') + " >> JCL
-echo "IMMEDIATE" >> JCL
-echo "/*" >> JCL
-echo "//DELTZFST EXEC PGM=IDCAMS" >> JCL
-echo "//SYSPRINT DD SYSOUT=*" >> JCL
-echo "//SYSIN DD *" >> JCL
-echo " DELETE ${WORK_ZFS}" >> JCL
-echo "/*" >> JCL
-
-sh scripts/submit_jcl.sh "`cat JCL`"
+echo ${JOBST1} >JCL
+echo ${JOBST2} >>JCL
+echo "//UNMNTZFS EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL
+echo "//SYSTSPRT DD SYSOUT=*" >>JCL
+echo "//SYSTSOUT DD SYSOUT=*" >>JCL
+echo "//SYSTSIN DD * " >>JCL
+echo "UNMOUNT FILESYSTEM('${WORK_ZFS}') + " >>JCL
+echo "IMMEDIATE" >>JCL
+echo "/*" >>JCL
+echo "//DELTZFST EXEC PGM=IDCAMS" >>JCL
+echo "//SYSPRINT DD SYSOUT=*" >>JCL
+echo "//SYSIN DD *" >>JCL
+echo " DELETE ${WORK_ZFS}" >>JCL
+echo "/*" >>JCL
+
+sh scripts/submit_jcl.sh "$(cat JCL)"
# Not checking results so the script doesn't fail
rm JCL
-fi
echo "Invoking REST API to unmount Zowe zFS ${ZOWE_ZFS} from its mountpoint."
-RESP=`curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$UNMOUNT_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
+RESP=$(curl -s $ACTION_ZOWE_ZFS_URL -k -X "PUT" -d "$UNMOUNT_ZFS_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
check_response "${RESP}" $?
diff --git a/pswi/05_test.sh b/pswi/05_test.sh
index 94afd818a2..46a67a57a4 100644
--- a/pswi/05_test.sh
+++ b/pswi/05_test.sh
@@ -68,7 +68,8 @@ sh scripts/tmp_mounts.sh "${WORK_ZFS}" "${WORK_MOUNT}"
if [ $? -gt 0 ]; then exit -1; fi
# Run the deployment test
-echo " Running the deployment test for z/OSMF version 2.3"
+echo " Running the deployment test for z/OSMF version ${ZOSMF_V}"
pip install requests
+
python scripts/deploy_test_2_3.py
diff --git a/pswi/06_test_cleanup.sh b/pswi/06_test_cleanup.sh
index f426f11ed5..6f8ee19f06 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 ""
@@ -15,171 +15,113 @@ echo "Portable Software Instance :" $PSWI
echo "Software instance name :" $DEPLOY_NAME
echo "Temporary zFS :" $TMP_ZFS
echo "Work zFS :" $WORK_ZFS # For z/OSMF v2.3
-echo "Directory for logs :" $LOGDIR
+echo "Directory for logs :" $LOG_DIR
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
- fi
- 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
- else
- echo "REST API call was successful."
- fi
-
- 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`
-check_response "${RESP}" $?
-
-if [ "$ZOSMF_V" = "2.4" ]
-then
-
-# 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}" $?
-fi
+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)
+sh scripts/check_response.sh "${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
# 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 "//UNMNTZF2 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 " 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."
-
-# 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
-
-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
+
+# 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
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 5a9e03bfa7..50c719367d 100755
--- a/pswi/PSWI-marist.sh
+++ b/pswi/PSWI-marist.sh
@@ -1,5 +1,4 @@
-set -x
-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"
@@ -10,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"
@@ -31,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:\/\/}
@@ -42,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" >> report.txt
+ echo "zowe-smpe file not found" >>"$LOG_DIR/report.txt"
exit -1
fi
@@ -74,7 +75,7 @@ else
if [ -f ../.pax/${FMID}.zip ]; then
unzip ../.pax/${FMID}.zip -d unzipped
else
- echo "File with FMID not found" >> report.txt
+ echo "File with FMID not found" >>"$LOG_DIR/report.txt"
exit -1
fi
fi
@@ -134,13 +135,12 @@ if [ $presmpe -eq 0 ]; then
# Test PSWI
sh 05_test.sh
test=$?
-
+
if [ $test -eq 0 ]; then
#test the workflows
sh 051_test_workflows.sh
wf_test=$?
fi
-
# Cleanup after the test
sh 06_test_cleanup.sh
fi
@@ -165,19 +165,19 @@ echo ""
echo ""
if [ $smpe -ne 0 ] || [ $ptf -ne 0 ] || [ $create -ne 0 ] || [ $test -ne 0 ] || [ $presmpe -ne 0 ] || [ $wf_test -ne 0 ]; then
- echo "Build unsuccessful!" >> report.txt
+ echo "Build unsuccessful!" >>"$LOG_DIR/report.txt"
if [ $presmpe -ne 0 ]; then
- echo "Pre-SMP/E wasn't successful." >> report.txt
+ echo "Pre-SMP/E wasn't successful." >>"$LOG_DIR/report.txt"
elif [ $smpe -ne 0 ]; then
- echo "SMP/E wasn't successful." >> report.txt
+ echo "SMP/E wasn't successful." >>"$LOG_DIR/report.txt"
elif [ $ptf -ne 0 ]; then
- echo "Applying PTFs wasn't successful." >> report.txt
+ echo "Applying PTFs wasn't successful." >>"$LOG_DIR/report.txt"
elif [ $create -ne 0 ]; then
- echo "Creation of PSWI wasn't successful." >> report.txt
+ echo "Creation of PSWI wasn't successful." >>"$LOG_DIR/report.txt"
elif [ $test -ne 0 ]; then
- echo "Testing of PSWI wasn't successful." >> report.txt
+ echo "Testing of PSWI wasn't successful." >>"$LOG_DIR/report.txt"
elif [ $wf_test -ne 0 ]; then
- echo "Workflow testing wasn't successful." >> report.txt
+ echo "Workflow testing wasn't successful." >>"$LOG_DIR/report.txt"
fi
exit -1
else
diff --git a/pswi/ZWECONF_test.sh b/pswi/ZWECONF_test.sh
index 346c997e45..2fb2696dc3 100755
--- a/pswi/ZWECONF_test.sh
+++ b/pswi/ZWECONF_test.sh
@@ -1,24 +1,27 @@
-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 JOBNAME="ZWECONF1"
export HOST=${ZOSMF_URL#https:\/\/}
export BASE_URL="${ZOSMF_URL}:${ZOSMF_PORT}"
+CURR_TIME=$(date +%s)
+export LOG_DIR="logs/$CURR_TIME"
+mkdir -p $LOG_DIR
WORK_MOUNT="/tmp"
echo "Changing runtime path in ZWECONF.properties."
cp ../workflows/files/ZWECONF.properties ./ZWECONF.properties
-sed "s|runtimeDirectory=|runtimeDirectory=${WORK_MOUNT}|g" ./ZWECONF.properties > _ZWECONF
-sed "s|java_home=|java_home=#delete_me#|g" _ZWECONF > ZWECONF
-sed "s|node_home=|node_home=#delete_me#|g" ZWECONF > _ZWECONF
+sed "s|runtimeDirectory=|runtimeDirectory=${WORK_MOUNT}|g" ./ZWECONF.properties >_ZWECONF
+sed "s|java_home=|java_home=#delete_me#|g" _ZWECONF >ZWECONF
+sed "s|node_home=|node_home=#delete_me#|g" ZWECONF >_ZWECONF
echo "Changing the configuration workflow to be fully automated."
cp ../workflows/files/ZWECONF.xml ./ZWECONF.xml
-sed "s|false|true|g" ./ZWECONF.xml > ZWECONFX
+sed "s|false|true|g" ./ZWECONF.xml >ZWECONFX
-sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} << EOF
+sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} < JCL
-echo "/*JOBPARM SYSAFF=(${ZOSMF_SYSTEM})" >> JCL
-echo "//UNPAXDIR EXEC PGM=BPXBATCH" >> JCL
-echo "//STDOUT DD SYSOUT=*" >> JCL
-echo "//STDERR DD SYSOUT=*" >> JCL
-echo "//STDPARM DD *" >> JCL
-echo "SH set -x;set -e;" >> JCL
-echo "cd ${WORK_MOUNT};" >> JCL
-echo "iconv -f IBM-1047 -t ISO8859-1 zowe.yaml > zowe_.yaml;" >> JCL
-echo "/*" >> JCL
-
-sh scripts/submit_jcl.sh "`cat JCL`"
-if [ $? -gt 0 ];then exit -1;fi
+echo "//${ZOSMF_SYSTEM} JOB (1),'PSWI',MSGCLASS=A,REGION=0M" >JCL
+echo "/*JOBPARM SYSAFF=(${ZOSMF_SYSTEM})" >>JCL
+echo "//UNPAXDIR EXEC PGM=BPXBATCH" >>JCL
+echo "//STDOUT DD SYSOUT=*" >>JCL
+echo "//STDERR DD SYSOUT=*" >>JCL
+echo "//STDPARM DD *" >>JCL
+echo "SH set -x;set -e;" >>JCL
+echo "cd ${WORK_MOUNT};" >>JCL
+echo "iconv -f IBM-1047 -t ISO8859-1 zowe.yaml > zowe_.yaml;" >>JCL
+echo "/*" >>JCL
+
+sh scripts/submit_jcl.sh "$(cat JCL)"
+if [ $? -gt 0 ]; then exit -1; fi
rm JCL
-sshpass -p${ZOSMF_PASS} sftp -o HostKeyAlgorithms=+ssh-rsa -o BatchMode=no -o StrictHostKeyChecking=no -o PubkeyAuthentication=no -b - -P ${ZZOW_SSH_PORT} ${ZOSMF_USER}@${HOST} << 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} < diff.txt || true
+diff example-zowe.yaml zowe_.yaml >diff.txt || true
+
+diff diff.txt scripts/base_diff.txt >final_diff.txt || true
+
+concat=$(cat final_diff.txt)
-diff --ed diff.txt scripts/base_diff.txt > final_diff.txt
+if [ -n "$concat" ]
+then
+ echo "There are some discrepancies between the example-zowe.yaml and the zowe.yaml created by ZWECONF.xml workflow."
+ echo "Please add to or delete from the ZWECONF.xml workflow what needs or doesn't need to be there."
+ echo "E.g. if there is a new variable you need to add it first to the workflow variables, then add the variable to the"
+ echo "'main_variables' step and then also to the step where the zowe.yaml is created."
+ echo "If there was added/deleted just a comment in the example-zowe.yaml please add it also to the workflow so"
+ echo "this step is not failing."
+ echo "Here is the output from the diff command:" # They will surely know what is diff cmd, right
+ while read -r line; do
+ if [[ "$line" =~ ^\< ]]; then
+ echo $line >> final_final_diff.txt
+ fi
+ done # Security related configurations. This setup is optional.
+> security:
+> # security product name. Can be RACF, ACF2 or TSS
+> product: RACF
+> # security group name
+> groups:
+> # Zowe admin user group
+> admin: ZWEADMIN
+> # Zowe STC group
+> stc: ZWEADMIN
+> # Zowe SysProg group
+> sysProg: ZWEADMIN
+> # security user name
+> users:
+> # Zowe runtime user name of main service
+> zowe: ZWESVUSR
+> # Zowe runtime user name of ZIS
+> zis: ZWESIUSR
+> # STC names
+> stcs:
+> # STC name of Zowe main service
+> zowe: ZWESLSTC
+> # STC name of Zowe ZIS
+> zis: ZWESISTC
+> # STC name of Zowe ZIS Auxiliary Server
+> aux: ZWESASTC
+100,103c100,103
+< certificate:
+< # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS
+< type: PKCS12
+< pkcs12:
+---
+> # certificate:
+> # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS
+> # type:
+> # pkcs12:
+106c106
+< directory: /var/zowe/keystore
+---
+> # directory:
+281c281
+< runtimeDirectory: ""
+---
+> runtimeDirectory: "/tmp"
+456c456
+< home: ""
+---
+> home: "#delete_me#"
+471c471
+< home: ""
+---
+> home: "#delete_me#"
diff --git a/pswi/scripts/check_response.sh b/pswi/scripts/check_response.sh
index b589cf88d2..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 >> report.txt
+
+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." >> report.txt
- echo $RESP >> report.txt
+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 7163577ce5..db4f94e85e 100644
--- a/pswi/scripts/deploy_test_2_3.py
+++ b/pswi/scripts/deploy_test_2_3.py
@@ -4,48 +4,55 @@
import os
import glob
+
class Deploy_test:
-
- def __init__(self, url, user, password, system, hlq, jobst1, jobst2, volume, tzone, dzone, new_mountpoint, pswi_path, work_mount, swi_name):
-
- izudurl = "{0}/zosmf/restfiles/fs{1}/IZUD00DF.json".format(url, pswi_path)
- self.headers = {'X-CSRF-ZOSMF-HEADER': ''}
- resp = requests.get(izudurl, headers=self.headers, auth=(user, password), verify=False)
-
- izud = json.loads(resp.text)
- # Set variables
- self.url = url
- self.user = user
- self.password = password
- self.system = system
- self.hlq = hlq.upper()
- self.jobst1 = jobst1 + "\n"
- self.jobst2 = jobst2 + "\n"
- self.volume = volume.upper()
- self.pswi_path = pswi_path
- self.tzone = tzone.upper()
- self.dzone = dzone.upper()
- self.new_mountp = new_mountpoint
-
- self.definition = izud["izud.pswi.descriptor"]
- self.datasets = self.definition["datasets"]
- self.swi_name = swi_name
-
- for dataset in self.datasets:
- if dataset["zonedddefs"] is not None:
- for zonedddef in dataset["zonedddefs"]:
- for dddef in zonedddef["dddefs"]:
- if dddef["path"] is not None:
- self.no_dddef = dddef["dddef"]
- self.old_mountp = dataset["mountpoint"]
-
- for zone in self.definition["zones"]:
- if zone["type"] == "TARGET":
- self.target = zone["name"]
- elif zone["type"] == "DLIB":
- self.dlib = zone["name"]
-
- self.job1 = """//GIMUNZIP EXEC PGM=GIMUNZIP,PARM='HASH=NO'
+
+ def __init__(self, url, user, password, system, hlq, jobst1, jobst2, volume, tzone, dzone, new_mountpoint, pswi_path,
+ work_mount, swi_name):
+
+ izudurl = "{0}/zosmf/restfiles/fs{1}/IZUD00DF.json".format(url, pswi_path)
+ self.headers = {'X-CSRF-ZOSMF-HEADER': ''}
+ resp = requests.get(izudurl, headers=self.headers, auth=(user, password), verify=False)
+
+ izud = json.loads(resp.text)
+ # Set variables
+ self.url = url
+ self.user = user
+ self.password = password
+ self.system = system
+ self.hlq = hlq.upper()
+ self.jobst1 = jobst1 + "\n"
+ self.jobst2 = jobst2 + "\n"
+ self.volume = volume.upper()
+ self.pswi_path = pswi_path
+ self.tzone = tzone.upper()
+ self.dzone = dzone.upper()
+ self.new_mountp = new_mountpoint
+
+ self.definition = izud["izud.pswi.descriptor"]
+ self.datasets = self.definition["datasets"]
+ self.work_mount = work_mount
+ self.swi_name = swi_name
+ self.version = int(self.definition["version"])
+ for dataset in self.datasets:
+ if dataset["zonedddefs"] is not None:
+ for zonedddef in dataset["zonedddefs"]:
+ for dddef in zonedddef["dddefs"]:
+ if dddef["path"] is not None:
+ self.no_dddef = dddef["dddef"]
+ self.old_mountp = dataset["mountpoint"]
+ self.tracks = int(dataset["tracks"])
+ self.secondary = int(dataset["secondary"])
+ self.new_zfs = self.new_name(dataset["dsname"])
+ self.zfs_archid = dataset["archid"]
+
+ for zone in self.definition["zones"]:
+ if zone["type"] == "TARGET":
+ self.target = zone["name"]
+ elif zone["type"] == "DLIB":
+ self.dlib = zone["name"]
+
+ self.job1 = """//GIMUNZIP EXEC PGM=GIMUNZIP,PARM='HASH=NO'
//SYSUT3 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SYSUT4 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
//SMPWKDIR DD PATH='{0}/'
@@ -56,15 +63,15 @@ def __init__(self, url, user, password, system, hlq, jobst1, jobst2, volume, tzo
//SYSIN DD *
-""".format(work_mount,self.pswi_path,self.volume)
- self.job1_end = """
+""".format(self.work_mount, self.pswi_path, self.volume)
+ self.job1_end = """
/*
"""
- self.job2 = """//RENAME1 EXEC PGM=IDCAMS,REGION=0M
+ self.job2 = """//RENAME1 EXEC PGM=IDCAMS,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
"""
- self.job3 = """//UPDZONES EXEC PGM=GIMSMP,REGION=0M,
+ self.job3 = """//UPDZONES EXEC PGM=GIMSMP,REGION=0M,
// PARM='CSI={0}'
//SMPLOG DD SYSOUT=*
//SMPLOGA DD SYSOUT=*
@@ -74,7 +81,7 @@ def __init__(self, url, user, password, system, hlq, jobst1, jobst2, volume, tzo
//SMPPTS DD UNIT=SYSALLDA,SPACE=(TRK,(1,1,5))
//SMPCNTL DD *
""".format(self.new_name(self.definition["globalzone"]))
- self.job3_global = """ SET BOUNDARY(GLOBAL).
+ self.job3_global = """ SET BOUNDARY(GLOBAL).
UCLIN.
REP GLOBALZONE
ZONEINDEX(
@@ -82,42 +89,151 @@ def __init__(self, url, user, password, system, hlq, jobst1, jobst2, volume, tzo
({1},{2},DLIB)
).
""".format(self.tzone, self.dzone, self.new_name(self.definition["globalzone"]))
-
- self.job3_target = """ SET BOUNDARY({0}).
+
+ self.job3_target = """ SET BOUNDARY({0}).
UCLIN.
REP TZONE({0}) RELATED({1}).
""".format(self.tzone, self.dzone)
-
- self.job3_path = """ ZONEEDIT DDDEF.
+
+ self.job3_path = ""
+ if self.version >= 9:
+ self.job3_path = """ REP DDDEF({0}) PATH(
+ '{1}'
+ ).
+""".format(self.no_dddef, self.new_mountp + "/")
+ else:
+ self.job3_path = """ ZONEEDIT DDDEF.
CHANGE PATH(
'{0}'*,
'{1}'*).
ENDZONEEDIT.
""".format(self.old_mountp, self.new_mountp)
- self.job3_endzone = " ENDUCL.\n"
- self.job3_distribution = """ SET BOUNDARY({0}).
+ self.job3_endzone = " ENDUCL.\n"
+ self.job3_distribution = """ SET BOUNDARY({0}).
UCLIN.
REP DZONE({0}) RELATED({1}).
""".format(self.dzone, self.tzone)
+
+ self.zfs_job = """//ALLOCDS EXEC PGM=IDCAMS,COND=(0,LT)
+//SYSPRINT DD SYSOUT=*
+//SYSIN DD *
+ DEFINE CLUSTER( +
+ NAME({0}) +
+ CYLINDERS({1},{2}) +
+ VOLUME({3}) +
+ ZFS +
+ SHAREOPTIONS(2))
+/*
+//MOUNT1 EXEC PGM=BPXBATCH,COND=(0,LT)
+//STDOUT DD SYSOUT=*
+//STDERR DD SYSOUT=*
+//STDPARM DD *
+SH ;
+dsn='{0}';
+mpdir={4}/$dsn;
+if [ -e "$mpdir" ]; then;
+ rm -r $mpdir;
+fi;
+if [ ! -e "$mpdir" ]; then;
+ echo "Work directory $mpdir will be created.";
+ umask 077 ;
+ mkdir -p -m 700 "$mpdir";
+ rc=$?;
+ if [ $rc -ne 0 ]; then;
+ echo "** mkdir command failure: rc=$rc";
+ exit $rc;
+ fi;
+fi;
+echo "Format the file system $dsn.";
+zfsadm format -aggregate $dsn;
+rc=$?;
+if [ $rc -ne 0 ]; then;
+ echo "** zfsadm format command failure: rc=$rc";
+ exit $rc;
+fi;
+echo "Mount $dsn on $mpdir.";
+/usr/sbin/mount -t ZFS -s nosecurity -f $dsn $mpdir;
+if [ $rc -ne 0 ]; then;
+ echo "** mount command failure: rc=$rc";
+ exit $rc;
+fi;
+mkdir -p {4}/workdir;
+/*
+//UNZIP EXEC PGM=GIMUNZIP,PARM='HASH=NO',COND=(0,LT)
+//SYSUT3 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
+//SYSUT4 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1))
+//SMPWKDIR DD PATH='{4}/workdir'
+//SMPOUT DD SYSOUT=*
+//SYSPRINT DD SYSOUT=*
+//SMPDIR DD PATHDISP=KEEP,
+// PATH='{5}'
+//SYSIN DD *
+
+
+
+/*
+ """.format(self.new_zfs + ".#", int(self.tracks / 15), int(self.secondary / 15), self.volume, self.work_mount,
+ self.pswi_path, self.zfs_archid, self.work_mount + "/" + self.new_zfs + ".#")
+
+ def create_zfs(self):
+ new_zfs = {"cylsPri": int(self.tracks / 15), "cylsSec": int(self.secondary / 15), "volumes": [self.volume]}
+ new_zfs_url = "{0}/zosmf/restfiles/mfs/zfs/{1}".format(self.url, self.new_zfs + ".%23")
+ new_zfs_resp = requests.post(new_zfs_url, headers=self.headers, auth=(user, password), data=json.dumps(new_zfs),
+ verify=False)
+ if new_zfs_resp.status_code != 201:
+ print("Status code: {0}".format(new_zfs_resp.status_code))
+ raise requests.exceptions.RequestException(new_zfs_resp.text)
+
+ def create_directory(self, dir_name):
+ dir_name = self.work_mount + "/" + self.new_zfs + ".%23"
+ dir_parms = {"type": "directory", "mode": "rwxr-xrwx"}
+ dir_url = "{0}/zosmf/restfiles/fs{1}".format(self.url, dir_name)
+ dir_resp = requests.post(dir_url, headers=self.headers, auth=(user, password), data=json.dumps(dir_parms),
+ verify=False)
+
+ if dir_resp.status_code != 201:
+ print("Status code: {0}".format(dir_resp.status_code))
+ raise requests.exceptions.RequestException(dir_resp.text)
+
+ def mount(self, dir=None, zfs=None, action="mount"):
+ if dir is None and zfs is None:
+ dir = self.work_mount + "/" + self.new_zfs + ".#"
+ zfs = self.new_zfs + ".%23"
+ action = "unmount"
+ elif dir is None or zfs is None:
+ raise TypeError("Wrong arguments")
+
+ mount_parms = {"action": action, "mount-point": dir, "fs-type": "zFS", "mode": "rdwr"}
+ mount_url = "{0}/zosmf/restfiles/mfs/{1}".format(self.url, zfs)
+ mount_resp = requests.put(mount_url, headers=self.headers, auth=(user, password), data=json.dumps(mount_parms),
+ verify=False)
+
+ if mount_resp.status_code != 204:
+ print("Status code: {0}".format(mount_resp.status_code))
+ raise requests.exceptions.RequestException(mount_resp.text)
- def archdef(self, dataset):
- if dataset["dsname"].endswith(".CSI"):
- new_name = self.new_name(dataset["dsname"])
- else:
- new_name = self.new_name(dataset["dsname"]) + ".#"
- return """= 9:
+ return ""
+ else:
+ new_name = self.new_name(dataset["dsname"]) + ".#"
+ return """
""".format(dataset["archid"], new_name, self.volume)
-
- def new_name(self, dsname):
- return self.hlq + dsname[dsname.rfind("."):]
-
- def listcat(self, dataset):
- final_name = self.new_name(dataset)
- new_name = final_name + ".#"
- lstcat = """ LISTCAT -
+
+ def new_name(self, dsname):
+ return self.hlq + dsname[dsname.rfind("."):]
+
+ def listcat(self, dataset):
+ final_name = self.new_name(dataset)
+ new_name = final_name + ".#"
+ lstcat = """ LISTCAT -
ENTRY({0})
IF LASTCC = 0 THEN DO
ALTER -
@@ -127,149 +243,160 @@ def listcat(self, dataset):
IF LASTCC = 0 THEN SET MAXCC = 0
ELSE CANCEL
""".format(new_name, final_name)
- if dataset.endswith(".ZFS"):
- self.zfs = final_name
- zfs = """
+ if dataset.endswith(".ZFS"):
+ self.zfs = final_name
+ zfs = """
ALTER -
{0}.* -
NEWNAME({1}.*)""".format(new_name, final_name)
- return lstcat.replace("|zfs|",zfs)
- else:
- return lstcat.replace("|zfs|", "")
-
- def zone_template(self, dataset, zone):
- dddef_templ = ""
- if dataset["zonedddefs"] is not None:
- for zoneddef in dataset["zonedddefs"]:
- if zoneddef["zone"] == zone:
- for dddef in zoneddef["dddefs"]:
- if dddef["dddef"] == self.no_dddef:
- continue
- dddef_templ = dddef_templ + """ REP DDDEF({0})
+ return lstcat.replace("|zfs|", zfs)
+ else:
+ return lstcat.replace("|zfs|", "")
+
+ def zone_template(self, dataset, zone):
+ dddef_templ = ""
+ if dataset["zonedddefs"] is not None:
+ for zoneddef in dataset["zonedddefs"]:
+ if zoneddef["zone"] == zone:
+ for dddef in zoneddef["dddefs"]:
+ if dddef["dddef"] == self.no_dddef:
+ continue
+ dddef_templ = dddef_templ + """ REP DDDEF({0})
DATASET({1})
VOLUME() UNIT().
-""".format(dddef["dddef"],self.new_name(dataset["dsname"]))
- return dddef_templ
-
- def first_job(self):
- jcl = self.jobst1 + self.jobst2 + self.job1
- for dataset in self.datasets:
- jcl = jcl + self.archdef(dataset)
- return jcl + self.job1_end
-
- def second_job(self):
- jcl = self.jobst1 + self.jobst2 + self.job2
- for dataset in self.datasets:
- if dataset["dsname"].endswith(".CSI"):
- continue
- jcl = jcl + self.listcat(dataset["dsname"])
- return jcl + "//*"
-
- def third_job(self):
- jcl = self.jobst1 + self.jobst2 + self.job3 + self.job3_global
- for dataset in self.datasets:
- jcl = jcl + self.zone_template(dataset, "GLOBAL")
- jcl = jcl + self.job3_endzone + self.job3_target
- for dataset in self.datasets:
- jcl = jcl + self.zone_template(dataset, self.target)
- jcl = jcl + self.job3_endzone + self.job3_path + self.job3_distribution
- for dataset in self.datasets:
- jcl = jcl + self.zone_template(dataset, self.dlib)
- return jcl + self.job3_endzone + "/*"
-
- def create_swi(self):
- mount_parms = {"action": "mount", "mount-point": self.new_mountp, "fs-type": "zFS", "mode": "rdwr"}
- mount_url = "{0}/zosmf/restfiles/mfs/{1}".format(self.url, self.zfs)
- mount_resp = requests.put(mount_url, headers=self.headers, auth=(user, password), data=json.dumps(mount_parms),
- verify=False)
- if mount_resp.status_code != 204:
- print("Status code: {0}".format(mount_resp.status_code))
- raise requests.exceptions.RequestException(mount_resp.text)
-
- parms = {
- "name": self.swi_name,
- "system": self.system,
- "description": "Zowe Deploy test",
- "globalzone": self.new_name(self.definition["globalzone"]),
- "targetzones": [self.target],
- "workflows": [
- {"name": "ZOWE Mount Workflow",
- "description": "This workflow performs mount action of ZOWE zFS.",
- "location": {"dsname": self.hlq + ".WORKFLOW(ZWEWRF02)"}},
- {"name": "ZOWE Configuration of Zowe 3.0",
- "description": "This workflow configures Zowe v3.0.",
- "location": {"dsname": self.hlq + ".WORKFLOW(ZWECONF)"}},
- {"name":"ZOWE Creation of CSR request workflow",
- "description":"This workflow creates a certificate sign request.",
- "location": {"dsname": self.hlq + ".WORKFLOW(ZWECRECR)"}},
- {"name":"ZOWE Sign a CSR request",
- "description":"This workflow signs the certificate sign request by a local CA.",
- "location": {"dsname": self.hlq + ".WORKFLOW(ZWESIGNC)"}},
- {"name":"ZOWE Load Authentication Certificate into ESM",
- "description":"This workflow loads a signed client authentication certificate to the ESM.",
- "location": {"dsname": self.hlq + ".WORKFLOW(ZWELOADC)"}},
- {"name":"ZOWE Define key ring and certificates",
- "description":"This workflow defines key ring and certificates for Zowe.",
- "location": {"dsname": self.hlq + ".WORKFLOW(ZWEKRING)"}}
- ]
- }
- swi_url = "{0}/zosmf/swmgmt/swi".format(self.url)
- swi_resp = requests.post(swi_url, headers=self.headers, auth=(user, password), data=json.dumps(parms), verify=False)
- if swi_resp.status_code != 200:
- raise requests.exceptions.RequestException(swi_resp.text)
-
- prod_url = "{0}/zosmf/swmgmt/swi/{1}/{2}/products".format(self.url, self.system, self.swi_name)
- prod_resp = requests.put(prod_url, headers=self.headers, auth=(user, password), verify=False)
- if prod_resp.status_code != 202:
- raise requests.exceptions.RequestException(prod_resp.text)
- status = ""
- while status != "complete":
- starus_url = prod_resp.json()["statusurl"]
- status_resp= requests.get(starus_url, headers=self.headers, auth=(user, password), verify=False)
- if status_resp.status_code != 200:
- raise requests.exceptions.RequestException(status_resp.text)
- status = status_resp.json()["status"]
-
+""".format(dddef["dddef"], self.new_name(dataset["dsname"]))
+ return dddef_templ
+
+ def first_job(self):
+ jcl = self.jobst1 + self.jobst2 + self.job1
+ for dataset in self.datasets:
+ jcl = jcl + self.archdef(dataset)
+ return jcl + self.job1_end
+
+ def zfsInstall_job(self):
+ return self.jobst1 + self.jobst2 + self.zfs_job
+
+ def second_job(self):
+ jcl = self.jobst1 + self.jobst2 + self.job2
+ for dataset in self.datasets:
+ if dataset["dsname"].endswith(".CSI"):
+ continue
+ jcl = jcl + self.listcat(dataset["dsname"])
+ return jcl + "//*"
+
+ def third_job(self):
+ jcl = self.jobst1 + self.jobst2 + self.job3 + self.job3_global
+ for dataset in self.datasets:
+ jcl = jcl + self.zone_template(dataset, "GLOBAL")
+ jcl = jcl + self.job3_endzone + self.job3_target
+ for dataset in self.datasets:
+ jcl = jcl + self.zone_template(dataset, self.target)
+ if self.version >= 9:
+ jcl = jcl + self.job3_path + self.job3_endzone + self.job3_distribution
+ else:
+ jcl = jcl + self.job3_endzone + self.job3_path + self.job3_distribution
+ for dataset in self.datasets:
+ jcl = jcl + self.zone_template(dataset, self.dlib)
+ return jcl + self.job3_endzone + "/*"
+
+ def create_swi(self):
+ self.mount(self.new_mountp, self.zfs, "mount")
+
+ parms = {
+ "name": self.swi_name,
+ "system": self.system,
+ "description": "Zowe Deploy test",
+ "globalzone": self.new_name(self.definition["globalzone"]),
+ "targetzones": [self.target],
+ "workflows": [
+ {"name": "ZOWE Mount Workflow",
+ "description": "This workflow performs mount action of ZOWE zFS.",
+ "location": {"dsname": self.hlq + ".WORKFLOW(ZWEWRF02)"}},
+ {"name": "Stand-alone Zowe API ML Configuration",
+ "description": "This workflow configures only API ML for Zowe 3.0.",
+ "location": {"dsname": self.hlq + ".WORKFLOW(ZWEAMLCF)"}},
+ {"name": "Full Zowe server-side configuration for Zowe 3.0",
+ "description": "This workflow configures all Zowe server-side components for Zowe v3.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)"}},
+ {"name": "ZOWE Sign a CSR request",
+ "description": "This workflow signs the certificate sign request by a local CA.",
+ "location": {"dsname": self.hlq + ".WORKFLOW(ZWESIGNC)"}},
+ {"name": "ZOWE Load Authentication Certificate into ESM",
+ "description": "This workflow loads a signed client authentication certificate to the ESM.",
+ "location": {"dsname": self.hlq + ".WORKFLOW(ZWELOADC)"}},
+ {"name": "ZOWE Define key ring and certificates",
+ "description": "This workflow defines key ring and certificates for Zowe.",
+ "location": {"dsname": self.hlq + ".WORKFLOW(ZWEKRING)"}}
+ ]
+ }
+ swi_url = "{0}/zosmf/swmgmt/swi".format(self.url)
+ swi_resp = requests.post(swi_url, headers=self.headers, auth=(user, password), data=json.dumps(parms), verify=False)
+ if swi_resp.status_code != 200:
+ raise requests.exceptions.RequestException(swi_resp.text)
+
+ prod_url = "{0}/zosmf/swmgmt/swi/{1}/{2}/products".format(self.url, self.system, self.swi_name)
+ prod_resp = requests.put(prod_url, headers=self.headers, auth=(user, password), verify=False)
+ if prod_resp.status_code != 202:
+ raise requests.exceptions.RequestException(prod_resp.text)
+ status = ""
+ while status != "complete":
+ starus_url = prod_resp.json()["statusurl"]
+ status_resp = requests.get(starus_url, headers=self.headers, auth=(user, password), verify=False)
+ if status_resp.status_code != 200:
+ raise requests.exceptions.RequestException(status_resp.text)
+ status = status_resp.json()["status"]
+
+
if __name__ == "__main__":
- url = os.environ['ZOSMF_URL'] + ":" + os.environ['ZOSMF_PORT'] # Url and port of the z/OSMF server
- # # auth
- user = os.environ['ZOSMF_USER'] # z/OSMF user
- password = os.environ['ZOSMF_PASS'] # Password for z/OSMF
- system = os.environ['ZOSMF_SYSTEM'] # z/OSMF nickname for the system where the PSWI will be deployed
- hlq = os.environ['TEST_HLQ'] # HLQ for new datasets
- mount = os.environ['TEST_MOUNT'] # New mount point for ZFS #newmount
- jobst1 = os.environ['JOBST1'] # Job statement
- jobst2 = os.environ['JOBST2'] # Sysaff
- volume = os.environ['VOLUME'] # Volum where to store datasets
- work_path = os.environ['WORK_MOUNT'] # SMP work directory
- tzone = os.environ['TZONE'] # Target zone
- dzone = os.environ['DZONE'] # Dlib
- pswi_path = os.environ['EXPORT'] # Path to unzipped PSWI
- swi_name = os.environ['DEPLOY_NAME'] # Name of the software instance to be created
-
- deploy = Deploy_test(url, user, password, system, hlq, jobst1, jobst2, volume, tzone, dzone, mount, pswi_path, work_path, swi_name)
+ url = os.environ['ZOSMF_URL'] + ":" + os.environ['ZOSMF_PORT'] # Url and port of the z/OSMF server
+ # # auth
+ user = os.environ['ZOSMF_USER'] # z/OSMF user
+ password = os.environ['ZOSMF_PASS'] # Password for z/OSMF
+ system = os.environ['ZOSMF_SYSTEM'] # z/OSMF nickname for the system where the PSWI will be deployed
+ hlq = os.environ['TEST_HLQ'] # HLQ for new datasets
+ mount = os.environ['TEST_MOUNT'] # New mount point for ZFS #newmount
+ jobst1 = os.environ['JOBST1'] # Job statement
+ jobst2 = os.environ['JOBST2'] # Sysaff
+ volume = os.environ['VOLUME'] # Volum where to store datasets
+ work_path = os.environ['WORK_MOUNT'] # SMP work directory
+ tzone = os.environ['TZONE'] # Target zone
+ dzone = os.environ['DZONE'] # Dlib
+ pswi_path = os.environ['EXPORT'] # Path to unzipped PSWI
+ swi_name = os.environ['DEPLOY_NAME'] # Name of the software instance to be created
- first = deploy.first_job()
- second = deploy.second_job()
- third = deploy.third_job()
-
- try:
- submit_jcl = glob.glob('./*/submit_jcl.sh')[0]
- except IndexError:
- raise FileNotFoundError("\"submit_jcl.sh\" for submitting JCLs wasn't found. Make sure that it is in a subfolder of {0}".format(os.getcwd()))
-
- ec1 = subprocess.call(["sh", submit_jcl , first])
- if ec1 != 0:
- raise OSError("The first job failed.")
- ec2 = subprocess.call(["sh", submit_jcl, second])
- if ec2 != 0:
- raise OSError("The second job failed.")
- ec3 = subprocess.call(["sh", submit_jcl, third])
- if ec3 != 0:
- raise OSError("The third job failed.")
-
- deploy.create_swi()
- print("Portable software instance deployed successfully!")
+ deploy = Deploy_test(url, user, password, system, hlq, jobst1, jobst2, volume, tzone, dzone, mount, pswi_path,
+ work_path, swi_name)
+
+ unzip_job = deploy.first_job()
+ install_zfs = deploy.zfsInstall_job()
+ rename_datasets = deploy.second_job()
+ update_csi = deploy.third_job()
+
+ try:
+ submit_jcl = glob.glob('./*/submit_jcl.sh')[0]
+ except IndexError:
+ raise FileNotFoundError(
+ "\"submit_jcl.sh\" for submitting JCLs wasn't found. Make sure that it is in a subfolder of {0}".format(
+ os.getcwd()))
+
+ unzip_rc = subprocess.call(["sh", submit_jcl, unzip_job])
+ if unzip_rc != 0:
+ raise OSError("The unzip datasets job failed.")
+ install_rc = subprocess.call(["sh", submit_jcl, install_zfs])
+ if install_rc != 0:
+ raise OSError("The install zFS datasets job failed.")
+ deploy.mount() # unmount
+ rename_rc = subprocess.call(["sh", submit_jcl, rename_datasets])
+ if rename_rc != 0:
+ raise OSError("The rename datasets job failed.")
+ update_rc = subprocess.call(["sh", submit_jcl, update_csi])
+ if update_rc != 0:
+ raise OSError("The update CSI job failed.")
+ deploy.create_swi()
+ print("Portable software instance deployed successfully!")
-#todo: function for removing just the HLQ which all the old datasets have same -> needed only for internal usage
+# todo: function for removing just the HLQ which all the old datasets have same -> needed only for internal usage
diff --git a/pswi/scripts/spool_files.sh b/pswi/scripts/spool_files.sh
index ff8fd0df4f..29b8ef107c 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." >> report.txt
+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." >> report.txt
- cat $JOBNAME/$JOBID >> report.txt
+ echo "${JOBNAME} ${JOBID} failed." >>$LOG_DIR/report.txt
+ cat $LOG_DIR/jobs/output/$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 eb44340d58..9f8d55e724 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})." >> report.txt
- echo "Use different name of zFS or ${MOUNTP} for mount point." >> report.txt
+ 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." >> report.txt
- echo "Use different mount point (not ${MOUNT})." >> report.txt
- echo "Or use ${MOUNTZFS} for zFS." >> report.txt
+ 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 ${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`
+ 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 MOUNT
echo "Mounting zFS ${ZFS} to ${MOUNT} mount point with JCL because REST API doesn't allow AGGRGROW parm."
-echo ${JOBST1} > JCL
-echo ${JOBST2} >> JCL
-echo "//MKDIR EXEC PGM=BPXBATCH" >> JCL
-echo "//STDOUT DD SYSOUT=*" >> JCL
-echo "//STDERR DD SYSOUT=*" >> JCL
-echo "//STDPARM DD *" >> JCL
-echo "SH mkdir -p ${MOUNT}" >> JCL
-echo "/*" >> JCL
-echo "//MNT1ZFS1 EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >> JCL
-echo "//SYSTSPRT DD SYSOUT=*" >> JCL
-echo "//SYSTSOUT DD SYSOUT=*" >> JCL
-echo "//SYSTSIN DD * " >> JCL
-echo "MOUNT FILESYSTEM('${ZFS}') + " >> JCL
-echo "TYPE(ZFS) MODE(RDWR) + " >> JCL
-echo "PARM('AGGRGROW') + " >> JCL
-echo "MOUNTPOINT('${MOUNT}') " >> JCL
-echo "/*" >> JCL
+ echo ${JOBST1} >JCL
+ echo ${JOBST2} >>JCL
+ echo "//MKDIR EXEC PGM=BPXBATCH" >>JCL
+ echo "//STDOUT DD SYSOUT=*" >>JCL
+ echo "//STDERR DD SYSOUT=*" >>JCL
+ echo "//STDPARM DD *" >>JCL
+ echo "SH mkdir -p ${MOUNT}" >>JCL
+ echo "/*" >>JCL
+ echo "//MNT1ZFS1 EXEC PGM=IKJEFT01,REGION=4096K,DYNAMNBR=50" >>JCL
+ echo "//SYSTSPRT DD SYSOUT=*" >>JCL
+ echo "//SYSTSOUT DD SYSOUT=*" >>JCL
+ echo "//SYSTSIN DD * " >>JCL
+ echo "MOUNT FILESYSTEM('${ZFS}') + " >>JCL
+ echo "TYPE(ZFS) MODE(RDWR) + " >>JCL
+ echo "PARM('AGGRGROW') + " >>JCL
+ echo "MOUNTPOINT('${MOUNT}') " >>JCL
+ echo "/*" >>JCL
- sh scripts/submit_jcl.sh "`cat JCL`"
- if [ $? -gt 0 ];then exit -1;fi
+ sh scripts/submit_jcl.sh "$(cat JCL)"
+ if [ $? -gt 0 ]; then exit -1; fi
rm JCL
fi
diff --git a/pswi/scripts/wf_run_test.sh b/pswi/scripts/wf_run_test.sh
index e31a8e3c19..ce60402338 100755
--- a/pswi/scripts/wf_run_test.sh
+++ b/pswi/scripts/wf_run_test.sh
@@ -21,17 +21,16 @@ WF_NAME="Testing_workflows"
CREATE_WF_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows"
WF_LIST_URL="${BASE_URL}/zosmf/workflow/rest/1.0/workflows?owner=${ZOSMF_USER}&workflowName=${WF_NAME}"
-# JSONs
-if [ -n "$INPUT_FILE" ]
-then
-ADD_WORKFLOW_JSON='{"workflowName":"'$WF_NAME'",
+# JSONs
+if [ -n "$INPUT_FILE" ]; then
+ ADD_WORKFLOW_JSON='{"workflowName":"'$WF_NAME'",
"workflowDefinitionFile":"'${WF_DEF_FILE}'",
"variableInputFile":"'${INPUT_FILE}'",
"system":"'$ZOSMF_SYSTEM'",
"owner":"'$ZOSMF_USER'",
"assignToOwner" :true}'
else
-ADD_WORKFLOW_JSON='{"workflowName":"'$WF_NAME'",
+ ADD_WORKFLOW_JSON='{"workflowName":"'$WF_NAME'",
"workflowDefinitionFile":"'${WF_DEF_FILE}'",
"system":"'$ZOSMF_SYSTEM'",
"owner":"'$ZOSMF_USER'",
@@ -42,75 +41,67 @@ set -x
# Get workflowKey for the workflow owned by user
echo "Get workflowKey for the workflow if it exists."
-RESP=`curl -s $WF_LIST_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
-WFKEY=`echo $RESP | grep -o '"workflowKey":".*"' | cut -f4 -d\"`
+RESP=$(curl -s $WF_LIST_URL -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
+WFKEY=$(echo $RESP | grep -o '"workflowKey":".*"' | cut -f4 -d\")
-if [ -n "$WFKEY" ]
-then
-WORKFLOW_URL="${CREATE_WF_URL}/${WFKEY}"
+if [ -n "$WFKEY" ]; then
+ WORKFLOW_URL="${CREATE_WF_URL}/${WFKEY}"
-echo "Deleting the workflow."
-RESP=`curl -s $WORKFLOW_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
-sh scripts/check_response.sh "${RESP}" $?
+ echo "Deleting the workflow."
+ RESP=$(curl -s $WORKFLOW_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
+ sh scripts/check_response.sh "${RESP}" $?
fi
# Create workflow with REST API
echo 'Invoking REST API to create the workflow.'
-RESP=`curl -s $CREATE_WF_URL -k -X "POST" -d "$ADD_WORKFLOW_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
+RESP=$(curl -s $CREATE_WF_URL -k -X "POST" -d "$ADD_WORKFLOW_JSON" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
sh scripts/check_response.sh "${RESP}" $?
-if [ $? -gt 0 ];then exit -1;fi
-WFKEY=`echo $RESP | grep -o '"workflowKey":".*"' | cut -f4 -d\"`
+if [ $? -gt 0 ]; then exit -1; fi
+WFKEY=$(echo $RESP | grep -o '"workflowKey":".*"' | cut -f4 -d\")
WORKFLOW_URL="${CREATE_WF_URL}/${WFKEY}"
-if [ "$run" = "run" ]
-then
-# Run workflow
-echo "Invoking REST API to start the workflow."
-
-RESP=`curl -s ${WORKFLOW_URL}/operations/start -k -X "PUT" -d "{}" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
-sh scripts/check_response.sh "${RESP}" $?
-if [ $? -gt 0 ];then exit -1;fi
-STATUS=""
-until [ "$STATUS" = "FINISHED" ]
-do
-sleep 20
-
-
-# Get the result of the workflow
-RESP=`curl -s ${WORKFLOW_URL} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
-if [ $? -gt 0 ];then exit -1;fi
-STATUS_NAME=`echo $RESP | grep -o '"statusName":".*"' | cut -f4 -d\"`
-
-if [ "$STATUS_NAME" = "in-progress" ]
-then
- echo "Workflow ended with an error." >> report.txt
- echo $RESP >> report.txt
- echo "Checking if the workflow is ZWECONF" >> report.txt
- if [ "$ZWECONF" = "ZWECONF" ]
- then
- STEP_NAME=`echo $RESP | grep -o '"currentStepName":".*"' | cut -f4 -d\"`
- if [ "$STEP_NAME" = "init_zowe" ]
- then
- echo "The workflow is ZWECONF and should end in step 'init_zowe'"
+if [ "$run" = "run" ]; then
+ # Run workflow
+ echo "Invoking REST API to start the workflow."
+
+ RESP=$(curl -s ${WORKFLOW_URL}/operations/start -k -X "PUT" -d "{}" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
+ sh scripts/check_response.sh "${RESP}" $?
+ if [ $? -gt 0 ]; then exit -1; fi
+ STATUS=""
+ until [ "$STATUS" = "FINISHED" ]; do
+ sleep 20
+
+ # Get the result of the workflow
+ RESP=$(curl -s ${WORKFLOW_URL} -k -X "GET" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
+ if [ $? -gt 0 ]; then exit -1; fi
+ STATUS_NAME=$(echo $RESP | grep -o '"statusName":".*"' | cut -f4 -d\")
+
+ if [ "$STATUS_NAME" = "in-progress" ]; then
+ echo "Workflow ended with an error." >>$LOG_DIR/report.txt
+ echo $RESP >>$LOG_DIR/report.txt
+ echo "Checking if the workflow is ZWECONF" >>$LOG_DIR/report.txt
+ if [ "$ZWECONF" = "ZWECONF" ]; then
+ STEP_NAME=$(echo $RESP | grep -o '"currentStepName":".*"' | cut -f4 -d\")
+ if [ "$STEP_NAME" = "install_zowe" ]; then
+ echo "The workflow is ZWECONF and should end in step 'install_zowe', first step of 'zowe_installation_steps'"
+ STATUS="FINISHED"
+ else
+ echo "The workflow is ZWECONF but ended in different step: '$STEP_NAME'" >>$LOG_DIR/report.txt
+ exit -1
+ fi
+ else
+ echo "Workflow ended with an error and it is not ZWECONF." >>$LOG_DIR/report.txt
+ echo $RESP >>$LOG_DIR/report.txt
+ exit -1
+ fi
+ elif [ "$STATUS_NAME" = "complete" ]; then
+ echo "Workflow finished successfully."
STATUS="FINISHED"
- else
- echo "The workflow is ZWECONF but ended in different step: '$STEP_NAME'" >> report.txt
- exit -1
fi
- else
- echo "Workflow ended with an error and it is not ZWECONF." >> report.txt
- echo $RESP >> report.txt
- exit -1
- fi
-elif [ "$STATUS_NAME" = "complete" ]
-then
- echo "Workflow finished successfully."
- STATUS="FINISHED"
-fi
-done
+ done
fi
echo "Deleting the workflow."
-RESP=`curl -s $WORKFLOW_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS`
+RESP=$(curl -s $WORKFLOW_URL -k -X "DELETE" -H "Content-Type: application/json" -H "X-CSRF-ZOSMF-HEADER: A" --user $ZOSMF_USER:$ZOSMF_PASS)
sh scripts/check_response.sh "${RESP}" $?
diff --git a/schemas/manifest-schema.json b/schemas/manifest-schema.json
index ce3f234605..49cdc39ebb 100644
--- a/schemas/manifest-schema.json
+++ b/schemas/manifest-schema.json
@@ -120,6 +120,10 @@
"type": "string",
"description": "This defines extra validations that the component requires other than global validations. It is for runtime purpose, and will be automatically executed each time Zowe is started."
},
+ "preConfigure": {
+ "type": "string",
+ "description": "This defines extra configuration steps before zwe startup code performs its own configuration steps. It is for runtime purpose, and will be automatically executed each time Zowe is started."
+ },
"configure": {
"type": "string",
"description": "This defines extra configuration steps before starting the component. It is for runtime purpose, and will be automatically executed each time Zowe is started."
diff --git a/schemas/zowe-yaml-schema.json b/schemas/zowe-yaml-schema.json
index deadae3492..73747e3591 100644
--- a/schemas/zowe-yaml-schema.json
+++ b/schemas/zowe-yaml-schema.json
@@ -465,11 +465,11 @@
"description": "Customize your Zowe z/OS JES job.",
"properties": {
"name": {
- "type": "string",
+ "$ref": "/schemas/v2/server-common#zoweJobname",
"description": "Job name of Zowe primary ZWESLSTC started task."
},
"prefix": {
- "type": "string",
+ "$ref": "/schemas/v2/server-common#zoweJobname",
"description": "A short prefix to customize address spaces created by Zowe job."
}
}
diff --git a/smpe/bld/service/ptf-bucket.txt b/smpe/bld/service/ptf-bucket.txt
new file mode 100644
index 0000000000..c7884f8ddd
--- /dev/null
+++ b/smpe/bld/service/ptf-bucket.txt
@@ -0,0 +1,9 @@
+#----------------------------------------------------------------------#
+# NOTE FOR PULL REQUEST APPROVER: #
+# This file may only be updated when IBM provides more PTF numbers, or #
+# when a Release Candidate PTF is promoted. Reject ALL other updates. #
+#----------------------------------------------------------------------#
+#
+# format: - []
+UO90082 UO90083 - IO29468 IO29469 IO29470
+UO90084 UO90085 - IO29471 IO29472 IO29473
diff --git a/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts b/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts
index 8b740588ee..8a8efd8916 100644
--- a/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts
+++ b/tests/installation/src/__tests__/extended/keyring-modes/acf2-keyring.ts
@@ -18,7 +18,7 @@ import {
KEYSTORE_MODE_KEYRING,
} from '../../../constants';
-const testServer = 'marist-6';
+const testServer = 'marist-9';
const testSuiteName = 'Test convenience build installation with keystore pointing to an ACF2 keyring';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts b/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts
index f2399de380..7b91837222 100644
--- a/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts
+++ b/tests/installation/src/__tests__/extended/keyring-modes/racf-keyring.ts
@@ -18,7 +18,7 @@ import {
KEYSTORE_MODE_KEYRING,
} from '../../../constants';
-const testServer = 'marist-8';
+const testServer = 'marist-11';
const testSuiteName = 'Test convenience build installation with keystore pointing to a RACF keyring';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts b/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts
index fbd1f1f69d..b47a617dca 100644
--- a/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts
+++ b/tests/installation/src/__tests__/extended/keyring-modes/tss-keyring.ts
@@ -18,7 +18,7 @@ import {
KEYSTORE_MODE_KEYRING,
} from '../../../constants';
-const testServer = 'marist-7';
+const testServer = 'marist-10';
const testSuiteName = 'Test convenience build installation with keystore pointing to a TSS keyring';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/node-versions/node-v18.ts b/tests/installation/src/__tests__/extended/node-versions/node-v22.ts
similarity index 85%
rename from tests/installation/src/__tests__/extended/node-versions/node-v18.ts
rename to tests/installation/src/__tests__/extended/node-versions/node-v22.ts
index 4758b24904..8375055f01 100644
--- a/tests/installation/src/__tests__/extended/node-versions/node-v18.ts
+++ b/tests/installation/src/__tests__/extended/node-versions/node-v22.ts
@@ -5,7 +5,7 @@
*
* SPDX-License-Identifier: EPL-2.0
*
- * Copyright IBM Corporation 2022
+ * Copyright Zowe Contributors 2024
*/
import {
@@ -15,9 +15,8 @@ import {
} from '../../../utils';
import { TEST_TIMEOUT_CONVENIENCE_BUILD } from '../../../constants';
-// Only runs on zzow08 at time of change (04.2023). See cicd-test.yml and make_matrix.sh.
const testServer = process.env.TEST_SERVER;
-const testSuiteName = 'Test convenience build installation with node.js v18';
+const testSuiteName = 'Test convenience build installation with node.js v22';
describe(testSuiteName, () => {
beforeAll(() => {
// validate variables
@@ -33,7 +32,7 @@ describe(testSuiteName, () => {
{
'zowe_build_local': process.env['ZOWE_BUILD_LOCAL'],
'zowe_custom_for_test': 'true',
- 'zos_node_home': '/ZOWE/node/node-v18.16.0',
+ 'zos_node_home': '/ZOWE/node/node-v22.10.0',
'zowe_lock_keystore': 'false',
}
);
diff --git a/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts b/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts
index 7989dd6204..14df79ca42 100644
--- a/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/convenience/acf2.ts
@@ -18,10 +18,10 @@ import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-6
+ * @worker marist-9
*/
-// hard code to use marist-6 which we started with ACF2
-const testServer = 'marist-6';
+// hard code to use marist-9 which we started with ACF2
+const testServer = 'marist-9';
const testSuiteName = 'Test convenience build installation with ACF2';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts b/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts
index 8f5a5a4c01..58f8ca56c7 100644
--- a/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/convenience/racf.ts
@@ -18,9 +18,9 @@ import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-8
+ * @worker marist-11
*/
-const testServer = 'marist-8';
+const testServer = 'marist-11';
const testSuiteName = 'Test convenience build installation with RACF';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts b/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts
index 22f339ae6b..cd4e7a1fd8 100644
--- a/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/convenience/ts.ts
@@ -18,10 +18,10 @@ import {TEST_TIMEOUT_CONVENIENCE_BUILD} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-7
+ * @worker marist-10
*/
-// hard code to use marist-7 which we started with Top Secret
-const testServer = 'marist-7';
+// hard code to use marist-10 which we started with Top Secret
+const testServer = 'marist-10';
const testSuiteName = 'Test convenience build installation with Top Secret';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts b/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts
index 9a6e32810b..2c04aa470e 100644
--- a/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/fmid/acf2.ts
@@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_FMID} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-6
+ * @worker marist-9
*/
-// hard code to use marist-6 which we started with ACF2
-const testServer = 'marist-6';
+// hard code to use marist-9 which we started with ACF2
+const testServer = 'marist-9';
const testSuiteName = 'Test SMPE FMID installation with ACF2';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts b/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts
index a283327624..32205c4ac2 100644
--- a/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/fmid/racf.ts
@@ -18,9 +18,9 @@ import {TEST_TIMEOUT_SMPE_FMID} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-8
+ * @worker marist-11
*/
-const testServer = 'marist-8';
+const testServer = 'marist-11';
const testSuiteName = 'Test SMPE FMID installation with RACF';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts b/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts
index d274358705..d15f77074c 100644
--- a/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/fmid/ts.ts
@@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_FMID} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-7
+ * @worker marist-10
*/
-// hard code to use marist-7 which we started with Top Secret
-const testServer = 'marist-7';
+// hard code to use marist-10 which we started with Top Secret
+const testServer = 'marist-10';
const testSuiteName = 'Test SMPE FMID installation with Top Secret';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts b/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts
index 3665c08d52..c5aceb2477 100644
--- a/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/ptf/acf2.ts
@@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_PTF} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-6
+ * @worker marist-9
*/
-// hard code to use marist-6 which we started with ACF2
-const testServer = 'marist-6';
+// hard code to use marist-9 which we started with ACF2
+const testServer = 'marist-9';
const testSuiteName = 'Test SMPE PTF installation with ACF2';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts b/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts
index a796eed96c..cf9e56bd29 100644
--- a/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/ptf/racf.ts
@@ -18,9 +18,9 @@ import {TEST_TIMEOUT_SMPE_PTF} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-8
+ * @worker marist-11
*/
-const testServer = 'marist-8';
+const testServer = 'marist-11';
const testSuiteName = 'Test SMPE PTF installation with RACF';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts b/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts
index 43d08633ca..65f44cf010 100644
--- a/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts
+++ b/tests/installation/src/__tests__/extended/security-systems/ptf/ts.ts
@@ -18,10 +18,10 @@ import {TEST_TIMEOUT_SMPE_PTF} from '../../../../constants';
/**
* Define this test should run in a specific worker
*
- * @worker marist-7
+ * @worker marist-10
*/
-// hard code to use marist-7 which we started with Top Secret
-const testServer = 'marist-7';
+// hard code to use marist-10 which we started with Top Secret
+const testServer = 'marist-10';
const testSuiteName = 'Test SMPE PTF installation with Top Secret';
describe(testSuiteName, () => {
beforeAll(() => {
diff --git a/tests/installation/src/constants.ts b/tests/installation/src/constants.ts
index c60aa86853..afe1dd8e07 100644
--- a/tests/installation/src/constants.ts
+++ b/tests/installation/src/constants.ts
@@ -13,7 +13,7 @@ import * as path from 'path';
// const debug = Debug('zowe-install-test:constants');
// the FMID we will use to test PTF
-export const ZOWE_FMID = 'AZWE002';
+export const ZOWE_FMID = 'AZWE003';
// where ansible playbooks located
export const ANSIBLE_ROOT_DIR: string = path.resolve(__dirname, '../../../playbooks');
diff --git a/tests/sanity/test/cli/test-01-version.js b/tests/sanity/test/cli/test-01-version.js
index 9b52be55ed..861fde287b 100644
--- a/tests/sanity/test/cli/test-01-version.js
+++ b/tests/sanity/test/cli/test-01-version.js
@@ -28,6 +28,6 @@ describe('cli version', function() {
expect(result).to.have.property('stderr');
expect(result.stderr).to.be.empty;
- expect(result.stdout).to.match(/^7\./);
+ expect(result.stdout).to.match(/^CLI Version: 8\./);
});
});
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..d47f87945f
--- /dev/null
+++ b/workflows/files/ZWEAMLCF.xml
@@ -0,0 +1,1486 @@
+
+
+ true
+
+
+ config_apiml_zowe_30
+ Configuration of API ML for Zowe 3.0
+ Use this simplified workflow to configure API ML for Zowe 3.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.ZWEV3
+
+
+
+
+ Where Zowe STCs will be copied over
+ Where Zowe STCs will be copied over
+ zowe
+
+
+
+ USER.PROCLIB
+
+
+
+
+ Zowe PARMLIB
+ Zowe parameter library
+ zowe
+
+
+
+ IBMUSER.ZWEV3.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.ZWEV3.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.ZWEV3.SZWELOAD
+
+
+
+
+ APF authorized LOADLIB for Zowe
+ APF authorized LOADLIB for Zowe core
+ zowe
+
+
+
+ IBMUSER.ZWEV3.SZWEAUTH
+
+
+
+
+ APF authorized LOADLIB for Zowe ZIS Plugins
+ APF authorized LOADLIB for Zowe ZIS Plugins
+ zowe
+
+
+
+ IBMUSER.ZWEV3.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
+
+
+
+
+ Enable on AT-TLS on inbound calls (server)
+ Enable aware mode of inbound AT-TLS rules of all Zowe components.
+ network
+
+
+
+ false
+
+
+
+
+ Enable on AT-TLS on outbound calls (client)
+ Enable aware mode of outbound AT-TLS rules of all Zowe components.
+ network
+
+
+
+ false
+
+
+
+
+ TLS minimum version
+ The default configuration of the minimal version of a security transport protocol for inbound calls.
+ TLS settings only apply when attls=false.
+ Else you must use AT-TLS configuration for TLS customization.
+
+ network
+
+
+ TLSv1.1
+ TLSv1.2
+ TLSv1.3
+ TLSv1.2
+
+
+
+
+ TLS maximum version
+ The default configuration of the maximum version of a security transport protocol for inbound calls.
+ TLS settings only apply when attls=false.
+ Else you must use AT-TLS configuration for TLS customization.
+
+ network
+
+
+ TLSv1.1
+ TLSv1.2
+ TLSv1.3
+ TLSv1.3
+
+
+
+
+ Certificate keystore type (PKCS12, 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 for API ML ZAAS
+ Port for API ML ZAAS
+ components
+
+
+
+ 7558
+
+
+
+
+ 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
+
+
+
+
+ Port for jgroups key exchange
+ Port for jgroups key exchange. This is required if storage mode is infinispan.
+ components
+
+
+
+ 7560
+
+
+
+
+ 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
+
+ "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# This program and the accompanying materials are made available under the terms of the' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Eclipse Public License v2.0 which accompanies this distribution, and is available at' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# https://www.eclipse.org/legal/epl-v20.html' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# SPDX-License-Identifier: EPL-2.0' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Copyright Contributors to the Zowe Project.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#[[################################################################################]]#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#===============================================================================' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# This is a YAML configuration file for a Zowe instance.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# YAML is a human-friendly data serialization language for all programming languages.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# To learn more about YAML specifications, please check https://yaml.org/.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# To learn more details about the content of this file, please check https://docs.zowe.org/.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# For first time users, or for the most common use cases, please pay more' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# attention to the entries marked with "**COMMONLY_CUSTOMIZED**". A "directory" refers' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# to a directory in z/OS Unix.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# If you modify any settings listed in "zwe init --help" command, you may need to' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# re-run the "zwe init" command to make them take effect.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#===============================================================================' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Zowe global configurations' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# This section includes Zowe setup information used by `zwe install` and' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# `zwe init` command, as well as default configurations for Zowe runtime.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo 'zowe:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # These configurations are used by "zwe install" or "zwe init" commands.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' setup:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # MVS data set related configurations' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' dataset:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # where Zowe MVS data sets will be installed' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' prefix: $!{instance-zowe_setup_dataset_prefix}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # PROCLIB where Zowe STCs will be copied over' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' proclib: $!{instance-zowe_setup_dataset_proclib}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe PARMLIB' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' parmlib: $!{instance-zowe_setup_dataset_parmlib}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Holds Zowe PARMLIB members for plugins' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' parmlibMembers:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # For ZIS plugins' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zis: $!{instance-zowe_setup_dataset_libzis}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # JCL library where Zowe will store temporary JCLs during initialization' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' jcllib: $!{instance-zowe_setup_dataset_jcllib}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Utilities for use by Zowe and extensions' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' loadlib: $!{instance-zowe_setup_dataset_loadlibPlugin}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # APF authorized LOADLIB for Zowe' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' authLoadlib: $!{instance-zowe_setup_dataset_authLoadlib}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # APF authorized LOADLIB for Zowe ZIS Plugins' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' authPluginLib: $!{instance-zowe_setup_dataset_authPluginLib}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Security related configurations. This setup is optional.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' security:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # security product name. Can be RACF, ACF2 or TSS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' product: $!{instance-zowe_setup_security_product}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # security group name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' groups:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe admin user group' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' admin: $!{instance-zowe_setup_security_groups_admin}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe STC group' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' stc: $!{instance-zowe_setup_security_groups_stc}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe SysProg group' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' sysProg: $!{instance-zowe_setup_security_groups_sysProg}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # security user name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' users:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe runtime user name of main service' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zowe: $!{instance-zowe_setup_security_users_zowe}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe runtime user name of ZIS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zis: $!{instance-zowe_setup_security_users_zis}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # STC names' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' stcs:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # STC name of Zowe main service' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zowe: $!{instance-zowe_setup_security_stcs_zowe}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # STC name of Zowe ZIS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zis: $!{instance-zowe_setup_security_stcs_zis}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # STC name of Zowe ZIS Auxiliary Server' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' aux: $!{instance-zowe_setup_security_stcs_aux}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Certificate related configurations' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # There are 5 configurations cases. Please choose one from below.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>> Certificate setup scenario 1' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # PKCS12 (keystore) with Zowe generate certificates.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Type of certificate storage. Valid values are: PKCS12, JCEKS, JCECCAKS, JCERACFKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # type: $!{instance-zowe_setup_certificate_type}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # pkcs12:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Keystore directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # directory: ' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Lock the keystore directory to only accessible by Zowe runtime user and group.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # lock: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Certificate alias name. Optional, default value is localhost.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Note: please use all lower cases as alias.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # name: localhost' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Keystore password. Optional, default value is password.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # password: password' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Alias name of self-signed certificate authority. Optional, default value is local_ca.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Note: please use all lower cases as alias.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # caAlias: local_ca' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Password of keystore stored self-signed certificate authority. Optional, default value is local_ca_password.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # caPassword: local_ca_password' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Distinguished name for Zowe generated certificates. All optional.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # dname:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # caCommonName: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # commonName: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # orgUnit: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # org: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # locality: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # state: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # country: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Validity days for Zowe generated certificates' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # validity: 3650' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Domain names and IPs should be added into certificate SAN' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # If this field is not defined, `zwe init` command will use' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # `zowe.externalDomains`.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # san:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # sample domain name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - dvipa.my-company.com' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # sample IP address' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - 12.34.56.78' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # >>>> Certificate setup scenario 2' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # PKCS12 (keystore) with importing certificate generated by other CA.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # type: PKCS12' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # pkcs12:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Keystore directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # directory: /var/zowe/keystore' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Lock the keystore directory to only accessible by Zowe runtime user and group.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # lock: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Certificate alias name. Optional, default value is localhost.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Note: please use all lower cases as alias.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # name: localhost' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Keystore password. Optional, default value is password.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # password: password' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # import:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Existing PKCS12 keystore which holds the certificate issued by external CA.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # keystore: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Password of the above keystore' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # password: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Certificate alias will be imported' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Note: please use all lower cases as alias.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # alias: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # PEM format certificate authorities will also be imported and trusted.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # importCertificateAuthorities:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Path to the certificate authority signed the certificate will be imported.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # >>>> Certificate setup scenario 3' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe generated z/OS Keyring with Zowe generated certificates.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # type: JCERACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # keyring:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # keyring name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # name: ZoweKeyring' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Label of Zowe certificate. Optional, default value is localhost.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # label: localhost' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # label of Zowe CA certificate. Optional, default value is localca.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # caLabel: localca' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Distinguished name for Zowe generated certificates. All optional.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # dname:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # caCommonName: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # commonName: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # orgUnit: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # org: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # locality: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # state: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # country: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Validity days for Zowe generated certificates' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # validity: 3650' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Domain names and IPs should be added into certificate SAN' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # If this field is not defined, `zwe init` command will use' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # `zowe.externalDomains`.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # **NOTE**: due to the limitation of RACDCERT command, this field should' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # contain exactly 2 entries with the domain name and IP address.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # san:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # - dvipa.my-company.com' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # - 12.34.56.78' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # >>>> Certificate setup scenario 4' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe generated z/OS Keyring and connect to existing certificate' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # type: JCERACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # keyring:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # keyring name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # name: ZoweKeyring' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # connect:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Current owner of the existing certificate, can be SITE or an user ID.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # user: IBMUSER' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Label of the existing certificate will be connected to Zowe keyring.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # label: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # If you have other certificate authorities want to be trusted in Zowe keyring,' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # list the certificate labels here.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **NOTE**, due to the limitation of RACDCERT command, this field should' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # contain maximum 2 entries.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # importCertificateAuthorities:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # >>>> Certificate setup scenario 5' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe generated z/OS Keyring with importing certificate stored in data set' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Type of certificate storage. Valid values are: PKCS12, JCERACFKS. APIML additionally supports: JCEKS, JCECCAKS, JCECCARACFKS, or JCEHYBRIDRACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # type: JCERACFKS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # keyring:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # keyring name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # name: ZoweKeyring' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # # Label of Zowe certificate. Optional, default value is localhost.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # label: localhost' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # import:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Name of the data set holds the certificate issued by other CA.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # This data set should be in PKCS12 format and contain private key.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # dsName: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Password for the PKCS12 data set.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # password: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # VSAM configurations if you are using VSAM as Caching Service storage' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' vsam:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # VSAM data set with Record-Level-Sharing enabled or not' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Valid values could be: NONRLS or RLS.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' mode: NONRLS' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Volume name if you are using VSAM in NONRLS mode' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' volume: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Storage class name if you are using VSAM in RLS mode' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' storageClass: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe runtime (root) directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **NOTE**: ' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # 1. if it is not specified and you passed "--update-config" argument' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # when you ran "zwe init" command, this value will be updated with the Zowe' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # runtime where the "zwe" command is located.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # 2. the runtime directory is designed to be "read only". This is different from the' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # log, workspace, and extension directories. Setting those three to the same parent folder' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # as the runtime directory is unsupported & may cause issues' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This value is required by ZWESLSTC to know where is Zowe runtime.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' runtimeDirectory: "$!{instance-zowe_runtimeDirectory}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Where to store runtime logs' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' logDirectory: $!{instance-zowe_logDirectory}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe runtime workspace directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' workspaceDirectory: $!{instance-zowe_workspaceDirectory}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Where extensions are installed' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' extensionDirectory: $!{instance-zowe_extensionDirectory}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' configmgr:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # STRICT=quit on any error, including missing schema' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # COMPONENT-COMPAT=if component missing schema, skip it with warning instead of quit' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' validation: "COMPONENT-COMPAT"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # runtime z/OS job name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' job:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Zowe JES job name' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' name: $!{instance-zowe_job_name}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Prefix of component address space' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' prefix: $!{instance-zowe_job_prefix}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This is an ID you use to separate multiple Zowe installs when determining' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # resource names used in RBAC authorization checks such as dataservices with RBAC' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # expects this ID in SAF resources' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' rbacProfileIdentifier: "$!{instance-zowe_rbacProfileId}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This is an ID that can be used by servers that distinguish their cookies from unrelated Zowe installs, ' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # for purposes such as to allow multiple copies of Zowe to be used within the same client' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' cookieIdentifier: "$!{instance-zowe_cookieId}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # You can list your external domains on how you want to access Zowe.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This should be the domain list you would like to put into your web browser'\''s' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # address bar.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' externalDomains:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # this should be the domain name to access Zowe APIML Gateway' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+#foreach($externalDomain in ${instance-zowe_externalDomains.split("\n")})
+echo ' - ${externalDomain}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+#end
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This is the port you use to access Zowe Gateway from your web browser.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # In many use cases, this should be same as `components.gateway.port`. But in' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # some use cases, like containerization, this port could be different.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' externalPort: ${instance-zowe_externalPort}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # In this section, behavior such as which TLS levels, ciphers should be used, and if native TLS versus AT-TLS should be used.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # See the schema for options.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This section applies to all components that support it.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # So far: "zss" and "app-server"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml" >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This section can be overridden per-component by placing it' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Under a "zowe" subsection of a component, as in "components.zss.zowe.network"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' network:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' tls:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' attls: ${instance-zowe_network_server_attls}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # TLS settings only apply when attls=false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Else you must use AT-TLS configuration for TLS customization.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' minTls: "${instance-zowe_network_server_tls_min}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' maxTls: "${instance-zowe_network_server_tls_max}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' client:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' tls:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' attls: ${instance-zowe_network_client_attls}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # You can un-comment and define any extra environment variables as key/value' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # pairs here.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # environments:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Example of a global environment variable for all components' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # MY_ENV_VAR: my_env_val' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Another example to customize SSH port for VT Terminal Desktop app' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # ZWED_SSH_PORT: 22' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # ZWED_TN3270_PORT: 23' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # You can define any Zowe message portions to be checked for and the message added to the' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # system log upon its logging, truncated to 126 characters.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' sysMessages:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe starting' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0021I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe started' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0018I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0006I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe ready to use' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWES1601I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe stopping' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0008I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe stopped' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0022I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe components starting' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0001I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Zowe components stopped' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEL0002I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # API ML components ready' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWEAM000I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # App server ready' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWED0031I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # ZSS ready' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' - "ZWES1013I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # # Not limited to Zowe message ID'\''s, you can specify your own string for example:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - "ERROR"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Enable debug mode for Zowe launch scripts' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' launchScript:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Set to "debug" or "trace" to display extra debug information' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' logLevel: "$!{instance-zowe_launchScript_logLevel}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Set to "exit" if you'\''d like startup to exit if any component has an error in the configure stage, otherwise zwe will warn but continue.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' onComponentConfigureFail: "$!{instance-zowe_launchScript_CompConf}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Default Zowe certificate' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' #' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **NOTE**: these fields can be updated automatically if you pass' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # `--update-config` to `zwe init` command. The generated value will base on' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # your setup in `zowe.setup.certificate` section.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' keystore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' type: $!{instance-zowe_certificate_keystore_type}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # if keyrings, the format is safkeyring:////stcusername/KeyName' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' file: $!{instance-zowe_certificate_keystore_file}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # "password" should either be the value you set when PKCS12, or literally "password" for keyrings.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' password: $!{instance-zowe_certificate_keystore_password}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # alias is the name of your key/cert. When using keyrings, get the Case Sensitive, Space Sensitive value in a TSO list ring.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' alias: $!{instance-zowe_certificate_keystore_alias}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' truststore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # truststore usually has same values as keystore (minus alias), but can be different if desired.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' type: $!{instance-zowe_certificate_truststore_type}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' file: $!{instance-zowe_certificate_truststore_file}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' password: $!{instance-zowe_certificate_truststore_password}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' pem:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' key: /global/zowe/keystore/localhost/localhost.key' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' certificate: /global/zowe/keystore/localhost/localhost.cer' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # if keyrings, the format is "safkeyring:////stcusername/KeyName&ca name"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' certificateAuthorities: /global/zowe/keystore/local_ca/local_ca.cer' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # How we want to verify SSL certificates of services. Valid values are:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - STRICT: will validate if the certificate is trusted in our trust store and' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # if the certificate Command Name and Subject Alternative Name (SAN)' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # is validate. This is recommended for the best security.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - NONSTRICT: will validate if the certificate is trusted in our trust store.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # This mode does not validate certificate Common Name and Subject' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Alternative Name (SAN).' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # - DISABLED: disable certificate validation. This is NOT recommended for' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # security.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' verifyCertificates: STRICT' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Java configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Some Zowe components requires Java. Define the path where you have your Java' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# 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 'java:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Path to your Java home directory' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' home: "$!{instance-java_home}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+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 '#' >> "${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 ' home: "$!{instance-node_home}"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# z/OSMF configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# If your Zowe instance is configured to use z/OSMF for authentication or other' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# features. You need to define how to access your z/OSMF instance.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo 'zOSMF:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Host name of your z/OSMF instance' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' host: $!{instance-zOSMF_host}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # **COMMONLY_CUSTOMIZED**' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-zOSMF_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' applId: $!{instance-zOSMF_applId}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Zowe components default configurations' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# This section includes default configurations for all Zowe components installed' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# on the Zowe instance.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Every component should define their own section under `components` with their' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# component ID.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# For each component, they can always have "enabled" property and "certificate"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# property. More configurations for each component can be found in component' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# manifest file.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo 'components:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_gateway_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' apiml:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' security:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' auth:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' provider: zosmf' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zosmf:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' jwtAutoconfiguration: jwt' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' serviceId: ibmzosmf' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' authorization:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' endpoint:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' provider: "native"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' x509:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # If we customize this to use different external certificate, than should also' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # define "server.internal.ssl.certificate" and enable "server.internal.ssl.enabled".' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # keystore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # alias: ""' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zaas:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_zaas_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' api-catalog:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_api_catalog_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' discovery:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_discovery_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Define this value to match your number of Discovery StatefulSet if you are running containerized Zowe' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # replicas: 1' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_caching_service_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' storage:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' evictionStrategy: reject' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # can be infinispan, inMemory, redis or VSAM(deprecated)' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' mode: infinispan' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' infinispan:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # this is required if storage mode is infinispan' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' jgroups:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_caching_service_storage_infinispan_jgroups_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' keyExchange:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: ${instance-components_caching_service_storage_infinispan_jgroups_keyExchange_port}' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' app-server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: 7556' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' debug: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # we can customize any component with custom certificate' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # the missing definitions will be picked from "zowe.certificate"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # keystore:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # alias: app-server' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # pem:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # key: /global/zowe/keystore/localhost/localhost.keystore.app-server.key' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # certificate: /global/zowe/keystore/localhost/localhost.keystore.app-server.cer-ebcdic' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' zss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' port: 7557' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' crossMemoryServerName: ZWESIS_STD' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' agent:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' jwt:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' fallback: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' 64bit: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' explorer-jes:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' explorer-mvs:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' explorer-uss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # Each extension can have dedicated definition similar to core components.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # my-extension:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # enabled: true' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# Zowe high availability instances customizations' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# This section includes customizations for each Zowe high availability instance.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# You can start each HA instance with `zwe start --ha-instance `.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#-------------------------------------------------------------------------------' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# haInstances:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # HA instance ID' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# lpar1:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # hostname where this instance will be started' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# hostname: lpar1.my-company.com' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # Your &SYSNAME for this LPAR' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # This sysname will be used to route your JES command to target system.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+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 '# 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"
+echo '# # Your &SYSNAME for this LPAR' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # This sysname will be used to route your JES command to target system.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# sysname: LPR2' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # These configurations will overwrite highest level default "components" configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# components:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# discovery:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # use customized port on this instance' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# port: 17553' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# api-catalog:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# port: 17552' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# app-server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # no app-server in this instance' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# zss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # no app-server in this instance' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# port: 17555' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '#' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# lpar2b:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# hostname: lpar2.my-company.com' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # your &SYSNAME for this LPAR' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# sysname: LPR2' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# # These configurations will overwrite highest level default "components" configuration' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# components:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# zaas:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# gateway:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# discovery:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# api-catalog:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# app-server:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# port: 28544' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# zss:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# port: 28542' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# caching-service:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+]]>
+ shell-JCL
+ 1024
+
+
+
+
+ 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
+
+ set -e
+set -x
+
+export JAVA_HOME='${instance-java_home}'
+export NODE_HOME='${instance-node_home}'
+
+export PATH=$PATH:'${instance-zowe_runtimeDirectory}/bin'
+
+zwe install -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
+ shell-JCL
+ 1024
+
+
+
+
+ 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
+
+ set -e
+set -x
+
+export JAVA_HOME='${instance-java_home}'
+export NODE_HOME='${instance-node_home}'
+
+export PATH=$PATH:'${instance-zowe_runtimeDirectory}/bin'
+
+zwe init mvs -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
+zwe init stc -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
+
+ shell-JCL
+ 1024
+
+
+
+
+
diff --git a/workflows/files/ZWECONF.properties b/workflows/files/ZWECONF.properties
index be0fd50ae0..4d84d00b78 100644
--- a/workflows/files/ZWECONF.properties
+++ b/workflows/files/ZWECONF.properties
@@ -4,7 +4,7 @@
# Category: zowe
# Description:
# Where Zowe MVS data sets will be installed
-zowe_setup_dataset_prefix=IBMUSER.ZWEV2
+zowe_setup_dataset_prefix=IBMUSER.ZWEV3
# zowe_setup_dataset_proclib
# Label: Zowe setup MVS procedure library
@@ -20,7 +20,7 @@ zowe_setup_dataset_proclib=USER.PROCLIB
# Category: zowe
# Description:
# Zowe parameter library
-zowe_setup_dataset_parmlib=IBMUSER.ZWEV2.CUST.PARMLIB
+zowe_setup_dataset_parmlib=IBMUSER.ZWEV3.CUST.PARMLIB
# zowe_setup_dataset_libzis
# Label: Zowe setup PARMLIB members for ZIS plugins
@@ -36,7 +36,7 @@ zowe_setup_dataset_libzis=ZWESIP00
# Category: zowe
# Description:
# JCL library where Zowe will store temporary JCLs during initialization
-zowe_setup_dataset_jcllib=IBMUSER.ZWEV2.CUST.JCLLIB
+zowe_setup_dataset_jcllib=IBMUSER.ZWEV3.CUST.JCLLIB
# zowe_setup_dataset_loadlibPlugin
# Label: Zowe setup Utilities and extensions library
@@ -44,7 +44,7 @@ zowe_setup_dataset_jcllib=IBMUSER.ZWEV2.CUST.JCLLIB
# Category: zowe
# Description:
# Load library for Utilities for use by Zowe and extensions
-zowe_setup_dataset_loadlibPlugin=IBMUSER.ZWEV2.SZWELOAD
+zowe_setup_dataset_loadlibPlugin=IBMUSER.ZWEV3.SZWELOAD
# zowe_setup_dataset_authLoadlib
# Label: Zowe setup MVS auth load library
@@ -52,7 +52,7 @@ zowe_setup_dataset_loadlibPlugin=IBMUSER.ZWEV2.SZWELOAD
# Category: zowe
# Description:
# APF authorized LOADLIB for Zowe core
-zowe_setup_dataset_authLoadlib=IBMUSER.ZWEV2.SZWEAUTH
+zowe_setup_dataset_authLoadlib=IBMUSER.ZWEV3.SZWEAUTH
# zowe_setup_dataset_authPluginLib
# Label: Zowe setup MVS auth plugin library
@@ -60,7 +60,7 @@ zowe_setup_dataset_authLoadlib=IBMUSER.ZWEV2.SZWEAUTH
# Category: zowe
# Description:
# APF authorized LOADLIB for Zowe ZIS Plugins
-zowe_setup_dataset_authPluginLib=IBMUSER.ZWEV2.CUST.ZWESAPL
+zowe_setup_dataset_authPluginLib=IBMUSER.ZWEV3.CUST.ZWESAPL
# zowe_setup_vsam_mode
# Label: Zowe setup VSAM mode
@@ -140,10 +140,10 @@ zowe_job_prefix=ZWE1
# zowe_externalDomains
# Label: Zowe external domains
-# Abstract: The domain name of your Dynamic VIP Address (DVIPA)
+# Abstract: The list of external domains
# Category: zowe
# Description:
-# 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
@@ -258,7 +258,7 @@ zowe_certificate_truststore_type=PKCS12
# zowe_certificate_truststore_file
# Label: Zowe certificate truststore file
-# Abstract: File location for cert truststore. For keyring, the format is "safkeyring://OWNER/KEYRING"
+# Abstract: File location for certificate truststore. For keyring, the format is "safkeyring://OWNER/KEYRING"
# Category: certificates
# Description:
# File location for the certificate truststore
@@ -750,12 +750,3 @@ zowe_setup_security_stcs_zis=ZWESISTC
# STC name of Auxiliary Service
zowe_setup_security_stcs_aux=ZWESASTC
-# zowe_setup_installStep_enabled
-# Label: Install the MVS data sets
-# Abstract: Check to enable this run step with the zwe install command. For convenience build only.
-# Category: installMVSDatasets
-# Description:
-# Check this option to enable the optional workflow step with zwe install command. After Zowe convenience build is extracted,
-# you can enable this flag to run the zwe install command to install MVS data sets within this workflow run.
-# This option is for convenience build only. SMP/E installs the MVS data sets during installation.
-zowe_setup_installStep_enabled=false
diff --git a/workflows/files/ZWECONF.xml b/workflows/files/ZWECONF.xml
index d6fb790207..012dcd2dba 100644
--- a/workflows/files/ZWECONF.xml
+++ b/workflows/files/ZWECONF.xml
@@ -12,14 +12,14 @@
-
- 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
- IBMUSER.ZWEV2
+ IBMUSER.ZWEV3
@@ -41,7 +41,7 @@
- IBMUSER.ZWEV2.CUST.PARMLIB
+ IBMUSER.ZWEV3.CUST.PARMLIB
@@ -63,7 +63,7 @@
- IBMUSER.ZWEV2.CUST.JCLLIB
+ IBMUSER.ZWEV3.CUST.JCLLIB
@@ -74,7 +74,7 @@
- IBMUSER.ZWEV2.SZWELOAD
+ IBMUSER.ZWEV3.SZWELOAD
@@ -85,7 +85,7 @@
- IBMUSER.ZWEV2.SZWEAUTH
+ IBMUSER.ZWEV3.SZWEAUTH
@@ -96,7 +96,7 @@
- IBMUSER.ZWEV2.CUST.ZWESAPL
+ IBMUSER.ZWEV3.CUST.ZWESAPL
@@ -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
@@ -371,7 +371,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 truststorecertificates
@@ -459,10 +459,10 @@ How we want to verify SSL certificates of services. Valid values are:
-
- Path to the NodeJS home
- Path to the NodeJS home
- node
+
+ Path to the Node.js home
+ Path to the Node.js home
+ Node.js
@@ -502,9 +502,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 Gatewaycomponents
@@ -514,8 +514,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 Gatewaycomponents
@@ -525,8 +525,8 @@ How we want to verify SSL certificates of services. Valid values are:
- Switch on the debug mode for the gateway
- Switch on the debug mode for the gateway
+ Switch on the debug mode for Gateway
+ Switch on the debug mode for Gatewaycomponents
@@ -535,9 +535,9 @@ How we want to verify SSL certificates of services. Valid values are:
-
- Should the APIML ZAAS be enabled?
- Should the APIML ZAAS be enabled?
+
+ Check this option to enable API ML ZAAS
+ Check this option to enable API ML ZAAScomponents
@@ -547,8 +547,8 @@ How we want to verify SSL certificates of services. Valid values are:
- Port for the APIML ZAAS
- Port for the APIML ZAAS
+ Port for API ML ZAAS
+ Port for API ML ZAAScomponents
@@ -558,8 +558,8 @@ How we want to verify SSL certificates of services. Valid values are:
- Switch on the debug mode for the ZAAS
- Switch on the debug mode for the ZAAS
+ Switch on the debug mode for ZAAS
+ Switch on the debug mode for ZAAScomponents
@@ -568,9 +568,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 Gatewaycomponents
@@ -579,9 +579,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 authcomponents
@@ -592,9 +592,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 authcomponents
@@ -603,7 +603,7 @@ How we want to verify SSL certificates of services. Valid values are:
-
+
Use this to enable the security authorization endpointUse this to enable the security authorization endpointcomponents
@@ -614,9 +614,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 Gatewaycomponents
@@ -625,9 +625,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 x509components
@@ -637,8 +637,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 Catalogcomponents
@@ -669,9 +669,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 servicecomponents
@@ -681,8 +681,8 @@ How we want to verify SSL certificates of services. Valid values are:
- Port on which the Discovery service should be running
- Port on which the Discovery service should be running
+ Port on which Discovery service should be running
+ Port on which Discovery service should be runningcomponents
@@ -702,9 +702,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 servicecomponents
@@ -714,8 +714,8 @@ How we want to verify SSL certificates of services. Valid values are:
- Port for the caching service
- Port for the caching service
+ Port for Caching service
+ Port for Caching servicecomponents
@@ -802,9 +802,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
@@ -825,8 +825,8 @@ How we want to verify SSL certificates of services. Valid values are:
- Port for the app server
- Port for the app server
+ Port for App server
+ Port for App servercomponents
@@ -891,8 +891,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
@@ -902,8 +902,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
@@ -913,8 +913,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
@@ -1067,20 +1067,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
-
-
+
@@ -1152,8 +1139,7 @@ How we want to verify SSL certificates of services. Valid values are:
-
-
+ Run this step to fill base variables.1z/OS System Programmer
@@ -1163,14 +1149,14 @@ How we want to verify SSL certificates of services. Valid values are:
Gateway variables
- Specify the variables for the gateway component
+ Specify the variables for the Gateway component1 == 1Always true
- Skipped if the gateway was not selected
+ Skipped if the Gateway was not selected!${instance-components_gateway_enabled}skipped
@@ -1184,7 +1170,7 @@ How we want to verify SSL certificates of services. Valid values are:
- Run this step to specify the cloud gateway variables
+ Run this step to specify the Gateway variables1z/OS System Programmerfalse
@@ -1208,7 +1194,7 @@ How we want to verify SSL certificates of services. Valid values are:
- Run this step to fill gateway component variables.
+ Run this step to fill ZAAS component variables.1z/OS System Programmerfalse
@@ -1809,7 +1795,7 @@ echo ' # ZWED_TN3270_PORT: 23' >> "${instance-zowe_runtimeDirectory}/zowe.yam
echo '' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
echo ' # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
echo ' # You can define any Zowe message portions to be checked for and the message added to the' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
-echo ' # system log upon its logging, truncated to 126 characters.' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
+echo ' # system log upon its logging, truncated to 126 characters (wildcards are not supported).' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
echo ' sysMessages:' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
echo ' # # Zowe starting' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
echo ' - "ZWEL0021I"' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
@@ -1899,17 +1885,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"
@@ -2170,7 +2156,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"
@@ -2225,26 +2211,21 @@ echo '# enabled: false' >> "${instance-zowe_runtimeDirectory}/zowe.yaml"
Zowe installationZowe installation
-
- Run the Zowe install (only for convenience build)
- Configure Zowe.
+
+ 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.
]]>1z/OS System Programmer
@@ -2264,10 +2245,10 @@ zwe install -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
1024
-
+
- Run the Zowe init
- Executes the Zowe initialization
+ Run scripts for Zowe initialization
+ Executes scripts for Zowe initialization
@@ -2283,10 +2264,9 @@ zwe install -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
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).
+#end
stc: Configure the system to launch the Zowe started task.
]]>
@@ -2314,24 +2294,20 @@ zwe init vsam -c '${instance-zowe_runtimeDirectory}/zowe.yaml' --allow-overwrite
- Run the Zowe init security
- Executes the Zowe initialization for security setup
+ Run scripts for Zowe security initialization
+ Executes Zowe initialization scripts for security setup
- zwe init apfauth -c ${instance-zowe_runtimeDirectory}/zowe.yml zwe init security -c ${instance-zowe_runtimeDirectory}/zowe.yml --allow-overwrite
+ zwe init apfauth -c ${instance-zowe_runtimeDirectory}/zowe.yml
NOTE:
Each zwe init sub-command defines a configuration.
-
mvs: Copy the data sets provided with Zowe to custom data sets.
security: Create the user IDs and security manager settings.
apfauth: APF authorize the LOADLIB containing the modules that need to perform z/OS priviledged security calls.
-
certificate: Configure Zowe to use TLS certificates.
-
vsam: Configure the VSAM files needed to run the Zowe caching service used for high availability (HA).
-
stc: Configure the system to launch the Zowe started task.
]]>1
diff --git a/workflows/files/ZWECRECR.xml b/workflows/files/ZWECRECR.xml
index c5d3c3b812..9999de8573 100644
--- a/workflows/files/ZWECRECR.xml
+++ b/workflows/files/ZWECRECR.xml
@@ -33,7 +33,7 @@
Please, specify your security management software
- Please, specify the ESM system you use on your workstation
+ Please, specify the ESM system you useGeneral
@@ -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
]]>
1Security Administratortrue
@@ -303,7 +304,7 @@ GENREQ ${instance-acf2_acid} +
This step uses ACF2 command GENREQ]]>
+]]>
1Security Administratortrue
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.
]]>
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.
]]>1Security Administrator
@@ -367,7 +367,7 @@
This step will load signed client authentication certificate from the ${instance-output_dataset} into ESM
]]>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.