apt: chart update: allow conf.apt.packages as map

This change allows conf.apt.packages to be defined as a map of lists,
allowing for logical grouping and easier substitution when values.yaml
is being assembled from multiple sources.

The existing format (conf.apt.packages as a list) is still supported.

Change-Id: I4d4c09723b2e9ac1f0ecf847e786d991cc6e669a
This commit is contained in:
Phil Sphicas 2020-01-04 23:05:49 -08:00
parent 524c1b1e32
commit 788501e806
3 changed files with 65 additions and 5 deletions

View File

@ -90,8 +90,20 @@ apt-get update
{{- if hasKey .Values.conf.apt "packages" }}
apt-get update
{{/* Build a unified list of packages */}}
{{- $all_apt_packages := list }}
{{- if kindIs "map" .Values.conf.apt.packages }}
{{- range $k, $v := .Values.conf.apt.packages }}
{{- range $v }}
{{- $all_apt_packages = . | append $all_apt_packages }}
{{- end }}
{{- end }}
{{- else }}
{{- $all_apt_packages = .Values.conf.apt.packages }}
{{- end -}}
# Set all debconf selections up front
{{- range .Values.conf.apt.packages }}
{{- range $all_apt_packages }}
{{- $pkg_name := .name }}
{{- range .debconf }}
debconf-set-selections <<< "{{ $pkg_name }} {{ .question }} {{ .question_type }} {{ .answer }}"
@ -102,7 +114,7 @@ apt-get update
dpkg --configure -a
# Perform package installs
{{- range .Values.conf.apt.packages }}
{{- range $all_apt_packages }}
{{- $pkg_name := .name }}
if [[ "${CURRENT_PACKAGES[{{ .name | squote }}]+isset}" != "isset"{{- if .version }} || "${CURRENT_PACKAGES[{{ .name | squote }}]}" != {{ .version }}{{- end }} ]]; then
# Run this in case some package installation was interrupted

View File

@ -124,6 +124,37 @@ Here is an example configuration for it::
allow_downgrade: true
- name: <PACKAGE2>
It is also permissible to use ``conf.apt.packages`` as a map, in which case all
the packages from the different groups will be installed. This is primary useful
for logical organization. The keys of the map are ignored, and the values are a
list of the same format as the packages list above. No deduplication or other
processing is performed, just a simple concatenation (without any ordering
guarantees). For example::
conf:
apt:
packages:
group1:
- name: <PACKAGE1>
version: <VERSION1>
allow_downgrade: true
- name: <PACKAGE2>
group2:
- name: <PACKAGE3>
- name: <PACKAGE4>
Is equivalent to::
conf:
apt:
packages:
- name: <PACKAGE1>
version: <VERSION1>
allow_downgrade: true
- name: <PACKAGE2>
- name: <PACKAGE3>
- name: <PACKAGE4>
There is a possibility to blacklist packages, e.g. ``telnetd`` and ``nis``::
conf:

View File

@ -79,6 +79,8 @@ APT_VERSION3="$(apt-cache show $APT_PACKAGE3 | grep Version: | tail -1 | awk '{p
APT_PACKAGE4=less
APT_PACKAGE5=python-setuptools
APT_PACKAGE6=telnetd
APT_PACKAGE7=sudoku
APT_PACKAGE8=ninvaders
APT_REPOSITORY1="http://us.archive.ubuntu.com/ubuntu/"
APT_DISTRIBUTIONS1="[ xenial ]"
APT_COMPONENTS1="[ main, universe, restricted, multiverse ]"
@ -1281,7 +1283,7 @@ test_apt(){
echo '[SUCCESS] apt test5 passed successfully' >> "${TEST_RESULTS}"
# Test blacklistpkgs
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set1.yaml
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set5.yaml
echo "conf:
apt:
packages:
@ -1294,7 +1296,7 @@ test_apt(){
echo '[SUCCESS] apt test6 passed successfully' >> "${TEST_RESULTS}"
# Test add several repositories with gpg keys
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set5.yaml
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set6.yaml
echo "conf:
apt:
repositories:
@ -1326,7 +1328,7 @@ $(printf '%s' "$APT_GPGKEY3" | awk '{printf " %s\n", $0}')" > "${overri
echo '[SUCCESS] apt test7 passed successfully' >> "${TEST_RESULTS}"
# Test add same gpg key two times
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set6.yaml
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set7.yaml
echo "conf:
apt:
repositories:
@ -1349,6 +1351,21 @@ $(printf '%s' "$APT_GPGKEY1" | awk '{printf " %s\n", $0}')" > "${overri
_test_apt_repositories "$APT_REPOSITORY1 $APT_REPOSITORY2"
_test_apt_keys "$APT_GPGKEYID1"
echo '[SUCCESS] apt test8 passed successfully' >> "${TEST_RESULTS}"
# Test groups of packages using a map
local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set8.yaml
echo "conf:
apt:
packages:
fun:
- name: $APT_PACKAGE7
funner:
- name: $APT_PACKAGE8" > "${overrides_yaml}"
install_base "--values=${overrides_yaml}"
get_container_status apt
_test_apt_package_version $APT_PACKAGE7 any
_test_apt_package_version $APT_PACKAGE8 any
echo '[SUCCESS] apt test9 passed successfully' >> "${TEST_RESULTS}"
}
# test exec module