Avi Plugins in Kolla-Ansible Based Deployment
Overview
This guide explains the steps to be followed to install Avi OpenStack plugins in Kolla-Ansible based OpenStack deployments.
Environment
Following are the environment details:
-
OpenStack version: Queens and Rocky
-
Deployment: Kolla-Ansible based deployment
-
Base image used for building images: CentOS
-
Ansible Inventory: all-in-one
-
Avi Heat plugin version to be installed: 17.2.7
Deploying Avi Plugins in Kolla-Ansible
Kolla-Ansible provides a way to deploy OpenStack services and customize them. It uses ansible and docker to run the services on hosts and uses Jinja templates for customization. Kolla-Ansible is usually installed on an ansible control host, and Kolla-Ansible commands are executed from there. Kolla builds are also carried out on the same host using Kolla-build command. Kolla-build builds the OpenStack service container images and provides options to customize the image to include third-party plugins.
Avi Vantage has following plugins:
Customizations are done using combination of Jinja templates and config files. Using templates, you can install additional packages like third-party plugins in image. Additional configuration is provided to the plugin/driver using the custom config files.
Customization to existing templates are given in a Jinja-based template which extends the parent template. Parent templates are the templates from upstream for OpenStack services and it defines the contents of image.
Custom configurations are provided from node_custom_config directory usually located in /etc/kolla/config directory. You can change this in Kolla-Ansible’s globals.yml file. For instance, if you need to provide extra config to heat service, create a file in /etc/kolla/config/heat.conf directory and provide additional configuration in it. Kolla-build will merge this config file with the upstream config file and provide it in heat container images.
Avi Heat Plugin
Avi Heat Plugin is a heat resource module for a heat-engine. This plugin is loaded by heat-engine. Avi Heat Plugin provides Avi resources and handlers for them. On a Kolla-based deployment, you need to install Avi Heat Plugin in heat-engine image.
The following are the steps to deploy Avi Heat Plugin:
Step 1: On Kolla build host, create a Jinja template as follows to add Avi heat plugin to heat-engine image, template-override.j2.
{ extends parent_template }
{ block heat_engine_footer }
RUN yum install -y epel-release && yum install -y python-pip \
&& git clone https://github.com/avinetworks/avi-heat.git \
&& cd avi-heat && git checkout -b 17.2.7 origin/17.2.7 \
&& pip --no-cache-dir install . && cd -
{ endblock }
Note: This format will be maintained for both source-build types and binary-build types.
You can use the following template to directly use the RPM/DEB packages, if available:
{ extends parent_template }
{ block heat_engine_footer }
RUN yum install -y wget \
&& wget https://github.com/avinetworks/avi-heat/releases/download/v17.2.7/aviheat-17.2.7b201812211855-1.noarch.rpm \
&& yum install -y aviheat-17.2.7b201812211855-1.noarch.rpm
{ endblock }
The link to RPM/DEB packages for a particular release of Avi-Heat Plugin is available in https://github.com/avinetworks/avi-heat/releases
Step 2: Run the following command to build heat-engine image:
python tools/build.py --template-override template-overrides.j2 --tag 'queens' heat-engine
OR,
if you are using Kolla-build, run the following command:
kolla-build --template-override template-overrides.j2 --tag 'queens' heat-engine
This will build a heat-engine image as follows with Avi plugin installed in it:
kolla/centos-binary-heat-engine queens e1a090136e5a About an hour ago 940.5 MB
Note: The image name can change based on Linux distribution being used.
Step 3: Add the Avi Heat Plugin specific configuration to Kolla custom config. Usually Kolla custom config is located in /etc/kolla/config directory:
[root@kolla ~]# cat /etc/kolla/config/heat.conf
[DEFAULT]
plugin_dirs=/usr/lib/python2.7/site-packages/avi/heat
avi_controller=Avi Controller VIP
For Ubuntu based distro, the plugin_dirs changes to:
/usr/local/lib/python2.7/dist-packages/avi/heat
Note: The custom config directory is configurable and you need to check it in /etc/kolla/globals.yaml directory, with variable name: node_custom_config.
Step 4: Once you have the custom-image and config in place, you need to reconfigure the services. Kolla-Ansible should pick this newly built custom image, for which, you need to add the below mentioned code in /etc/koll/globals.yml directory:
Custom image of heat heat_engine_image: centos-binary-heat-engine
However, you can also manually tag the image and give that image name here.
docker tag img-id kolla/heat-avi-plugin:queens
Step 5: Run Kolla-Ansible reconfigure
as follows:
kolla-ansible -i INVENTORY reconfigure
This will deploy the newly built heat engine container.
Step 6: Verify if Avi Heat Plugin is installed by using heat resource-type-list
command. Avi Heat Resources should be available in output.
(avi-dev-venv) ~ $> heat resource-type-list | grep Avi
WARNING (shell) "heat resource-type-list" is deprecated, please use "openstack orchestration resource type list" instead
| Avi::LBaaS::ActionGroupConfig |
| Avi::LBaaS::AlertConfig |
| Avi::LBaaS::AlertEmailConfig |
| Avi::LBaaS::AlertObjectList |
| Avi::LBaaS::AlertScriptConfig |
| Avi::LBaaS::AlertSyslogConfig |
| Avi::LBaaS::AnalyticsProfile |
| Avi::LBaaS::Application |
| Avi::LBaaS::ApplicationPersistenceProfile |
| Avi::LBaaS::ApplicationProfile |
| Avi::LBaaS::AuthProfile |
| Avi::LBaaS::AutoScaleLaunchConfig |
| Avi::LBaaS::BackupConfiguration |
| Avi::LBaaS::CertificateManagementProfile |
| Avi::LBaaS::Cloud |
| Avi::LBaaS::CloudConnectorUser |
| Avi::LBaaS::CloudProperties |
| Avi::LBaaS::Cluster |
| Avi::LBaaS::ClusterCloudDetails |
| Avi::LBaaS::ControllerLicense |
| Avi::LBaaS::ControllerProperties |
| Avi::LBaaS::CustomIpamDnsProfile |
| Avi::LBaaS::DebugController |
| Avi::LBaaS::DebugServiceEngine |
| Avi::LBaaS::DebugVirtualService |
| Avi::LBaaS::DnsPolicy |
| Avi::LBaaS::ErrorPageBody |
| Avi::LBaaS::ErrorPageProfile |
| Avi::LBaaS::Gslb |
| Avi::LBaaS::GslbGeoDbProfile |
| Avi::LBaaS::GslbService |
| Avi::LBaaS::GslbSite |
| Avi::LBaaS::GslbThirdPartySite |
| Avi::LBaaS::HTTPPolicySet |
| Avi::LBaaS::HardwareSecurityModuleGroup |
| Avi::LBaaS::HealthMonitor |
| Avi::LBaaS::IpAddrGroup |
| Avi::LBaaS::IpAddrGroup::Addr |
| Avi::LBaaS::IpamDnsProviderProfile |
| Avi::LBaaS::L4PolicySet |
| Avi::LBaaS::MicroService |
| Avi::LBaaS::MicroServiceGroup |
| Avi::LBaaS::Network |
| Avi::LBaaS::NetworkProfile |
| Avi::LBaaS::NetworkSecurityPolicy |
| Avi::LBaaS::PKIProfile |
| Avi::LBaaS::Pool |
| Avi::LBaaS::Pool::Server |
| Avi::LBaaS::PoolGroup |
| Avi::LBaaS::PoolGroupDeploymentPolicy |
| Avi::LBaaS::PriorityLabels |
| Avi::LBaaS::Role |
| Avi::LBaaS::SSLKeyAndCertificate |
| Avi::LBaaS::SSLProfile |
| Avi::LBaaS::Scheduler |
| Avi::LBaaS::SeProperties |
| Avi::LBaaS::ServerAutoScalePolicy |
| Avi::LBaaS::ServiceEngine |
| Avi::LBaaS::ServiceEngineGroup |
| Avi::LBaaS::SnmpTrapProfile |
| Avi::LBaaS::StringGroup |
| Avi::LBaaS::SystemConfiguration |
| Avi::LBaaS::TrafficCloneProfile |
| Avi::LBaaS::UserAccountProfile |
| Avi::LBaaS::VIMgrHostRuntime |
| Avi::LBaaS::VIMgrVcenterRuntime |
| Avi::LBaaS::VSDataScriptSet |
| Avi::LBaaS::VirtualService |
| Avi::LBaaS::VrfContext |
| Avi::LBaaS::VsApicExtension |
| Avi::LBaaS::VsVip |
| Avi::LBaaS::WafCRS |
| Avi::LBaaS::WafPolicy |
| Avi::LBaaS::WafProfile |
| Avi::LBaaS::Webhook |
(avi-dev-venv) ~ $>