generate a kickstart configuration file
validate it with ksvalidator part of the pykickstart package
end goal is for a full automated deployment
local files can only be pulled from the local media, so for netinst local files can't be used
you can split the config out and use the %include directive to pull the file in
so we have (for example) this directory layout on a remote server
kickstarts/
├── albert
│ ├── disk_layout_lvm.cfg
│ ├── kickstart.cfg
│ └── networking.cfg
├── base
│ ├── kickstart.cfg
│ └── networking.cfg
├── buildvm
├── common
│ ├── authentication.cfg
│ ├── authentication_rootpw.cfg
│ ├── bootloader.cfg
│ ├── disk_layout.cfg
│ ├── disk_layout_lvm.cfg
│ ├── firewall.cfg
│ ├── groups.cfg
│ ├── locale.cfg
│ ├── logging.cfg
│ ├── media_centos7_netboot.cfg
│ ├── networking.cfg
│ ├── packages.cfg
│ ├── post.cfg
│ ├── pre.cfg
│ ├── repo.cfg
│ ├── selinux.cfg
│ ├── services.cfg
│ ├── system_finalize.cfg
│ └── users.cfg
├── hal
│ ├── disk_layout_lvm.cfg
│ ├── kickstart.cfg
│ └── networking.cfg
├── README.md
├── tupper
│ ├── disk_layout_lvm.cfg
│ ├── kickstart.cfg
│ └── networking.cfg
└── xavier
├── disk_layout_lvm.cfg
├── kickstart.cfg
└── networking.cfg
the largest directory there is the common/ directory, this includes kickstarts shared across all servers, any can be overidden but creating a local copy of the file for the server and pointing the localised kickstart.cfg to the appropriate version of the file.
the deploy script (buildvm) identifies the server by name (we could use ip based configuration for auto identification and may look at that later) then reads the kickstart.cfg file
The kickstart.cfg file includes the other kickstarts as required for the server, so for example the kickstart.cfg for tupper is included below. You'll note that the disk_layout_lvm.cfg does not come from the common dir since it is specifc to the tupper deploy
%include http:///common/media_centos7_netboot.cfg
%include http:///common/authentication.cfg
%include http:///common/authentication_rootpw.cfg
%include http:///common/logging.cfg
%include http:///common/selinux.cfg
%include http:///common/services.cfg
%include http:///common/bootloader.cfg
%include http:///common/disk_layout.cfg
%include http:///tupper/disk_layout_lvm.cfg
%include http:///tupper/networking.cfg
%include http:///common/firewall.cfg
%include http:///common/repo.cfg
%include http:///common/locale.cfg
%include http:///common/groups.cfg
%include http:///common/users.cfg
%include http:///common/system_finalize.cfg
%pre
%include http:///common/pre.cfg
%end
%packages
%include http:///common/packages.cfg
%end
%post --erroronfail
%include http:///common/post.cfg
%end
As an example of the differences in the disk layouts, the sizes listed for each partition are for illustration purposes only.
commom/disk_layout_lvm.cfg
### PARTITIONING
# LVM
volgroup cl pv.01
logvol / --vgname=cl --fstype xfs --size=4096 --name=root
logvol /home --vgname=cl --fstype xfs --size=512 --name=home
logvol /tmp --vgname=cl --fstype xfs --size=512 --name=tmp
logvol /swap --vgname=cl --fstype swap --size=512 --name=swap
logvol /var --vgname=cl --fstype xfs --size=1 --name=var --grow --maxsize=512
logvol /var/log --vgname=cl --fstype xfs --size=512 --name=var-log
tupper/disk_layout_lvm.cfg
### PARTITIONING
# LVM
volgroup cl pv.01
logvol / --vgname=cl --fstype xfs --size=4096 --name=root
logvol /home --vgname=cl --fstype xfs --size=512 --name=home
logvol /tmp --vgname=cl --fstype xfs --size=512 --name=tmp
logvol /swap --vgname=cl --fstype swap --size=512 --name=swap
logvol /var --vgname=cl --fstype xfs --size=512 --name=var
logvol /var/log --vgname=cl --fstype xfs --size=512 --name=var-log
logvol /var/lib/docker --vgname=cl --fstype xfs --size=1 --name=var-lib-docker --grow