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:
Approved
Assignee:
Steve Baker
Definition:
Approved
Series goal:
Accepted for ussuri
Implementation:
Good progress
Milestone target:
None
Started by
Dmitry Tantsur on 2018-08-02

Related branches

Sprints

Whiteboard

[2019-09-18] (aschultz): Not implemented by the end of Train, moving out to Ussuri

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

Gerrit topic: https://review.opendev.org/#/q/topic:bp/nova-less-deploy

Addressed by: https://review.opendev.org/656581
    Switch off nova metadata api on the undercloud

Addressed by: https://review.opendev.org/657626
    Revert "Switch off nova metadata api on the undercloud"

Addressed by: https://review.opendev.org/658706
    Revert "Revert "Switch off nova metadata api on the undercloud""

Gerrit topic: https://review.opendev.org/#/q/topic:nova-less-deploy

Addressed by: https://review.opendev.org/659186
    Configure nova_compute for vendordata

Addressed by: https://review.opendev.org/663891
    [WIP] nova-less-deploy: stop using glance for ironic-python-agent images

Addressed by: https://review.opendev.org/663897
    Rework create_or_find_kernel_and_ramdisk to match the current reality

Addressed by: https://review.opendev.org/664168
    Define var undercloud_enable_nova

Addressed by: https://review.opendev.org/664169
    Write out overcloud_baremetal_deploy.yaml

Addressed by: https://review.opendev.org/664170
    DNM: undercloud_enable_nova: false by default

Addressed by: https://review.opendev.org/664174
    Env file to disable undercloud nova

Addressed by: https://review.opendev.org/664179
    Add undercloud.conf enable_nova option

Addressed by: https://review.opendev.org/664180
    DNM Set enable_nova in undercloud.conf

Addressed by: https://review.opendev.org/664456
    Define variable baremetal_provision

Addressed by: https://review.opendev.org/664457
    DNM: Set baremetal_provision:true for OVB jobs

Addressed by: https://review.opendev.org/665038
    Filter the rendered DeployedServerPortMap values

Addressed by: https://review.opendev.org/665040
    Improve yaml output of "openstack overcloud node provision"

Addressed by: https://review.opendev.org/665373
    Drop EC2MetadataIp parameter and its uses

Addressed by: https://review.opendev.org/669019
    Make instances name/hostname optional

Addressed by: https://review.opendev.org/669582
    WIP Add --baremetal-deployment to overcloud deploy cmd

Addressed by: https://review.opendev.org/669774
    DNM proposed change to baremetal provision format

Addressed by: https://review.opendev.org/670432
    Break out hostname format logic into functions

Addressed by: https://review.opendev.org/670437
    Allow mixing of count and instances

Gerrit topic: https://review.opendev.org/#/q/topic:metalsmith-12

Addressed by: https://review.opendev.org/672414
    nova-less-deploy: update to metalsmith 0.13

Addressed by: https://review.opendev.org/672605
    Add provisioned attribute to instances

Addressed by: https://review.opendev.org/672848
    WIP add an undeploy_nodes workflow

Addressed by: https://review.opendev.org/672849
    WIP new command "openstack overcloud node unprovision"

Addressed by: https://review.opendev.org/674141
    WIP New command "overcloud node extract provisioned"

Addressed by: https://review.opendev.org/675204
    Remove glance and nova custom constraints

Addressed by: https://review.opendev.org/675217
    Sync deployed-server-roles-data.yaml with roles_data.yaml

Addressed by: https://review.opendev.org/675497
    Remove disable_constraints

Addressed by: https://review.opendev.org/675498
    DNM never delete a nova server

Addressed by: https://review.opendev.org/677099
    Move enable_nova after enable_ironic

Addressed by: https://review.opendev.org/677100
    Also disable undercloud glance with nova

Addressed by: https://review.opendev.org/677106
    Don't mount /etc/nova into placement migrate script

Addressed by: https://review.opendev.org/677836
    Configure nova_compute for vendordata

Addressed by: https://review.opendev.org/677838
    Configure nova_compute for vendordata

Addressed by: https://review.opendev.org/677849
    DNM: baremetal_provision:true by default

Addressed by: https://review.opendev.org/678698
    Add missing allocations for active nodes

Addressed by: https://review.opendev.org/679459
    Revert "Fixes for deploying nova-less undercloud"

Addressed by: https://review.opendev.org/679581
    Revert "Revert "Fixes for deploying nova-less undercloud""

Gerrit topic: https://review.opendev.org/#/q/topic:nova-less-deploy-rdo

Addressed by: https://review.opendev.org/680571
    Run RDO jobs with baremetal provisioning

Addressed by: https://review.opendev.org/680573
    Run multinode and undercloud jobs nova-less

Addressed by: https://review.opendev.org/681944
    Ignore failure calling cell_v2_discover_hosts from deployment

Addressed by: https://review.opendev.org/682527
    mistral-executor image install novajoin package

Addressed by: https://review.opendev.org/683241
    Create an endpoint entry for novajoin

Addressed by: https://review.opendev.org/684142
    Override policy for undercloud novajoin

Addressed by: https://review.opendev.org/685865
    Build config-drive with novajoin metadata

Addressed by: https://review.opendev.org/688843
    WIP prompt for nodes which will be unprovisioned

Addressed by: https://review.opendev.org/689269
    Complete overcloud deploy --baremetal-deployment

Addressed by: https://review.opendev.org/691156
    Document baremetal provisioning

Addressed by: https://review.opendev.org/692477
    Clean up instance defaults setting

Addressed by: https://review.opendev.org/692899
    Set ServerDeletionPolicy during upgrade prepare and converge

Gerrit topic: https://review.opendev.org/#/q/topic:glance-less-upload

Addressed by: https://review.opendev.org/693959
    Refactor image upload command

Addressed by: https://review.opendev.org/693960
    WIP local file based image uploader

Addressed by: https://review.opendev.org/695622
    WIP bm provisioning with overcloud node delete

Addressed by: https://review.opendev.org/695836
    Update docs for node delete with baremetal provisioning

Addressed by: https://review.opendev.org/697209
    Don't subclass NovajoinConfig

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.