blob: 688410efc9eab72f067f415890d9206af4d30565 [file] [log] [blame]
Samuli Silvius9e9afd72018-12-21 14:23:51 +02001#! /usr/bin/env bash
2
3# COPYRIGHT NOTICE STARTS HERE
4#
Tomáš Levora8d272bd2019-03-12 15:06:35 +01005# Copyright 2018-2019 © Samsung Electronics Co., Ltd.
Samuli Silvius9e9afd72018-12-21 14:23:51 +02006#
7# Licensed under the Apache License, Version 2.0 (the "License");
8# you may not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS,
15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18#
19# COPYRIGHT NOTICE ENDS HERE
20
Samuli Silvius9e9afd72018-12-21 14:23:51 +020021### This script prepares Nexus repositories data blobs for ONAP
22
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020023## The script requires following dependencies are installed: nodejs, jq, docker, twine, expect
Mateusz Pilatb12b4402019-05-23 15:55:56 +020024## All required resources are expected in the upper directory created during
25## download procedure as DATA_DIR or in the directory given as --input-directory
26## All lists used must be in project data_lists directory or in the directory given
27## as --resource-list-directory
Samuli Silvius9e9afd72018-12-21 14:23:51 +020028
29# Fail fast settings
30set -e
31
Tomáš Levora8d272bd2019-03-12 15:06:35 +010032TIMESTAMP="date +'%Y-%m-%d_%H-%M-%S'"
33SCRIPT_LOG="/tmp/$(basename $0)_$(eval ${TIMESTAMP}).log"
34
35# Log everything
36exec &> >(tee -a "${SCRIPT_LOG}")
37
Samuli Silvius9e9afd72018-12-21 14:23:51 +020038# Nexus repository location
39NEXUS_DOMAIN="nexus"
Tomáš Levora8d272bd2019-03-12 15:06:35 +010040NEXUS_PORT="8081"
41NEXUS_DOCKER_PORT="8082"
42NPM_REGISTRY="http://${NEXUS_DOMAIN}:${NEXUS_PORT}/repository/npm-private/"
43PYPI_REGISTRY="http://${NEXUS_DOMAIN}:${NEXUS_PORT}/repository/pypi-private/"
44DOCKER_REGISTRY="${NEXUS_DOMAIN}:${NEXUS_DOCKER_PORT}"
45DEFAULT_REGISTRY="docker.io"
Samuli Silvius9e9afd72018-12-21 14:23:51 +020046
47# Nexus repository credentials
48NEXUS_USERNAME=admin
49NEXUS_PASSWORD=admin123
50NEXUS_EMAIL=admin@example.org
51
Tomáš Levora8d272bd2019-03-12 15:06:35 +010052# Setting paths
53LOCAL_PATH="$(readlink -f $(dirname ${0}))"
Mateusz Pilatb12b4402019-05-23 15:55:56 +020054
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020055# Defaults
Tomáš Levorae878f032019-06-13 13:31:01 +020056DOCKER_LOAD="false"
Tomáš Levorabe748842019-09-04 13:56:53 +020057NPM_PUSH="false"
58PYPI_PUSH="false"
Tomáš Levora8d272bd2019-03-12 15:06:35 +010059DATA_DIR="$(realpath ${LOCAL_PATH}/../../resources)"
Mateusz Pilatb12b4402019-05-23 15:55:56 +020060NEXUS_DATA_DIR="${DATA_DIR}/nexus_data"
Tomáš Levora8d272bd2019-03-12 15:06:35 +010061LISTS_DIR="${LOCAL_PATH}/data_lists"
62
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020063# Required dependencies
Tomáš Levorabe748842019-09-04 13:56:53 +020064COMMANDS=(jq docker)
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +020065
Mateusz Pilatb12b4402019-05-23 15:55:56 +020066usage () {
Tomáš Levora55b43662019-07-17 13:42:47 +020067 echo "
68 Usage: $(basename $0) [OPTION...] [FILE]...
Mateusz Pilatb12b4402019-05-23 15:55:56 +020069
Tomáš Levora55b43662019-07-17 13:42:47 +020070 This script prepares Nexus repositories data blobs for ONAP
71
72 Following dependencies are required: nodejs, jq, docker, twine, expect
73 By default, without any lists or dirs provided, the resources are expected as downloaded
74 during download process and default lists will be used to build the Nexus blob in the same
75 resources dir
76
77 Examples:
78 $(basename $0) --input-directory </path/to/downloaded/files/dir> -ld --output-directory
79 </path/to/output/dir> --resource-list-directory </path/to/dir/with/resource/list>
80 # Docker images, npms and pypi packages will be loaded from specified directory
81 # and the blob is created
82 $(basename $0) -d </path/to/docker/images/list> -d </path/to/another/docker/images/list>
83 -n </path/to/npm/list> -p </path/to/pip/list>
84 # Docker images, npms and pypi packages will be pushed to Nexus based and provided data
85 # lists (multiple lists can be provided)
86
87 -d | --docker use specific list of docker images to be pushed into Nexus
88 (in case of -ld used, this list will be used for loading of
89 the images)
90 -h | --help print this usage
91 -i | --input-directory use specific directory containing resources needed to
92 create nexus blob
93 The structure of this directory must organized as described
94 in build guide
95 -ld | --load-docker-images load docker images from resource directory
96 -n | --npm list of npm packages to be pushed into Nexus
97 -o | --output-directory use specific directory for the target blob
98 -p | --pypi use specific list of pypi packages to be pushed into Nexus
99 -rl | --resource-list-directory use specific directory with docker, pypi and npm lists
Mateusz Pilatb12b4402019-05-23 15:55:56 +0200100 "
101 exit 1
102}
103
Tomáš Levora80594072019-07-11 10:38:23 +0200104publish_ports () {
105 for REGISTRY in $(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true) ${NEXUS_PORT}; do
106 if [[ ${REGISTRY} != *":"* ]]; then
107 if [[ ${PUBLISHED_PORTS} != *"80:${NEXUS_DOCKER_PORT}"* ]]; then
108 PUBLISHED_PORTS="${PUBLISHED_PORTS} -p 80:${NEXUS_DOCKER_PORT}"
109 fi
110 else
111 REGISTRY_PORT="$(sed 's/^.*\:\([[:digit:]]*\)$/\1/' <<< ${REGISTRY})"
112 if [[ ${PUBLISHED_PORTS} != *"${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"* ]]; then
113 PUBLISHED_PORTS="${PUBLISHED_PORTS} -p ${REGISTRY_PORT}:${NEXUS_DOCKER_PORT}"
114 fi
115 fi
116 done
117}
118
119simulated_hosts () {
120 SIMUL_HOSTS=($(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$// ; s/:.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY} || true ) ${NEXUS_DOMAIN})
121 for HOST in "${SIMUL_HOSTS[@]}"; do
122 if ! grep -wq ${HOST} /etc/hosts; then
123 echo "127.0.0.1 ${HOST}" >> /etc/hosts
124 fi
125 done
126}
127
Tomáš Levorae878f032019-06-13 13:31:01 +0200128load_docker_images () {
129 for ARCHIVE in $(sed $'s/\r// ; /^#/d ; s/\:/\_/g ; s/\//\_/g ; s/$/\.tar/g' ${1} | awk '{ print $1 }'); do
130 docker load -i ${NXS_SRC_DOCKER_IMG_DIR}/${ARCHIVE}
131 done
132}
133
Tomáš Levorabe748842019-09-04 13:56:53 +0200134prepare_npm () {
135 # Configure NPM registry to our Nexus repository
136 echo "Configure NPM registry to ${NPM_REGISTRY}"
137 npm config set registry "${NPM_REGISTRY}"
138
139 # Login to NPM registry
140 /usr/bin/expect <<- EOF
141 spawn npm login
142 expect "Username:"
143 send "${NEXUS_USERNAME}\n"
144 expect "Password:"
145 send "${NEXUS_PASSWORD}\n"
146 expect Email:
147 send "${NEXUS_EMAIL}\n"
148 expect eof
149 EOF
150}
151
152patch_npm () {
153 # Patch problematic package
154 PATCHED_NPM="$(grep tsscmp ${1} | sed $'s/\r// ; s/\\@/\-/ ; s/$/\.tgz/')"
155 if [[ ! -z "${PATCHED_NPM}" ]] && ! zgrep -aq "${NPM_REGISTRY}" "${PATCHED_NPM}" 2>/dev/null
156 then
157 tar xzf "${PATCHED_NPM}"
158 rm -f "${PATCHED_NPM}"
159 sed -i 's|\"registry\":\ \".*\"|\"registry\":\ \"'"${NPM_REGISTRY}"'\"|g' package/package.json
160 tar -zcf "${PATCHED_NPM}" package
161 rm -rf package
162 fi
163}
164
Tomáš Levora80594072019-07-11 10:38:23 +0200165push_npm () {
166 for ARCHIVE in $(sed $'s/\r// ; s/\\@/\-/g ; s/$/\.tgz/g' ${1}); do
167 npm publish --access public ${ARCHIVE} > /dev/null
168 echo "NPM ${ARCHIVE} pushed to Nexus"
169 done
170}
171
172push_pip () {
Tomáš Levorabe748842019-09-04 13:56:53 +0200173 for PACKAGE in $(sed $'s/\r//; s/==/-/' ${1}); do
174 twine upload -u "${NEXUS_USERNAME}" -p "${NEXUS_PASSWORD}" --repository-url ${PYPI_REGISTRY} ${PACKAGE}* > /dev/null
Tomáš Levora80594072019-07-11 10:38:23 +0200175 echo "PYPI ${PACKAGE} pushed to Nexus"
Tomáš Levora55b43662019-07-17 13:42:47 +0200176 done
Tomáš Levora80594072019-07-11 10:38:23 +0200177}
178
179docker_login () {
180 for REGISTRY in $(sed -n '/\.[^/].*\//p' ${1} | sed -e 's/\/.*$//' | sort -u | grep -v ${DEFAULT_REGISTRY}) ${DOCKER_REGISTRY}; do
Tomáš Levora12fe9442019-08-27 14:16:07 +0200181 if ! grep -wqs ${REGISTRY} ~/.docker/config.json; then
Tomáš Levora55b43662019-07-17 13:42:47 +0200182 echo "Docker login to ${REGISTRY}"
Tomáš Levora80409ef2019-09-04 10:36:30 +0200183 echo -n "${NEXUS_PASSWORD}" | docker login -u "${NEXUS_USERNAME}" --password-stdin ${REGISTRY} > /dev/null
Tomáš Levora55b43662019-07-17 13:42:47 +0200184 fi
185 done
Tomáš Levora80594072019-07-11 10:38:23 +0200186}
187
188push_docker () {
189 for IMAGE in $(sed $'s/\r// ; /^#/d' ${1} | awk '{ print $1 }'); do
190 PUSH=""
191 if [[ ${IMAGE} != *"/"* ]]; then
192 PUSH="${DOCKER_REGISTRY}/library/${IMAGE}"
193 elif [[ ${IMAGE} == *"${DEFAULT_REGISTRY}"* ]]; then
194 if [[ ${IMAGE} == *"/"*"/"* ]]; then
195 PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'/' <<< ${IMAGE})"
196 else
197 PUSH="$(sed 's/'"${DEFAULT_REGISTRY}"'/'"${DOCKER_REGISTRY}"'\/library/' <<< ${IMAGE})"
198 fi
199 elif [[ -z $(sed -n '/\.[^/].*\//p' <<< ${IMAGE}) ]]; then
200 PUSH="${DOCKER_REGISTRY}/${IMAGE}"
201 fi
202 if [[ ! -z ${PUSH} ]]; then
203 docker tag ${IMAGE} ${PUSH}
204 else
205 PUSH="${IMAGE}"
206 fi
207 docker push ${PUSH}
208 echo "${IMAGE} pushed as ${PUSH} to Nexus"
209 done
210}
211
Tomáš Levorabe748842019-09-04 13:56:53 +0200212while [ "${1}" != "" ]; do
213 case ${1} in
214 -d | --docker ) shift
Tomáš Levora479673b2019-11-06 11:49:52 +0100215 NXS_DOCKER_IMG_LISTS+=("$(realpath ${1})")
Tomáš Levorabe748842019-09-04 13:56:53 +0200216 ;;
217 -i | --input-directory ) shift
Tomáš Levora479673b2019-11-06 11:49:52 +0100218 DATA_DIR="$(realpath ${1})"
Tomáš Levorabe748842019-09-04 13:56:53 +0200219 ;;
220 -ld | --load-docker-images ) DOCKER_LOAD="true"
221 ;;
222 -n | --npm ) NPM_PUSH="true"
223 COMMANDS+=(expect npm)
224 shift
Tomáš Levora479673b2019-11-06 11:49:52 +0100225 NXS_NPM_LISTS+=("$(realpath ${1})")
Tomáš Levorabe748842019-09-04 13:56:53 +0200226 ;;
227 -o | --output-directory ) shift
Tomáš Levora479673b2019-11-06 11:49:52 +0100228 NEXUS_DATA_DIR="$(realpath ${1})"
Tomáš Levorabe748842019-09-04 13:56:53 +0200229 ;;
230 -p | --pypi ) PYPI_PUSH="true"
231 COMMANDS+=(twine)
232 shift
Tomáš Levora479673b2019-11-06 11:49:52 +0100233 NXS_PYPI_LISTS+=("$(realpath ${1})")
Tomáš Levorabe748842019-09-04 13:56:53 +0200234 ;;
235 -rl | --resource-list-directory ) shift
Tomáš Levora479673b2019-11-06 11:49:52 +0100236 LISTS_DIR="$(realpath ${1})"
Tomáš Levorabe748842019-09-04 13:56:53 +0200237 ;;
238 -h | --help ) usage
239 ;;
240 *) usage
Tomáš Levora479673b2019-11-06 11:49:52 +0100241 ;;
Tomáš Levorabe748842019-09-04 13:56:53 +0200242 esac
243 shift
244done
245
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +0200246# Verify all dependencies are available in PATH
247FAILED_COMMANDS=()
Tomáš Levora55b43662019-07-17 13:42:47 +0200248for cmd in ${COMMANDS[*]}; do
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +0200249 command -v $cmd >/dev/null 2>&1 || FAILED_COMMANDS+=($cmd)
250done
Tomáš Levora55b43662019-07-17 13:42:47 +0200251
252if [ ${#FAILED_COMMANDS[*]} -gt 0 ]; then
Bartek Grzybowski60e2e9a2019-07-02 10:15:36 +0200253 echo "Following commands where not found in PATH and are required:"
254 echo ${FAILED_COMMANDS[*]}
255 echo "Aborting."
256 exit 1
257fi
258
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100259# Setup directories with resources for docker, npm and pypi
260NXS_SRC_DOCKER_IMG_DIR="${DATA_DIR}/offline_data/docker_images_for_nexus"
261NXS_SRC_NPM_DIR="${DATA_DIR}/offline_data/npm_tar"
262NXS_SRC_PYPI_DIR="${DATA_DIR}/offline_data/pypi"
263
Tomáš Levorafeaa6b42019-05-29 09:45:29 +0200264# Setup specific resources lists
Tomáš Levora55b43662019-07-17 13:42:47 +0200265NXS_INFRA_LIST="${LISTS_DIR}/infra_docker_images.list"
Tomáš Levorafeaa6b42019-05-29 09:45:29 +0200266NXS_DOCKER_IMG_LIST="${LISTS_DIR}/onap_docker_images.list"
Tomáš Levora55b43662019-07-17 13:42:47 +0200267NXS_RKE_DOCKER_IMG_LIST="${LISTS_DIR}/rke_docker_images.list"
Tomáš Levora39505562019-10-03 13:31:54 +0200268NXS_K8S_DOCKER_IMG_LIST="${LISTS_DIR}/k8s_docker_images.list"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100269
270# Setup Nexus image used for build and install infra
Tomáš Levora55b43662019-07-17 13:42:47 +0200271NEXUS_IMAGE="$(grep sonatype/nexus3 ${NXS_INFRA_LIST})"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100272NEXUS_IMAGE_TAR="${DATA_DIR}/offline_data/docker_images_infra/$(sed 's/\//\_/ ; s/$/\.tar/ ; s/\:/\_/' <<< ${NEXUS_IMAGE})"
273
Tomáš Levora55b43662019-07-17 13:42:47 +0200274# Set default lists if nothing specific defined by user
Tomáš Levorabe748842019-09-04 13:56:53 +0200275if [ ${#NXS_DOCKER_IMG_LISTS[@]} -eq 0 ]; then
Tomáš Levora39505562019-10-03 13:31:54 +0200276 NXS_DOCKER_IMG_LISTS=("${NXS_DOCKER_IMG_LIST}" "${NXS_RKE_DOCKER_IMG_LIST}" "${NXS_K8S_DOCKER_IMG_LIST}")
Tomáš Levora55b43662019-07-17 13:42:47 +0200277fi
278
Tomáš Levora80594072019-07-11 10:38:23 +0200279# Backup /etc/hosts
280HOSTS_BACKUP="$(eval ${TIMESTAMP}_hosts.bk)"
281cp /etc/hosts /etc/${HOSTS_BACKUP}
282
283# Backup the current docker registry settings
284if [ -f ~/.docker/config.json ]; then
285 DOCKER_CONF_BACKUP="$(eval ${TIMESTAMP}_config.json.bk)"
286 mv ~/.docker/config.json ~/.docker/${DOCKER_CONF_BACKUP}
287fi
288
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100289# Setup default ports published to host as docker registry
290PUBLISHED_PORTS="-p ${NEXUS_PORT}:${NEXUS_PORT} -p ${NEXUS_DOCKER_PORT}:${NEXUS_DOCKER_PORT}"
291
292# Setup additional ports published to host based on simulated docker registries
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100293# Setup simulated domain names to be able to push all to private Nexus repository
Tomáš Levora55b43662019-07-17 13:42:47 +0200294for DOCKER_IMG_LIST in "${NXS_DOCKER_IMG_LISTS[@]}"; do
295 publish_ports "${DOCKER_IMG_LIST}"
296 simulated_hosts "${DOCKER_IMG_LIST}"
297done
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200298
299# Nexus repository configuration setup
300NEXUS_CONFIG_GROOVY='import org.sonatype.nexus.security.realm.RealmManager
301import org.sonatype.nexus.repository.attributes.AttributesFacet
302import org.sonatype.nexus.security.user.UserManager
303import org.sonatype.nexus.repository.manager.RepositoryManager
304import org.sonatype.nexus.security.user.UserNotFoundException
305/* Use the container to look up some services. */
306realmManager = container.lookup(RealmManager.class)
307userManager = container.lookup(UserManager.class, "default") //default user manager
308repositoryManager = container.lookup(RepositoryManager.class)
309/* Managers are used when scripting api cannot. Note that scripting api can only create mostly, and that creation methods return objects of created entities. */
310/* Perform cleanup by removing all repos and users. Realms do not need to be re-disabled, admin and anonymous user will not be removed. */
311userManager.listUserIds().each({ id ->
312 if (id != "anonymous" && id != "admin")
313 userManager.deleteUser(id)
314})
315repositoryManager.browse().each {
316 repositoryManager.delete(it.getName())
317}
318/* Add bearer token realms at the end of realm lists... */
319realmManager.enableRealm("NpmToken")
320realmManager.enableRealm("DockerToken")
Tomáš Levora1d902342019-02-05 10:01:43 +0100321realmManager.enableRealm("PypiToken")
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200322/* Create the docker user. */
323security.addUser("docker", "docker", "docker", "docker@example.com", true, "docker", ["nx-anonymous"])
Tomáš Levora1d902342019-02-05 10:01:43 +0100324/* Create docker, npm and pypi repositories. Their default configuration should be compliant with our requirements, except the docker registry creation. */
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200325repository.createNpmHosted("npm-private")
Tomáš Levora1d902342019-02-05 10:01:43 +0100326repository.createPyPiHosted("pypi-private")
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200327def r = repository.createDockerHosted("onap", 8082, 0)
328/* force basic authentication true by default, must set to false for docker repo. */
329conf=r.getConfiguration()
330conf.attributes("docker").set("forceBasicAuth", false)
331repositoryManager.update(conf)'
332
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100333# Prepare the Nexus configuration
334NEXUS_CONFIG=$(echo "${NEXUS_CONFIG_GROOVY}" | jq -Rsc '{"name":"configure", "type":"groovy", "content":.}')
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200335
336#################################
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200337# Docker repository preparation #
338#################################
339
Tomáš Levorae878f032019-06-13 13:31:01 +0200340if [ "${DOCKER_LOAD}" == "true" ]; then
341 # Load predefined Nexus image
342 docker load -i ${NEXUS_IMAGE_TAR}
343 # Load all necessary images
Tomáš Levora55b43662019-07-17 13:42:47 +0200344 for DOCKER_IMG_LIST in "${NXS_DOCKER_IMG_LISTS[@]}"; do
345 load_docker_images "${DOCKER_IMG_LIST}"
346 done
Tomáš Levorae878f032019-06-13 13:31:01 +0200347fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200348
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200349################################
350# Nexus repository preparation #
351################################
352
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200353# Prepare nexus-data directory
354if [ -d ${NEXUS_DATA_DIR} ]; then
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100355 if [ "$(docker ps -q -f name="${NEXUS_DOMAIN}")" ]; then
356 echo "Removing container ${NEXUS_DOMAIN}"
357 docker rm -f $(docker ps -aq -f name="${NEXUS_DOMAIN}")
358 fi
359 pushd ${NEXUS_DATA_DIR}/..
360 NXS_BACKUP="$(eval ${TIMESTAMP})_$(basename ${NEXUS_DATA_DIR})_bk"
361 mv ${NEXUS_DATA_DIR} "${NXS_BACKUP}"
362 echo "${NEXUS_DATA_DIR} already exists - backing up to ${NXS_BACKUP}"
363 popd
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200364fi
365
366mkdir -p ${NEXUS_DATA_DIR}
367chown 200:200 ${NEXUS_DATA_DIR}
368chmod 777 ${NEXUS_DATA_DIR}
369
370# Save Nexus version to prevent/catch data incompatibility
Tomáš Levora70ec9f42019-07-09 15:33:48 +0200371# Adding commit informations to have link to data from which the blob was built
372cat >> ${NEXUS_DATA_DIR}/nexus.ver << INFO
373nexus_image=$(docker image ls ${NEXUS_IMAGE} --no-trunc --format "{{.Repository}}:{{.Tag}}\nnexus_image_digest={{.ID}}")
374$(for INDEX in ${!NXS_DOCKER_IMG_LISTS[@]}; do printf 'used_image_list%s=%s\n' "$INDEX" "$(sed 's/^.*\/\(.*\)$/\1/' <<< ${NXS_DOCKER_IMG_LISTS[$INDEX]})"; done)
375$(sed -n 's/^.*OOM\ commit\ /oom_repo_commit=/p' ${NXS_DOCKER_IMG_LISTS[@]})
376installer_repo_commit=$(git --git-dir="${LOCAL_PATH}/../.git" rev-parse HEAD)
377INFO
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200378
379# Start the Nexus
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100380NEXUS_CONT_ID=$(docker run -d --rm -v ${NEXUS_DATA_DIR}:/nexus-data:rw --name ${NEXUS_DOMAIN} ${PUBLISHED_PORTS} ${NEXUS_IMAGE})
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200381echo "Waiting for Nexus to fully start"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100382until curl -su ${NEXUS_USERNAME}:${NEXUS_PASSWORD} http://${NEXUS_DOMAIN}:${NEXUS_PORT}/service/metrics/healthcheck | grep '"healthy":true' > /dev/null ; do
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200383 printf "."
384 sleep 3
385done
386echo -e "\nNexus started"
387
388# Configure the nexus repository
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100389curl -sX POST --header 'Content-Type: application/json' --data-binary "${NEXUS_CONFIG}" http://${NEXUS_USERNAME}:${NEXUS_PASSWORD}@${NEXUS_DOMAIN}:${NEXUS_PORT}/service/rest/v1/script
390curl -sX POST --header "Content-Type: text/plain" http://${NEXUS_USERNAME}:${NEXUS_PASSWORD}@${NEXUS_DOMAIN}:${NEXUS_PORT}/service/rest/v1/script/configure/run > /dev/null
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200391
392###########################
393# Populate NPM repository #
394###########################
Tomáš Levorabe748842019-09-04 13:56:53 +0200395if [ $NPM_PUSH == "true" ]; then
396 prepare_npm
397 pushd ${NXS_SRC_NPM_DIR}
398 for NPM_LIST in "${NXS_NPM_LISTS[@]}"; do
399 patch_npm "${NPM_LIST}"
400 push_npm "${NPM_LIST}"
401 done
402 popd
403 # Return default settings
404 npm logout
405 npm config set registry "https://registry.npmjs.org"
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100406fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200407
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100408###############################
409## Populate PyPi repository #
410###############################
Tomáš Levorabe748842019-09-04 13:56:53 +0200411if [ $PYPI_PUSH == "true" ]; then
412 pushd ${NXS_SRC_PYPI_DIR}
413 for PYPI_LIST in "${NXS_PYPI_LISTS[@]}"; do
414 push_pip "${PYPI_LIST}"
415 done
416 popd
417fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200418
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100419###############################
420## Populate Docker repository #
421###############################
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200422
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100423# Login to simulated docker registries
Tomáš Levorabe748842019-09-04 13:56:53 +0200424# Push images to private nexus based on the lists
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100425# Images from default registry need to be tagged to private registry
426# and those without defined repository in tag uses default repository 'library'
Tomáš Levora55b43662019-07-17 13:42:47 +0200427for DOCKER_IMG_LIST in "${NXS_DOCKER_IMG_LISTS[@]}"; do
428 docker_login "${DOCKER_IMG_LIST}"
429 push_docker "${DOCKER_IMG_LIST}"
430done
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200431
432##############################
433# Stop the Nexus and cleanup #
434##############################
435
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100436echo "Stopping Nexus and returning backups"
437
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200438# Stop the Nexus
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100439docker stop ${NEXUS_CONT_ID} > /dev/null
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200440
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100441# Return backed up configuration files
Tomáš Levora80594072019-07-11 10:38:23 +0200442mv -f "/etc/${HOSTS_BACKUP}" /etc/hosts
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200443
Tomáš Levora20d3b8a2019-07-09 14:07:08 +0200444if [ -f ~/.docker/${DOCKER_CONF_BACKUP} ]; then
445 mv -f ~/.docker/${DOCKER_CONF_BACKUP} ~/.docker/config.json
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100446fi
Samuli Silvius9e9afd72018-12-21 14:23:51 +0200447
Tomáš Levora8d272bd2019-03-12 15:06:35 +0100448echo "Nexus blob is built"
Tomáš Levora479673b2019-11-06 11:49:52 +0100449exit 0