aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Malchuk <maksim.malchuk@gmail.com>2020-12-16 21:26:56 +0300
committerMaksim Malchuk <maksim.malchuk@gmail.com>2022-03-11 15:58:05 +0300
commit83efe325462e683e2c99d088012cd611d7a0b138 (patch)
treefa3d965238b19b976c705fd8c4ec68bd4ff945d3
parent5bb6489922aab2b431be8f121465eb7f3a49b5ae (diff)
downloadkolla-83efe325462e683e2c99d088012cd611d7a0b138.tar.gz
kolla-83efe325462e683e2c99d088012cd611d7a0b138.zip
Unify curl use (customisation options)
This change adds and unifies an ability to override hardcoded URLs for air-gapped environments via the usual blocks mechanism. Also, this change replaces ENV with ARG instruction for the variables used only in building images, and uses bash variable expansion where it possible. This change is a continuation of the I46b77978926fc2b578a68d1aaa944b2198af0685 Change-Id: I1fbad333b1bc95484e6f4c5145d5936a0e2db84f Signed-off-by: Maksim Malchuk <maksim.malchuk@gmail.com>
-rw-r--r--doc/source/admin/image-building.rst11
-rw-r--r--docker/base/Dockerfile.j27
-rw-r--r--docker/fluentd/Dockerfile.j29
-rw-r--r--docker/kafka/Dockerfile.j28
-rw-r--r--docker/kolla-toolbox/Dockerfile.j22
-rw-r--r--docker/mariadb/mariadb-base/Dockerfile.j27
-rw-r--r--docker/prometheus/prometheus-alertmanager/Dockerfile.j27
-rw-r--r--docker/prometheus/prometheus-blackbox-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-cadvisor/Dockerfile.j27
-rw-r--r--docker/prometheus/prometheus-elasticsearch-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-haproxy-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-memcached-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-msteams/Dockerfile.j23
-rw-r--r--docker/prometheus/prometheus-mysqld-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-node-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-openstack-exporter/Dockerfile.j25
-rw-r--r--docker/prometheus/prometheus-v2-server/Dockerfile.j25
-rw-r--r--docker/skydive/skydive-base/Dockerfile.j27
-rw-r--r--docker/storm/storm-base/Dockerfile.j26
-rw-r--r--docker/zookeeper/Dockerfile.j26
-rw-r--r--docker/zun/zun-cni-daemon/Dockerfile.j211
-rw-r--r--releasenotes/notes/generic-customisation-b2d431caa2fc5c10.yaml15
-rw-r--r--tests/templates/template_overrides.j22
23 files changed, 105 insertions, 43 deletions
diff --git a/doc/source/admin/image-building.rst b/doc/source/admin/image-building.rst
index aa100f4a3..2fe0c3abb 100644
--- a/doc/source/admin/image-building.rst
+++ b/doc/source/admin/image-building.rst
@@ -293,6 +293,17 @@ To remove a package from that list, say ``openstack-magnum-ui``, one would do:
# Horizon
{% set horizon_packages_remove = ['openstack-magnum-ui'] %}
+Python packages build options
+-----------------------------
+
+The block ``base_pip_conf`` in the ``base`` Dockerfile can be used to provide
+the PyPI build customisation options via the standard environment variables
+like ``PIP_INDEX_URL``, ``PIP_TRUSTED_HOST``, etc. Also here can be provided
+the standard environment variable ``UPPER_CONSTRAINTS_FILE`` used for building
+the ``bifrost_deploy`` container when PyPI upper-constraints needs to be
+overridden. Also this variable would be used in the ``kolla-toolbox`` if
+provided instead of the defaults.
+
Plugin functionality
--------------------
diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2
index 4702fbd7a..fd18fa893 100644
--- a/docker/base/Dockerfile.j2
+++ b/docker/base/Dockerfile.j2
@@ -391,5 +391,12 @@ RUN touch /usr/local/bin/kolla_extend_start \
&& chmod 2775 /var/log/kolla \
&& rm -f /tmp/kolla_bashrc
+{% block base_pip_conf %}
+# the variables like PIP_INDEX_URL, PIP_EXTRA_INDEX_URL, PIP_TRUSTED_HOST etc. should be defined here.
+# ENV PIP_INDEX_URL=https://pypi.python.org/simple
+# ENV PIP_TRUSTED_HOST=pypi.python.org
+# ENV UPPER_CONSTRAINTS_FILE=https://releases.openstack.org/constraints/upper/{{ openstack_release }}
+{% endblock %}
+
{% block base_footer %}{% endblock %}
CMD ["kolla_start"]
diff --git a/docker/fluentd/Dockerfile.j2 b/docker/fluentd/Dockerfile.j2
index c9c8277ea..3351fcda4 100644
--- a/docker/fluentd/Dockerfile.j2
+++ b/docker/fluentd/Dockerfile.j2
@@ -61,12 +61,15 @@ RUN chmod 755 /usr/local/bin/kolla_extend_start
{% endblock %}
+{% block fluentd_monasca_plugin_version %}
+ARG monasca_output_plugin_version=1.0.2
+ARG monasca_output_plugin_url=https://github.com/monasca/fluentd-monasca/archive/${monasca_output_plugin_version}.tar.gz
+{% endblock %}
+
{% block fluentd_monasca_plugin_install %}
# Build and install Fluentd output plugin for Monasca API
-ARG monasca_output_plugin_tag=1.0.2
-ARG monasca_output_plugin_url=https://github.com/monasca/fluentd-monasca/archive/$monasca_output_plugin_tag.tar.gz
-RUN curl $monasca_output_plugin_url -o /tmp/fluentd-monasca.tar.gz \
+RUN curl ${monasca_output_plugin_url} -o /tmp/fluentd-monasca.tar.gz \
&& tar -xvf /tmp/fluentd-monasca.tar.gz -C /tmp \
&& cd /tmp/fluentd-monasca-* \
&& td-agent-gem build fluentd-monasca-output.gemspec \
diff --git a/docker/kafka/Dockerfile.j2 b/docker/kafka/Dockerfile.j2
index 05ab23b79..427376ac7 100644
--- a/docker/kafka/Dockerfile.j2
+++ b/docker/kafka/Dockerfile.j2
@@ -29,10 +29,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.install_packages(kafka_packages | customizable("packages")) }}
{% block kafka_version %}
-ENV kafka_version=2.0.1
-ENV kafka_scala_version=2.12
-ENV kafka_url=https://archive.apache.org/dist/kafka/${kafka_version}/kafka_${kafka_scala_version}-${kafka_version}.tgz
-ENV kafka_pkg_sha512sum=9773a85ef2898b4bae20481df4cfd5488bd195fffd700fcc874a9fa55065f6873f2ee12f46d2f6a6ccb5d5a93ddb7dec19227aef5d39d4f72b545ec63b24bb2f
+ARG kafka_version=2.0.1
+ARG kafka_scala_version=2.12
+ARG kafka_url=https://archive.apache.org/dist/kafka/${kafka_version}/kafka_${kafka_scala_version}-${kafka_version}.tgz
+ARG kafka_pkg_sha512sum=9773a85ef2898b4bae20481df4cfd5488bd195fffd700fcc874a9fa55065f6873f2ee12f46d2f6a6ccb5d5a93ddb7dec19227aef5d39d4f72b545ec63b24bb2f
{% endblock %}
{% block kafka_install %}
diff --git a/docker/kolla-toolbox/Dockerfile.j2 b/docker/kolla-toolbox/Dockerfile.j2
index 150dc5ab9..9a4006151 100644
--- a/docker/kolla-toolbox/Dockerfile.j2
+++ b/docker/kolla-toolbox/Dockerfile.j2
@@ -64,7 +64,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block kolla_toolbox_upper_constraints %}
RUN mkdir -p /requirements \
- && curl -o /requirements/upper-constraints.txt https://releases.openstack.org/constraints/upper/{{ openstack_release }} \
+ && curl -o /requirements/upper-constraints.txt ${UPPER_CONSTRAINTS_FILE:-https://releases.openstack.org/constraints/upper/{{ openstack_release }}} \
&& {{ macros.install_pip(kolla_toolbox_pip_virtualenv_packages | customizable("pip_virtualenv_packages")) }} \
&& virtualenv --system-site-packages {{ virtualenv_path }}
{% endblock %}
diff --git a/docker/mariadb/mariadb-base/Dockerfile.j2 b/docker/mariadb/mariadb-base/Dockerfile.j2
index 23c192213..f8ff4f713 100644
--- a/docker/mariadb/mariadb-base/Dockerfile.j2
+++ b/docker/mariadb/mariadb-base/Dockerfile.j2
@@ -24,7 +24,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.install_packages(mariadb_base_packages | customizable("packages")) }}
-RUN curl -o /usr/bin/clustercheck https://src.fedoraproject.org/rpms/mariadb/raw/10.3/f/clustercheck.sh \
+{% block mariadb_clustercheck_version %}
+ARG mariadb_clustercheck_version=10.3
+ARG mariadb_clustercheck_url=https://src.fedoraproject.org/rpms/mariadb/raw/${mariadb_clustercheck_version}/f/clustercheck.sh
+{% endblock %}
+
+RUN curl -o /usr/bin/clustercheck ${mariadb_clustercheck_url} \
&& chmod 755 /usr/bin/clustercheck
{% block mariadb_base_footer %}{% endblock %}
diff --git a/docker/prometheus/prometheus-alertmanager/Dockerfile.j2 b/docker/prometheus/prometheus-alertmanager/Dockerfile.j2
index 9af5af0f7..a3f351b06 100644
--- a/docker/prometheus/prometheus-alertmanager/Dockerfile.j2
+++ b/docker/prometheus/prometheus-alertmanager/Dockerfile.j2
@@ -7,13 +7,14 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block prometheus_alertmanager_repository_version %}
ARG prometheus_alertmanager_version=0.23.0
+ARG prometheus_alertmanager_archive=alertmanager-${prometheus_alertmanager_version}.linux-{{debian_arch}}.tar.gz
+ARG prometheus_alertmanager_sha256sums_url=https://github.com/prometheus/alertmanager/releases/download/v${prometheus_alertmanager_version}/sha256sums.txt
+ARG prometheus_alertmanager_download_url=https://github.com/prometheus/alertmanager/releases/download/v${prometheus_alertmanager_version}/${prometheus_alertmanager_archive}
{% endblock %}
{% block prometheus_alertmanager_install %}
-ARG prometheus_alertmanager_archive=alertmanager-${prometheus_alertmanager_version}.linux-{{debian_arch}}.tar.gz
-ARG prometheus_alertmanager_download_url=https://github.com/prometheus/alertmanager/releases/download/v${prometheus_alertmanager_version}/${prometheus_alertmanager_archive}
RUN cd /tmp && curl -o ${prometheus_alertmanager_archive} ${prometheus_alertmanager_download_url} \
- && curl https://github.com/prometheus/alertmanager/releases/download/v${prometheus_alertmanager_version}/sha256sums.txt -w '' | sha256sum --ignore-missing -c - \
+ && curl ${prometheus_alertmanager_sha256sums_url} -w '' | sha256sum --ignore-missing -c - \
&& tar xvf /tmp/${prometheus_alertmanager_archive} -C /opt/ \
&& rm -f /tmp/${prometheus_alertmanager_archive} \
&& ln -s /opt/alertmanager* /opt/prometheus_alertmanager
diff --git a/docker/prometheus/prometheus-blackbox-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-blackbox-exporter/Dockerfile.j2
index df22f46d8..dddbe69d1 100644
--- a/docker/prometheus/prometheus-blackbox-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-blackbox-exporter/Dockerfile.j2
@@ -8,7 +8,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
{% block prometheus_blackbox_exporter_repository_version %}
-ENV blackbox_exporter_version=0.16.0
+ARG blackbox_exporter_version=0.16.0
+ARG blackbox_exporter_url=https://github.com/prometheus/blackbox_exporter/releases/download/v${blackbox_exporter_version}/blackbox_exporter-${blackbox_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% if base_package_type == 'rpm' %}
@@ -24,7 +25,7 @@ ENV blackbox_exporter_version=0.16.0
{{ macros.install_packages(blackbox_packages | customizable("packages")) }}
{% block prometheus_blackbox_exporter_install %}
-RUN curl -o /tmp/blackbox_exporter.tar.gz https://github.com/prometheus/blackbox_exporter/releases/download/v${blackbox_exporter_version}/blackbox_exporter-${blackbox_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/blackbox_exporter.tar.gz ${blackbox_exporter_url} \
&& tar xvf /tmp/blackbox_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/blackbox_exporter.tar.gz \
&& ln -s /opt/blackbox_exporter* /opt/blackbox_exporter
diff --git a/docker/prometheus/prometheus-cadvisor/Dockerfile.j2 b/docker/prometheus/prometheus-cadvisor/Dockerfile.j2
index 2f4e5563f..d337d9aa2 100644
--- a/docker/prometheus/prometheus-cadvisor/Dockerfile.j2
+++ b/docker/prometheus/prometheus-cadvisor/Dockerfile.j2
@@ -8,14 +8,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
{% block prometheus_cadvisor_repository_version %}
-ENV prometheus_cadvisor_version=0.38.7
-ENV prometheus_cadvisor_sha256sum=fdb86c256df682cfec2abd57a4405c919ed26f1e27ebfabf487f6c516bc7f6c7
+ARG prometheus_cadvisor_version=0.38.7
+ARG prometheus_cadvisor_sha256sum=fdb86c256df682cfec2abd57a4405c919ed26f1e27ebfabf487f6c516bc7f6c7
+ARG prometheus_cadvisor_url=https://github.com/google/cadvisor/releases/download/v${prometheus_cadvisor_version}/cadvisor
{% endblock %}
{% if base_arch in ['x86_64'] %}
{% block prometheus_cadvisor_install %}
-RUN curl -o /tmp/cadvisor https://github.com/google/cadvisor/releases/download/v${prometheus_cadvisor_version}/cadvisor \
+RUN curl -o /tmp/cadvisor ${prometheus_cadvisor_url} \
&& echo "${prometheus_cadvisor_sha256sum} /tmp/cadvisor" | sha256sum -c \
&& mv /tmp/cadvisor /opt \
&& chmod 0755 /opt/cadvisor
diff --git a/docker/prometheus/prometheus-elasticsearch-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-elasticsearch-exporter/Dockerfile.j2
index ebef61ff1..801eca7d0 100644
--- a/docker/prometheus/prometheus-elasticsearch-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-elasticsearch-exporter/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block prometheus_elasticsearch_exporter_header %}{% endblock %}
{% block prometheus_elasticsearch_exporter_repository_version %}
-ENV elasticsearch_exporter_version=1.2.1
+ARG elasticsearch_exporter_version=1.2.1
+ARG elasticsearch_exporter_url=https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v${elasticsearch_exporter_version}/elasticsearch_exporter-${elasticsearch_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block prometheus_elasticsearch_exporter_install %}
-RUN curl -o /tmp/elasticsearch_exporter.tar.gz https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v${elasticsearch_exporter_version}/elasticsearch_exporter-${elasticsearch_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/elasticsearch_exporter.tar.gz ${elasticsearch_exporter_url} \
&& tar xvf /tmp/elasticsearch_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/elasticsearch_exporter.tar.gz \
&& ln -s /opt/elasticsearch_exporter* /opt/elasticsearch_exporter
diff --git a/docker/prometheus/prometheus-haproxy-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-haproxy-exporter/Dockerfile.j2
index 0242b16ef..ffa0fa623 100644
--- a/docker/prometheus/prometheus-haproxy-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-haproxy-exporter/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block haproxy_exporter_header %}{% endblock %}
{% block haproxy_exporter_repository_version %}
-ENV haproxy_exporter_version=0.10.0
+ARG haproxy_exporter_version=0.10.0
+ARG haproxy_exporter_url=https://github.com/prometheus/haproxy_exporter/releases/download/v${haproxy_exporter_version}/haproxy_exporter-${haproxy_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block haproxy_exporter_install %}
-RUN curl -o /tmp/haproxy_exporter.tar.gz https://github.com/prometheus/haproxy_exporter/releases/download/v${haproxy_exporter_version}/haproxy_exporter-${haproxy_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/haproxy_exporter.tar.gz ${haproxy_exporter_url} \
&& tar xvf /tmp/haproxy_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/haproxy_exporter.tar.gz \
&& ln -s /opt/haproxy_exporter* /opt/haproxy_exporter
diff --git a/docker/prometheus/prometheus-memcached-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-memcached-exporter/Dockerfile.j2
index 66edaf5cb..d01c400b2 100644
--- a/docker/prometheus/prometheus-memcached-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-memcached-exporter/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block prometheus_memcached_exporter_header %}{% endblock %}
{% block prometheus_memcached_exporter_repository_version %}
-ENV memcached_exporter_version=0.6.0
+ARG memcached_exporter_version=0.6.0
+ARG memcached_exporter_url=https://github.com/prometheus/memcached_exporter/releases/download/v${memcached_exporter_version}/memcached_exporter-${memcached_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block prometheus_memcached_exporter_install %}
-RUN curl -o /tmp/memcached_exporter.tar.gz https://github.com/prometheus/memcached_exporter/releases/download/v${memcached_exporter_version}/memcached_exporter-${memcached_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/memcached_exporter.tar.gz ${memcached_exporter_url} \
&& tar xvf /tmp/memcached_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/memcached_exporter.tar.gz \
&& ln -s /opt/memcached_exporter* /opt/memcached_exporter
diff --git a/docker/prometheus/prometheus-msteams/Dockerfile.j2 b/docker/prometheus/prometheus-msteams/Dockerfile.j2
index 6222dab39..711532efe 100644
--- a/docker/prometheus/prometheus-msteams/Dockerfile.j2
+++ b/docker/prometheus/prometheus-msteams/Dockerfile.j2
@@ -8,10 +8,11 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block prometheus_msteams_repository_version %}
ARG prometheus_msteams_version=1.5.0
ARG prometheus_msteams_sha256sum=74d1bedb12f6ec09fb65ddeb63328f691a9b2a56c92d7682ca152c867fc7c7a0
+ARG prometheus_msteams_url=https://github.com/prometheus-msteams/prometheus-msteams/releases/download/v${prometheus_msteams_version}/prometheus-msteams-linux-{{debian_arch}}
{% endblock %}
{% block prometheus_msteams_install %}
-RUN curl -o /tmp/prometheus-msteams https://github.com/prometheus-msteams/prometheus-msteams/releases/download/v${prometheus_msteams_version}/prometheus-msteams-linux-{{debian_arch}} \
+RUN curl -o /tmp/prometheus-msteams ${prometheus_msteams_url} \
&& echo "${prometheus_msteams_sha256sum} /tmp/prometheus-msteams" | sha256sum -c \
&& mv /tmp/prometheus-msteams /opt \
&& chmod 0755 /opt/prometheus-msteams \
diff --git a/docker/prometheus/prometheus-mysqld-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-mysqld-exporter/Dockerfile.j2
index c8f77ee07..03d421928 100644
--- a/docker/prometheus/prometheus-mysqld-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-mysqld-exporter/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block mysqld_exporter_header %}{% endblock %}
{% block mysqld_exporter_repository_version %}
-ENV mysqld_exporter_version=0.12.1
+ARG mysqld_exporter_version=0.12.1
+ARG mysqld_exporter_url=https://github.com/prometheus/mysqld_exporter/releases/download/v${mysqld_exporter_version}/mysqld_exporter-${mysqld_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block mysqld_exporter_install %}
-RUN curl -o /tmp/mysqld_exporter.tar.gz https://github.com/prometheus/mysqld_exporter/releases/download/v${mysqld_exporter_version}/mysqld_exporter-${mysqld_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/mysqld_exporter.tar.gz ${mysqld_exporter_url} \
&& tar xvf /tmp/mysqld_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/mysqld_exporter.tar.gz \
&& ln -s /opt/mysqld_exporter* /opt/mysqld_exporter
diff --git a/docker/prometheus/prometheus-node-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-node-exporter/Dockerfile.j2
index ce780f809..5694fe487 100644
--- a/docker/prometheus/prometheus-node-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-node-exporter/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block node_exporter_header %}{% endblock %}
{% block node_exporter_repository_version %}
-ENV node_exporter_version=0.18.1
+ARG node_exporter_version=0.18.1
+ARG node_exporter_url=https://github.com/prometheus/node_exporter/releases/download/v{$node_exporter_version}/node_exporter-${node_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block node_exporter_install %}
-RUN curl -o /tmp/node_exporter.tar.gz https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/node_exporter.tar.gz ${node_exporter_url} \
&& tar xvf /tmp/node_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/node_exporter.tar.gz \
&& ln -s /opt/node_exporter* /opt/node_exporter
diff --git a/docker/prometheus/prometheus-openstack-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-openstack-exporter/Dockerfile.j2
index 0150e1d6c..83e48be47 100644
--- a/docker/prometheus/prometheus-openstack-exporter/Dockerfile.j2
+++ b/docker/prometheus/prometheus-openstack-exporter/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block prometheus_openstack_exporter_header %}{% endblock %}
{% block prometheus_openstack_exporter_repository_version %}
-ENV prometheus_openstack_exporter_version=1.3.0
+ARG prometheus_openstack_exporter_version=1.3.0
+ARG prometheus_openstack_exporter_url=https://github.com/openstack-exporter/openstack-exporter/releases/download/v${prometheus_openstack_exporter_version}/openstack-exporter-${prometheus_openstack_exporter_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block prometheus_openstack_exporter_install %}
-RUN curl -o /tmp/prometheus_openstack_exporter.tar.gz https://github.com/openstack-exporter/openstack-exporter/releases/download/v${prometheus_openstack_exporter_version}/openstack-exporter-${prometheus_openstack_exporter_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/prometheus_openstack_exporter.tar.gz ${prometheus_openstack_exporter_url} \
&& tar xvf /tmp/prometheus_openstack_exporter.tar.gz -C /opt/ \
&& rm -f /tmp/prometheus_openstack_exporter.tar.gz \
&& ln -s /opt/openstack-exporter* /opt/openstack-exporter
diff --git a/docker/prometheus/prometheus-v2-server/Dockerfile.j2 b/docker/prometheus/prometheus-v2-server/Dockerfile.j2
index 63646649a..f0ae96211 100644
--- a/docker/prometheus/prometheus-v2-server/Dockerfile.j2
+++ b/docker/prometheus/prometheus-v2-server/Dockerfile.j2
@@ -6,11 +6,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block prometheus_v2_server_header %}{% endblock %}
{% block prometheus_v2_server_repository_version %}
-ENV prometheus_version=2.26.1
+ARG prometheus_version=2.26.1
+ARG prometheus_url=https://github.com/prometheus/prometheus/releases/download/v${prometheus_version}/prometheus-${prometheus_version}.linux-{{debian_arch}}.tar.gz
{% endblock %}
{% block prometheus_v2_server_install %}
-RUN curl -o /tmp/prometheus.tar.gz https://github.com/prometheus/prometheus/releases/download/v${prometheus_version}/prometheus-${prometheus_version}.linux-{{debian_arch}}.tar.gz \
+RUN curl -o /tmp/prometheus.tar.gz ${prometheus_url} \
&& tar xvf /tmp/prometheus.tar.gz -C /opt/ \
&& rm -f /tmp/prometheus.tar.gz \
&& ln -s /opt/prometheus* /opt/prometheus \
diff --git a/docker/skydive/skydive-base/Dockerfile.j2 b/docker/skydive/skydive-base/Dockerfile.j2
index e5b939071..5342f7e99 100644
--- a/docker/skydive/skydive-base/Dockerfile.j2
+++ b/docker/skydive/skydive-base/Dockerfile.j2
@@ -10,13 +10,18 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='skydive') }}
+{% block skydive_version %}
+ARG skydive_version=0.26.0
+ARG skydive_url=https://github.com/skydive-project/skydive/releases/download/v${skydive_version}/skydive
+{% endblock %}
+
{% block skydive_install %}
{% if base_arch != 'x86_64' %}
RUN echo 'image on {{ base_distro }} is not yet available on non x86_64 platforms' \
&& /bin/false
{% else %}
-RUN curl -o /usr/bin/skydive "https://github.com/skydive-project/skydive/releases/download/v0.26.0/skydive" \
+RUN curl -o /usr/bin/skydive ${skydive_url} \
&& chmod +x /usr/bin/skydive
{% endif %}
diff --git a/docker/storm/storm-base/Dockerfile.j2 b/docker/storm/storm-base/Dockerfile.j2
index 3bb03e753..bc89041df 100644
--- a/docker/storm/storm-base/Dockerfile.j2
+++ b/docker/storm/storm-base/Dockerfile.j2
@@ -31,9 +31,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.install_packages(storm_packages | customizable("packages")) }}
{% block storm_version %}
-ENV storm_version=1.2.2
-ENV storm_url=https://archive.apache.org/dist/storm/apache-storm-${storm_version}/apache-storm-${storm_version}.tar.gz
-ENV storm_pkg_sha512sum=0a1120b8df7b22edc75f0a412d625841f72f3fb8e9ff5d413d510908d68ea1f0c17d68c1a7f1eda427b40902452e9efcae902c36499b558592e41cc1079de2e0
+ARG storm_version=1.2.2
+ARG storm_url=https://archive.apache.org/dist/storm/apache-storm-${storm_version}/apache-storm-${storm_version}.tar.gz
+ARG storm_pkg_sha512sum=0a1120b8df7b22edc75f0a412d625841f72f3fb8e9ff5d413d510908d68ea1f0c17d68c1a7f1eda427b40902452e9efcae902c36499b558592e41cc1079de2e0
{% endblock %}
{% block storm_install %}
diff --git a/docker/zookeeper/Dockerfile.j2 b/docker/zookeeper/Dockerfile.j2
index 29cc547f4..0c7a28ec3 100644
--- a/docker/zookeeper/Dockerfile.j2
+++ b/docker/zookeeper/Dockerfile.j2
@@ -22,9 +22,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.install_packages(zookeeper_packages | customizable("packages")) }}
{% block zookeeper_version %}
-ENV zookeeper_version=3.4.13
-ENV zookeeper_url=http://archive.apache.org/dist/zookeeper/zookeeper-${zookeeper_version}/zookeeper-${zookeeper_version}.tar.gz
-ENV zookeeper_pkg_sha1sum=a989b527f3f990d471e6d47ee410e57d8be7620b
+ARG zookeeper_version=3.4.13
+ARG zookeeper_url=http://archive.apache.org/dist/zookeeper/zookeeper-${zookeeper_version}/zookeeper-${zookeeper_version}.tar.gz
+ARG zookeeper_pkg_sha1sum=a989b527f3f990d471e6d47ee410e57d8be7620b
{% endblock %}
{% block zookeeper_binary_install %}
diff --git a/docker/zun/zun-cni-daemon/Dockerfile.j2 b/docker/zun/zun-cni-daemon/Dockerfile.j2
index beaa6ec60..296996136 100644
--- a/docker/zun/zun-cni-daemon/Dockerfile.j2
+++ b/docker/zun/zun-cni-daemon/Dockerfile.j2
@@ -36,9 +36,14 @@ COPY zun_sudoers /etc/sudoers.d/kolla_zun_sudoers
RUN chmod 750 /etc/sudoers.d \
&& chmod 640 /etc/sudoers.d/kolla_zun_sudoers
-RUN curl -o /tmp/cni-plugins-v0.7.1.tgz https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz \
- && tar -C /opt -xzvf /tmp/cni-plugins-v0.7.1.tgz ./loopback \
- && rm -f /tmp/cni-plugins-v0.7.1.tgz
+{% block zun_cni_daemon_version %}
+ARG zun_cni_daemon_version=0.7.1
+ARG zun_cni_daemon_url=https://github.com/containernetworking/plugins/releases/download/v${zun_cni_daemon_version}/cni-plugins-amd64-v${zun_cni_daemon_version}.tgz
+{% endblock %}
+
+RUN curl -o /tmp/cni-plugins.tgz ${zun_cni_daemon_url} \
+ && tar -C /opt -xzvf /tmp/cni-plugins.tgz ./loopback \
+ && rm -f /tmp/cni-plugins.tgz
{% block zun_cni_daemon_footer %}{% endblock %}
{% block footer %}{% endblock %}
diff --git a/releasenotes/notes/generic-customisation-b2d431caa2fc5c10.yaml b/releasenotes/notes/generic-customisation-b2d431caa2fc5c10.yaml
new file mode 100644
index 000000000..b821b0f6c
--- /dev/null
+++ b/releasenotes/notes/generic-customisation-b2d431caa2fc5c10.yaml
@@ -0,0 +1,15 @@
+---
+features:
+ - |
+ Add templating block for base image helping to customize pip settings used
+ at build time for offline build scenario. We need some required environment
+ variables configured at the top level for all containers, for example the
+ variable UPPER_CONSTRAINTS_FILE used by the bifrost-deploy installation
+ scripts. Also here we can override the address of the PyPI repository via
+ PIP_INDEX_URL, PIP_EXTRA_INDEX_URL, and PIP_TRUSTED_HOST variables.
+upgrade:
+ - |
+ All Dockerfile files which uses curl to download any external files from the
+ Internet URLs now have the corresponding version templating block which can
+ be used to override them. Also all the ENV instructions inside these blocks
+ converted to the ARG instructions to minimize the unneeded variables.
diff --git a/tests/templates/template_overrides.j2 b/tests/templates/template_overrides.j2
index 92c165e05..5112bafa7 100644
--- a/tests/templates/template_overrides.j2
+++ b/tests/templates/template_overrides.j2
@@ -1,7 +1,7 @@
{% raw %}
{% extends parent_template %}
-{% block base_header %}
+{% block base_pip_conf %}
{% endraw %}
ENV PIP_INDEX_URL {{ nodepool_pypi_mirror }}