A simple way to bootstrap a bunch of VMs on a libvirt host. Gives more control than quickstart in some cases.
Please run the following command in order to get "tripleo operator" collection:
ansible-playbook config-host.yaml
It is expected to run the following resources:
- 1 undercloud
- 3 controllers
- 2 computes
- 3 ceph-storage
The amount of used memory for that env is about 52G, and about 20 CPU cores.
A working ssh-agent must be running on the host launching ansible playbook. It is needed in order to hot-load the private ssh key for the undercloud access.
In case you're running the playbook for a "middle machine", you can just forward the agent from your workstation.
ansible-playbook builder.yaml
It will deploy a containerized undercloud and prepare the baremetal.json file you will use in order to register nodes in ironic.
If you issue a lab-destroy
on the builder, you will need to redeploy the
lab:
ansible-playbook builder.yaml --tags lab
Just limit with the tags, and be sure to have the inventory
tag. For
example, in order to just manage the overcloud images:
ansible-playbook builder.yaml -t inventory,overcloud-images
Just add the requested information in the yaml you used for the initial deploy, then:
ansible-playbook builder.yaml -t domains -t baremetal -t vbmc
Domain tag will create the instance disk image and add it to libvirt. The vbmc tag will add the new to vbmc, and enable it. The baremetal tag will take care of the different configuration on the undercloud.
One note though: you might want to delete the already-existing node(s) from the baremetal.json on the undercloud, in order to avoid useless error output from the import task.
Also, this ansible will NOT run the import task once more, it doesn't ensure all nodes are present. You will need to run, on your own:
source ~/stackrc
openstack overcloud node import --provide baremetal.json
You can pass variables and environment files using the -e
option, like:
ansible-playbook builder.yaml --skip-tags overcloud-images --tags lab -e @environments/3ctl-1compute.yaml
This will start a lab with just 3 controllers and 1 compute.
vms Hash with the following entries:
- name (string)
- cpu (int)
- memory (int, MB)
- interfaces (list)
- network (network name, default 'ctlplane')
- autostart (bool)
- swap (string, for example 10G)
- iotune (list)
- tune (string, iotune option) value (string, iotune option value)
vms:
- name: undercloud
cpu: 16
memory: 20000
disksize: 100
interfaces:
- network: default
- net2
autostart: true
- name: controller-0
cpu: 8
memory: 20000
disksize: 100
interfaces:
- net1
- net2
autostart: false
virt_user Username on the builder (will be created)
basedir Base directory for all the VM images
undercloud_password Root password on the undercloud VM (debug purpose)
undercloud_config List of hashes representing ini configuration for undercloud.conf file
---
undercloud_config:
- section: DEFAULT
option: container_cli
value: podman
tripleo_repo_version
Tripleo-repos package name/version. The default version is master
. This can be changed this to any OpenStack version, like stein
or train
.
overcloud_images Hash with the following entries:
- file (string)
- content (string)
containerized_undercloud Boolean, default "yes"
use_heat
Whether to add --use-heat
to undercloud install command (Boolean).
Defaults "no"
deploy_undercloud Boolean
deploy_overcloud Boolean
proxy_host Allows to use a proxy on the lab - put IP:PORT as value
synchronize List of hashes with the following entries:
- name
- base
- container (optional, default False)
- host (optional, default True)
- dest (defaults to /home/stack/tripleo/) Synchronize with rsync from your ansible controller to remote. The "host" and "container" params are used for the build destiation - either container or host, or both. It results in a different target directory.
synchronize:
- name: tripleo-heat-templates
base: /home/user/work
dest: /home/stack/tripleo/
synchronize_default_dest String. Used if you don't set "dest" in the synchronize hash. Default /home/stack/tripleo/
custom_rpms List of custom remote RPMS to install on your undercloud node
additional_envs List of additional env you want to pass to either standalone or overcloud deploy
standalone Deploy "standalone" tripleo (Bool, default no)
standalone_ceph Deploy ceph in standalone tripleo (Bool, default no)
standalone_container_cli Deploy standalone using said container CLI (String, default docker)
deploy_standalone Run the deploy script (Bool, default yes)
semodules Build modules based on .te files you can provide. List of dicts.
semodules:
- name: foobar
src: /full/path/foobar.te
overcloud_image_update
Whether you want to get a yum update
on the overcloud-full prior its
upload into Glance. (Bool, default to yes)
undercloud_low_memory Creates a hieradata file to configure 1 worker per OpenStack service. This hieradata file is consummed by the Undercloud. (Bool, default no)
disable_selinux Allows to disable selinux on the undercloud, setting it to "permissive" while still logging what would have been blocked. (Bool, default no)
custom_repositories List of custom repositories dicts
custom_repositories:
- name: foo
file: (string, optional)
uri: https://foo.bar
gpg: (bool, optional)
priority: (int, optional)
tripleoclient_pkgname Allows to set a custom name for the python-tripleoclient. (Str, default python-tripleoclient)
unmanage_iface Point to the interface we want to unmanage from NetworkManager
container_prepare_overrides Dict of overrides for the default container-image-prepare.
container_prepare_overrides:
tag: my-test-tag
namespace: my.container.registry/rh-osbs
name_prefix: tripleo-
ceph_namespace: my.ceph.registry/ceph
ceph_tag: latest
ceph_image: myceph_image
num_osds The number of OSD disks created per ceph node (int, default 1)
stack_ssh_keys Additional ssh keys you want to add on the undercloud "stack" user
oc_image_rpms List of RPMs/packages you want to inject in the overcloud image.
undercloud_hiera_override List of hieradata override you want to pass for the UC deploy
undercloud_hiera_override:
- 'ironic::drivers::ipmi::use_ipmitool_retries: true'
- 'ironic::drivers::ipmi::command_retry_timeout: 180'