Patch Kolla via Template
目錄
Kolla 多少還是有一些不合需求的地方,我們可以透過 Kolla Template 的方式修改 Dockerfile ,不用直接硬修改 Kolla 本身,而是透過 Kolla 提供的 Plugin 安裝接口修正。
修改的同時可能需要一些 Jinja (Template Engine) 的一些知識,可以參考 Jinja 官網的文件,也需要 Dockerfile 的撰寫知識。
Table of Contents
<span class="ez-toc-title-toggle"><a class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" style="display: none;"><i class="ez-toc-glyphicon ez-toc-icon-toggle"></i></a></span>
簡單教學
可以修改的地方非常多,我這邊就講解最簡單的 Patch 項目。
一般而言我們上 Patch 都會在最後的最後,才把我們修正的部分加進去,避免中間操作,又把我們修正的部分還原。Kolla Dockerfile 中提供了 <service image>-footer
的區塊,供我們插入 Plugin 或是其他額外的檔案設定。
就例如說前文,我們要修正 QEMU 的軟體包,那我們可以在 template-override.j2
這個檔案中修正 Nova-Libvirt 。
# in template-override.j2
{% extends parent_template %}
{% block nova_libvirt_footer %}
ADD \
http://<some ip>/qemu-utils_2.11+dfsg-1ubuntu7.6_arm64.deb \
/patch/
RUN dpkg -i /patch/*.deb
{% endblock %}
Kolla 建置 Image 的時候新增以下參數
tools/build.py --template-override template-override.j2
就可以在建置最後,直接將我們的修改好的 QEMU 直接加入其中
泛用 Template
當然我們也可以直接撰寫一個泛用的 template,我的情境需要用到 x86_64 以及 arm64 兩種環境,所以我可以改成泛用的 template 以供使用。
{% extends parent_template %}
{% set custom_patch_url = "http://mgmt.kojuro.date:8000/" %}
{% set custom_patch_path = "/patch/" %}
{% set custom_patch_version = "2.11+dfsg-1ubuntu7.6" %}
{% set custom_patch_arch = "amd64" %}
{% if base_arch == "aarch64" %}
{% set custom_patch_arch = "arm64" %}
{% endif %}
{% block cinder_base_footer %}
# qemu-utils qemu-block-extra
ADD \
{{ custom_patch_url }}/qemu-utils_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-block-extra_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_path }}/
RUN dpkg -i {{ custom_patch_path }}/*.deb
{% endblock %}
{% block nova_libvirt_footer %}
# qemu qemu-block-extra
# qemu-system qemu-user qemu-utils
# qemu-system-arm qemu-system-mips qemu-system-ppc qemu-system-sparc qemu-system-x86 qemu-system-s390x qemu-system-misc
# qemu-system-common
ADD \
{{ custom_patch_url }}/qemu-utils_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-arm_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-mips_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-ppc_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-sparc_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-x86_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-s390x_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-misc_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-system-common_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-user_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-block-extra_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_path }}/
RUN dpkg -i {{ custom_patch_path }}/*.deb
{% endblock %}
{% block nova_compute_footer %}
# qemu-utils qemu-block-extra
ADD \
{{ custom_patch_url }}/qemu-utils_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-block-extra_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_path }}/
RUN dpkg -i {{ custom_patch_path }}/*.deb
{% endblock %}
{% block glance_api_footer %}
# qemu-utils qemu-block-extra
ADD \
{{ custom_patch_url }}/qemu-utils_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_url }}/qemu-block-extra_{{ custom_patch_version}}_{{ custom_patch_arch }}.deb \
{{ custom_patch_path }}/
RUN dpkg -i {{ custom_patch_path }}/*.deb
{% endblock %}
Reference
OpenStack Docs Building Container Images Dockerfile Customisation