diff options
author | danielhanrahan <daniel.hanrahan@est.tech> | 2021-08-20 16:55:19 +0100 |
---|---|---|
committer | danielhanrahan <daniel.hanrahan@est.tech> | 2021-09-01 10:12:50 +0100 |
commit | 608e625fdd262d4362a998f290017a7d3a978aaf (patch) | |
tree | c1f5ad7efae7f7105721992824c595cef9c9cc85 | |
parent | db784313b8ba29f5d4396c1cc96bb5f3c853677f (diff) |
Add docker image generation to maven for policy-gui
Add maven uber-jar artifact for gui-editor-apex
Add maven tarball artifact for gui-clamp
Create docker image containing nginx and policy GUIs
Issue-ID: POLICY-3574
Change-Id: I06e5ed6fb610e0746f376114f628bb9b1a530cab
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
-rw-r--r-- | README.md | 40 | ||||
-rw-r--r-- | gui-clamp/pom.xml | 31 | ||||
-rw-r--r-- | gui-clamp/src/main/assembly/clamp-build.xml | 34 | ||||
-rw-r--r-- | gui-editors/gui-editor-apex/pom.xml | 22 | ||||
-rw-r--r-- | packages/policy-gui-docker/pom.xml | 184 | ||||
-rw-r--r-- | packages/policy-gui-docker/src/main/docker/Dockerfile | 54 | ||||
-rw-r--r-- | packages/policy-gui-docker/src/main/docker/nginx/default.conf.template | 30 | ||||
-rw-r--r-- | packages/policy-gui-docker/src/main/docker/nginx/index.html | 14 | ||||
-rw-r--r-- | packages/policy-gui-docker/src/main/docker/nginx/nginx.conf | 18 | ||||
-rw-r--r-- | packages/policy-gui-docker/src/main/docker/policy-gui.sh | 36 | ||||
-rw-r--r-- | packages/pom.xml | 51 | ||||
-rw-r--r-- | pom.xml | 1 |
12 files changed, 514 insertions, 1 deletions
@@ -1,7 +1,45 @@ +# Summary + Copyright 2017-2018 AT&T Intellectual Property. All rights reserved. +Copyright (C) 2021 Nordix Foundation. This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE Full license text at https://creativecommons.org/licenses/by/4.0/legalcode This source repository contains the ONAP Policy GUI code. -To build it using Maven 3, run: mvn clean install +To build it using Maven 3, run: mvn clean install -P docker + + +# Docker image + +Maven produces a single docker image containing the policy GUIs. These are exposed on +the same port (8080) using different URLs: +- Apex Policy Editor: http://localhost:8080/apex-editor +- PDP Monitoring UI: http://localhost:8080/pdp-monitoring +- CLAMP Designer UI: http://localhost:8080/clamp + +## Building +You can use the following command to build the policy-gui docker image: +``` +mvn clean install -P docker +``` + +## Deployment +Currently, the policy-gui docker image can be deployed with minimal configuration. As +the clamp backend is required to use the clamp GUI, you can use the CLAMP_REST_URL +environment variable to set its location. + +By default, CLAMP_REST_URL is set to an invalid address (0.0.0.0), meaning the CLAMP GUI +will not work without specifying CLAMP_REST_URL. + +If running clamp as part of a docker network, where `policy-clamp-backend` is the CLAMP +backend, then CLAMP_REST_URL should be set to `https://policy-clamp-backend:8443`. + +If running clamp backend on localhost port 8443, the policy-gui docker image would be +started like this: +``` +docker run -p 8080:8080 \ + --add-host host.docker.internal:host-gateway \ + --env CLAMP_REST_URL=https://host.docker.internal:8443 \ + onap/policy-gui +``` diff --git a/gui-clamp/pom.xml b/gui-clamp/pom.xml index 8d29ce4..a19d1ca 100644 --- a/gui-clamp/pom.xml +++ b/gui-clamp/pom.xml @@ -147,6 +147,17 @@ </configuration> </execution> <execution> + <id>npm_build</id> + <goals> + <goal>npm</goal> + </goals> + <phase>package</phase> + <configuration> + <workingDirectory>${project.build.directory}/${ui.react.src}</workingDirectory> + <arguments>run build</arguments> + </configuration> + </execution> + <execution> <id>npm_test</id> <goals> <goal>npm</goal> @@ -158,6 +169,7 @@ <workingDirectory>${project.build.directory}/${ui.react.src}</workingDirectory> </configuration> </execution> + <!-- XXX Are these deploy steps using npm desirable given docker image generation? --> <execution> <id>npm_install_lib</id> <goals> @@ -228,6 +240,25 @@ <artifactId>versions-maven-plugin</artifactId> <version>1.3.1</version> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <id>generate-gui-clamp-tar</id> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + <configuration> + <descriptors> + <descriptor>src/main/assembly/clamp-build.xml</descriptor> + </descriptors> + <finalName>${project.artifactId}-${project.version}</finalName> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> </project> diff --git a/gui-clamp/src/main/assembly/clamp-build.xml b/gui-clamp/src/main/assembly/clamp-build.xml new file mode 100644 index 0000000..215b646 --- /dev/null +++ b/gui-clamp/src/main/assembly/clamp-build.xml @@ -0,0 +1,34 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2021 Nordix Foundation. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> + <id>clamp-build</id> + <formats> + <format>tar.gz</format> + </formats> + <includeBaseDirectory>false</includeBaseDirectory> + <fileSets> + <fileSet> + <directory>${project.build.directory}/${ui.react.src}/build</directory> + <outputDirectory>clamp</outputDirectory> + </fileSet> + </fileSets> +</assembly> diff --git a/gui-editors/gui-editor-apex/pom.xml b/gui-editors/gui-editor-apex/pom.xml index b52631a..1854166 100644 --- a/gui-editors/gui-editor-apex/pom.xml +++ b/gui-editors/gui-editor-apex/pom.xml @@ -300,6 +300,28 @@ </transformers> </configuration> </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>3.0.0</version> + <executions> + <execution> + <id>attach-artifacts</id> + <phase>package</phase> + <goals> + <goal>attach-artifact</goal> + </goals> + <configuration> + <artifacts> + <artifact> + <file>${project.build.directory}/${project.artifactId}-uber-${project.version}.jar</file> + <type>uber.jar</type> + </artifact> + </artifacts> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> </project> diff --git a/packages/policy-gui-docker/pom.xml b/packages/policy-gui-docker/pom.xml new file mode 100644 index 0000000..94453ce --- /dev/null +++ b/packages/policy-gui-docker/pom.xml @@ -0,0 +1,184 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2021 Nordix Foundation. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.onap.policy.gui</groupId> + <artifactId>gui-packages</artifactId> + <version>2.1.0-SNAPSHOT</version> + </parent> + + <packaging>pom</packaging> + <artifactId>policy-gui-docker</artifactId> + <name>${project.artifactId}</name> + <description>Policy gui docker image</description> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <dist.project.version>${project.version}</dist.project.version> + <docker.skip>false</docker.skip> + <docker.skip.build>false</docker.skip.build> + <docker.skip.push>false</docker.skip.push> + <docker.pull.registry>nexus3.onap.org:10001</docker.pull.registry> + <docker.push.registry>nexus3.onap.org:10003</docker.push.registry> + <maven.build.timestamp.format>yyyyMMdd'T'HHmm</maven.build.timestamp.format> + </properties> + + <build> + <finalName>${project.artifactId}-${project.version}</finalName> + <plugins> + <plugin> + <groupId>org.codehaus.gmaven</groupId> + <artifactId>groovy-maven-plugin</artifactId> + <version>2.1.1</version> + <executions> + <execution> + <phase>validate</phase> + <goals> + <goal>execute</goal> + </goals> + <configuration> + <source>https://github.com/onap/policy-docker/raw/master/utils/groovy/docker-tag.groovy</source> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + + <configuration> + <verbose>true</verbose> + <apiVersion>1.23</apiVersion> + <pullRegistry>${docker.pull.registry}</pullRegistry> + <pushRegistry>${docker.push.registry}</pushRegistry> + + <images> + <image> + <name>onap/policy-gui</name> + <build> + <cleanup>try</cleanup> + <dockerFile>Dockerfile</dockerFile> + <tags> + <tag>${project.version}</tag> + <tag>${project.version}-${maven.build.timestamp}</tag> + <tag>${project.docker.latest.minmax.tag.version}</tag> + </tags> + <assembly> + <inline> + <dependencySets> + <dependencySet> + <includes> + <include>org.onap.policy.gui:gui-clamp:tar.gz:clamp-build:${project.version}</include> + </includes> + <outputFileNameMapping>gui-clamp.tar.gz</outputFileNameMapping> + </dependencySet> + <dependencySet> + <includes> + <include>org.onap.policy.gui:gui-pdp-monitoring:uber.jar:${project.version}</include> + </includes> + <outputFileNameMapping>gui-pdp-monitoring-uber.jar</outputFileNameMapping> + </dependencySet> + <dependencySet> + <includes> + <include>org.onap.policy.gui.editors:gui-editor-apex:uber.jar:${project.version}</include> + </includes> + <outputFileNameMapping>gui-editor-apex-uber.jar</outputFileNameMapping> + </dependencySet> + </dependencySets> + </inline> + </assembly> + </build> + </image> + </images> + </configuration> + + <executions> + <execution> + <id>clean-images</id> + <phase>pre-clean</phase> + <goals> + <goal>remove</goal> + </goals> + <configuration> + <removeAll>true</removeAll> + </configuration> + </execution> + + <execution> + <id>generate-images</id> + <phase>generate-sources</phase> + <goals> + <goal>build</goal> + </goals> + </execution> + + <execution> + <id>push-images</id> + <phase>deploy</phase> + <goals> + <goal>build</goal> + <goal>push</goal> + </goals> + <configuration> + <image>onap/policy-gui</image> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-deploy-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.onap.policy.gui</groupId> + <artifactId>gui-clamp</artifactId> + <version>${project.version}</version> + <classifier>clamp-build</classifier> + <type>tar.gz</type> + </dependency> + <dependency> + <groupId>org.onap.policy.gui</groupId> + <artifactId>gui-pdp-monitoring</artifactId> + <version>${project.version}</version> + <type>uber.jar</type> + </dependency> + <dependency> + <groupId>org.onap.policy.gui.editors</groupId> + <artifactId>gui-editor-apex</artifactId> + <version>${project.version}</version> + <type>uber.jar</type> + </dependency> + </dependencies> +</project> diff --git a/packages/policy-gui-docker/src/main/docker/Dockerfile b/packages/policy-gui-docker/src/main/docker/Dockerfile new file mode 100644 index 0000000..e58c9ea --- /dev/null +++ b/packages/policy-gui-docker/src/main/docker/Dockerfile @@ -0,0 +1,54 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2021 Nordix Foundation. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +#------------------------------------------------------------------------------- + +FROM onap/policy-jre-alpine:2.3.0 + +LABEL maintainer="Policy Team" + +ARG POLICY_LOGS=/var/log/onap/policy/gui + +ENV POLICY_LOGS=$POLICY_LOGS +ENV POLICY_HOME=$POLICY_HOME/gui +ENV CLAMP_REST_URL=http://0.0.0.0 + +RUN mkdir -p $POLICY_HOME $POLICY_LOGS $POLICY_HOME/bin $POLICY_HOME/lib && \ + chown -R policy:policy $POLICY_HOME $POLICY_LOGS && \ + apk update && \ + apk add --no-cache gettext nginx + +WORKDIR $POLICY_HOME +COPY policy-gui.sh ./bin/ +COPY /maven/gui-editor-apex-uber.jar ./lib/ +COPY /maven/gui-pdp-monitoring-uber.jar ./lib/ +COPY nginx/nginx.conf /etc/nginx/nginx.conf +COPY nginx/default.conf.template /etc/nginx/templates/default.conf.template +COPY nginx/index.html /usr/share/nginx/html/ +ADD /maven/gui-clamp.tar.gz /usr/share/nginx/html/ +RUN rm /etc/nginx/conf.d/default.conf && \ + ln -sf /dev/stdout /var/log/nginx/access.log && \ + ln -sf /dev/stderr /var/log/nginx/error.log && \ + touch /var/run/nginx.pid && \ + chown -R policy:policy . /etc/nginx /usr/share/nginx /var/lib/nginx /var/log/nginx /var/run/nginx.pid && \ + chmod 755 bin/*.sh + +USER policy +WORKDIR $POLICY_HOME/bin +ENTRYPOINT [ "./policy-gui.sh" ] +EXPOSE 8080 diff --git a/packages/policy-gui-docker/src/main/docker/nginx/default.conf.template b/packages/policy-gui-docker/src/main/docker/nginx/default.conf.template new file mode 100644 index 0000000..a12f34b --- /dev/null +++ b/packages/policy-gui-docker/src/main/docker/nginx/default.conf.template @@ -0,0 +1,30 @@ +server { + listen 8080; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ =404; + } + + location /clamp/restservices/clds/ { + proxy_pass ${CLAMP_REST_URL}/restservices/clds/; + } + + location /apex-editor/ { + proxy_pass http://localhost:18989/; + proxy_set_header Host $host; + proxy_set_header If-Modified-Since $http_if_modified_since; + } + + location /pdp-monitoring/ { + proxy_pass http://localhost:18999/; + proxy_set_header Host $host; + proxy_set_header If-Modified-Since $http_if_modified_since; + } + + location = /50x.html { + root /var/lib/nginx/html; + } + error_page 500 502 503 504 /50x.html; +} diff --git a/packages/policy-gui-docker/src/main/docker/nginx/index.html b/packages/policy-gui-docker/src/main/docker/nginx/index.html new file mode 100644 index 0000000..98742ae --- /dev/null +++ b/packages/policy-gui-docker/src/main/docker/nginx/index.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>ONAP Policy GUI</title> +</head> +<body> + <ul> + <li><a href="/apex-editor">Apex Policy Editor</a></li> + <li><a href="/pdp-monitoring">PDP Monitoring</a></li> + <li><a href="/clamp">CLAMP Designer UI</a></li> + </ul> +</body> +</html> diff --git a/packages/policy-gui-docker/src/main/docker/nginx/nginx.conf b/packages/policy-gui-docker/src/main/docker/nginx/nginx.conf new file mode 100644 index 0000000..aac9bb6 --- /dev/null +++ b/packages/policy-gui-docker/src/main/docker/nginx/nginx.conf @@ -0,0 +1,18 @@ +worker_processes 1; +pid /var/run/nginx.pid; +error_log /dev/stdout info; +events { +} +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + sendfile on; + #tcp_nopush on; + keepalive_timeout 65; + #gzip on; + include /etc/nginx/conf.d/*.conf; +} diff --git a/packages/policy-gui-docker/src/main/docker/policy-gui.sh b/packages/policy-gui-docker/src/main/docker/policy-gui.sh new file mode 100644 index 0000000..4d4cbee --- /dev/null +++ b/packages/policy-gui-docker/src/main/docker/policy-gui.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env sh +# +# ============LICENSE_START======================================================= +# Copyright (C) 2021 Nordix Foundation. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +# + +trap 'exit 0' SIGTERM + +JAVA_HOME=/usr/lib/jvm/java-11-openjdk/ + +echo "Starting gui-editor-apex" +$JAVA_HOME/bin/java -jar "$POLICY_HOME/lib/gui-editor-apex-uber.jar" -p 18989 & + +echo "Starting gui-pdp-monitoring" +$JAVA_HOME/bin/java -jar "$POLICY_HOME/lib/gui-pdp-monitoring-uber.jar" -p 18999 & + +echo "Starting nginx" +envsubst '${CLAMP_REST_URL}' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf +nginx -g "daemon on;" + +wait diff --git a/packages/pom.xml b/packages/pom.xml new file mode 100644 index 0000000..eb789ce --- /dev/null +++ b/packages/pom.xml @@ -0,0 +1,51 @@ +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2021 Nordix Foundation. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache-2.0 + ============LICENSE_END========================================================= +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.onap.policy.gui</groupId> + <artifactId>policy-gui</artifactId> + <version>2.1.0-SNAPSHOT</version> + </parent> + + <artifactId>gui-packages</artifactId> + <packaging>pom</packaging> + + <name>${project.artifactId}</name> + <description>[${project.parent.artifactId}] packaging</description> + + <properties> + <!-- There is no code in this sub-module, only holds interfaces. So skip sonar. --> + <sonar.skip>true</sonar.skip> + </properties> + + <profiles> + <profile> + <id>docker</id> + <modules> + <module>policy-gui-docker</module> + </modules> + <properties> + <docker.skip.push>false</docker.skip.push> + </properties> + </profile> + </profiles> +</project> + @@ -51,6 +51,7 @@ <module>gui-pdp-monitoring</module> <module>gui-editors</module> <module>gui-clamp</module> + <module>packages</module> </modules> <dependencies> |