Jinja2 3.0.0 deprecated contextfilter in favour of pass_context. 3.1.0
Fall back to contextfilter for Jinja2 2.x.
This change also fixes some issues caused by Ansible lint 6.0. Issues
found by the yaml plugin are fixed, while the FQCN for builtin actions
plugin is skipped.
Installing virtualbmc system-wide on CentOS 8 fails with:
ModuleNotFoundError: No module named 'setuptools_rust'
This error appeared following the release of cryptography 3.4, which now
includes Rust code. It can be installed without Rust using a Python
wheel, but only with more recent pip than version 9.0.3 available as RPM
on CentOS 8. The cryptography bug report  recommends pip>=19.1.1.
Also ignore PyYAML when installing system-wide to avoid conflicts with
an existing RPM package installation.
Switch to openstackdocstheme 2.2.1 and reno 3.1.0 versions. Using
these versions will allow especially:
* Linking from HTML to PDF document
* Allow parallel building of documents
* Fix some rendering problems
Update Sphinx version as well.
Set openstackdocs_pdf_link to link to PDF file. Note that
the link to the published document only works on docs.openstack.org
where the PDF file is placed in the top-level html directory. The
site-preview places the PDF in a pdf directory.
Disable openstackdocs_auto_name to use 'project' variable as name.
Change pygments_style to 'native' since old theme version always used
'native' and the theme now respects the setting and using 'sphinx' can
lead to some strange rendering.
openstackdocstheme renames some variables, so follow the renames
before the next release removes them. A couple of variables are also
not needed anymore, remove them.
Add file to the reno documentation build to show release notes for
Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
Virtualbmc domain creation can be unreliable, in particular when domains
already exist. This is in part due to the vbmc stop command not functioning
properly . By moving the domain management into a Python module we can
better control the process of creation, and improve performance.
We name veth pairs using up to the first 6 characters from the nodes names. If
the node name prefixes are longer than this then the node index will not be
included, and the interface names will not be unique.
e.g. prefix compute, 2 nodes: compute0 & compute1
Link names are all p-comput-0-tap
Note that the 0 here is the index of the physnet, node the node.
This patch includes any trailing digits to keep link names unique, e.g.
If Ansible hostvars contain a pipe (|) character, this can cause
problems during scheduling as Ansible fails during Jinja templating.
This is probably a bug in Ansible/Jinja.
The particular case where this was hit was when using screen, the
TERMCAP environment variable gets set to something beginning with
This change addresses the issue by moving the capture of hostvars inside
the tenks_update_state action plugin rather than evaluating them in a
This means that ansible 2.9 is typically used, and causes ansible-lint
to fail. Two workarounds have been added to address this:
* Use .get() to avoid passing an undefined object through to_nice_yaml
* Create a dummy tenks_update_state.py module to avoid ansible-lint
being confused about our action plugin.
CentOS 8 nodepool images come with SELinux enabled, and prevent systemd
from accessing files in users' home directories. This prevents vbmcd
To resolve this, install virtualbmc to the system when SELinux is
Open vSwitch packages are no longer present in the default, or EPEL
repoistories. This means there is no clean way to install Open vSwitch
on CentOS. Instead, we should leave it up the user to decide how to
Unless you add a 'properties' field under the 'ironic_config' for a node spec,
ironic nodes are registered with silly default properties (originating in the
os_ironic module) which cause validation to fail:
cpus:1, memory_mb: 1, local_gb: 1
We have enough info to add sensible defaults based on the VM configuration, so
let's do that.
There are two cases when we may want to delete things:
1. if a desired node configuration or spec changes, we delete existing node
2. if we use the teardown.yml playbook, cmd == teardown, delete
everything, including global state.
In both cases, Tenks state (state.yml), all nodes to be deleted are given a
'state' of absent'. We should therefore use this rather than the 'cmd' variable
which only works in the latter case.
Tenks currently uses macvtap interfaces in 'VEPA' mode for the VMs. If the VMs
run any virtual networking internally, typically this will use a different MAC
address, which will not be reachable from outside due to the macvtap MAC
This change uses macvtap 'passthrough' mode, such that all traffic is passed.
Adds support for setting node and volume name prefixes on a per-spec
basis. This allows for different node specifications to use different
names, e.g. 'controller' vs 'compute'.
This change also fixes an issue where node names were not globally unique, only
unique on a given hypervisor. This could cause issues if used with multiple
This has been done by rewriting the scheduling logic, replacing the 'node
index' concept with a more concrete reservation of IPMI ports (which are
allocated per hypervisor), and decoupling this from generation of node names
(which are allocated globally).
For standalone ironic deployments, such as those deployed using bifrost, there
is typically no keystone or placement service running. Use of the ironic API is
without authentication. We use clouds.yaml in this case.