Add priority to repositories in base-image

Now it's possible to add a priority for each repo through
--repo-priority on command line and cfg file as well.

This is need because of the usage of ceph mirror and to force the
images to use ceph packages on that repo.

Test plan:

Docker images build succeeded.
stx-openstack apply succeeded.

Closes-Bug: #1949518
Signed-off-by: Delfino Curado <delfinogomes.curadofilho@windriver.com>
Change-Id: I202904dccdd727a05bb4d621c4ad735f60221b81
This commit is contained in:
Delfino Curado 2021-11-08 17:29:23 -05:00
parent 351bd0e724
commit 965e897c71
5 changed files with 41 additions and 19 deletions

View File

@ -1,2 +1,3 @@
repo=ussuri-ceph,http://mirror.starlingx.cengn.ca:80/mirror/centos/download.ceph.com/rpm-mimic/el7/x86_64/ repo=ussuri-ceph,http://mirror.starlingx.cengn.ca/mirror/centos/download.ceph.com/rpm-nautilus/el7/x86_64/
repo-priority=ussuri-ceph,1
repo=ussuri-wsgi,http://mirror.starlingx.cengn.ca:80/mirror/centos/centos/mirror.centos.org/centos/7/sclo/x86_64/rh/ repo=ussuri-wsgi,http://mirror.starlingx.cengn.ca:80/mirror/centos/centos/mirror.centos.org/centos/7/sclo/x86_64/rh/

View File

@ -1,2 +1,3 @@
repo=ussuri-ceph,http://mirror.starlingx.cengn.ca:80/mirror/centos/download.ceph.com/rpm-mimic/el7/x86_64/ repo=ussuri-ceph,http://mirror.starlingx.cengn.ca/mirror/centos/download.ceph.com/rpm-nautilus/el7/x86_64/
repo-priority=ussuri-ceph,1
repo=ussuri-wsgi,http://mirror.starlingx.cengn.ca:80/mirror/centos/centos/mirror.centos.org/centos/7/sclo/x86_64/rh/ repo=ussuri-wsgi,http://mirror.starlingx.cengn.ca:80/mirror/centos/centos/mirror.centos.org/centos/7/sclo/x86_64/rh/

View File

@ -37,6 +37,7 @@ TAG_LATEST=no
LATEST_TAG=latest LATEST_TAG=latest
HOST=${HOSTNAME} HOST=${HOSTNAME}
declare -i MAX_ATTEMPTS=1 declare -i MAX_ATTEMPTS=1
declare -A REPO_PRIORITY_LIST
function usage { function usage {
cat >&2 <<EOF cat >&2 <<EOF
@ -44,22 +45,23 @@ Usage:
$(basename $0) $(basename $0)
Options: Options:
--os: Specify base OS (valid options: ${SUPPORTED_OS_ARGS[@]}) --os: Specify base OS (valid options: ${SUPPORTED_OS_ARGS[@]})
--os-version: Specify OS version --os-version: Specify OS version
--version: Specify version for output image --version: Specify version for output image
--stream: Build stream, stable or dev (default: stable) --stream: Build stream, stable or dev (default: stable)
--repo: Software repository (Format: name,baseurl), can be specified multiple times --repo: Software repository (Format: name,baseurl), can be specified multiple times
--local: Use local build for software repository (cannot be used with --repo) --repo-priority: Define priority for added repo (Format: name,priority). The priority must be an integer from 1 to 99 (The default is 99). The lowest number have the highest priority.
--push: Push to docker repo --local: Use local build for software repository (cannot be used with --repo)
--proxy: Set proxy <URL>:<PORT> --push: Push to docker repo
--latest: Add a 'latest' tag when pushing --proxy: Set proxy <URL>:<PORT>
--latest-tag: Use the provided tag when pushing latest. --latest: Add a 'latest' tag when pushing
--user: Docker repo userid --latest-tag: Use the provided tag when pushing latest.
--registry: Docker registry --user: Docker repo userid
--clean: Remove image(s) from local registry --registry: Docker registry
--hostname: build repo host --clean: Remove image(s) from local registry
--attempts: Max attempts, in case of failure (default: 1) --hostname: build repo host
--config-file:Specify a path to a config file which will specify additional arguments to be passed into the command --attempts: Max attempts, in case of failure (default: 1)
--config-file: Specify a path to a config file which will specify additional arguments to be passed into the command
EOF EOF
} }
@ -98,11 +100,15 @@ function get_args_from_file {
repo) repo)
REPO_LIST+=(${config_items[1]}) REPO_LIST+=(${config_items[1]})
;; ;;
repo-priority)
priority_value=(${config_items[1]//,/ })
REPO_PRIORITY_LIST[${priority_value[0]}]=${priority_value[1]}
;;
esac esac
done done
} }
OPTS=$(getopt -o h -l help,os:,os-version:,version:,stream:,release:,repo:,push,proxy:,latest,latest-tag:,user:,registry:,local,clean,hostname:,attempts:,config-file: -- "$@") OPTS=$(getopt -o h -l help,os:,os-version:,version:,stream:,release:,repo:,repo-priority:,push,proxy:,latest,latest-tag:,user:,registry:,local,clean,hostname:,attempts:,config-file: -- "$@")
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
usage usage
exit 1 exit 1
@ -186,6 +192,11 @@ while true; do
CONFIG_FILE=$2 CONFIG_FILE=$2
shift 2 shift 2
;; ;;
--repo-priority)
priority_value=(${2//,/ })
REPO_PRIORITY_LIST[${priority_value[0]}]=${priority_value[1]}
shift 2
;;
-h | --help ) -h | --help )
usage usage
exit 1 exit 1
@ -267,6 +278,10 @@ STX_REPO_FILE=${BUILDDIR}/stx.repo
for repo in ${REPO_LIST[@]}; do for repo in ${REPO_LIST[@]}; do
repo_name=$(echo $repo | awk -F, '{print $1}') repo_name=$(echo $repo | awk -F, '{print $1}')
repo_baseurl=$(echo $repo | awk -F, '{print $2}') repo_baseurl=$(echo $repo | awk -F, '{print $2}')
priority=''
if [[ ! -z "${REPO_PRIORITY_LIST[$repo_name]}" ]] ; then
priority="priority=${REPO_PRIORITY_LIST[$repo_name]}"
fi
if [ -z "${repo_name}" -o -z "${repo_baseurl}" ]; then if [ -z "${repo_name}" -o -z "${repo_baseurl}" ]; then
echo "Invalid repo specified: ${repo}" >&2 echo "Invalid repo specified: ${repo}" >&2
@ -282,6 +297,7 @@ enabled=1
gpgcheck=0 gpgcheck=0
skip_if_unavailable=1 skip_if_unavailable=1
metadata_expire=0 metadata_expire=0
${priority}
EOF EOF

View File

@ -6,6 +6,8 @@ FROM centos:${RELEASE}
RUN set -ex ;\ RUN set -ex ;\
sed -i '/\[main\]/ atimeout=120' /etc/yum.conf ;\ sed -i '/\[main\]/ atimeout=120' /etc/yum.conf ;\
yum install --disablerepo=* ${REPO_OPTS} -y \
yum-priorities ;\
yum install -y centos-release-openstack-stein ;\ yum install -y centos-release-openstack-stein ;\
rm -rf \ rm -rf \
/var/log/* \ /var/log/* \

View File

@ -14,6 +14,8 @@ RUN set -ex ;\
sed -i '/\[main\]/ atimeout=120' /etc/yum.conf ;\ sed -i '/\[main\]/ atimeout=120' /etc/yum.conf ;\
mv /stx.repo /etc/yum.repos.d/ ;\ mv /stx.repo /etc/yum.repos.d/ ;\
yum upgrade --disablerepo=* ${REPO_OPTS} -y ;\ yum upgrade --disablerepo=* ${REPO_OPTS} -y ;\
yum install --disablerepo=* ${REPO_OPTS} -y \
yum-priorities ;\
yum install --disablerepo=* ${REPO_OPTS} -y \ yum install --disablerepo=* ${REPO_OPTS} -y \
qemu-img \ qemu-img \
openssh-clients \ openssh-clients \