From 52ddfdcf4d1df54fdbc621d3ec411d8f85358406 Mon Sep 17 00:00:00 2001 From: Alan Meadows Date: Mon, 15 Oct 2018 13:07:36 -0700 Subject: [PATCH] Add support for specific kernel package selection by tagging a node with a tag of 'kernel_package' with a value of the explicit package name which will drive the curtin installer. Change-Id: I67c8395c30bcb538859947f7406a433fb18a981b --- .../2.3_kernel_package.patch | 27 +++++++++++++++++++ images/maas-region-controller/Dockerfile | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 images/maas-region-controller/2.3_kernel_package.patch diff --git a/images/maas-region-controller/2.3_kernel_package.patch b/images/maas-region-controller/2.3_kernel_package.patch new file mode 100644 index 0000000..8ac56cd --- /dev/null +++ b/images/maas-region-controller/2.3_kernel_package.patch @@ -0,0 +1,27 @@ +--- preseed.py 2018-10-15 12:52:41.611027184 -0700 ++++ preseed2.py 2018-10-16 13:42:51.824755746 -0700 +@@ -317,7 +317,23 @@ + The BootResourceFile table contains a mapping between hwe kernels and + Ubuntu package names. If this mapping is missing we fall back to letting + Curtin figure out which kernel should be installed""" +- kpackage = BootResource.objects.get_kpackage_for_node(node) ++ ++ # determine if this node has kernel parameters applied by drydock ++ kernel_opt_tag = "%s_kp" % (node.hostname) ++ if kernel_opt_tag in node.tag_names(): ++ ++ # the tag exists, retrieve it ++ kernel_opts = node.tags.get(name=kernel_opt_tag).kernel_opts ++ ++ # parse the string and find our package param value ++ # e.g. kernel_package=linux-image-4.15.0-34-generic ++ kparams = kernel_opts.split() ++ kdict = dict(kparam.split('=') for kparam in kparams) ++ if 'kernel_package' in kdict: ++ kpackage = kdict['kernel_package'] ++ else: ++ kpackage = BootResource.objects.get_kpackage_for_node(node) ++ + if kpackage: + kernel_config = { + 'kernel': { diff --git a/images/maas-region-controller/Dockerfile b/images/maas-region-controller/Dockerfile index ca9e078..e3174b2 100644 --- a/images/maas-region-controller/Dockerfile +++ b/images/maas-region-controller/Dockerfile @@ -56,8 +56,10 @@ RUN apt-get download maas-region-controller=$MAAS_VERSION && \ # 2.3 workarounds COPY 2.3_proxy_port.patch /tmp/2.3_proxy_port.patch COPY 2.3_route.patch /tmp/2.3_route.patch +COPY 2.3_kernel_package.patch /tmp/2.3_kernel_package.patch RUN cd /usr/lib/python3/dist-packages/maasserver && patch compose_preseed.py < /tmp/2.3_proxy_port.patch RUN cd /usr/lib/python3/dist-packages/maasserver && patch preseed_network.py < /tmp/2.3_route.patch +RUN cd /usr/lib/python3/dist-packages/maasserver && patch preseed.py < /tmp/2.3_kernel_package.patch COPY journalctl-to-tty.service /etc/systemd/system/journalctl-to-tty.service RUN mkdir -p /etc/systemd/system/basic.target.wants ;\