From 3a993b5b09d88b6056f0d8e459874ebd1b5e650f Mon Sep 17 00:00:00 2001
From: Martin Pietsch <martin.pietsch@tu-dresden.de>
Date: Wed, 9 Oct 2019 13:44:38 +0200
Subject: [PATCH] completed answerfile tasks

---
 templates/answerfile.j2 | 80 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 77 insertions(+), 3 deletions(-)

diff --git a/templates/answerfile.j2 b/templates/answerfile.j2
index a2c9c72..e4c07b3 100644
--- a/templates/answerfile.j2
+++ b/templates/answerfile.j2
@@ -3,20 +3,94 @@ export DISTRIBUTION="{{ hostobj.os.distribution }}"
 export RELEASE="{{ hostobj.os.release }}"
 export ARCH="{{ hostobj.os.architecture }}"
 export MIRROR="{{ system_local_mirror | default(system_home_mirror | default("")) }}"
+export LOCALE="{{ hostobj.locale | default("C.UTF-8") }}"
+export KEYMAP="{{ hostobj.keymap | default("us") }}"
+export TIMEZONE="{{ hostobj.timezone | default("GMT") }}"
 
 {% set disks = [] %}
 {% for disk in hostobj.disks %}
 {%   do disks.append('"%s"' | format(disk.device)) %}
 {{   'export DISK_%s_SCHEME="%s"' | format(disk.device | upper, disk.scheme | upper) }}
 {%   if 'partitions' in disk %}
-{{     'declare -a DISK_%s_PARTITIONS = ()' | format(disk.device | upper) }}
+{{     'declare -a DISK_%s_PARTITIONS=()' | format(disk.device | upper) }}
 {%     for part in disk.partitions %}
-{{       'DISK_%s_PARTITIONS += ("%s:%s:%s:%s:%s:%s:%s")' | format(disk.device | upper, part.size, part.fs, part.mountpoint | default(""), part.mountoptions | default("defaults"), part.dump | default("0"), part.pass | default("0"), part.format | default("true")) }}
+{{       'DISK_%s_PARTITIONS+=("%s:%s:%s:%s:%s:%s:%s")' | format(disk.device | upper, part.size, part.fs, part.mountpoint | default(""), part.mountoptions | default("defaults"), part.dump | default("0"), part.pass | default("0"), part.format | default("true")) }}
 {%     endfor %}
 {{   'export DISK_%s_PARTITIONS' | format(disk.device | upper) }}
 {%   endif %}
 {% endfor %}
 
-declare -a DISK_DEVICES = ({{ disks | join(" ") }})
+declare -a DISK_DEVICES=({{ disks | join(" ") }})
 export DISK_DEVICES
 
+{% set netifs = [] %}
+{% for ifname, ifdata in hostobj.network.devices.items() %}
+{%   set ifresdata = namespace(ipv4_address = "", ipv4_netmask = "", ipv6_address = "", ipv6_prefix = "") %}
+{%   if ifdata.ipv4 is defined %}
+{%     if hostobj.network.classes[ifdata.class].dhcp is defined %}
+{%       if hostobj.network.classes[ifdata.class].dhcp.ipv4 is defined %}
+{%         if (ifdata.ipv4 | ip_in_range('%s-%s' | format(hostobj.network.classes[ifdata.class].dhcp.ipv4.from, hostobj.network.classes[ifdata.class].dhcp.ipv4.to))) == true %}
+{%           set ifresdata.ipv4_address = "DHCP" %}
+{%         else %}
+{%           set ifresdata.ipv4_address = ifdata.ipv4 %}
+{%           set ifresdata.ipv4_netmask = ('%s/%s' | format(ifdata.ipv4, hostobj.network.classes[ifdata.class].ipv4.prefix) | ipaddr('netmask')) %}
+{%         endif %}
+{%       else %}
+{%         set ifresdata.ipv4_address = ifdata.ipv4 %}
+{%         set ifresdata.ipv4_netmask = ('%s/%s' | format(ifdata.ipv4, hostobj.network.classes[ifdata.class].ipv4.prefix) | ipaddr('netmask')) %}
+{%       endif %}
+{%     else %}
+{%       set ifresdata.ipv4_address = ifdata.ipv4 %}
+{%       set ifresdata.ipv4_netmask = ('%s/%s' | format(ifdata.ipv4, hostobj.network.classes[ifdata.class].ipv4.prefix) | ipaddr('netmask')) %}
+{%     endif %}
+{%   endif %}
+{%   if ifdata.ipv6 is defined %}
+{%     if hostobj.network.classes[ifdata.class].dhcp is defined %}
+{%       if hostobj.network.classes[ifdata.class].dhcp.ipv6 is defined %}
+{%         if (ifdata.ipv6 | ip_in_range('%s-%s' | format(hostobj.network.classes[ifdata.class].dhcp.ipv6.from, hostobj.network.classes[ifdata.class].dhcp.ipv6.to))) == true %}
+{%           set ifresdata.ipv6_address = "DHCP" %}
+{%         else %}
+{%           set ifresdata.ipv6_address = ifdata.ipv6 %}
+{%           set ifresdata.ipv6_prefix = hostobj.network.classes[ifdata.class].ipv6.prefix %}
+{%         endif %}
+{%       else %}
+{%         set ifresdata.ipv6_address = ifdata.ipv6 %}
+{%         set ifresdata.ipv6_prefix = hostobj.network.classes[ifdata.class].ipv6.prefix %}
+{%       endif %}
+{%     else %}
+{%       set ifresdata.ipv6_address = ifdata.ipv6 %}
+{%       set ifresdata.ipv6_prefix = hostobj.network.classes[ifdata.class].ipv6.prefix %}
+{%     endif %}
+{%   endif %}
+{{   'export NETIF_%s="%s:%s:%s:%s:%s"' | format(ifname | upper, ifresdata.ipv4_address, ifresdata.ipv4_netmask, ifresdata.ipv6_address, ifresdata.ipv6_prefix, ifdata.static | default("true")) }}
+{%   do netifs.append('"%s"' | format(ifname)) %}
+{% endfor %}
+declare -a NETIF_DEVICES=({{ netifs | join(" ") }})
+
+{% set dnsns = [] %}
+{% set dnsdom = [] %}
+{% for ncname, ncdata in hostobj.network.classes.items() %}
+{%   if (ncdata.default | default(False)) == True %}
+{%     if ncdata.ipv4 is defined %}
+{{       'export DEFAULTGATEWAY="%s"' | format(ncdata.ipv4.gateway) }}
+{%     endif %}
+{%     if ncdata.ipv6 is defined %}
+{{       'export DEFAULTGATEWAY6="%s"' | format(ncdata.ipv6.gateway) }}
+{%     endif %}
+{%     if ncdata.dns is defined %}
+{%       if ncdata.dns.nameservers.ipv4 is defined %}
+{%         do dnsns.extend(ncdata.dns.nameservers.ipv4) %}
+{%       endif %}
+{%       if ncdata.dns.nameservers.ipv6 is defined %}
+{%         do dnsns.extend(ncdata.dns.nameservers.ipv6) %}
+{%       endif %}
+{%       if ncdata.dns.domain is defined %}
+{%         do dnsdom.append('"%s"' | format(ncdata.dns.domain)) %}
+{%       endif %}
+{%     endif %}
+{%   endif %}
+{% endfor %}
+declare -a DNS_SERVER=({{ dnsns | join(" ") }})
+declare -a DNS_DOMAINS=({{ dnsdom | join(" ") }})
+
+
-- 
GitLab