diff --git a/jboss/container/java/s2i/bash/README.adoc b/jboss/container/java/s2i/bash/README.adoc deleted file mode 100644 index 633f709f..00000000 --- a/jboss/container/java/s2i/bash/README.adoc +++ /dev/null @@ -1,67 +0,0 @@ -//// - AUTOGENERATED FILE - this file was generated via ./gen_template_docs.py. - Changes to .adoc or HTML files may be overwritten! Please change the - generator or the input template (./*.jinja) -//// - - - -= link:./module.yaml[jboss.container.java.s2i.bash] -:toc: -:toc-placement!: -:toclevels: 5 - -Customization of common Maven S2I for Java S2I image. - -toc::[] - -== Labels -No labels defined. - - -== Environment Variables - -The following environment variables are used to configure the functionality provided by this module: - -|======================================================================= -|Name |Description |Example -|======================================================================= - -The following environment variables will be configured on the image: -|======================================================================= -|Name |Value -|JBOSS_CONTAINER_JAVA_S2I_MODULE |/opt/jboss/container/java/s2i -|S2I_SOURCE_DEPLOYMENTS_FILTER |*.jar -|======================================================================= - -== Resources -No additional resources will be installed through this module. - -== RPM Packages - -=== Installed RPM Packages -No RPMs will be installed by this module. - -=== RPM Package Repositories -No additional RPM package repositories are required to install listed RPMs. - -== Modules - -=== Included Modules - -The following modules will be installed with this module: - -link:../../../../../jboss/container/hawkular/bash/README.adoc[jboss.container.hawkular.bash] - -link:../../../../../jboss/container/java/run/bash/README.adoc[jboss.container.java.run.bash] - -link:../../../../../jboss/container/jolokia/bash/README.adoc[jboss.container.jolokia.bash] - -link:../../../../../jboss/container/maven/s2i/bash/README.adoc[jboss.container.maven.s2i.bash] - -link:../../../../../jboss/container/prometheus/bash/README.adoc[jboss.container.prometheus.bash] - -link:../../../../../jboss/container/util/logging/bash/README.adoc[jboss.container.util.logging.bash] - -=== Module Repositories -No module repositories defined. diff --git a/jboss/container/java/s2i/bash/module.yaml b/jboss/container/java/s2i/bash/module.yaml index de5d1e96..b7f02b5f 100644 --- a/jboss/container/java/s2i/bash/module.yaml +++ b/jboss/container/java/s2i/bash/module.yaml @@ -16,6 +16,6 @@ modules: install: - name: jboss.container.maven.s2i.bash - name: jboss.container.java.run.bash - - name: jboss.container.jolokia.bash + - name: jboss.container.jolokia - name: jboss.container.prometheus - name: jboss.container.util.logging.bash diff --git a/jboss/container/jolokia/bash/artifacts/opt/jboss/container/jolokia/jolokia-opts b/jboss/container/jolokia/7/artifacts/opt/jboss/container/jolokia/jolokia-opts similarity index 96% rename from jboss/container/jolokia/bash/artifacts/opt/jboss/container/jolokia/jolokia-opts rename to jboss/container/jolokia/7/artifacts/opt/jboss/container/jolokia/jolokia-opts index a27bfa97..f0a3e12d 100644 --- a/jboss/container/jolokia/bash/artifacts/opt/jboss/container/jolokia/jolokia-opts +++ b/jboss/container/jolokia/7/artifacts/opt/jboss/container/jolokia/jolokia-opts @@ -88,5 +88,5 @@ if [ -z "${AB_JOLOKIA_OFF+x}" ]; then AB_JOLOKIA_CONFIG="${JBOSS_CONTAINER_JOLOKIA_MODULE}/etc/jolokia.properties" write_jolokia_properties "$AB_JOLOKIA_CONFIG" fi - echo "-javaagent:${JBOSS_CONTAINER_JOLOKIA_MODULE}/jolokia.jar=config=${AB_JOLOKIA_CONFIG}" + echo "-javaagent:/usr/share/java/jolokia-jvm-agent/jolokia-jvm.jar=config=${AB_JOLOKIA_CONFIG}" fi diff --git a/jboss/container/jolokia/7/backward_compatibility.sh b/jboss/container/jolokia/7/backward_compatibility.sh new file mode 100755 index 00000000..270860c3 --- /dev/null +++ b/jboss/container/jolokia/7/backward_compatibility.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Set up jolokia for java s2i builder image +set -euo pipefail + +# Legacy locations + +ln -s /opt/jboss/container/jolokia /opt/jolokia +chown -h jboss:root /opt/jolokia + +ln -s /usr/share/java/jolokia-jvm-agent/jolokia-jvm.jar \ + $JBOSS_CONTAINER_JOLOKIA_MODULE/jolokia.jar diff --git a/jboss/container/jolokia/bash/configure.sh b/jboss/container/jolokia/7/configure.sh similarity index 61% rename from jboss/container/jolokia/bash/configure.sh rename to jboss/container/jolokia/7/configure.sh index 32c2227c..9c4e3f37 100755 --- a/jboss/container/jolokia/bash/configure.sh +++ b/jboss/container/jolokia/7/configure.sh @@ -5,7 +5,11 @@ set -e SCRIPT_DIR=$(dirname $0) ARTIFACTS_DIR=${SCRIPT_DIR}/artifacts -mv /tmp/artifacts/jolokia-jvm-*-agent.jar ${ARTIFACTS_DIR}/opt/jboss/container/jolokia +mkdir -p /usr/share/java/jolokia-jvm-agent +mv /tmp/artifacts/jolokia-jvm-*-agent.jar \ + /usr/share/java/jolokia-jvm-agent/jolokia-jvm.jar +chown -h jboss:root \ + /usr/share/java/jolokia-jvm-agent/jolokia-jvm.jar chown -R jboss:root $SCRIPT_DIR chmod -R ug+rwX $SCRIPT_DIR @@ -18,6 +22,3 @@ popd mkdir -p /opt/jboss/container/jolokia/etc chmod 775 /opt/jboss/container/jolokia/etc chown -R jboss:root /opt/jboss/container/jolokia/etc - -ln -s /opt/jboss/container/jolokia/jolokia-jvm-*-agent.jar /opt/jboss/container/jolokia/jolokia.jar -chown -h jboss:root /opt/jboss/container/jolokia/jolokia.jar diff --git a/jboss/container/jolokia/7/module.yaml b/jboss/container/jolokia/7/module.yaml new file mode 100644 index 00000000..f52bf92a --- /dev/null +++ b/jboss/container/jolokia/7/module.yaml @@ -0,0 +1,66 @@ +schema_version: 1 + +name: jboss.container.jolokia +version: '7' +description: ^ + Provides support for configuring Jolokia. Basic usage is + opts="$JBOSS_CONTAINER_JOLOKIA_MODULE/jolokia-opts" + +labels: +- name: io.fabric8.s2i.version.jolokia + value: "1.6.2-redhat-00002" + +envs: +- name: JOLOKIA_VERSION + description: Version of Jolokia being used. + value: "1.6.2" +- name: AB_JOLOKIA_PASSWORD_RANDOM + description: Determines if a random AB_JOLOKIA_PASSWORD be generated. Set to **true** to generate random password. Generated value will be written to `/opt/jolokia/etc/jolokia.pw`. + value: "true" +- name: AB_JOLOKIA_AUTH_OPENSHIFT + description: Switch on client authentication for OpenShift TLS communication. The value of this parameter can be a relative distinguished name which must be contained in a presented client's certificate. Enabling this parameter will automatically switch Jolokia into https communication mode. The default CA cert is set to `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`. + value: "true" +- name: AB_JOLOKIA_HTTPS + description: Switch on secure communication with https. By default self signed server certificates are generated if no `serverCert` configuration is given in **AB_JOLOKIA_OPTS**. + value: "true" +- name: AB_JOLOKIA_OFF + description: If set disables activation of Joloka (i.e. echos an empty value). By default, Jolokia is enabled. + example: "true" +- name: AB_JOLOKIA_CONFIG + description: If set uses this file (including path) as Jolokia JVM agent properties (as described in Jolokia's link:https://www.jolokia.org/reference/html/agents.html#agents-jvm[reference manual]). If not set, the `/opt/jolokia/etc/jolokia.properties` will be created using the settings as defined in the manual. Otherwise the rest of the settings in this document are ignored. + example: "/opt/jolokia/custom.properties" +- name: AB_JOLOKIA_HOST + description: Host address to bind to. Defaults to **0.0.0.0**. + example: "127.0.0.1" +- name: AB_JOLOKIA_PORT + description: Port to listen to. Defaults to **8778**. + example: "5432" +- name: AB_JOLOKIA_USER + description: User for basic authentication. Defaults to **jolokia**. + example: "myusername" +- name: AB_JOLOKIA_PASSWORD + description: Password for basic authentication. By default authentication is switched off. + example: "mypassword" +- name: AB_JOLOKIA_ID + description: Agent ID to use (`$HOSTNAME` by default, which is the container id). + example: "openjdk-app-1-xqlsj" +- name: AB_JOLOKIA_DISCOVERY_ENABLED + description: Enable Jolokia discovery. Defaults to **false**. + example: "true" +- name: AB_JOLOKIA_OPTS + description: Additional options to be appended to the agent configuration. They should be given in the format `key=value,key=value,...`. + example: "backlog=20" +- name: JBOSS_CONTAINER_JOLOKIA_MODULE + value: /opt/jboss/container/jolokia + +ports: +- value: 8778 + +execute: +- script: configure.sh +- script: backward_compatibility.sh + +artifacts: +- name: jolokia-jvm + target: jolokia-jvm-1.6.2.redhat-00002-agent.jar + md5: 760f2fbaf6b142192f3cee2c99bfcbf8 diff --git a/jboss/container/jolokia/8.2/artifacts/opt/jboss/container/jolokia/jolokia-opts b/jboss/container/jolokia/8.2/artifacts/opt/jboss/container/jolokia/jolokia-opts new file mode 100644 index 00000000..f0a3e12d --- /dev/null +++ b/jboss/container/jolokia/8.2/artifacts/opt/jboss/container/jolokia/jolokia-opts @@ -0,0 +1,92 @@ +#!/bin/sh + +# Check whether a given config is contained in AB_JOLOKIA_OPTS +is_in_jolokia_opts() { + local prop=$1 + if [ -n "${AB_JOLOKIA_OPTS}" ] && [ x"${AB_JOLOKIA_OPTS}" != x"${AB_JOLOKIA_OPTS/${prop}/}" ]; then + echo "yes" + else + echo "no" + fi +} + +get_jolokia_properties() { + + echo "host=${AB_JOLOKIA_HOST:-*}" + echo "port=${AB_JOLOKIA_PORT:-8778}" + echo "discoveryEnabled=${AB_JOLOKIA_DISCOVERY_ENABLED:=false}" + + if [ -n "$AB_JOLOKIA_PASSWORD" ]; then + echo "user=${AB_JOLOKIA_USER:-jolokia}" + echo "password=${AB_JOLOKIA_PASSWORD}" + fi + if [ -n "$AB_JOLOKIA_HTTPS" ]; then + echo "protocol=https" + use_https=1 + fi + + # Integration with OpenShift client cert auth is enabled + # by default if not explicitly turned off by setting to 'false' + if [ "x${AB_JOLOKIA_AUTH_OPENSHIFT}" != "xfalse" ] && [ -f "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" ]; then + echo "useSslClientAuthentication=true" + echo "extraClientCheck=true" + + if [ -z ${use_https+x} ]; then + echo "protocol=https" + fi + if [ $(is_in_jolokia_opts "caCert") != "yes" ]; then + echo "caCert=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" + fi + + if [ $(is_in_jolokia_opts "clientPrincipal") != "yes" ]; then + if [ x"${AB_JOLOKIA_AUTH_OPENSHIFT}" != x"${AB_JOLOKIA_AUTH_OPENSHIFT/=/}" ]; then + # Supposed to contain a principal name to check + echo "clientPrincipal=`echo ${AB_JOLOKIA_AUTH_OPENSHIFT} | sed -e 's/ /\\\\ /g'`" + else + echo "clientPrincipal=cn=system:master-proxy" + fi + fi + fi + + # Add extra opts + if [ -n "${AB_JOLOKIA_OPTS}" ]; then + echo "${AB_JOLOKIA_OPTS}" | tr "," "\n" + fi + +} + +write_jolokia_properties() { + local jolokia_property_file="$1" + + # Setup Jolokia to accept basic auth, using a randomly generated password that is stored + # in the container in the ${DEPLOYMENTS_DIR}/jolokia.pw file. + if [ "$AB_JOLOKIA_PASSWORD_RANDOM" == "true" ]; then + pw_file="${JBOSS_CONTAINER_JOLOKIA_MODULE}/etc/jolokia.pw" + if [ -f "${pw_file}" ] ; then + AB_JOLOKIA_PASSWORD=`cat "${pw_file}"` + else + AB_JOLOKIA_PASSWORD=`tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1` + touch "${pw_file}" + chmod 660 "${pw_file}" + cat > "${pw_file}" < "${jolokia_property_file}" <> $JBOSS_HOME/bin/standalone.conf diff --git a/jolokia/module.yaml b/jolokia/module.yaml deleted file mode 100644 index 80b96caa..00000000 --- a/jolokia/module.yaml +++ /dev/null @@ -1,7 +0,0 @@ -schema_version: 1 -name: jolokia -version: '1.0' -description: Legacy jolokia script package. -execute: -- script: configure.sh - user: '185' diff --git a/tests/features/common.feature b/tests/features/common.feature index 5e4ff01f..ac95cb96 100644 --- a/tests/features/common.feature +++ b/tests/features/common.feature @@ -1,13 +1,6 @@ Feature: Openshift common tests - @jboss-decisionserver-6 @jboss-processserver-6 @jboss-webserver-3/webserver30-tomcat7-openshift @jboss-webserver-3/webserver31-tomcat7-openshift @jboss-webserver-3/webserver30-tomcat8-openshift @jboss-webserver-3/webserver31-tomcat8-openshift @jboss-amq-6 - Scenario: Check jolokia port is available - When container is ready - Then check that port 8778 is open - Then inspect container - | path | value | - | /Config/ExposedPorts | 8778/tcp | # CLOUD-1017: Option to enable script debugging @jboss-kieserver-6 @jboss-decisionserver-6 @jboss-processserver-6 @jboss-webserver-3/webserver30-tomcat7-openshift @jboss-webserver-3/webserver31-tomcat7-openshift @jboss-webserver-3/webserver30-tomcat8-openshift @jboss-webserver-3/webserver31-tomcat8-openshift @jboss-amq-6 @jboss-datavirt-6 @redhat-sso-7 diff --git a/tests/features/jolokia.feature b/tests/features/jolokia.feature new file mode 100644 index 00000000..83d32693 --- /dev/null +++ b/tests/features/jolokia.feature @@ -0,0 +1,23 @@ +# Tests for jboss/container/jolokia +Feature: Openshift OpenJDK Jolokia tests + + @openjdk + @redhat-openjdk-18 + @openj9 + Scenario: Check Environment variable is correct + Given s2i build https://github.com/jboss-openshift/openshift-quickstarts from undertow-servlet + Then run sh -c 'unzip -q -p /usr/share/java/jolokia-jvm-agent/jolokia-jvm.jar META-INF/maven/org.jolokia/jolokia-jvm/pom.properties | grep -F ${JOLOKIA_VERSION}' in container and check its output for version= + + @jboss-decisionserver-6 + @jboss-processserver-6 + @jboss-webserver-3/webserver30-tomcat7-openshift + @jboss-webserver-3/webserver31-tomcat7-openshift + @jboss-webserver-3/webserver30-tomcat8-openshift + @jboss-webserver-3/webserver31-tomcat8-openshift + @jboss-amq-6 + Scenario: Check jolokia port is available + When container is ready + Then check that port 8778 is open + Then inspect container + | path | value | + | /Config/ExposedPorts | 8778/tcp |