This project connects virtual-machine provisioning, host preparation, and Kolla-Ansible into repeatable OpenStack development and test environments. Vagrant defines the machines and networks; shell scripts prepare the hosts; Kolla-Ansible deploys OpenStack services as containers.
The project does not replace Kolla-Ansible. It supplies sample topologies, host setup, inventories, and configuration around the upstream deployment tool.
The three Vagrant samples differ mainly in where the deployment tools run and how many service nodes they manage:
flowchart TB
subgraph aio["All-in-one"]
direction LR
aio_vm["Single VM"] --> aio_node["node.sh"]
aio_node --> aio_install["install.sh"]
aio_install --> aio_services["Kolla-Ansible and OpenStack containers"]
end
subgraph noha["No-HA"]
direction LR
noha_controller["Controller VM"] --> noha_install["node.sh, then install.sh"]
noha_compute["Compute VMs"] --> noha_node["node.sh"]
noha_install --> noha_deploy["Kolla-Ansible deploys to inventory"]
noha_node --> noha_deploy
end
subgraph distributed["Distributed"]
direction LR
dist_undercloud["Undercloud VM"] --> dist_deploy["undercloud.sh"]
dist_service["Service VMs"] --> dist_node["node.sh"]
dist_registry["Registry VM"] --> dist_registry_setup["registry.sh"]
dist_deploy --> dist_targets["Kolla-Ansible deploys to inventory"]
dist_node --> dist_targets
dist_registry_setup --> dist_targets
end
In the distributed sample, Vagrant provisions service nodes separately from
the undercloud.
In the all-in-one and no-HA samples, install.sh runs from the service VM
that also acts as the deployment host.
The sample guides describe each topology in
more detail.
The Vagrant configurations under samples/ declare VM resources, networks,
disks, and provisioning commands.
They mount the repository at /vagrant in each VM and invoke the same
deployment scripts used by the direct installation path.
The all-in-one sample runs the services and deployment tools in one VM. The no-HA sample separates a controller from compute nodes. The distributed sample uses an undercloud VM to deploy services to separate registry, controller/network, compute, storage, and monitoring nodes. None of these samples provides production high availability.
node.sh prepares each service node.
It can partition, format, and mount extra disks, configure Cinder LVM volumes,
and run a role-specific script such as controller.sh or compute.sh.
It then installs the node’s operating-system dependencies.
The disk options can format the selected devices. Only pass disposable disks to those options.
undercloud.sh runs on the machine that manages the deployment.
It installs the dependencies for the selected OpenStack release and host
distribution, configures Ansible, applies OS_KOLLA_ settings to
/etc/kolla/globals.yml, and runs Kolla-Ansible actions against the selected
inventory.
The default inventory is samples/aio/hosts.ini.
Set OS_INVENTORY_FILE to select another inventory, as the distributed
sample does.
The repository’s etc/kolla/ files are copied into /etc/kolla/.
Kolla-Ansible generates deployment credentials there and uses the global
configuration and service-specific overrides during deployment.
The generated administrator environment file is
/etc/kolla/admin-openrc.sh.
The repository keeps release-specific Python dependency files under
requirements/<release>/.
OPENSTACK_RELEASE selects the corresponding dependency set.
Use a release and operating-system combination for which this repository
provides a requirements file.
When OS_ENABLE_LOCAL_REGISTRY=true, the installer calls registry.sh
before deploying OpenStack.
The script configures a local registry, builds the selected Kolla images,
and attempts to copy upstream images for images that it could not build.
The deployment host is configured to use that registry.
The entry point depends on the environment. Vagrant provisions the sample machines before running the node and deployment scripts; a direct installation starts with host validation. Both paths prepare Kolla configuration before Kolla-Ansible deploys services.
flowchart TD
vagrant["Vagrant sample"] --> machines["Create VMs, networks, and disks"]
machines --> nodes["Run node.sh on service nodes"]
nodes --> sample_entry{"Sample entry point"}
sample_entry -->|"All-in-one or no-HA"| installer["install.sh"]
sample_entry -->|Distributed| undercloud["undercloud.sh"]
direct["Dedicated Linux host"] --> installer
installer --> validate["Validate host and network settings"]
validate --> config["Copy Kolla config and prepare dependencies"]
config --> registry_check{"Local registry enabled?"}
registry_check -->|Yes| registry["registry.sh"]
registry_check -->|No| undercloud
registry --> undercloud
undercloud --> deploy["Generate passwords and run Kolla-Ansible"]
deploy --> services["Deploy OpenStack services from the inventory"]
services --> installer_check{"Workflow uses install.sh?"}
installer_check -->|Yes| init_check{"OS_KOLLA_RUN_INIT enabled?"}
installer_check -->|No| complete["Deployment complete"]
init_check -->|Yes| init["Run example and project initialization"]
init_check -->|No| complete
The optional post-deployment initialization runs when the workflow uses
install.sh and OS_KOLLA_RUN_INIT is not set to false.
This includes the direct installer and the all-in-one and no-HA Vagrant
samples.
The distributed sample invokes undercloud.sh directly, so it does not run
that install.sh initialization phase.
This repository’s scripts can modify operating-system packages, network and
service configuration, disks, and /etc/kolla files.
The sample inventories and network layouts are examples for development and
testing.
Use the upstream Kolla-Ansible documentation
and adapt the configuration and operations to your own environment before
using this project outside a disposable lab.