log = logging.getLogger(__name__)
__author__ = 'Frank Brehm <frank.brehm@pixelpark.com>'
-__copyright__ = '(C) 2018 by Frank Brehm, Pixelpark GmbH, Berlin'
+__copyright__ = '(C) 2023 by Frank Brehm, Pixelpark GmbH, Berlin'
appname = os.path.basename(sys.argv[0])
app = CrTplApplication(appname=appname, base_dir=base_dir)
app.initialized = True
-if app.verbose > 2:
+if app.verbose > 3:
print("{c}-Object:\n{a}".format(c=app.__class__.__name__, a=app))
app()
distro: 'AlmaLinux-8-x86_64'
description: 'AlmaLinux 8 x86_64'
shortname: 'alma8'
+ ks_template: 'el8-standard.ks'
+ is_rhel: false
ks_repo_url: 'https://repo02.pixelpark.com/Linux/yum/almalinux/8/BaseOS/x86_64/os'
packages:
- '@core'
- 'bind-utils'
- 'chrony'
- 'curl'
+ - 'dbus'
- 'git'
- 'iotop'
- 'langpacks-de'
- 'man'
- 'mlocate'
- 'net-tools'
+ - 'oddjob-mkhomedir'
- 'postfix'
- 'psmisc'
- 'rsync'
- 'tpl.280.dist-upgrade.sh'
- 'tpl.300.create-motd.sh'
- 'tpl.320.root-ssh-login.sh'
+ - 'tpl.350.legato.sh'
- 'tpl.400.chrony.sh'
- 'tpl.450.puppet.sh'
- 'tpl.470.postfix.sh'
- 'tpl.500.logrotate.sh'
- 'tpl.999.finish.sh'
+
centos-7:
distro: 'CentOS-7.9-x86_64'
description: 'CentOS 7 x86_64'
shortname: 'centos7'
+ is_rhel: false
+ ks_template: 'el7-standard.ks'
ks_repo_url: 'https://repo02.pixelpark.com/Linux/yum/centos/7/os/x86_64'
repos:
- 'centos-7-x86_64-baseos'
- 'tpl.280.dist-upgrade.sh'
- 'tpl.300.create-motd.sh'
- 'tpl.320.root-ssh-login.sh'
+ - 'tpl.350.legato.sh'
- 'tpl.400.chrony.sh'
- 'tpl.450.puppet.sh'
- 'tpl.470.postfix.sh'
- 'tpl.500.logrotate.sh'
- 'tpl.999.finish.sh'
+
centos-stream-8:
distro: 'CentOS-Stream-8-x86_64'
description: 'CentOS Stream 8 x86_64'
shortname: 'centos8'
+ is_rhel: false
+ ks_template: 'el8-standard.ks'
ks_repo_url: 'https://repo02.pixelpark.com/Linux/yum/centos/8-stream/BaseOS/x86_64/os'
repos:
- 'centos-stream-8-x86_64-baseos'
- 'bind-utils'
- 'chrony'
- 'curl'
+ - 'dbus'
- 'git'
- 'iotop'
- 'langpacks-de'
- 'man'
- 'mlocate'
- 'net-tools'
+ - 'oddjob-mkhomedir'
- 'postfix'
- 'psmisc'
- 'rsync'
- 'tpl.280.dist-upgrade.sh'
- 'tpl.300.create-motd.sh'
- 'tpl.320.root-ssh-login.sh'
+ - 'tpl.350.legato.sh'
- 'tpl.400.chrony.sh'
- 'tpl.450.puppet.sh'
- 'tpl.470.postfix.sh'
- 'tpl.500.logrotate.sh'
- 'tpl.999.finish.sh'
+
+ centos-stream-9:
+ distro: 'CentOS-Stream-9-x86_64'
+ description: 'CentOS Stream 9 x86_64'
+ shortname: 'centos9'
+ is_rhel: false
+ ks_template: 'el9-standard.ks'
+ ks_repo_url: 'https://repo02.pixelpark.com/Linux/yum/centos-stream/9-stream/BaseOS/x86_64/os'
+ repos:
+ - 'centos-stream-8-x86_64-baseos'
+ - 'centos-stream-8-x86_64-appstream'
+ - 'centos-stream-8-x86_64-extras'
+ - 'centos-stream-8-x86_64-powertools'
+ - 'epel-8-x86_64'
+ - 'epel-8-x86_64-modular'
+ - 'icinga-el8-x86_64'
+ - 'puppetlabs-puppet7-el8-x86_64'
+ - 'pixelpark-el8-x86_64'
+ - 'monitoring-noarch'
+ - 'prometheus-el8-x86_64'
+ packages:
+ - '@core'
+ - '@^minimal install'
+ - 'NetworkManager-config-server'
+ - 'bash-completion'
+ - 'bc'
+ - 'bind-utils'
+ - 'chrony'
+ - 'curl'
+ - 'dbus'
+ - 'git'
+ - 'iotop'
+ - 'langpacks-de'
+ - 'lsof'
+ - 'mailx'
+ - 'man'
+ - 'mlocate'
+ - 'net-tools'
+ - 'oddjob-mkhomedir'
+ - 'postfix'
+ - 'psmisc'
+ - 'rsync'
+ - 'strace'
+ - 'sysstat'
+ - 'tcpdump'
+ - 'telnet'
+ - 'tmux'
+ - 'traceroute'
+ - 'vim'
+ - 'wget'
+ - 'yum-utils'
+ - '-abrt*'
+ - '-nfs*'
+ - '-rpcbind'
+ snippets:
+ - 'tpl.001.basics.sh'
+ - 'tpl.010.authkeys.sh'
+ - 'tpl.040.network.sh'
+ - 'tpl.060.tweak_systemd.sh'
+ - 'tpl.070.tweak_grub.sh'
+ - 'tpl.075.tmp-tmpfs.sh'
+ - 'tpl.080.rsyslogd-el8.sh'
+ - 'tpl.085.disable-ipv6.sh'
+ - 'tpl.100.clear_repos.sh'
+ - 'tpl.180.repos_centos8.sh'
+ - 'tpl.185.repos_el8.sh'
+ - 'tpl.200.init-repos.sh'
+ - 'tpl.210.bashrc-el8.sh'
+ - 'tpl.220.locales-el8.sh'
+ - 'tpl.230.vimrc-el8.sh'
+ - 'tpl.250.pkgs-el8.sh'
+ - 'tpl.280.dist-upgrade.sh'
+ - 'tpl.300.create-motd.sh'
+ - 'tpl.320.root-ssh-login.sh'
+ - 'tpl.350.legato.sh'
+ - 'tpl.400.chrony.sh'
+ - 'tpl.450.puppet.sh'
+ - 'tpl.470.postfix.sh'
+ - 'tpl.500.logrotate.sh'
+ - 'tpl.999.finish.sh'
+
oel-7:
distro: 'Oracle-Linux-7.9-x86_64'
description: 'Oracle Enterprise Linux 7 x86_64'
shortname: 'oel7'
+ is_rhel: false
+ ks_template: 'el7-standard.ks'
ks_repo_url: '$tree'
# ks_repo_url: 'https://repo02.pixelpark.com/Linux/yum/OracleLinux/OL7/ol7_latest'
# + 'LiveOS/squashfs.img'
- 'tpl.280.dist-upgrade.sh'
- 'tpl.300.create-motd.sh'
- 'tpl.320.root-ssh-login.sh'
+ - 'tpl.350.legato.sh'
- 'tpl.400.chrony.sh'
- 'tpl.450.puppet.sh'
- 'tpl.470.postfix.sh'
- 'tpl.500.logrotate.sh'
- 'tpl.999.finish.sh'
+
+ rhel-9:
+ distro: 'RHEL-9.2-x86_64'
+ description: 'RedHat Enterprise Linux 9 x86_64'
+ shortname: 'rhel9'
+ is_rhel: true
+ ks_template: 'el9-standard.ks'
+ ks_repo_url: 'http://${server}/cobbler/distro_mirror/RHEL-9.2'
+ repos: []
+ packages:
+ - '@core'
+ - '@^minimal install'
+ - 'NetworkManager-config-server'
+ - 'bash-completion'
+ - 'bc'
+ - 'bind-utils'
+ - 'chrony'
+ - 'curl'
+ - 'dbus'
+ - 'iotop'
+ - 'kexec-tools'
+ - 'langpacks-de'
+ - 'lsof'
+ - 'man'
+ - 'mlocate'
+ - 'net-tools'
+ - 'oddjob-mkhomedir'
+ - 'psmisc'
+ - 'rsync'
+ - 's-nail'
+ - 'strace'
+ - 'sysstat'
+ - 'tcpdump'
+ - 'telnet'
+ - 'tmux'
+ - 'traceroute'
+ - 'vim'
+ - 'wget'
+ - 'yum-utils'
+ - '-abrt*'
+ - '-nfs*'
+ - '-rpcbind'
+ snippets:
+ - 'tpl.001.basics.sh'
+ - 'tpl.005.update_resolvconf.sh'
+ - 'tpl.010.authkeys.sh'
+ - 'tpl.040.network.sh'
+ - 'tpl.060.tweak_systemd.sh'
+ - 'tpl.070.tweak_grub.sh'
+ - 'tpl.075.tmp-tmpfs.sh'
+ - 'tpl.080.rsyslogd-el9.sh'
+ - 'tpl.085.disable-ipv6.sh'
+ - 'tpl.100.clear_repos.sh'
+ - 'tpl.110.register-rhel.sh'
+ - 'tpl.190.repos_rhel9.sh'
+ - 'tpl.195.repos_el9.sh'
+ - 'tpl.200.init-repos.sh'
+ - 'tpl.211.bashrc-el9.sh'
+ - 'tpl.220.locales-el9.sh'
+ - 'tpl.231.vimrc-centos9.sh'
+ - 'tpl.250.pkgs-el9.sh'
+ - 'tpl.280.dist-upgrade.sh'
+ - 'tpl.300.create-motd.sh'
+ - 'tpl.320.root-ssh-login.sh'
+ - 'tpl.400.chrony.sh'
+ - 'tpl.450.puppet.sh'
+ - 'tpl.500.logrotate.sh'
+ - 'tpl.999.finish.sh'
+
rocky-8:
distro: 'Rocky-8-x86_64'
description: 'Rocky Linux 8 x86_64'
shortname: 'rocky8'
+ is_rhel: false
+ ks_template: 'el8-standard.ks'
ks_repo_url: 'https://repo02.pixelpark.com/Linux/yum/rockylinux/8/BaseOS/x86_64/os'
repos:
- 'rocky-8-x86_64-baseos'
- 'bind-utils'
- 'chrony'
- 'curl'
+ - 'dbus'
- 'git'
- 'iotop'
- 'langpacks-de'
- 'man'
- 'mlocate'
- 'net-tools'
+ - 'oddjob-mkhomedir'
- 'postfix'
- 'psmisc'
- 'rsync'
- 'tpl.280.dist-upgrade.sh'
- 'tpl.300.create-motd.sh'
- 'tpl.320.root-ssh-login.sh'
+ - 'tpl.350.legato.sh'
- 'tpl.400.chrony.sh'
- 'tpl.450.puppet.sh'
- 'tpl.470.postfix.sh'
from .xlate import __mo_file__ as __xlate_mo_file__
from .xlate import XLATOR, LOCALE_DIR, DOMAIN
-__version__ = '1.5.1'
+__version__ = '1.5.2'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
cfg_class=CrTplConfiguration, description=desc, initialized=False,
)
+ self.cfg.strip_unnessecary()
+
self.initialized = True
# -------------------------------------------------------------------------
Dummy function as main routine.
MUST be overwritten by descendant classes.
-
"""
LOG.info(_("Starting {a!r}, version {v!r} ...").format(
from .xlate import XLATOR
-__version__ = '0.9.3'
+__version__ = '0.10.0'
LOG = logging.getLogger(__name__)
# -------------------------------------------------------------------------
def ensure_profile_ks(self):
+ ks_template_name = self.cfg.current_distro.ks_template
+
+ LOG.info(_("Using {!r} as a template for the kickstart file.").format(
+ './templates/' + ks_template_name))
+
prefix = 'tmp.' + self.cfg.cobbler_profile + '.'
(fh, tmp_ks) = tempfile.mkstemp(prefix=prefix, suffix='.ks', text=True)
os.close(fh)
loader=jinja2.FileSystemLoader(str(self.base_dir / 'templates')),
autoescape=jinja2.select_autoescape(),
)
- ks_template = jinja_env.get_template('el-standard.ks')
+ ks_template = jinja_env.get_template(ks_template_name)
ks_content = ks_template.render(
distro=self.cfg.current_distro, snippets=snippet_lst) + '\n\n'
if self.verbose > 1:
profile_vars = self.get_profile_vars(profile)
- if self.verbose > 2:
+ if self.verbose > 1:
LOG.debug(_("Got profile variables:") + '\n' + pp(profile_vars))
self._change_profile(profile_vars)
profile = self.cfg.cobbler_profile
distro = self.cfg.cobbler_distro
distro_info = self.cfg.current_distro
+ status = self.cfg.system_status
LOG.debug(_("Checking existing profile {n!r} ({d}) ...").format(
n=profile, d=distro_info.description))
args.append('--name-servers-search')
args.append(' '.join(self.cfg.cobbler_dns_search))
+ ks_meta_ok = True
+ ks_meta_vars = {}
+ if 'autoinstall_meta' in profile_vars:
+ ks_meta_vars = self.xform_ks_meta(profile_vars['autoinstall_meta'])
+ if 'ROOT_PWD_HASH' not in ks_meta_vars:
+ LOG.debug(_('Profile ks_meta {!r} is not ok.').format('ROOT_PWD_HASH'))
+ ks_meta_ok = False
+ if ('SWAP_SIZE_MB' not in ks_meta_vars or
+ ks_meta_vars['SWAP_SIZE_MB'] != str(self.cfg.swap_size_mb)):
+ LOG.debug(_('Profile ks_meta {!r} is not ok.').format('SWAP_SIZE_MB'))
+ ks_meta_ok = False
+ if ('SYSTEM_STATUS' not in ks_meta_vars or
+ ks_meta_vars['SYSTEM_STATUS'] != status):
+ LOG.debug(_('Profile ks_meta {!r} is not ok.').format('SYSTEM_STATUS'))
+ ks_meta_ok = False
+ if ('WS_REL_FILESDIR' not in ks_meta_vars or
+ ks_meta_vars['WS_REL_FILESDIR'] != str(self.cfg.cobbler_ws_rel_filesdir)):
+ LOG.debug(_('Profile ks_meta {!r} is not ok.').format('WS_REL_FILESDIR'))
+ ks_meta_ok = False
+ if ('COBBLER_URL' not in ks_meta_vars or
+ ks_meta_vars['COBBLER_URL'] != "http://{}".format(self.cfg.cobbler_host)):
+ LOG.debug(_('Profile ks_meta {!r} is not ok.').format('COBBLER_URL'))
+ ks_meta_ok = False
+
+ if not ks_meta_ok:
+ ks_meta_list = []
+ ks_meta_list.append("ROOT_PWD_HASH={}".format(self.cfg.get_root_pwd_hash()))
+ ks_meta_list.append("SWAP_SIZE_MB={}".format(self.cfg.swap_size_mb))
+ ks_meta_list.append("SYSTEM_STATUS={}".format(status))
+ ks_meta_list.append("WS_REL_FILESDIR={}".format(self.cfg.cobbler_ws_rel_filesdir))
+ ks_meta_list.append("COBBLER_URL=http://{}".format(self.cfg.cobbler_host))
+
+ ks_meta = ' '.join(ks_meta_list)
+
+ args.append('--autoinstall-meta')
+ args.append(ks_meta)
+
if self.verbose:
LOG.debug("Args for 'profile edit:\n{}".format(pp(args)))
args = ['profile', 'edit', '--name', profile] + args
+ if self.verbose > 1:
+ LOG.debug('Arguments for changing profile:\n' + pp(args))
+ return
+
proc = self.exec_cobbler(args)
if proc.returncode:
rc=proc.returncode, err=err)
raise ExpectedCobblerError(msg)
+ # -------------------------------------------------------------------------
+ def xform_ks_meta(self, ks_meta):
+
+ data = {}
+
+ re_ws = re.compile(r'\s+')
+ re_key_value = re.compile(r'(\S+)=(.*)')
+
+ for token in re_ws.split(ks_meta):
+ m = re_key_value.match(token)
+ if m:
+ data[m.group(1)] = m.group(2)
+
+ if self.verbose > 1:
+ LOG.debug("Got autoinstall_meta from profile:\n" + pp(data))
+
+ return data
+
# -------------------------------------------------------------------------
def add_profile(self):
"""Creating a new profile."""
distro_info = self.cfg.current_distro
comment = "Profile for creating a {} VM.".format(distro_info.description)
+ status = self.cfg.system_status
LOG.debug("Using kickstart file {!r}".format(self.cfg.cobbler_profile_ks))
+ ks_meta_list = []
+ ks_meta_list.append("ROOT_PWD_HASH={}".format(self.cfg.get_root_pwd_hash()))
+ ks_meta_list.append("SWAP_SIZE_MB={}".format(self.cfg.swap_size_mb))
+ ks_meta_list.append("SYSTEM_STATUS={}".format(status))
+ ks_meta_list.append("WS_REL_FILESDIR={}".format(self.cfg.cobbler_ws_rel_filesdir))
+ ks_meta_list.append("COBBLER_URL=http://{}".format(self.cfg.cobbler_host))
+
+ ks_meta = None
+ if ks_meta_list:
+ ks_meta = ' '.join(ks_meta_list)
+
repos = []
if distro_info.repos:
repos = distro_info.repos.as_list()
args.append(' '.join(repos))
args.append('--comment')
args.append(comment)
+ if ks_meta:
+ if self.cfg.cobbler_major_version == 3:
+ args.append('--autoinstall-meta')
+ else:
+ args.append('--ksmeta')
+ args.append(ks_meta)
args.append('--virt-cpus')
args.append('2')
args.append('--virt-file-size')
from .xlate import XLATOR
-__version__ = '2.2.1'
+__version__ = '2.3.0'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
new.admin_filter = value
continue
+ if key.lower() in ['is_admin', 'readonly', 'tier', 'sync-source' ]:
+ continue
+
msg = _("Unknown LDAP configuration key {key} found in section {sec!r}.").format(
key=key, sec=s_name)
LOG.error(msg)
self._description = None
self._arch = DEFAULT_DISTRO_ARCH
self._ks_repo_url = None
+ self._is_rhel = False
+ self._ks_template = 'el8-standard.ks'
self.packages = []
self.repos = CIStringSet()
self.snippets = CIStringSet()
self._ks_repo_url = ks_repo_url
+ # -------------------------------------------------------------------------
+ @property
+ def is_rhel(self):
+ """Is the currwnt distro a RHEL distro?"""
+ return self._is_rhel
+
+ @is_rhel.setter
+ def is_rhel(self, value):
+ self._is_rhel = to_bool(value)
+
+ # -------------------------------------------------------------------------
+ @property
+ def ks_template(self):
+ """The filename below templates for generating the final kickstart file."""
+
+ return getattr(self, '_ks_template', 'el8-standard.ks')
+
+ @ks_template.setter
+ def ks_template(self, value):
+ if value is None:
+ return
+ template = value.strip()
+ if template == '':
+ return
+ self._ks_template = template
+
# -------------------------------------------------------------------------
def __repr__(self):
"""Typecasting into a string for reproduction."""
fields.append("shortname={!r}".format(self._shortname))
fields.append("distro={!r}".format(self.distro))
fields.append("arch={!r}".format(self.arch))
+ fields.append("is_rhel={!r}".format(self.is_rhel))
+ fields.append("ks_template={!r}".format(self.ks_template))
fields.append("description={!r}".format(self.description))
fields.append("ks_repo_url={!r}".format(self.ks_repo_url))
"""
res = super(CobblerDistroInfo, self).as_dict(short=short)
- res['name'] = self.name
- res['shortname'] = self.shortname
- res['distro'] = self.distro
res['arch'] = self.arch
res['description'] = self.description
+ res['distro'] = self.distro
+ res['is_rhel'] = self.is_rhel
res['ks_repo_url'] = self.ks_repo_url
+ res['ks_template'] = self.ks_template
+ res['name'] = self.name
+ res['shortname'] = self.shortname
return res
new.arch = value.strip()
continue
+ if key.lower() == 'is_rhel':
+ new.is_rhel = value
+ continue
+
if key.lower() == 'ks_repo_url' and value.strip() != '':
new.ks_repo_url = value.strip()
continue
+ if key.lower() == 'ks_template' and value.strip() != '':
+ new._ks_template = value.strip()
+ continue
+
if key.lower() == 'repos':
cls._update_repos(new, value)
continue
if not distro.description:
distro.description = distro_id
+ LOG.debug(_("Searching for distro with ID {!r} ...").format(self.os_id))
+
if self.os_id not in self.cobbler_distros:
msg = _("Did not found distro {!r} in configured Cobbler distros.").format(self.os_id)
raise CrTplConfigError(msg)
if self.verbose > 3:
LOG.debug(_("Evaluated Cobbler repositories:") + '\n' + pp(self.cobbler_repos))
+ # -------------------------------------------------------------------------
+ def strip_unnessecary(self):
+ """Stripping no more necessary stuff."""
+ LOG.debug(_("Stripping no more necessary stuff from configuration ..."))
+
+ if self.verbose > 1:
+ LOG.debug(_("Stripping {!r} ...").format('cfg.cobbler-distros'))
+ if 'cobbler-distros' in self.cfg:
+ del self.cfg['cobbler-distros']
+
+ if self.verbose > 1:
+ LOG.debug(_("Stripping {!r} ...").format('cfg.cobbler-repos'))
+ if 'cobbler-repos' in self.cfg:
+ del self.cfg['cobbler-repos']
+
+ if self.verbose > 1:
+ LOG.debug(_("Stripping {!r} ...").format('cobbler_distros'))
+ self.cobbler_distros = {}
+
+ if self.verbose > 1:
+ LOG.debug(_("Stripping {!r} ...").format('cobbler_repos'))
+ self.cobbler_repos = {}
+
+ if self.verbose > 1:
+ LOG.debug(_("Stripping {!r} ...").format('configs_raw'))
+ self.configs_raw = {}
+
# =============================================================================
if __name__ == "__main__":
from .xlate import XLATOR
-__version__ = '2.3.2'
+__version__ = '2.3.3'
LOG = logging.getLogger(__name__)
TZ = pytz.timezone('Europe/Berlin')
if self.verbose > 2:
LOG.debug(_("Current configuration:") + '\n' + pp(self.cfg.as_dict()))
+ elif self.verbose > 1:
+ LOG.debug(_("Current distribution:") + '\n' + pp(self.cfg.current_distro.as_dict()))
LOG.debug(_("Starting handling ..."))
self.cobbler.get_cobbler_version()
self.cobbler.ensure_profile_ks()
self.create_root_authkeys()
self.cobbler.ensure_profile()
+ return 0
+
self.cobbler.ensure_webroot()
# self.cobbler.ensure_root_authkeys(self.auth_keys_file)
self.cobbler.ensure_rsyslog_cfg_files()
+++ /dev/null
-######################################################################################
-# Provisioning-Installation of {{ distro.description }}
-######################################################################################
-#
-# Standard Pixelpark Installation of {{ distro.name }} templates.
-#
-
-# Firewall configuration
-firewall --disabled
-
-# Use network installation from cobbler host
-url --url="{{ distro.ks_repo_url }}" --noverifyssl
-
-sshpw --username=inst testtest --plaintext
-
-# Root install-password
-rootpw --iscrypted ${ROOT_PWD_HASH}
-# System authorization information
-auth --useshadow --passalgo=sha512
-# Use text mode install
-text
-# System keyboard
-keyboard de
-# System language
-lang en_US
-# SELinux configuration
-selinux --permissiv
-# Do not configure the X Window System
-skipx
-# Installation logging level
-logging --level=debug
-# Reboot after installation
-reboot
-# System timezone
-timezone Europe/Berlin
-
-###########################################
-# Partitioning and Disk
-
-# Clear the Master Boot Record
-zerombr
-
-# System bootloader configuration
-bootloader --location=mbr --append="net.ifnames=0 biosdevname=0"
-
-# Partition clearing information
-clearpart --all --drive=sda
-
-# Disk partitioning information
-part /boot --fstype ext4 --size=512 --ondisk=sda
-part swap --size=${SWAP_SIZE_MB} --ondisk=sda
-part pv.01 --size=1 --grow --ondisk=sda
-volgroup vgroot pv.01
-logvol / --vgname=vgroot --name=root --size=6144
-logvol /home --vgname=vgroot --name=home --size=1024
-logvol /var --vgname=vgroot --name=var --size=4096 --grow
-logvol /var/log --vgname=vgroot --name=log --size=2048
-
-##########################################
-# Packages
-
-%packages
-{%- for package in distro.packages %}
-{{ package }}
-{%- endfor %}
-%end
-
-##########################################
-# Post installation tasks in chroot env
-
-%post --interpreter=/usr/bin/bash
-
-### output to console
-mkdir -p "/var/log/anaconda"
-clear
-POST_LOG="/var/log/anaconda/post-install.log"
-exec < /dev/console &> >(tee -a "$POST_LOG")
-
-######################################################################################
-# Installation of pixelpark standard applications
-######################################################################################
-
-
-### debug
-# set -x
-
-echo "cobbler profile = $profile_name"
-
-echo
-echo "IP interfaces"
-ip link show
-
-echo
-echo "IP addresses"
-ip address show
-
-echo
-echo "IPv4 routes"
-ip route list
-
-echo
-echo "IPv6 routes"
-ip -6 route list
-
-echo
-echo "/etc/resolv.conf"
-cat /etc/resolv.conf
-
-if [[ -d "/etc/yum.repos.d" ]] ; then
-
- echo
- echo "/etc/yum.repos.d/"
- ls -lA /etc/yum.repos.d
-
- for repo_file in /etc/yum.repos.d/*.repo ; do
- if [[ -f "${repo_file}" ]] ; then
- echo
- echo "${repo_file}"
- echo '---'
- cat "${repo_file}"
- echo '---'
- fi
- done
-
-fi
-
-
-### remove unnecessary directory
-rm -rf /var/var
-
-export hostname="$hostname"
-export system_name="$system_name"
-export gateway="$gateway"
-export mgmt_interface="eth0"
-export ip_address_eth0="$ip_address_eth0"
-export mac_address_eth0="$mac_address_eth0"
-export system_status="${SYSTEM_STATUS}"
-export ws_rel_filesdir="${WS_REL_FILESDIR}"
-export cobbler_url="${COBBLER_URL}"
-
-echo
-echo "hostname: '$hostname'"
-echo "system_name: '$system_name'"
-echo "gateway: '$gateway'"
-echo "Management interface: '${mgmt_interface}'"
-echo "ip_address_eth0: '$ip_address_eth0'"
-echo "mac_address_eth0: '$mac_address_eth0'"
-echo "System status: '${system_status}'"
-echo "Cobbler URL: '${cobbler_url}'"
-
-###############################################################################
-# Performing snippets
-
-{%- for snippet in snippets %}
-
-#set $this_snippet= "per_status/" + $SYSTEM_STATUS + "/{{ snippet }}"
-echo
-echo "Using snippet $this_snippet"
-$SNIPPET($this_snippet)
-{%- endfor %}
-
-# ###########################
-# Seems to be finished
-
-%end
--- /dev/null
+######################################################################################
+# Provisioning-Installation of {{ distro.description }}
+######################################################################################
+#
+# Standard Pixelpark Installation of {{ distro.name }} templates.
+#
+
+# Firewall configuration
+firewall --disabled
+
+# Use network installation from cobbler host
+url --url="{{ distro.ks_repo_url }}" --noverifyssl
+
+sshpw --username=inst testtest --plaintext
+
+# Root install-password
+rootpw --iscrypted ${ROOT_PWD_HASH}
+
+# System authorization information
+auth --useshadow --passalgo=sha512
+
+# Use text mode install
+text
+
+# System keyboard
+keyboard de --vckeymap=de-deadacute
+
+# System language
+lang en_US
+
+# SELinux configuration
+selinux --permissiv
+
+# Do not configure the X Window System
+skipx
+
+# Installation logging level
+logging --level=debug
+
+# Reboot after installation
+reboot
+
+# System timezone
+timezone Europe/Berlin
+
+###########################################
+# Partitioning and Disk
+
+# Clear the Master Boot Record
+zerombr
+
+# System bootloader configuration
+bootloader --location=mbr --append="net.ifnames=0 biosdevname=0"
+
+# Partition clearing information
+clearpart --all --drive=sda --initlabel
+
+# Disk partitioning information
+part /boot --fstype ext4 --size=512 --ondisk=sda
+part pv.01 --size=1 --grow --ondisk=sda
+volgroup vgroot pv.01
+logvol / --vgname=vgroot --name=root --size=6144
+logvol swap --vgname=vgroot --name=swap --fstype=swap --size=${SWAP_SIZE_MB}
+logvol /home --vgname=vgroot --name=home --size=1024
+logvol /var --vgname=vgroot --name=var --size=4096 --grow
+logvol /var/log --vgname=vgroot --name=log --size=3072
+
+##########################################
+# Packages
+
+%packages
+{%- for package in distro.packages %}
+{{ package }}
+{%- endfor %}
+%end
+
+##########################################
+# Pre tasks
+%pre --interpreter=/bin/bash --log=/var/log/ks-pre.log
+#raw
+echo "[$( date --rfc-3339=seconds )]: Let's launch the missle ..."
+echo
+if grep '^nameserver' /etc/resolv.conf >/dev/null ; then
+ echo "Nameservers are defined in /etc/resolv.conf:"
+ grep '^nameserver' /etc/resolv.conf
+else
+ echo "Adding nameservers 93.188.109.12, 93.188.104.82 and 217.66.52.10 to /etc/resolv.conf ..."
+ echo "nameserver 93.188.109.12" >>/etc/resolv.conf
+ echo "nameserver 93.188.104.82" >>/etc/resolv.conf
+ echo "nameserver 217.66.52.10" >>/etc/resolv.conf
+fi
+
+echo
+echo "Used /etc/resolv.conf:"
+cat /etc/resolv.conf
+
+#end raw
+%end
+
+##########################################
+# Pre installation tasks
+%pre-install --interpreter=/bin/bash --log=/var/log/ks-pre-install.log
+#raw
+echo "[$( date --rfc-3339=seconds )]: Pre installation tasks ..."
+#end raw
+%end
+
+##########################################
+# Post installation tasks in chroot env
+
+%post --interpreter=/usr/bin/bash
+
+### output to console
+mkdir -p "/var/log/anaconda"
+clear
+POST_LOG="/var/log/anaconda/post-install.log"
+exec < /dev/console &> >(tee -a "$POST_LOG")
+
+######################################################################################
+# Installation of pixelpark standard applications
+######################################################################################
+
+
+### debug
+# set -x
+
+echo "cobbler profile = $profile_name"
+
+echo
+echo "IP interfaces"
+ip link show
+
+echo
+echo "IP addresses"
+ip address show
+
+echo
+echo "IPv4 routes"
+ip route list
+
+echo
+echo "IPv6 routes"
+ip -6 route list
+
+echo
+echo "/etc/resolv.conf"
+cat /etc/resolv.conf
+
+if [[ -d "/etc/yum.repos.d" ]] ; then
+
+ echo
+ echo "/etc/yum.repos.d/"
+ ls -lA /etc/yum.repos.d
+
+ for repo_file in /etc/yum.repos.d/*.repo ; do
+ if [[ -f "${repo_file}" ]] ; then
+ echo
+ echo "${repo_file}"
+ echo '---'
+ cat "${repo_file}"
+ echo '---'
+ fi
+ done
+
+fi
+
+
+### remove unnecessary directory
+rm -rf /var/var
+
+export hostname="$hostname"
+export system_name="$system_name"
+export gateway="$gateway"
+export mgmt_interface="eth0"
+export ip_address_eth0="$ip_address_eth0"
+export mac_address_eth0="$mac_address_eth0"
+export system_status="${SYSTEM_STATUS}"
+export ws_rel_filesdir="${WS_REL_FILESDIR}"
+export cobbler_url="${COBBLER_URL}"
+
+echo
+echo "hostname: '$hostname'"
+echo "system_name: '$system_name'"
+echo "gateway: '$gateway'"
+echo "Management interface: '${mgmt_interface}'"
+echo "ip_address_eth0: '$ip_address_eth0'"
+echo "mac_address_eth0: '$mac_address_eth0'"
+echo "System status: '${system_status}'"
+echo "Cobbler URL: '${cobbler_url}'"
+
+###############################################################################
+# Performing snippets
+
+{%- for snippet in snippets %}
+
+#set $this_snippet= "per_status/" + $SYSTEM_STATUS + "/{{ snippet }}"
+echo
+echo "Using snippet $this_snippet"
+$SNIPPET($this_snippet)
+{%- endfor %}
+
+# ###########################
+# Seems to be finished
+
+%end
+
+##########################################
+# Second post install section without chroot
+
+%post --nochroot
+#raw
+
+mkdir -pv /mnt/sysroot/var/log/anaconda
+
+for f in /var/log/ks-pre.log /var/log/ks-pre-install.log /var/log/anaconda/post-install.log ; do
+ if test -f "${f}" : then
+ cp -pv "${f}" /mnt/sysroot/var/log/anaconda/
+ else
+ echo "File '${f}' not found!"
+ fi
+done
+
+#end raw
+%end
+
+# Last line
--- /dev/null
+######################################################################################
+# Provisioning-Installation of {{ distro.description }}
+######################################################################################
+#
+# Standard Pixelpark Installation of {{ distro.name }} templates.
+#
+
+# Firewall configuration
+firewall --disabled
+
+# Use network installation from cobbler host
+url --url="{{ distro.ks_repo_url }}" --noverifyssl
+
+sshpw --username=inst testtest --plaintext
+
+# Root install-password
+rootpw --iscrypted ${ROOT_PWD_HASH}
+
+# System authorization information
+authselect minimal with-mkhomedir with-pwhistory without-nullok
+
+# Use text mode install
+text
+
+# System keyboard
+keyboard de --vckeymap=de-deadacute
+
+# System language
+lang en_US
+
+# SELinux configuration
+selinux --permissiv
+
+# Do not configure the X Window System
+skipx
+
+# Installation logging level
+logging --level=debug
+
+# Reboot after installation
+reboot
+
+# System timezone
+timezone Europe/Berlin
+
+###########################################
+# Partitioning and Disk
+
+# Clear the Master Boot Record
+zerombr
+
+# System bootloader configuration
+bootloader --location=mbr --append="net.ifnames=0 biosdevname=0"
+
+# Partition clearing information
+clearpart --all --drive=sda
+
+# Disk partitioning information
+part /boot --fstype ext4 --size=512 --ondisk=sda
+part pv.01 --size=1 --grow --ondisk=sda
+volgroup vgroot pv.01
+logvol / --vgname=vgroot --name=root --size=6144
+logvol swap --vgname=vgroot --name=swap --fstype=swap --size=${SWAP_SIZE_MB}
+logvol /home --vgname=vgroot --name=home --size=1024
+logvol /var --vgname=vgroot --name=var --size=4096 --grow
+logvol /var/log --vgname=vgroot --name=log --size=3072
+
+##########################################
+# Packages
+
+%packages
+{%- for package in distro.packages %}
+{{ package }}
+{%- endfor %}
+%end
+
+##########################################
+# Pre tasks
+%pre --interpreter=/bin/bash --log=/var/log/ks-pre.log
+#raw
+echo "[$( date --rfc-3339=seconds )]: Let's launch the missle ..."
+echo
+if grep '^nameserver' /etc/resolv.conf >/dev/null ; then
+ echo "Nameservers are defined in /etc/resolv.conf:"
+ grep '^nameserver' /etc/resolv.conf
+else
+ echo "Adding nameservers 93.188.109.12, 93.188.104.82 and 217.66.52.10 to /etc/resolv.conf ..."
+ echo "nameserver 93.188.109.12" >>/etc/resolv.conf
+ echo "nameserver 93.188.104.82" >>/etc/resolv.conf
+ echo "nameserver 217.66.52.10" >>/etc/resolv.conf
+fi
+
+echo
+echo "Used /etc/resolv.conf:"
+cat /etc/resolv.conf
+
+#end raw
+%end
+
+##########################################
+# Pre installation tasks
+%pre-install --interpreter=/bin/bash --log=/var/log/ks-pre-install.log
+#raw
+echo "[$( date --rfc-3339=seconds )]: Pre installation tasks ..."
+#end raw
+%end
+
+##########################################
+# Post installation tasks in chroot env
+
+%post --interpreter=/usr/bin/bash
+
+### output to console
+mkdir -p "/var/log/anaconda"
+clear
+POST_LOG="/var/log/anaconda/post-install.log"
+exec < /dev/console &> >(tee -a "$POST_LOG")
+
+######################################################################################
+# Installation of pixelpark standard applications
+######################################################################################
+
+
+### debug
+# set -x
+
+echo "cobbler profile = $profile_name"
+
+echo
+echo "IP interfaces"
+ip link show
+
+echo
+echo "IP addresses"
+ip address show
+
+echo
+echo "IPv4 routes"
+ip route list
+
+echo
+echo "IPv6 routes"
+ip -6 route list
+
+echo
+echo "/etc/resolv.conf"
+cat /etc/resolv.conf
+
+if [[ -d "/etc/yum.repos.d" ]] ; then
+
+ echo
+ echo "/etc/yum.repos.d/"
+ ls -lA /etc/yum.repos.d
+
+ for repo_file in /etc/yum.repos.d/*.repo ; do
+ if [[ -f "${repo_file}" ]] ; then
+ echo
+ echo "${repo_file}"
+ echo '---'
+ cat "${repo_file}"
+ echo '---'
+ fi
+ done
+
+fi
+
+
+### remove unnecessary directory
+rm -rf /var/var
+
+export hostname="$hostname"
+export system_name="$system_name"
+export gateway="$gateway"
+export mgmt_interface="eth0"
+export ip_address_eth0="$ip_address_eth0"
+export mac_address_eth0="$mac_address_eth0"
+export system_status="${SYSTEM_STATUS}"
+export ws_rel_filesdir="${WS_REL_FILESDIR}"
+export cobbler_url="${COBBLER_URL}"
+
+echo
+echo "hostname: '$hostname'"
+echo "system_name: '$system_name'"
+echo "gateway: '$gateway'"
+echo "Management interface: '${mgmt_interface}'"
+echo "ip_address_eth0: '$ip_address_eth0'"
+echo "mac_address_eth0: '$mac_address_eth0'"
+echo "System status: '${system_status}'"
+echo "Cobbler URL: '${cobbler_url}'"
+
+###############################################################################
+# Performing snippets
+
+{%- for snippet in snippets %}
+
+#set $this_snippet= "per_status/" + $SYSTEM_STATUS + "/{{ snippet }}"
+echo
+echo "Using snippet $this_snippet"
+$SNIPPET($this_snippet)
+{%- endfor %}
+
+# ###########################
+# Seems to be finished
+
+%end
+
+##########################################
+# Second post install section without chroot
+
+%post --nochroot
+#raw
+
+mkdir -pv /mnt/sysroot/var/log/anaconda
+
+for f in /var/log/ks-pre.log /var/log/ks-pre-install.log /var/log/anaconda/post-install.log ; do
+ if test -f "${f}" : then
+ cp -pv "${f}" /mnt/sysroot/var/log/anaconda/
+ else
+ echo "File '${f}' not found!"
+ fi
+done
+
+#end raw
+%end
+
+# Last line
--- /dev/null
+######################################################################################
+# Provisioning-Installation of {{ distro.description }}
+######################################################################################
+#
+# Standard Pixelpark Installation of {{ distro.name }} templates.
+#
+
+# Firewall configuration
+firewall --disabled
+
+# Use network installation from cobbler host
+url --url="{{ distro.ks_repo_url }}" --noverifyssl
+
+sshpw --username=inst testtest --plaintext
+
+# Root install-password
+rootpw --iscrypted ${ROOT_PWD_HASH}
+
+# System authorization information
+authselect minimal with-mkhomedir with-pwhistory without-nullok
+
+# Use text mode install
+text
+
+# System keyboard
+keyboard --vckeymap=de-deadacute
+
+# System language
+lang en_US
+
+# SELinux configuration
+selinux --permissiv
+
+# Do not configure the X Window System
+skipx
+
+# Installation logging level
+logging --level=debug
+
+# Reboot after installation
+reboot
+
+# System timezone
+timezone Europe/Berlin
+
+###########################################
+# Partitioning and Disk
+
+# Clear the Master Boot Record
+zerombr
+
+# System bootloader configuration
+bootloader --location=mbr --append="net.ifnames=0 biosdevname=0 crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M"
+
+# Partition clearing information
+clearpart --all --drive=sda --initlabel
+
+# Disk partitioning information
+part /boot --fstype ext4 --size=512 --ondisk=sda --asprimary
+part pv.01 --size=1 --grow --ondisk=sda
+volgroup vgroot pv.01
+logvol / --vgname=vgroot --name=root --fstype=xfs --size=6144
+logvol swap --vgname=vgroot --name=swap --fstype=swap --size=${SWAP_SIZE_MB}
+logvol /home --vgname=vgroot --name=home --fstype=xfs --size=1024
+logvol /var --vgname=vgroot --name=var --fstype=xfs --size=4096 --grow
+logvol /var/log --vgname=vgroot --name=log --fstype=xfs --size=3072
+
+##########################################
+# Packages
+
+%packages
+{%- for package in distro.packages %}
+{{ package }}
+{%- endfor %}
+%end
+
+##########################################
+# Pre tasks
+%pre --interpreter=/bin/bash --log=/var/log/ks-pre.log
+#raw
+echo "[$( date --rfc-3339=seconds )]: Let's launch the missle ..."
+echo
+if grep '^nameserver' /etc/resolv.conf >/dev/null ; then
+ echo "Nameservers are defined in /etc/resolv.conf:"
+ grep '^nameserver' /etc/resolv.conf
+else
+ echo "Adding nameservers 93.188.109.12, 93.188.104.82 and 217.66.52.10 to /etc/resolv.conf ..."
+ echo "nameserver 93.188.109.12" >>/etc/resolv.conf
+ echo "nameserver 93.188.104.82" >>/etc/resolv.conf
+ echo "nameserver 217.66.52.10" >>/etc/resolv.conf
+fi
+
+echo
+echo "Used /etc/resolv.conf:"
+cat /etc/resolv.conf
+
+#end raw
+%end
+
+##########################################
+# Pre installation tasks
+%pre-install --interpreter=/bin/bash --log=/var/log/ks-pre-install.log
+#raw
+echo "[$( date --rfc-3339=seconds )]: Pre installation tasks ..."
+#end raw
+%end
+
+##########################################
+# Post installation tasks in chroot env
+
+%post --interpreter=/usr/bin/bash
+
+### output to console
+mkdir -p -v "/var/log/anaconda"
+clear
+POST_LOG="/var/log/anaconda/post-install.log"
+exec < /dev/console &> >(tee -a "$POST_LOG")
+
+######################################################################################
+# Installation of pixelpark standard applications
+######################################################################################
+
+
+### debug
+# set -x
+
+echo "cobbler profile = $profile_name"
+
+echo
+echo "IP interfaces"
+ip link show
+
+echo
+echo "IP addresses"
+ip address show
+
+echo
+echo "IPv4 routes"
+ip route list
+
+echo
+echo "IPv6 routes"
+ip -6 route list
+
+echo
+echo "/etc/resolv.conf"
+cat /etc/resolv.conf
+
+if [[ -d "/etc/yum.repos.d" ]] ; then
+
+ echo
+ echo "/etc/yum.repos.d/"
+ ls -lA /etc/yum.repos.d
+
+ for repo_file in /etc/yum.repos.d/*.repo ; do
+ if [[ -f "${repo_file}" ]] ; then
+ echo
+ echo "${repo_file}"
+ echo '---'
+ cat "${repo_file}"
+ echo '---'
+ fi
+ done
+
+fi
+
+
+### remove unnecessary directory
+rm -rf /var/var
+
+export hostname="$hostname"
+export system_name="$system_name"
+export gateway="$gateway"
+export mgmt_interface="eth0"
+export ip_address_eth0="$ip_address_eth0"
+export mac_address_eth0="$mac_address_eth0"
+export system_status="${SYSTEM_STATUS}"
+export ws_rel_filesdir="${WS_REL_FILESDIR}"
+export cobbler_url="${COBBLER_URL}"
+{% if distro.is_rhel %}
+export rhsm_user="${RHSM_USER}"
+export rhsm_pwd="${RHSM_PWD}"
+export rhsm_system_id="${RHSM_SYSTEM_ID}"
+export rhsm_registred=''
+
+export redhat_repo_server='https://cdn.redhat.com'
+if [[ -n "${REDHAT_REPO_SERVER}" ]] ; then
+ redhat_repo_server="${REDHAT_REPO_SERVER}"
+fi
+
+export redhat_repo_path_prefix='/content'
+if [[ -n "${REDHAT_REPO_PATH_PREFIX}" ]] ; then
+ redhat_repo_path_prefix="${REDHAT_REPO_PATH_PREFIX}"
+fi
+
+export redhat_gpg_key='file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release'
+if [[ -n "${REDHAT_GPG_KEY}" ]] ; then
+ redhat_gpg_key="${REDHAT_GPG_KEY}"
+fi
+
+{% endif %}
+echo
+echo "hostname: '$hostname'"
+echo "system_name: '$system_name'"
+echo "gateway: '$gateway'"
+echo "Management interface: '${mgmt_interface}'"
+echo "ip_address_eth0: '$ip_address_eth0'"
+echo "mac_address_eth0: '$mac_address_eth0'"
+echo "System status: '${system_status}'"
+echo "Cobbler URL: '${cobbler_url}'"
+{% if distro.is_rhel %}
+echo
+echo "RedHat SubscriptionManager User: '${rhsm_user}'"
+echo "RedHat SubscriptionManager System ID: '${rhsm_system_id}'"
+echo "RedHat repository server: '${redhat_repo_server}'"
+echo "RedHat repository path prefix: '${redhat_repo_path_prefix}'"
+echo "RedHat GPK key: '${redhat_gpg_key}'"
+{% endif %}
+
+###############################################################################
+# Performing snippets
+
+{%- for snippet in snippets %}
+
+#set $this_snippet= "per_status/" + $SYSTEM_STATUS + "/{{ snippet }}"
+echo
+echo "Using snippet $this_snippet"
+$SNIPPET($this_snippet)
+{%- endfor %}
+
+# ###########################
+# Seems to be finished
+
+%end
+
+##########################################
+# Second post install section without chroot
+
+%post --nochroot
+#raw
+
+mkdir -pv /mnt/sysroot/var/log/anaconda
+
+for f in /var/log/ks-pre.log /var/log/ks-pre-install.log /var/log/anaconda/post-install.log ; do
+ if test -f "${f}" : then
+ cp -pv "${f}" /mnt/sysroot/var/log/anaconda/
+ else
+ echo "File '${f}' not found!"
+ fi
+done
+
+#end raw
+%end
+
+# Last line