Provision nodes with Ironic+Mistral/Ansible without Nova

Registered by Dmitry Tantsur on 2018-05-03

Making TripleO workflows use Ironic directly to provision nodes has quite a few benefits:
1. First and foremost, getting rid of the horrible "no valid hosts found" exception. The scheduling will be much simpler and the errors will be clearer.
2. Also important for the generic provisioner case, we'll be able to get rid of Nova and Glance, reducing the memory footprint.
3. We'll get rid of pre-deploy validations that currently try to get what nova scheduler will expect.
4. We'll become on charge of building the configdrive, potentially putting more useful things there.
5. In the future we'll be able to integrate things like building RAID on demand much easier.
6. Also in the future we might want to use introspection data in scheduling and provisioning decisions. Particularly, we can automate handling root device hints.
7. We'll probably have easier time combining ironic with pre-deployed services or virtual solutions (e.g. putting controllers on oVirt, which is currently done via an unsupported ironic-staging-driver driver).
8. Hopefully, scale-up will be less error-prone.

The way I see it implemented is probably similar to the config-download work (and based on it). We can have a Heat flag to not provision instances, essentially stop after creating ports and creating ansible input. Then a mistral workflow will pick the required number of nodes, prepare them and provision. Then the usual config-download will proceed.

A library is being prepared to host the reusable code for provisioning: https://github.com/openstack/metalsmith.

Blueprint information

Status:
Started
Approver:
Emilien Macchi
Priority:
Medium
Drafter:
Dmitry Tantsur
Direction:
Needs approval
Assignee:
Dmitry Tantsur
Definition:
Approved
Series goal:
Proposed for stein
Implementation:
Good progress
Milestone target:
milestone icon train-1
Started by
Dmitry Tantsur on 2018-08-02

Related branches

Sprints

Whiteboard

Gerrit topic: https://review.openstack.org/#q,topic:bp/nova-less-deploy,n,z

Addressed by: https://review.openstack.org/576856
    Support provisioning bare metals without Nova

Addressed by: https://review.openstack.org/576512
    Add ServerDeletionPolicy parameter

Addressed by: https://review.openstack.org/579522
    Add RoleNetPortIdMap output

Addressed by: https://review.openstack.org/579556
    Add RoleCtlplanePortMap output

Addressed by: https://review.openstack.org/604761
    [WIP] Bare metal provisioning without Nova and Glance

Addressed by: https://review.openstack.org/632701
    nova-less-deploy: follow-up to deploy_instances

Addressed by: https://review.openstack.org/633477
    nova-less-deploy: updates for metalsmith >= 0.9.0

Addressed by: https://review.openstack.org/637191
    [WIP] nova-less-deploy: implement deploy_roles workflow

Addressed by: https://review.openstack.org/638685
    nova-less-deploy: command for deploying nodes with ironic

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.