Move ph and dh to Helm
-- Helm charts for ph and dh
-- New container to do Consul k-v storage and service reg
-- Bootstrap container no longer deploys ph and dh
-- Healthcheck looks for ph and dh as Helm deployments
-- Updated/added licensing information
Issue-ID: DCAEGEN2-1091
Issue-ID: DCAEGEN2-1092
Change-Id: I5340bee6fba1340d4c05b0f37ddfb539c543469e
Signed-off-by: Jack Lucas <jflucas@research.att.com>
diff --git a/consul-loader-container/Dockerfile b/consul-loader-container/Dockerfile
new file mode 100644
index 0000000..868b41f
--- /dev/null
+++ b/consul-loader-container/Dockerfile
@@ -0,0 +1,23 @@
+# ============LICENSE_START=======================================================
+# org.onap.dcae
+# ================================================================================
+# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=========================================================
+#
+FROM ubuntu:16.04
+RUN apt-get update && apt-get install -y curl && mkdir -p /opt/app
+COPY *.sh /opt/app/
+WORKDIR /opt/app
+ENTRYPOINT ["/opt/app/consul_store.sh"]
diff --git a/consul-loader-container/README.md b/consul-loader-container/README.md
new file mode 100644
index 0000000..f3869d7
--- /dev/null
+++ b/consul-loader-container/README.md
@@ -0,0 +1,11 @@
+# DCAE Consul Loader Container
+
+The Dockerfile in this directory builds an image that can be used to spin up a container (typical a Kubernetes init container) that can load
+service registrations and key-value pairs into a Consul instance. This capability supports moving certain DCAE platform components from
+deployment using a Cloudify blueprint and the ONAP Kubernetes plugin to a Helm-based deployment. An init container can do the Consul
+setup previously handled by the ONAP Kubernetes plugin and the ONAP DCAE bootstrap script.
+
+The entrypoint for the container is the script `consul_store.sh`. See the documentation for `consul_store.sh` to see how to provide arguments to the script
+as well as how to use environment variables to set the Consul API protocol, host, and port.
+
+Note that the container runs the script to completion. It is not intended to be a long-running service.
\ No newline at end of file
diff --git a/consul-loader-container/consul_store.sh b/consul-loader-container/consul_store.sh
new file mode 100755
index 0000000..4e64fc3
--- /dev/null
+++ b/consul-loader-container/consul_store.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+# ================================================================================
+# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=========================================================
+
+# Push service registrations and key-value pairs to consul
+#
+# Environment variables control the consul address used:
+# -- CONSUL_PROTO: The protocol (http or https) used to access consul. DEFAULT: http
+# -- CONSUL_HOST: The Consul host address. DEFAULT: consul
+# -- CONSUL_PORT: The Consul API port. DEFAULT: 8500
+#
+# Command line options
+# --service name|address|port : Register a service with name 'name', address 'address', and port 'port'.
+# --key keyname|filepath: Register a key-value pair with key 'keyname' and the contents of a file at 'filepath' as its value
+# A command can include multiple instances of each option.
+
+CONSUL_ADDR=${CONSUL_PROTO:-http}://${CONSUL_HOST:-consul}:${CONSUL_PORT:-8500}
+KV_URL=${CONSUL_ADDR}/v1/kv
+REG_URL=${CONSUL_ADDR}/v1/catalog/register
+
+# Register a service into Consul so that it can be discovered via the Consul service discovery API
+# $1: Name under which service is registered
+# $2: Address (typically DNS name, but can be IP) of the service
+# $3: Port used by the service
+function register_service {
+ service="{\"Node\": \"dcae\", \"Address\": \"$2\", \"Service\": {\"Service\": \"$1\", \"Address\": \"$2\", \"Port\": $3}}"
+ echo $service
+ curl -v -X PUT --data-binary "${service}" -H 'Content-Type: application/json' $REG_URL
+}
+
+# Store the contents of a file into Consul KV store
+# $1: Key under which content is stored
+# $2: Path to file whose content will be the value associated with the key
+function put_key {
+ curl -v -X PUT --data-binary @$2 -H 'Content-Type: application/json' ${KV_URL}/$1
+}
+
+set -x
+
+# Check Consul readiness
+# The readiness container waits for a "consul-server" container to be ready,
+# but this isn't always enough. We need the Consul API to be up and for
+# the cluster to be formed, otherwise our Consul accesses might fail.
+# Wait for Consul API to come up
+until curl ${CONSUL_ADDR}/v1/agent/services
+do
+ echo Waiting for Consul API
+ sleep 60
+done
+# Wait for a leader to be elected
+until [[ "$(curl -Ss {$CONSUL_ADDR}/v1/status/leader)" != '""' ]]
+do
+ echo Waiting for leader
+ sleep 30
+done
+
+while (( "$#" ))
+do
+ case $1 in
+
+ "--service")
+ # ${2//|/ } turns all of the | characters in argument 2 into spaces
+ # () uses the space delimited string to initialize an array
+ # this turns an argument like inventory-api|inventory.onap|8080 into
+ # a three-element array with elements "inventory-api", "inventory.onap", and "8080"
+ s=(${2//|/ })
+ register_service ${s[@]}
+ shift 2;
+ ;;
+ "--key")
+ # See above for explanation of (${2//|/ })
+ kv=(${2//|/ })
+ put_key ${kv[@]}
+ shift 2;
+ ;;
+ *)
+ echo "ignoring $1"
+ shift
+ ;;
+ esac
+done
diff --git a/consul-loader-container/pom.xml b/consul-loader-container/pom.xml
new file mode 100644
index 0000000..dd68443
--- /dev/null
+++ b/consul-loader-container/pom.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0"?>
+<!--
+================================================================================
+Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+================================================================================
+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.
+============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.dcaegen2.deployments</groupId>
+ <artifactId>deployments</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ </parent>
+ <groupId>org.onap.dcaegen2.deployments</groupId>
+ <artifactId>consul-loader-container</artifactId>
+ <name>dcaegen2-deployments-consul-loader-container</name>
+ <version>1.0.0</version>
+ <url>http://maven.apache.org</url>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <sonar.skip>true</sonar.skip>
+ <sonar.sources>.</sonar.sources>
+ <!-- customize the SONARQUBE URL -->
+ <!-- sonar.host.url>http://localhost:9000</sonar.host.url -->
+ <!-- below are language dependent -->
+ <!-- for Python -->
+ <sonar.language>py</sonar.language>
+ <sonar.pluginName>Python</sonar.pluginName>
+ <sonar.inclusions>**/*.py</sonar.inclusions>
+ <!-- for JavaScaript -->
+ <!--
+ <sonar.language>js</sonar.language>
+ <sonar.pluginName>JS</sonar.pluginName>
+ <sonar.inclusions>**/*.js</sonar.inclusions>
+ -->
+ </properties>
+ <build>
+ <finalName>${project.artifactId}-${project.version}</finalName>
+ <plugins>
+ <!-- plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.4.1</version>
+ <configuration>
+ <descriptors>
+ <descriptor>assembly/dep.xml</descriptor>
+ </descriptors>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin -->
+ <!-- now we configure custom action (calling a script) at various lifecycle phases -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <id>clean phase script</id>
+ <phase>clean</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>clean</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>generate-sources script</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>generate-sources</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>compile script</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>compile</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>package script</id>
+ <phase>package</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>package</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test script</id>
+ <phase>test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>test</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>install script</id>
+ <phase>install</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>install</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ <execution>
+ <id>deploy script</id>
+ <phase>deploy</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <arguments>
+ <argument>${project.artifactId}</argument>
+ <argument>deploy</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/healthcheck-container/healthcheck.js b/healthcheck-container/healthcheck.js
index 1d6fccb..c4f2dd7 100644
--- a/healthcheck-container/healthcheck.js
+++ b/healthcheck-container/healthcheck.js
@@ -29,14 +29,14 @@
'dcae-cloudify-manager',
'dcae-config-binding-service',
'dcae-inventory-api',
- 'dcae-servicechange-handler'
+ 'dcae-servicechange-handler',
+ 'dcae-deployment-handler',
+ 'dcae-policy-handler'
];
// List of deployments expected to be created by CM at boot time
const bootDeps =
[
- 'dep-deployment-handler',
- 'dep-policy-handler',
'dep-dcae-ves-collector',
'dep-dcae-tca-analytics',
'dep-dcae-prh',
diff --git a/healthcheck-container/package.json b/healthcheck-container/package.json
index 31f1493..cc20578 100644
--- a/healthcheck-container/package.json
+++ b/healthcheck-container/package.json
@@ -1,7 +1,7 @@
{
"name": "k8s-healthcheck",
"description": "DCAE healthcheck server",
- "version": "1.2.2",
+ "version": "1.2.4",
"main": "healthcheck.js",
"author": "author",
"license": "(Apache-2.0)"
diff --git a/healthcheck-container/pom.xml b/healthcheck-container/pom.xml
index e728a66..abc7965 100644
--- a/healthcheck-container/pom.xml
+++ b/healthcheck-container/pom.xml
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
================================================================================
-Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
<groupId>org.onap.dcaegen2.deployments</groupId>
<artifactId>healthcheck-container</artifactId>
<name>dcaegen2-deployments-healthcheck-container</name>
- <version>1.2.3</version>
+ <version>1.2.4</version>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/k8s-bootstrap-container/bootstrap.sh b/k8s-bootstrap-container/bootstrap.sh
index 76504a7..0c55559 100755
--- a/k8s-bootstrap-container/bootstrap.sh
+++ b/k8s-bootstrap-container/bootstrap.sh
@@ -1,6 +1,6 @@
#!/bin/bash
# ================================================================================
-# Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -123,15 +123,8 @@
# Consul service registration data
CBS_REG='{"ID": "dcae-cbs0", "Name": "config_binding_service", "Address": "config-binding-service", "Port": 10000}'
CBS_REG1='{"ID": "dcae-cbs1", "Name": "config-binding-service", "Address": "config-binding-service", "Port": 10000}'
-INV_REG='{"ID": "dcae-inv0", "Name": "inventory", "Address": "inventory", "Port": 8080}'
HE_REG='{"ID": "dcae-he0", "Name": "holmes-engine-mgmt", "Address": "holmes-engine-mgmt", "Port": 9102}'
HR_REG='{"ID": "dcae-hr0", "Name": "holmes-rule-mgmt", "Address": "holmes-rule-mgmt", "Port": 9101}'
-
-# Cloudify Manager will always be in the ONAP namespace.
-CM_REG='{"ID": "dcae-cm0", "Name": "cloudify_manager", "Port": 80, "Address": "dcae-cloudify-manager.'${ONAP_NAMESPACE}'"}'
-# Policy handler will be looked up from a plugin on CM. If DCAE components are running in a different k8s
-# namespace than CM (which always runs in the common ONAP namespace), then the policy handler address must
-# be qualified with the DCAE namespace.
PH_REG='{"ID": "dcae-ph0", "Name": "policy_handler", "Port": 25577, "Address": "policy-handler'
if [ ! -z "${DCAE_NAMESPACE}" ]
then
@@ -139,8 +132,6 @@
fi
PH_REG="${PH_REG}\"}"
-
-
# Set up profile to access Cloudify Manager
cfy profiles use -u admin -t default_tenant -p "${CMPASS}" "${CMADDR}"
@@ -178,7 +169,7 @@
done
# Put service registrations into the local Consul configuration directory
-for sr in CBS_REG CBS_REG1 INV_REG HE_REG HR_REG CM_REG PH_REG
+for sr in CBS_REG CBS_REG1 HE_REG HR_REG PH_REG
do
echo '{"service" : ' ${!sr} ' }'> /opt/consul/config/${sr}.json
done
@@ -204,13 +195,6 @@
deploy pgaas_initdb k8s-pgaas-initdb.yaml k8s-pgaas-initdb-inputs.yaml &
PG_PID=$!
wait ${PG_PID}
-# deployment_handler and policy_handler can be deployed simultaneously
-INV_PID=$!
-deploy deployment_handler k8s-deployment_handler.yaml k8s-deployment_handler-inputs.yaml &
-DH_PID=$!
-deploy policy_handler k8s-policy_handler.yaml k8s-policy_handler-inputs.yaml&
-PH_PID=$!
-wait ${INV_PID} ${DH_PID} ${PH_PID}
# Deploy service components
# tca, ves, prh, hv-ves, datafile-collector can be deployed simultaneously
diff --git a/k8s-bootstrap-container/load-blueprints.sh b/k8s-bootstrap-container/load-blueprints.sh
index 098c022..e42a72e 100755
--- a/k8s-bootstrap-container/load-blueprints.sh
+++ b/k8s-bootstrap-container/load-blueprints.sh
@@ -1,4 +1,19 @@
#!/bin/bash
+# ================================================================================
+# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=========================================================
# Load DCAE blueprints/inputs onto container
# $1 Blueprint repo base URL
# Expect blueprints to be at <base URL>/blueprints
@@ -7,10 +22,8 @@
BLUEPRINTS=\
"
-k8s-deployment_handler.yaml \
k8s-holmes-engine.yaml \
k8s-holmes-rules.yaml \
-k8s-policy_handler.yaml \
k8s-pgaas-initdb.yaml \
k8s-tca.yaml \
k8s-ves.yaml \
diff --git a/k8s-bootstrap-container/pom.xml b/k8s-bootstrap-container/pom.xml
index bfcbdd2..c1eb884 100644
--- a/k8s-bootstrap-container/pom.xml
+++ b/k8s-bootstrap-container/pom.xml
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!--
================================================================================
-Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -27,7 +27,7 @@
<groupId>org.onap.dcaegen2.deployments</groupId>
<artifactId>k8s-bootstrap-container</artifactId>
<name>dcaegen2-deployments-k8s-bootstrap-container</name>
- <version>1.4.8</version>
+ <version>1.4.9</version>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/pom.xml b/pom.xml
index 17109c4..f05745d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
============LICENSE_START=======================================================
org.onap.dcae
================================================================================
-Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
+Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -43,6 +43,7 @@
<module>tca-cdap-container</module>
<module>healthcheck-container</module>
<module>tls-init-container</module>
+ <module>consul-loader-container</module>
</modules>
<profiles>
<profile>
@@ -97,7 +98,7 @@
</configuration>
</plugin>
<!-- first disable the default Java plugins at various stages -->
- <!-- maven-resources-plugin is called during "*resource" phases by default behavior. it prepares
+ <!-- maven-resources-plugin is called during "*resource" phases by default behavior. it prepares
the resources dir. we do not need it -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -128,7 +129,7 @@
</execution>
</executions>
</plugin>
- <!-- maven-install-plugin is called during "install" phase by default behavior. it tries to copy stuff under
+ <!-- maven-install-plugin is called during "install" phase by default behavior. it tries to copy stuff under
target dir to ~/.m2. we do not need it -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>