:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : Copyright (c) 2018 Enea AB and others. : : All rights reserved. This program and the accompanying materials : are made available under the terms of the Apache License, Version 2.0 : which accompanies this distribution, and is available at : http://www.apache.org/licenses/LICENSE-2.0 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: From: Alexandru Avadanii Date: Sun, 20 Aug 2017 22:41:26 +0200 Subject: [PATCH] mcp: salt-formulas: armband: Extend libvirt_domain Add new state in armband salt formula that: * extends salt's virt libvirt_domain.jinja template with support for: - hw_firmware_type; - virt_machine_model; - cpu_model; These will later be leveraged via salt virt formula with AArch64 specific values. * to ensure compatibilty of `virt.purge` with NVRAM-enabled domains at undefine time, pass down the proper flag to libvirt from virt.py. * re-enable AArch64 bootstrap Recent changes in salt bootstrap script from [1] whitelist a fixed pool of known architectures. Add "arm64" to that list on the fly, as part of `config.gather_bootstrap_script`. NOTE: This change will be leveraged by passing a custom DEB repo to the bootstrap script with `-R linux.enea.com/saltstack`. NOTE: After running this new state, salt-minion should be restarted to pick up the changes, so we'll run it before rebooting kvm nodes. [1] http://bootstrap.saltstack.com Signed-off-by: Alexandru Avadanii --- mcp/config/states/baremetal_init | 1 + .../armband/files/salt-minion-aarch64-rollup.diff | 101 +++++++++++++++++++++ mcp/salt-formulas/armband/salt_minion.sls | 7 ++ 3 files changed, 109 insertions(+) create mode 100644 mcp/salt-formulas/armband/files/salt-minion-aarch64-rollup.diff create mode 100644 mcp/salt-formulas/armband/salt_minion.sls diff --git a/mcp/config/states/baremetal_init b/mcp/config/states/baremetal_init index 891eae36..54ffb873 100755 --- a/mcp/config/states/baremetal_init +++ b/mcp/config/states/baremetal_init @@ -35,6 +35,7 @@ wait_for 30.0 "salt -C 'kvm* or cmp*' test.ping" salt -C 'cmp*' file.write /etc/dhcp/dhclient-enter-hooks.d/no-default-route \ args='unset new_routers' +salt -C 'kvm*' state.apply armband.salt_minion salt -C 'kvm* or cmp*' system.reboot wait_for 90.0 "salt -C 'kvm* or cmp*' test.ping" diff --git a/mcp/salt-formulas/armband/files/salt-minion-aarch64-rollup.diff b/mcp/salt-formulas/armband/files/salt-minion-aarch64-rollup.diff new file mode 100644 index 00000000..9e74c240 --- /dev/null +++ b/mcp/salt-formulas/armband/files/salt-minion-aarch64-rollup.diff @@ -0,0 +1,101 @@ +From: Alexandru Avadanii +Date: Sun Aug 20 18:18:53 2017 +0200 +Subject: [PATCH] cloud.py: Allow AArch64 arch in salt bootstrap + +Recent changes in salt bootstrap script from [1] whitelist a +fixed pool of known architectures. Add "arm64" to that list on the +fly, as part of `config.gather_bootstrap_script`. + +NOTE: This change will be leveraged by passing a custom DEB repo to +the bootstrap script with `-R linux.enea.com/saltstack`. + +[1] http://bootstrap.saltstack.com + +Signed-off-by: Alexandru Avadanii +--- + +diff --git a/salt/utils/cloud.py b/salt/utils/cloud.py +--- a/salt/utils/cloud.py ++++ b/salt/utils/cloud.py +@@ -2772,6 +2772,9 @@ + if not script_content: + raise ValueError('No content in bootstrap script !') + ++ # NOTE(armband): edit bootstrap script on the fly to allow AArch64 ++ script_content = script_content.replace('"amd64")', '"amd64"|"arm64")') ++ + # Get the path to the built-in deploy scripts directory + builtin_deploy_dir = os.path.join( + os.path.dirname(__file__), +-- + +From: Alexandru Avadanii +Date: Sun Aug 20 18:18:53 2017 +0200 +Subject: [PATCH] libvirt_domain.jinja: Add AArch64 support + +Salt virt state relies on a Jinja template to create a libvirt +XML definition for each new VM. +This template needs to be extended with a few specific options +for AArch64: +- UEFI loader support (pflash); +- custom machine model (e.g. 'virt-2.9'), since AArch64 defaults to + 'integratorcp'; +- custom cpu model; + +Allow all these to be parametrized from the salt virt formula, +which we will also adapt to allow the params to be passed via our +reclass model. + +Signed-off-by: Alexandru Avadanii +--- + +diff --git a/salt/templates/virt/libvirt_domain.jinja b/salt/templates/virt/libvirt_domain.jinja +--- a/salt/templates/virt/libvirt_domain.jinja ++++ b/salt/templates/virt/libvirt_domain.jinja +@@ -3,11 +3,22 @@ + {{ cpu }} + {{ mem }} + ++ {% if custom_virt_machine %} ++ hvm ++ {% else %} + hvm ++ {% endif %} ++ {% if os_loader_type == 'pflash' %} ++ {{ os_loader }} ++ {{ os_loader_nvram }} ++ {% endif %} + {% for dev in boot_dev %} + + {% endfor %} + ++ {% if cpu_mode == 'custom' %} ++ ++ {% endif %} + + {% for diskname, disk in disks.items() %} + +-- + +From: Alexandru Avadanii +Date: Sun Nov 19 02:18:53 2017 +0200 +Subject: [PATCH] virt.py: undefine: NVRAM flag support + +Signed-off-by: Alexandru Avadanii +--- + +diff --git a/salt/modules/virt.py b/salt/modules/virt.py +--- a/salt/modules/virt.py ++++ b/salt/modules/virt.py +@@ -1523,7 +1523,10 @@ + salt '*' virt.undefine + ''' + dom = _get_domain(vm_) +- return dom.undefine() == 0 ++ try: ++ return dom.undefineFlags(libvirt.VIR_DOMAIN_UNDEFINE_NVRAM) == 0 ++ except libvirt.libvirtError: ++ return dom.undefine() == 0 + + + def purge(vm_, dirs=False): diff --git a/mcp/salt-formulas/armband/salt_minion.sls b/mcp/salt-formulas/armband/salt_minion.sls new file mode 100644 index 00000000..9cce6367 --- /dev/null +++ b/mcp/salt-formulas/armband/salt_minion.sls @@ -0,0 +1,7 @@ +salt-minion-aarch64-rollup: + file.patch: + - name: /usr/lib/python2.7/dist-packages + - source: salt://armband/files/salt-minion-aarch64-rollup.diff + - hash: False + - options: '-p1' + - unless: 'test -f /var/cache/salt/minion/files/base/armband/files/salt-minion-aarch64-rollup.diff && cd /usr/lib/python2.7/dist-packages && patch -p1 -R --dry-run /var/cache/salt/minion/files/base/armband/files/salt-minion-aarch64-rollup.diff'