Skip to content

Commit

Permalink
Zowe Suite ${release-version}
Browse files Browse the repository at this point in the history
  • Loading branch information
zowe-robot authored Jul 13, 2022
2 parents d4d939c + de183f6 commit 4b7fc52
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 51 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
- name: '[Prep 2] Setup Node'
uses: actions/setup-node@v2
with:
node-version: 16
node-version: 16.15.0

- name: '[Prep 3] Setup jFrog CLI'
uses: jfrog/setup-jfrog-cli@v2
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ To use the App Server, the following is required:

* **NodeJS** - v8.16.x minimum up to v12.x is officially supported by the Zowe community.

Plugins may depend upon other technologies, such as Java or ZSS. An plugin's [pluginDefinition](https://docs.zowe.org/stable/extend/extend-desktop/mvd-plugindefandstruct) or README will help you to understand if additional prerequisites are needed for that plugin.
Plugins may depend upon other technologies, such as Java or ZSS. A plugin's [pluginDefinition](https://docs.zowe.org/stable/extend/extend-desktop/mvd-plugindefandstruct) or README will help you to understand if additional prerequisites are needed for that plugin.


## 1. Acquire the source code
Afterwards, clone (or download) the github capstone repository, https://github.com/zowe/zlux
Afterwards, clone (or download) the github capstone repository, https://github.com/zowe/zlux.
As we'll be configuring ZSS on z/OS's USS, and the zLUX App Server on a LUW host, you'll need to put the contents on both systems.
If using git, the following commands should be used:
```
Expand Down Expand Up @@ -152,15 +152,15 @@ https://\<App Server\>:7556/ZLUX/plugins/org.zowe.zlux.bootstrap/web/index.html

**Note: If you are using the API Mediation Layer, which is not covered here, it is preferred to access the app server through it. That URL would be https://\<Gateway server\>:\<Gateway Port\>/zlux/ui/v1/ZLUX/plugins/org.zowe.zlux.bootstrap/web/index.html**

Once here, you should be greeted with a Login screen. By default trivial authentication is used which allows to login with arbitrary credentials.
Once here, you should be greeted with a Login screen. By default, trivial authentication is used which allows to login with arbitrary credentials.
So, you can type in any username to get access to the desktop, which likely does not yet have any Apps. Next, the server should be configured, Apps added, and authentication set up.

## 5. Customizing configuration
A default configuration file is present in zlux-app-server/defaults/serverConfig/zowe.yaml. In a development environment, you should move this somewhere and customize it and use it to start the server.

Read the [Configuration](https://docs.zowe.org/stable/user-guide/mvd-configuration) page for anexplanation of interesting items that you'll want to configure for your server, as well as [the json-schema document for the app-server](https://github.com/zowe/zlux/blob/v2.x/staging/schemas/zlux-config-schema.json) which describes every possible value.
Read the [Configuration](https://docs.zowe.org/stable/user-guide/mvd-configuration) page for an explanation of interesting items that you'll want to configure for your server, as well as [the json-schema document for the app-server](https://github.com/zowe/zlux/blob/v2.x/staging/schemas/zlux-config-schema.json) which describes every possible value.

In short, determine the location of your workspace directory (Environment variable `ZWE_zowe_workspaceDirectory`, or `~/.zowe/workspace` (Linux, Unix, z/OS) or `%USERPROFILE%/.zowe` when `ZWE_zowe_workspaceDirectory` is not defined)
In short, determine the location of your workspace directory (environment variable `ZWE_zowe_workspaceDirectory`, or `~/.zowe/workspace` (Linux, Unix, z/OS) or `%USERPROFILE%/.zowe` when `ZWE_zowe_workspaceDirectory` is not defined).
Within the workspace directory, create **app-server/serverConfig/zowe.yaml** by copying **zlux-app-server/defaults/serverConfig/zowe.yaml**, and edit it to change attributes such as the HTTPS port via **components.app-server.node.https.port**, or the location of plugins.

## 6. Adding Plugins
Expand Down Expand Up @@ -212,7 +212,7 @@ git clone [email protected]:zowe/sample-iframe-app.git

## 7. Adding ZSS to the environment
Like the App Server, ZSS is an HTTP(S) server component of Zowe.
However unlike the App Server, ZSS is a z/OS specific component which exists to provide core low-level & security APIs, as well as a place to attach lower-level plugins than could be built with the App Server. The configuration, directories, and network-level API structures are similar, as these servers work together to support Apps.
However unlike the App Server, ZSS is a z/OS specific component which exists to provide core low-level & security APIs, as well as a place to attach lower-level plugins that could be built with the App Server. The configuration, directories, and network-level API structures are similar, as these servers work together to support Apps.
Also, some of the low-level APIs are made possibly by ZSS working in concert with the Zowe Cross Memory Server, which is not an HTTP(S) server, but ZSS provides any needed HTTP(S) access. So, if you need the APIs provided by ZSS, or want to build & use low-level plugins, then you must add ZSS and the Cross Memory Server to your Zowe environment.

Since ZSS adheres to the same configuration & directory structure as the App server, the easiest way to set up ZSS is to clone all of the App Server repos ([Step 1](#1-acquire-the-source-code)) onto z/OS if you have not already done so. However, strictly speaking the only non-ZSS repo needed is the `zlux-app-server` repo because it contains the scripts that are used to start the servers.
Expand Down
8 changes: 2 additions & 6 deletions bin/utils/convert-env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,12 @@ if [ -z "$ZWED_node_https_certificateAuthorities" ]
then
if [ "$KEYSTORE_TYPE" = "JCERACFKS" ]
then
if [ -z "$LOCAL_CA" ]
then
LOCAL_CA=localca
fi
#, at end turns it into an array
if [ -n "$EXTERNAL_ROOT_CA" ]
then
export ZWED_node_https_certificateAuthorities="${TRUSTSTORE}&${LOCAL_CA}","${TRUSTSTORE}&${EXTERNAL_ROOT_CA}"
export ZWED_node_https_certificateAuthorities="${ZWE_zowe_certificate_pem_certificateAuthorities}","${TRUSTSTORE}&${EXTERNAL_ROOT_CA}"
else
export ZWED_node_https_certificateAuthorities="${TRUSTSTORE}&${LOCAL_CA}",
export ZWED_node_https_certificateAuthorities="${ZWE_zowe_certificate_pem_certificateAuthorities}",
fi
elif [ -n "$KEYSTORE_CERTIFICATE_AUTHORITY" ]
then
Expand Down
93 changes: 55 additions & 38 deletions schemas/plugindefinition-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
"$defs": {
"reverseDomainNotation": {
"type": "string",
"pattern": "^[A-Za-z]{2,6}((?!-)\\.[A-Za-z0-9-]{1,63}(?<!-))+$"
"pattern": "^[A-Za-z]{2,6}(\\.[A-Za-z0-9-]{1,62}[A-Za-z0-9])+$"
},
"semverVersion": {
"type": "string",
"description": "A semantic version, see https://semver.org/",
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$"
},
"semverRange": {
"type": "string",
Expand All @@ -29,7 +29,7 @@
"appFwPlugin": {
"type": "object",
"required": ["identifier", "apiVersion", "pluginVersion", "pluginType"],
"propeties": {
"properties": {
"identifier": {
"$ref": "#/$defs/reverseDomainNotation",
"description": "Each plugin must have a zowe-wide unique ID in reverse domain name notation"
Expand Down Expand Up @@ -61,7 +61,6 @@
"requirements": {
"type": "object",
"description": "Defining a list of requirements lets the app-server decide if your plugin should or should not be loaded according to if requirements are met in the environment.",
"additionalProperties": false,
"properties": {
"components": {
"type": "object",
Expand Down Expand Up @@ -126,10 +125,10 @@
}
},
"libraryPlugin": {
"$ref": "#/$defs/appFwPlugin",
"allOf": [ { "$ref": "#/$defs/appFwPlugin" } ],
"description": "Library plugins are used for hosting static web content",
"deprecated": true,
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"pluginType": {
"const": "library"
Expand All @@ -138,14 +137,14 @@
"type": "string"
},
"libraryVersion": {
"$ref": "#/$devs/semverVersion"
"$ref": "#/$defs/semverVersion"
}
}
},
"bootstrapPlugin": {
"$ref": "#/$defs/appFwPlugin",
"allOf": [ { "$ref": "#/$defs/appFwPlugin" } ],
"description": "Only one bootstrap plugin per server is intended, and its role is to bootstrap Desktop-type plugins for browser use",
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"pluginType": {
"const": "bootstrap"
Expand All @@ -156,9 +155,9 @@
}
},
"desktopPlugin": {
"$ref": "#/$defs/appFwPlugin",
"allOf": [ { "$ref": "#/$defs/appFwPlugin" } ],
"description": "Desktop plugins are webcontent which embeds application-type plugins within a web browser, regardless of if resembles a 'desktop' or not.",
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"pluginType": {
"const": "desktop"
Expand All @@ -169,9 +168,9 @@
}
},
"applicationPlugin": {
"$ref": "#/$defs/appFwPlugin",
"allOf": [ { "$ref": "#/$defs/appFwPlugin" } ],
"description": "Application plugins contain web content and/or network APIs which are compatible with embedding in a Desktop plugin web page, but may also be used by themselves",
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"pluginType": {
"const": "application"
Expand All @@ -192,10 +191,10 @@
}
},
"nodeAuthenticationPlugin": {
"$ref": "#/$defs/appFwPlugin",
"allOf": [ { "$ref": "#/$defs/appFwPlugin" } ],
"description": "The app-server delegates to these plugins for user permission management tasks such as authentication and authorization",
"required": [ "filename" ],
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"filename": {
"type": "string",
Expand All @@ -222,9 +221,9 @@
"description": "A webcontent object without the attributes of an application, such as framework, can be used to just serve a plugin's /web folder from the app-server"
},
"nativeWebContent": {
"$ref": "#/$defs/appWebContent",
"allOf": [ { "$ref": "#/$defs/appWebContent" } ],
"description": "A Native application is one that provides a /web/main.js file which can be run within the Zowe Desktop when the user clicks its icon",
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"framework": {
"type": "string",
Expand All @@ -233,23 +232,42 @@
}
},
"iframeWebContent": {
"$ref": "#/$defs/appWebContent",
"oneOf": [
{ "$ref": "#/$defs/localIframeWebContent" },
{ "$ref": "#/$defs/remoteIframeWebContent" }
]
},
"localIframeWebContent": {
"allOf": [ { "$ref": "#/$defs/appWebContent" } ],
"description": "An iframe application is one that provides some html file either within the /web folder or found on another server at runtime, which can be embedded within the Zowe Desktop when the user clicks its icon",
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"framework": {
"const": "iframe"
},
"oneOf": [
"destination": {
"type": "string",
"description": "A URL with shell-style ${} subtitutions allowed which states which address the iframe should load."
},
"startingPage": {
"type": "string",
"description": "A filename within the /web folder of the plugin, which the iframe should load."
}
],
"startingPage": {
"type": "string",
"description": "A filename within the /web folder of the plugin, which the iframe should load."
},
"standaloneUseFramework": {
"type": "boolean",
"default": false,
"description": "When true, iframe apps will be launched within the desktop framework so that features like notifications and app2app communication will function identically to the Desktop. When false, opening the iframe app in a standalone page will have it function like an independent website."
}
}
},
"remoteIframeWebContent": {
"allOf": [ { "$ref": "#/$defs/appWebContent" } ],
"description": "An iframe application is one that provides some html file either within the /web folder or found on another server at runtime, which can be embedded within the Zowe Desktop when the user clicks its icon",
"unevaluatedProperties": false,
"properties": {
"framework": {
"const": "iframe"
},
"destination": {
"type": "string",
"description": "A URL with shell-style ${} subtitutions allowed which states which address the iframe should load."
},
"standaloneUseFramework": {
"type": "boolean",
"default": false,
Expand All @@ -261,7 +279,6 @@
"type": "object",
"description": "A description of an application which can be run within the Zowe Desktop",
"required": [ "framework", "launchDefinition", "descriptionKey", "descriptionDefault", "defaultWindowStyle" ],
"additionalProperties": false,
"properties": {
"framework": {
"type": "string",
Expand Down Expand Up @@ -334,9 +351,9 @@
}
},
"externalService": {
"$ref": "#/$defs/service",
"allOf": [ { "$ref": "#/$defs/service" } ],
"description": "A proxy service which is hosted from the app-server",
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"type": {
"const": "external"
Expand All @@ -363,10 +380,10 @@
}
},
"routerService": {
"$ref": "#/$defs/service",
"allOf": [ { "$ref": "#/$defs/service" } ],
"description": "An ExpressJS router service hosted from the app-server",
"required": ["type", "version", "name", "fileName", "routerFactory"],
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"type": {
"const": "router"
Expand Down Expand Up @@ -402,11 +419,11 @@
}
},
"nodeService": {
"$ref": "#/$defs/service",
"allOf": [ { "$ref": "#/$defs/service" } ],
"description": "A nodejs callback service that acts upon expressjs request and response objects. It runs within the app-server",
"required": ["type", "version", "name", "fileName", "methods", "handlerInstaller"],
"deprecated": true,
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"type": {
"const": "nodeService"
Expand Down Expand Up @@ -440,10 +457,10 @@
}
},
"serviceService": {
"$ref": "#/$defs/service",
"allOf": [ { "$ref": "#/$defs/service" } ],
"description": "A service that runs within ZSS. It uses a callback written in C that recieves a request and response struct",
"required": ["type", "version", "name", "methods", "initializerName"],
"additionalProperties": false,
"unevaluatedProperties": false,
"properties": {
"type": {
"const": "service"
Expand Down

0 comments on commit 4b7fc52

Please sign in to comment.