I have a need to create automated boot-time provisioning for bare-metal servers.
Currently I am using Ansible pre-configured static iPXE + kickstart configurations to launch servers into semi-functioning state, which has to be further semi-manually provisioned to a working role (i.e. kubernetes node or nova node).
I want to migrate away from kickstart to ignition because I wish to have a fluent switch to CoreOS Container OS if I manage to defend that idea later on the road. To do that I figured I need to start with ignition based CentOS (or RHEL on some cases).
ProblemI need high level guidance on how to achieve this "uniform" installation procedure.
My current understanding of boot problem is a bit naive, I apologise if my rough plan is completely wrong.
1. I intend to create/find/reuse same step by step installation as in CoreOS:
- boot temporary system to discover configuration for hardware node (ip, network, disks(raid), root users)
- (?) configure next boot script to copy OS filesystem from network source to local filesystem, prepare and chain remaining role acquisition scripts/execs via systemd.
- reboot
- perform first boot provisioning with whatever exists in current systemd exec chain, at the end of it -- reboot to working role.
2. I have altered matchbox to support larger scale deployments with above task in mind.
3. I want to create a high level controller on top of those two processes to manage large groups of nodes. I.e. control an etcd key which defines user access rules to specific nodes, key would be watched by a small daemon in all nodes to perform required changes (similar to existing coreos update mechanics).
In my perspective there is a bunch of problems with my plan:
1. I have no idea where CoreOS/RedHat is moving and what you are doing.
2. I may have to reimplement existing software without actually understanding mistakes done in previous iterations (i.e. why there are different automated install mechanisms: ignition, kickstart/anaconda, debootstrap,
fai-project.org)
3. A lot of functions I aim for have at least partial support in current OpenStack ecosystem, which is also an issue, since I am working with that ecosystem too and having two tools for the same task seems redundant.
So, in short -- who would be interested in discussing this in more detail and either guide me a bit or simply stop me from wasting a large portion of my time on this?