blob: a2bdec536dcfca24a9b3fbf9d125f5679ce0bd7c [file] [log] [blame]
#!/usr/bin/env bash
# Copyright 2018-present Open Networking 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.
# copy-ssh-keys.sh - Adds ssh keys to nodes given as parameters to the script,
# after removing them from the ~/.ssh/known_hosts file on the local system.
#
# This script should be run interactively as it will prompt for input, and only
# invoked once, so as not to add multiple copies of the SSH key to the remote
# system.
#############################################################
# #
# Tags and push a list of local images to a target registry #
# #
#############################################################
#
# Displays the help menu.
#
display_help () {
echo "Tags and pushes to a target Docker registry a list of images on the system or given in stdin."
echo " "
echo "Usage: $0 [-f|--filter filter] [-r|--registry docker-registry] [-s|--source image-file] [-t|--tag custom-tag] [-h --help]"
echo " "
echo " filter A string used to filter the image names (used as 'grep -E \"^$filter\"')"
echo " docker-registry The address of the target registry. DockerHub will be instead used by default"
echo " custom-tag An optional, custom tag to be used to tag images. The same tag of the original images will be used otherwise"
echo " "
echo "Example usages:"
echo " echo onosproject/onos:1.13.5 | ./tag_and_push.sh" # push the local onosproject/onos:1.13.5 image given in input and pushes it to DockerHub
echo " cat images | ./tag_and_push.sh -t my_tag" # tag with "my_tag" the images in the file images given in input and push them to DockerHub
echo " ./tag_and_push.sh -s images.txt -t my_tag" # tag with "my_tag" the images in the file images.txt and push them to DockerHub
echo " ./tag_and_push.sh -f xosproject -r 192.168.10.100:30500" # tag all the xosproject images and push them to the registry 192.168.10.100:30500
echo " ./tag_and_push.sh -r 192.168.10.100:30500" # tag all local images and push them to the registry 192.168.10.100:30500
echo " ./tag_and_push.sh -f xosproject" # push all local images containing xosproject in the name and pushes them to dockerhub
}
# Parse params
while :; do
case $1 in
-s|--source)
shift
if [[ -z $1 ]] || [[ $1 = -f ]] || [[ $1 = -t ]] || [[ $1 = -r ]] || [[ $1 = -h ]]
then
display_help
exit 1
fi
custom_file="$1"
;;
-r|--registry)
shift
if [[ -z $1 ]] || [[ $1 = -f ]] || [[ $1 = -t ]] || [[ $1 = -s ]] || [[ $1 = -h ]]
then
display_help
exit 1
fi
registry="$1"
;;
-f|--filter)
shift
if [[ -z $1 ]] || [[ $1 = -r ]] || [[ $1 = -t ]] || [[ $1 = -s ]] || [[ $1 = -h ]]
then
display_help
exit 1
fi
filter="$1"
;;
-t|--tag)
shift
if [[ -z $1 ]] || [[ $1 = -r ]] || [[ $1 = -f ]] || [[ $1 = -s ]] || [[ $1 = -h ]]
then
display_help
exit 1
fi
custom_tag="$1"
;;
-h|--help)
display_help
exit 0
;;
*) break
esac
shift
done
# Source images list
if [ -t 0 ]; then
images=$(docker images | awk '{if (NR!=1) {print}}' | awk '{ a=$1":"$2; print a }')
else
images=""
while IFS= read -r line; do
# shellcheck disable=SC1117
images+="$line\n"
done < "${custom_file:-/dev/stdin}"
fi
# Filter images
if [[ -n "$filter" ]]
then
images=$(echo -e "${images}" | grep -E "${filter}")
fi
if [[ -n "$registry" ]]
then
images=$(echo "${images}" | grep -v "${registry}")
fi
for image in $(echo -e "${images}"); do
new_image=""
# Set registry
if [[ -n "$registry" ]]
then
new_image+="${registry}/"
else
new_image=""
fi
IFS=':' read -r -a image_tag_splitted <<< "$image"
# Set image name
new_image+="${image_tag_splitted[0]}:"
# Set tag
splitted_tag="${image_tag_splitted[1]}"
new_image+="${custom_tag:-$splitted_tag}"
docker tag "${image}" "${new_image}" > /dev/null
docker push "${new_image}" > /dev/null
echo "${new_image}"
done