aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/admin/image-building.rst19
-rw-r--r--kolla/common/config.py8
-rw-r--r--kolla/docker/base/Dockerfile.j26
-rw-r--r--kolla/image/kolla_worker.py15
-rw-r--r--kolla/image/tasks.py9
-rw-r--r--releasenotes/notes/pip-build-args-3e222f6a67c57407.yaml19
-rw-r--r--tests/playbooks/run.yml9
-rw-r--r--tests/templates/template_overrides.j228
8 files changed, 79 insertions, 34 deletions
diff --git a/doc/source/admin/image-building.rst b/doc/source/admin/image-building.rst
index 4a2c6773b..3a40f5f6e 100644
--- a/doc/source/admin/image-building.rst
+++ b/doc/source/admin/image-building.rst
@@ -372,9 +372,22 @@ verification purposes.
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.
+The PyPI mirror used during image builds can be configured directly in
+``kolla-build.conf``:
+
+.. path /etc/kolla/kolla-build.conf
+.. code-block:: ini
+
+ [DEFAULT]
+ pip_index_url = https://pypi.example.com/simple
+ pip_trusted_host = pypi.example.com
+ pip_extra_index_url = https://wheels.example.com/simple
+
+These options set the ``PIP_INDEX_URL``, ``PIP_TRUSTED_HOST``, and
+``PIP_EXTRA_INDEX_URL`` ARG variables in the base image via the
+``base_pip_conf`` Dockerfile block. The ``pip_extra_index_url`` option is
+optional. For further customisation, the block ``base_pip_conf`` can be
+overridden via the template_override mechanism.
To override PYPI upper-constraints of all OpenStack images, you can
define the source location of openstack-base. in ``kolla-build.conf``.
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 245afce50..1915f5c48 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -298,6 +298,14 @@ _BASE_OPTS = [
help='Clean all package cache.'),
cfg.ListOpt('allowed-to-fail', default=[],
help='Images which are allowed to fail'),
+ cfg.StrOpt('pip_index_url',
+ help='URL of the primary pip index (sets ARG PIP_INDEX_URL)'),
+ cfg.StrOpt('pip_trusted_host',
+ help='Hostname to mark as trusted for pip '
+ '(sets ARG PIP_TRUSTED_HOST)'),
+ cfg.StrOpt('pip_extra_index_url',
+ help='URL of an extra pip index '
+ '(sets ARG PIP_EXTRA_INDEX_URL)'),
]
diff --git a/kolla/docker/base/Dockerfile.j2 b/kolla/docker/base/Dockerfile.j2
index 6c1022ece..746f0e731 100644
--- a/kolla/docker/base/Dockerfile.j2
+++ b/kolla/docker/base/Dockerfile.j2
@@ -341,9 +341,9 @@ RUN touch /usr/local/bin/kolla_extend_start \
&& 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
+# pip build-time settings (PIP_INDEX_URL, PIP_TRUSTED_HOST, PIP_EXTRA_INDEX_URL) are
+# injected as ARG instructions by kolla-build and passed via --build-arg, so they do
+# not persist in the final image. Override this block to add further pip configuration.
{% endblock %}
{{ macros.kolla_patch_sources() }}
diff --git a/kolla/image/kolla_worker.py b/kolla/image/kolla_worker.py
index 1dc37e2a6..b54e81bea 100644
--- a/kolla/image/kolla_worker.py
+++ b/kolla/image/kolla_worker.py
@@ -411,6 +411,21 @@ class KollaWorker(object):
env.globals.update(self._get_methods())
template = env.get_template(template_name)
content = template.render(values, env=os.environ)
+ pip_args = [
+ 'ARG {}'.format(k)
+ for k, v in (
+ ('PIP_INDEX_URL', self.conf.pip_index_url),
+ ('PIP_TRUSTED_HOST', self.conf.pip_trusted_host),
+ ('PIP_EXTRA_INDEX_URL', self.conf.pip_extra_index_url),
+ ) if v
+ ]
+ if pip_args:
+ lines = content.split('\n')
+ for i, line in enumerate(lines):
+ if line.startswith('FROM '):
+ lines[i + 1:i + 1] = pip_args
+ break
+ content = '\n'.join(lines)
content_path = os.path.join(path, 'Dockerfile')
with open(content_path, 'w') as f:
LOG.debug("Rendered %s into:", tpl_path)
diff --git a/kolla/image/tasks.py b/kolla/image/tasks.py
index 9eec24a8f..ba2ade743 100644
--- a/kolla/image/tasks.py
+++ b/kolla/image/tasks.py
@@ -304,6 +304,15 @@ class BuildTask(EngineTask):
if proxy_var in os.environ and proxy_var not in buildargs:
buildargs[proxy_var] = os.environ.get(proxy_var)
+ pip_vars = (
+ ('PIP_INDEX_URL', self.conf.pip_index_url),
+ ('PIP_TRUSTED_HOST', self.conf.pip_trusted_host),
+ ('PIP_EXTRA_INDEX_URL', self.conf.pip_extra_index_url),
+ )
+ for pip_var, value in pip_vars:
+ if value and pip_var not in buildargs:
+ buildargs[pip_var] = value
+
if not buildargs:
return None
return buildargs
diff --git a/releasenotes/notes/pip-build-args-3e222f6a67c57407.yaml b/releasenotes/notes/pip-build-args-3e222f6a67c57407.yaml
new file mode 100644
index 000000000..38830a328
--- /dev/null
+++ b/releasenotes/notes/pip-build-args-3e222f6a67c57407.yaml
@@ -0,0 +1,19 @@
+---
+features:
+ - |
+ Added ``pip_index_url``, ``pip_trusted_host`` and ``pip_extra_index_url``
+ options to ``kolla-build.conf``. These set the corresponding
+ ``PIP_INDEX_URL``, ``PIP_TRUSTED_HOST`` and ``PIP_EXTRA_INDEX_URL``
+ build-time ``ARG`` instructions in the base image, passed via
+ ``--build-arg`` so the values do not persist in the final image.
+upgrade:
+ - |
+ Pip index configuration for image builds should now be set via the new
+ ``pip_index_url``, ``pip_trusted_host`` and ``pip_extra_index_url``
+ options in ``kolla-build.conf``, instead of ``ENV PIP_*`` lines in a
+ ``base_pip_conf`` template override. If your ``template_overrides.j2``
+ still sets ``ENV PIP_INDEX_URL``/``ENV PIP_TRUSTED_HOST``/
+ ``ENV PIP_EXTRA_INDEX_URL`` in that block, it will continue to take
+ precedence over the new build ``ARG`` values (``ENV`` persists in the
+ image and is evaluated after ``ARG``). Remove those ``ENV`` overrides
+ and use the new config options instead.
diff --git a/tests/playbooks/run.yml b/tests/playbooks/run.yml
index 99791da0f..47cfba466 100644
--- a/tests/playbooks/run.yml
+++ b/tests/playbooks/run.yml
@@ -62,6 +62,15 @@
when:
- not publisher
+ - name: Set pip mirror config
+ vars:
+ kolla_pip_mirror_config:
+ DEFAULT:
+ pip_index_url: "{{ nodepool_pypi_mirror }}"
+ pip_trusted_host: "{{ nodepool_mirror_host }}"
+ ansible.builtin.set_fact:
+ kolla_build_config: "{{ kolla_build_config | combine(kolla_pip_mirror_config, recursive=True) }}"
+
- name: Set up base repo overrides
vars:
kolla_repos_yaml_config:
diff --git a/tests/templates/template_overrides.j2 b/tests/templates/template_overrides.j2
index 3baa8d704..64b3d0f6e 100644
--- a/tests/templates/template_overrides.j2
+++ b/tests/templates/template_overrides.j2
@@ -1,31 +1,3 @@
{% raw %}
{% extends parent_template %}
-
-{% block base_pip_conf %}
-{% endraw %}
-
-ENV PIP_INDEX_URL {{ nodepool_pypi_mirror }}
-ENV PIP_TRUSTED_HOST {{ nodepool_mirror_host }}
-{% if use_infra_wheels_mirror | default(true) %}
-ENV PIP_EXTRA_INDEX_URL {{ nodepool_wheel_mirror }}
-{% endif %}
-
-{% raw %}
-{% endblock %}
-{% endraw %}
-
-{# Revert to upstream mirrors after build is complete #}
-
-{% raw %}
-{% block footer %}
-{% endraw %}
-
-ENV PIP_INDEX_URL=
-ENV PIP_TRUSTED_HOST=
-{% if use_infra_wheels_mirror | default(true) %}
-ENV PIP_EXTRA_INDEX_URL=
-{% endif %}
-
-{% raw %}
-{% endblock %}
{% endraw %}