Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Create a .json file as the JS7 - Deployment Descriptor.
  2. Run the JS7 - Deployment Packaging indicating the .json Deployment Descriptor file. This step will create related Deployment Packages in the <archive>/<deployment-descriptor> directory.
  3. Run the JS7 - Deployment Workflow
    • Import the js7_import.tar.gz Deployment Workflow file available from the <archive>/<deployment-descriptor> directory to JOC Cockpit, for details see JS7 - Inventory Export and Import.
    • Check the imported workflow and adjust to your needs, for example assignment of an Agent with access to the deployment directories in the Deployment Area.
    • Adjust the imported schedule to your needs should you want to schedule execution of deployments to a specific date and time. Alternatively you can add an ad hoc order to the Deployment Workflow from the JOC Cockpit's Workflows view. This step offers to copy the parameterization available from the schedule to the current order.
    • Run the Deployment Workflow from a scheduled order or from an ad hoc order and check results.

...

The suggested directory layout for the Deployment Area includes the following directories and files:

...

  • js7_deploy_agent_unix.<agent-id>.<release>.config.tar.gz (Deployment Package for the Agent's configuration directory)
  • js7_deploy_agent_unix.<agent-id>.<release>.install.tar.gz (Deployment Package for the Agent's installation directory)
  • run_deploy_agent.sh (deployment script)
  • run_install_agent.sh (wrapper script for the parameterized call to js7_install_agent.sh)

...

  • <controller-id> (specifies the Controller ID)
    • <instance-type> (specifies the type of the Controller instance which is primary or secondary
      • js7_deploy_controller_unix.<controller-id>.<instance-type>.<release>.config.tar.gz (Deployment Package for the Controller instance's configuration directory)
      • js7_deploy_controller_unix.<controller-id>.<instance-type>.<release>.install.tar.gz (Deployment Package for the Controller instance's installation directory)
      • run_deploy_controller.sh (Deployment Script)
      • run_install_controller.sh (Wrapper Script for the parameterized call to the js7_install_controller.sh Installer Script)
    • <instance-type> (specifies the type of the Controller instance which is primary or secondary
  • <controller-id> (specifies the Controller ID)
  • ...

...

  • <instance-type> (specifies the type of the JOC Cockpit instance which is primary or secondary
    • js7_deploy_joc_linux.<joc-id>.<instance-type>.<release>.config.tar.gz (Deployment Package for the JOC Cockpit instance's configuration directory)
    • js7_deploy_joc_linux.<joc-id>.<instance-type>.<release>.install.tar.gz (Deployment Package for the JOC Cockpit instance's installation directory)
    • run_deploy_joc.sh (Deployment Script)
    • run_install_joc.sh (Wrapper Script for the parameterized call to the js7_install_joc.sh Installer Script.
  • <instance-type> (specifies the type of the JOC Cockpit instance which is primary or secondary

...

...

  • certs (holds CA-signed Certificates)
  • csr (holds Certificate Signing Requests)
  • private (holds Private Keys)

...


...

  • config (general configuration)
    • private (specific configuration)
      • trusted-pgp-keys (optionally holds PGP public key files and keyring files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <pgp-public-key> (public key file or keyring file)
        • <pgp-public-key> (public key file or keyring file)
        • ...
      • trusted-x509-keys (optionally holds X.509 certificate files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <x509-certificate> (X.509 certificate file)
        • <x509-certificate> (X.509 certificate file)
        • ...
      • https-keystore.p12 (optional default location and file name of a PKCS12 keystore)
      • https-truststore.p12 (optional default location and file name of a PKCS12 truststore)
      • private.conf (optional configuration file, for example to specify keystore, truststore and Distinguished Names of Controller certificate, see JS7 - Agent Configuration Items)
      • log4j2.xml (optional log configuration file, see JS7 - Log Levels and Debug Options)
    • agent.conf (optional configuration file, see JS7 - Agent Configuration Items)

...

  • <template-name> (an arbitrary directory name for templates can be used)
  • <template-name> (an arbitrary directory name for templates can be used)
  • ...

...

  • <root-ca-certificate> (the Root CA Certificate file, frequently available with a .pem, .crt extension)

...

  • config (general configuration)
    • private (specific configuration)
      • trusted-pgp-keys (optionally holds PGP public key files and keyring files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <pgp-public-key> (public key file or keyring file)
        • <pgp-public-key> (public key file or keyring file)
        • ...
      • trusted-x509-keys (optionally holds X.509 certificate files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <x509-certificate> (X.509 certificate file)
        • <x509-certificate> (X.509 certificate file)
        • ...
      • https-keystore.p12 (optional default location and file name of a PKCS12 keystore)
      • https-truststore.p12 (optional default location and file name of a PKCS12 truststore)
      • private.conf (optional configuration file, for example to specify keystore, truststore and Distinguished Names of JOC Cockpit certificate, see JS7 - Controller Configuration Items)
      • log4j2.xml (optional log configuration file, see JS7 - Log Levels and Debug Options)
    • controller.conf (optional configuration file, see JS7 - Controller Configuration Items)

...

  • <template-name> (an arbitrary directory name for templates can be used)
  • <template-name> (an arbitrary directory name for templates can be used)
  • ...

...

  • instances (holds configuration files that are specific for a JOC Cockpit instance)
    • <server>.<instance-type> (holds configuration files for a JOC Cockpit instance running on a specific server with the instance type being primary or secondary)
      • resources (optionally holds configuration files such as the joc.properties file, keystore, truststore files etc.)
      • response (holds response files, mainly the joc_install.xml response file, that are copied to the JOC Cockpit's setup directory)
    • <server>.<instance-type> (holds configuration files for a JOC Cockpit instance running on a specific server with the instance type being primary or secondary)
    • ...
  • templates (holds configuration files that act as templates for a number of JOC Cockpit instances)
    • <template-name> (an arbitrary directory name for templates can be used)
      • resources (optionally holds configuration files such as the joc.properties file, keystore, truststore files etc.)
      • response (holds response files, mainly the joc_install.xml response file, that are copied to the JOC Cockpit's setup directory)
    • <template-name> (an arbitrary directory name for templates can be used)
    • ...

...

  • deployment_package.<deployment-descriptor>.<host>.<timestamp>.log (Packaging Script log files)
  • install_js7_agent.<host>.<timestamp>.log (Agent Installer log files)
  • install_js7_controller.<host>.<timestamp>.log (Controller Installer log files)
  • install_js7_joc.<host>.<timestamp>.log (JOC Cockpit Installer log files)

...

  • ... (users can apply an arbitrary directory hierarchy at this level)
    • js7_agent_unix.<release>.tar.gz (JS7 Agent installation tarball as download from the SOS Web Site)
    • js7_controller_unix.<release>.tar.gz (JS7 Controller installation tarball as download from the SOS Web Site)
    • js7_joc_linux.<release>.tar.gz (JS7 JOC Cockpit installation tarball as download from the SOS Web Site)

...

  • ... (sub-directories used for Agent installation)

...

  • ... (sub-directories used for Controller installation)

...

Explanation on Individual Files

Environment Script: env.sh

The Environment Script initializes a number of environment variables that map to directories as explained above.

...

Code Block
titleExample for Environment File env.sh
linenumberstrue
#!/bin/sh

SCRIPT_HOME=$HOME/js7.deploy

DEP_ARCHIVE="${DEP_ARCHIVE:-$SCRIPT_HOME/archive}"
DEP_BIN="${DEP_BIN:-$SCRIPT_HOME/bin}"
DEP_CONFIG="${DEP_CONFIG:-$SCRIPT_HOME/config}"
DEP_DESC="${DEP_DESC:-$SCRIPT_HOME/desc}"
DEP_LOGS="${DEP_LOGS:-$SCRIPT_HOME/logs}"
DEP_RELEASE=/mnt/releases/scheduler_setups
DEP_TARGET="/home/sos/js7.target"
DEP_WORK="${DEP_WORK:-$SCRIPT_HOME/work}"

JAVA_HOME="${SCRIPT_HOME}"/jdk-11.0.2
PATH=${JAVA_HOME}/bin:${PATH}

export JAVA_HOME PATH DEP_ARCHIVE DEP_BIN DEP_CONFIG DEP_DESC DEP_LOGS DEP_RELEASE DEP_TARGET DEP_WORK

Explanation:

  • Any environment variable makes use of a fallback if not otherwise specified.
    • By default the env.sh script's directory is assumed to hold the directory layout of the Deployment Area.
  • Each environment variable in the script points to a directory with a specific purpose that can be located outside of the suggested directory layout.
    • In the above example the DEP_RELEASE environment variable specifies a location of JS7 installation files from a mount point.
    • The DEP_ARCHIVE, DEP_BIN, DEP_CONFIG, DEP_DESC, DEP_LOGS, DEP_WORK environment variables point to directories explained with the directory layout.
    • The DEP_TARGET environment variable points to a location on the same server to simulate deployments to target hosts.
  • The JAVA_HOME environment variable is specified to enforce use of a specific Java version for temporary installation of JS7 components during packaging.
  • Consider that environment variables have to be exported in order to be applied by subsequent calls to deployment scripts.

...

Code Block
titleExample for Environment Script env.sh
linenumberstrue
. ./env.sh

...

Code Block
titleExample for Installer Wrapper Script run_install_agent.sh
linenumberstrue
#!/bin/sh

set -e

JS7_DEP_CONFIG="/home/sos/js7.deploy/config"
JS7_DEP_SCRIPT="/home/sos/js7.deploy/bin"
JS7_DEP_WORK="/home/sos/js7.deploy/work/agents/agent_001"

mkdir -p "/home/sos/js7.deploy/work/agents/agent_001"

${JS7_DEP_SCRIPT}/js7_install_agent.sh \
    --real-path-prefix="${JS7_DEP_WORK}" \
    --release="2.5.0" \
    --tarball="/mnt/releases/scheduler_setups/2.5.0/js7_agent_unix.2.5.0.tar.gz" \
    --home="${JS7_DEP_WORK}/opt/sos-berlin.com/js7/agent-primary" \
    --data="${JS7_DEP_WORK}/var/sos-berlin.com/js7/agent-primary" \
    --http-port="localhost:31443" \
    --https-port="centostest-primary.sos:31443" \
    --controller-id="testsuite" \
    --controller-primary-cert="${JS7_DEP_DEPLOY}/certs/server/centostest-primary.crt" \
    --controller-secondary-cert="${JS7_DEP_DEPLOY}/certs/server/centostest-secondary.crt" \
    --keystore="${JS7_DEP_DEPLOY}/agents/instances/agent_001/config/private/https-keystore.p12" \
    --keystore-password="jobscheduler" \
    --truststore="${JS7_DEP_DEPLOY}/agents/instances/agent_001/config/private/https-truststore.p12" \
    --truststore-password="jobscheduler" \
    --deploy-dir="${JS7_DEP_DEPLOY}/agents/templates/https/config" \
    --make-dirs

Explanation:

  • The parameterization is used from the Deployment Descriptor.
  • The --home and --data directories are prefixed with the directory of the work area.
    • The --real-path-prefix holds the work area directory. The Installer Script makes use of this information to conclude the effective directories as used for the target host.
  • Wrapper Scripts for Controllers and JOC Cockpit are similarly parameterized.

...

Code Block
titleExample for Deployment Script run_deploy_agent.sh
linenumberstrue
#!/bin/sh

set -e

scp -i "/home/sos/.ssh/sos_rsa" -P 22 "/home/sos/js7.deploy/archive/agent-https-2022-12-04/agents/agent_001/js7_deploy_agent_unix.agent_001.2.5.0.install.tar.gz" sos@centostest-primary:"/tmp"
ssh -i "/home/sos/.ssh/sos_rsa" -p 22 -t -t -o LogLevel=QUIET sos@centostest-primary << 'EOF'
systemctl stop js7.agent_001
cd "/opt/sos-berlin.com/js7" > /dev/null
test -e "/tmp/js7_deploy_agent_unix.agent_001.2.5.0.install.tar.gz" && gzip -c -d < "/tmp/js7_deploy_agent_unix.agent_001.2.5.0.install.tar.gz" | tar -xf -
cd - > /dev/null
rc=$?
systemctl start js7.agent_001
exit $rc
EOF

scp -i "/home/sos/.ssh/sos_rsa" -P 22 "/home/sos/js7.deploy/archive/agent-https-2022-12-04/agents/agent_001/js7_deploy_agent_unix.agent_001.2.5.0.config.tar.gz" sos@centostest-primary:"/tmp"
ssh -i "/home/sos/.ssh/sos_rsa" -p 22 -t -t -o LogLevel=QUIET sos@centostest-primary << 'EOF'
systemctl stop js7.agent_001
cd "/var/sos-berlin.com/js7" > /dev/null
test -e "/tmp/js7_deploy_agent_unix.agent_001.2.5.0.config.tar.gz" && gzip -c -d < "/tmp/js7_deploy_agent_unix.agent_001.2.5.0.config.tar.gz" | tar -xf -
cd - > /dev/null
rc=$?
systemctl start js7.agent_001
exit $rc
EOF

Explanation:

Alternative Directory Layout

The directory layout of the Deployment Area is not carved in stone. Instead, users can modify the env.sh Environment Script to point to different directories.

...

Code Block
titleExample for use of an individual script to create deployment packages
linenumberstrue
#!/bin/sh

set -e

SCRIPT_HOME=$(cd "$(dirname "$0")" >/dev/null && pwd)

DEP_ARCHIVE=${DEP_ARCHIVE:-$(dirname "${SCRIPT_HOME}")/archive}
DEP_BIN=${DEP_BIN:-$(dirname "${SCRIPT_HOME}")/bin}
DEP_CONFIG=${DEP_CONFIG:-$(dirname "${SCRIPT_HOME}")/config}
DEP_DESC=${DEP_DESC:-$(dirname "${SCRIPT_HOME}")/desc}
DEP_WORK=${DEP_WORK:-$(dirname "${SCRIPT_HOME}")/work}


${DEP_BIN}/js7_create_deployment_package.sh \
    --deploy-desc=${DEP_DESC}/agent-https-2022-12-04.json \
    --config-dir=${DEP_CONFIG} \
    --archive-dir=${DEP_ARCHIVE} \
    --script-dir=${DEP_BIN} \
    --work-dir=${DEP_WORK} \
    --deploy-agent-id=deploymentAgent \
    --keep-script \
    --keep-work

Explanation:

  • The example of an individual script to create Deployment Packages makes use of existing environment variables to apply individual directories or to fall back to the default directory layout.
  • Use of set -e is recommended in order not to proceed execution of scripts in case of errors.
  • Use of environment variables from the above example allows to execute the script from any working directory.

Resources

...