puppet-tempest/manifests/init.pp
Emilien Macchi d657b79046 Add support for Tempest plugin packages
This patch allows to install Tempest plugin packages provided by RDO.
Disabled by default, manage_tests_packages boolean if set to True will
install Python packages that are needed when a service is set as
available in ::tempest class.

Change-Id: Iac9a57c2ba006bb2a660d2b54ee05bbe68125abf
2016-03-14 20:08:44 -04:00

534 lines
19 KiB
Puppet

# class for installing and configuring tempest
#
# The class checks out the tempest repo and sets the basic config.
#
# Note that only parameters for which values are provided will be
# managed in tempest.conf.
#
# [*install_from_source*]
# Defaults to true
# [*git_clone*]
# Defaults to true
# [*tempest_config_file*]
# Defaults to '/var/lib/tempest/etc/tempest.conf'
# [*tempest_repo_uri*]
# Defaults to 'git://github.com/openstack/tempest.git'
# [*tempest_repo_revision*]
# Defaults to undef
# [*tempest_clone_path*]
# Defaults to '/var/lib/tempest'
# [*tempest_clone_owner*]
# Defaults to 'root'
# [*setup_venv*]
# Defaults to false
# [*configure_images*]
# Defaults to true
# [*image_name*]
# Defaults to undef
# [*image_name_alt*]
# Defaults to undef
# [*configure_networks*]
# Defaults to true
# [*public_network_name*]
# Defaults to undef
# [*identity_uri*]
# Defaults to undef
# [*identity_uri_v3*]
# Defaults to undef
# [*cli_dir*]
# Defaults to undef
# [*lock_path*]
# Defaults to '/var/lib/tempest'
# [*debug*]
# Defaults to false
# [*verbose*]
# Defaults to false
# [*use_stderr*]
# Defaults to true
# [*use_syslog*]
# Defaults to false
# [*log_file*]
# Defaults to undef
# [*logging_context_format_string*]
# Defaults to undef
# [*username*]
# Defaults to undef
# [*password*]
# Defaults to undef
# [*tenant_name*]
# Defaults to undef
# [*alt_username*]
# Defaults to undef
# [*alt_password*]
# Defaults to undef
# [*alt_tenant_name*]
# Defaults to undef
# [*admin_username*]
# Defaults to undef
# [*admin_password*]
# Defaults to undef
# [*admin_tenant_name*]
# Defaults to undef
# [*admin_role*]
# Defaults to undef
# [*admin_domain_name*]
# Defaults to undef
# [*image_ref*]
# Defaults to undef
# [*image_ref_alt*]
# Defaults to undef
# [*image_ssh_user*]
# Defaults to undef
# [*image_alt_ssh_user*]
# Defaults to undef
# [*flavor_ref*]
# Defaults to undef
# [*flavor_ref_alt*]
# Defaults to undef
# [*whitebox_db_uri*]
# Defaults to undef
# [*resize_available*]
# Defaults to undef
# [*change_password_available*]
# Defaults to undef
# [*allow_tenant_isolation*]
# Defaults to undef
# [*public_network_id*]
# Defaults to undef
# [*public_router_id*]
# Defaults to ''
# [*sahara_plugins*]
# (optional) List of enabled Sahara plugins
# Defaults to undef
# [*cinder_available*]
# Defaults to true
# [*glance_available*]
# Defaults to true
# [*heat_available*]
# Defaults to false
# [*ceilometer_available*]
# Defaults to false
# [*aodh_available*]
# Defaults to false
# [*horizon_available*]
# Defaults to true
# [*neutron_available*]
# Defaults to false
# [*nova_available*]
# Defaults to true
# [*murano_available*]
# Defaults to false
# [*zaqar_available*]
# Defaults to false
# [*run_service_broker_tests*]
# Defaults to false
# [*sahara_available*]
# Defaults to false
# [*swift_available*]
# Defaults to false
# [*trove_available*]
# Defaults to false
# [*ironic_available*]
# Defaults to false
# [*keystone_v2*]
# Defaults to true
# [*keystone_v3*]
# Defaults to true
# [*auth_version*]
# Defaults to 'v2'
# [*img_dir*]
# Defaults to '/var/lib/tempest'
# [*img_file*]
# Defaults to 'cirros-0.3.4-x86_64-disk.img'
# [*login_url*]
# Defaults to undef
# [*dashboard_url*]
# Defaults to undef
# [*compute_build_interval*]
# Defaults to undef
# [*ca_certificates_file*]
# Defaults to undef
# [*disable_ssl_validation*]
# Defaults to undef
# [*manage_tests_packages*]
# Defaults to false
#
class tempest(
$install_from_source = true,
$git_clone = true,
$tempest_config_file = '/var/lib/tempest/etc/tempest.conf',
# Clone config
#
$tempest_repo_uri = 'git://github.com/openstack/tempest.git',
$tempest_repo_revision = undef,
$tempest_clone_path = '/var/lib/tempest',
$tempest_clone_owner = 'root',
$setup_venv = false,
# Glance image config
#
$configure_images = true,
$image_name = undef,
$image_name_alt = undef,
# Neutron network config
#
$configure_networks = true,
$public_network_name = undef,
# Horizon dashboard config
$login_url = undef,
$dashboard_url = undef,
# tempest.conf parameters
#
$identity_uri = undef,
$identity_uri_v3 = undef,
$cli_dir = undef,
$lock_path = '/var/lib/tempest',
$debug = false,
$verbose = false,
$use_stderr = true,
$use_syslog = false,
$log_file = undef,
$logging_context_format_string = undef,
# non admin user
$username = undef,
$password = undef,
$tenant_name = undef,
# another non-admin user
$alt_username = undef,
$alt_password = undef,
$alt_tenant_name = undef,
# admin user
$admin_username = undef,
$admin_password = undef,
$admin_tenant_name = undef,
$admin_role = undef,
$admin_domain_name = undef,
# image information
$image_ref = undef,
$image_ref_alt = undef,
$image_ssh_user = undef,
$image_alt_ssh_user = undef,
$flavor_ref = undef,
$flavor_ref_alt = undef,
$compute_build_interval = undef,
# whitebox
$whitebox_db_uri = undef,
# testing features that are supported
$resize_available = undef,
$change_password_available = undef,
$allow_tenant_isolation = undef,
# neutron config
$public_network_id = undef,
# Upstream has a bad defaul t - set it to empty string.
$public_router_id = '',
# Sahara config
$sahara_plugins = undef,
# Service configuration
$cinder_available = true,
$glance_available = true,
$heat_available = false,
$ceilometer_available = false,
$aodh_available = false,
$horizon_available = true,
$neutron_available = false,
$nova_available = true,
$murano_available = false,
$sahara_available = false,
$swift_available = false,
$trove_available = false,
$ironic_available = false,
$zaqar_available = false,
$keystone_v2 = true,
$keystone_v3 = true,
$auth_version = 'v2',
$run_service_broker_tests = false,
$ca_certificates_file = undef,
$disable_ssl_validation = undef,
$manage_tests_packages = false,
# scenario options
$img_dir = '/var/lib/tempest',
$img_file = 'cirros-0.3.4-x86_64-disk.img',
) {
include ::tempest::params
if $install_from_source {
ensure_packages([
'git',
'python-setuptools',
])
ensure_packages($tempest::params::dev_packages)
exec { 'install-pip':
command => '/usr/bin/easy_install pip',
unless => '/usr/bin/which pip',
require => Package['python-setuptools'],
}
exec { 'install-tox':
command => "${tempest::params::pip_bin_path}/pip install -U tox",
unless => '/usr/bin/which tox',
require => Exec['install-pip'],
}
if $git_clone {
vcsrepo { $tempest_clone_path:
ensure => 'present',
source => $tempest_repo_uri,
revision => $tempest_repo_revision,
provider => 'git',
require => Package['git'],
user => $tempest_clone_owner,
}
Vcsrepo<||> -> Tempest_config<||>
}
if $setup_venv {
# virtualenv will be installed along with tox
exec { 'setup-venv':
command => "/usr/bin/python ${tempest_clone_path}/tools/install_venv.py",
cwd => $tempest_clone_path,
unless => "/usr/bin/test -d ${tempest_clone_path}/.venv",
require => [
Exec['install-tox'],
Package[$tempest::params::dev_packages],
],
}
if $git_clone {
Vcsrepo<||> -> Exec['setup-venv']
}
}
$tempest_conf = "${tempest_clone_path}/etc/tempest.conf"
Tempest_config {
path => $tempest_conf,
}
} else {
Tempest_config {
path => $tempest_config_file,
}
}
tempest_config {
'compute/change_password_available': value => $change_password_available;
'compute/flavor_ref': value => $flavor_ref;
'compute/flavor_ref_alt': value => $flavor_ref_alt;
'compute/image_alt_ssh_user': value => $image_alt_ssh_user;
'compute/image_ref': value => $image_ref;
'compute/image_ref_alt': value => $image_ref_alt;
'compute/image_ssh_user': value => $image_ssh_user;
'compute/resize_available': value => $resize_available;
'compute/allow_tenant_isolation': value => $allow_tenant_isolation;
'compute/build_interval': value => $compute_build_interval;
'identity/admin_password': value => $admin_password, secret => true;
'identity/admin_tenant_name': value => $admin_tenant_name;
'identity/admin_username': value => $admin_username;
'identity/admin_role': value => $admin_role;
'identity/admin_domain_name': value => $admin_domain_name;
'identity/alt_password': value => $alt_password, secret => true;
'identity/alt_tenant_name': value => $alt_tenant_name;
'identity/alt_username': value => $alt_username;
'identity/password': value => $password, secret => true;
'identity/tenant_name': value => $tenant_name;
'identity/uri': value => $identity_uri;
'identity/uri_v3': value => $identity_uri_v3;
'identity/username': value => $username;
'identity/auth_version': value => $auth_version;
'identity/ca_certificates_file': value => $ca_certificates_file;
'identity/disable_ssl_certificate_validation': value => $disable_ssl_validation;
'identity-feature-enabled/api_v2': value => $keystone_v2;
'identity-feature-enabled/api_v3': value => $keystone_v3;
'network/public_network_id': value => $public_network_id;
'network/public_router_id': value => $public_router_id;
'dashboard/login_url': value => $login_url;
'dashboard/dashboard_url': value => $dashboard_url;
'service_available/cinder': value => $cinder_available;
'service_available/glance': value => $glance_available;
'service_available/heat': value => $heat_available;
'service_available/ceilometer': value => $ceilometer_available;
'service_available/aodh': value => $aodh_available;
'service_available/horizon': value => $horizon_available;
'service_available/neutron': value => $neutron_available;
'service_available/nova': value => $nova_available;
'service_available/murano': value => $murano_available;
'service_available/sahara': value => $sahara_available;
'service_available/swift': value => $swift_available;
'service_available/trove': value => $trove_available;
'service_available/ironic': value => $ironic_available;
'service_available/zaqar': value => $zaqar_available;
'whitebox/db_uri': value => $whitebox_db_uri;
'cli/cli_dir': value => $cli_dir;
'oslo_concurrency/lock_path': value => $lock_path;
'DEFAULT/debug': value => $debug;
'DEFAULT/verbose': value => $verbose;
'DEFAULT/use_stderr': value => $use_stderr;
'DEFAULT/use_syslog': value => $use_syslog;
'DEFAULT/log_file': value => $log_file;
'DEFAULT/logging_context_format_string': value => $logging_context_format_string;
'scenario/img_dir': value => $img_dir;
'scenario/img_file': value => $img_file;
'service_broker/run_service_broker_tests': value => $run_service_broker_tests;
}
if $manage_tests_packages {
if $aodh_available and $::tempest::params::python_aodh_tests {
package { 'python-aodh-tests':
ensure => present,
name => $::tempest::params::python_aodh_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $ceilometer_available and $::tempest::params::python_ceilometer_tests {
package { 'python-ceilometer-tests':
ensure => present,
name => $::tempest::params::python_ceilometer_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $cinder_available and $::tempest::params::python_cinder_tests {
package { 'python-cinder-tests':
ensure => present,
name => $::tempest::params::python_cinder_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $glance_available and $::tempest::params::python_glance_tests {
package { 'python-glance-tests':
ensure => present,
name => $::tempest::params::python_glance_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $heat_available and $::tempest::params::python_heat_tests {
package { 'python-heat-tests':
ensure => present,
name => $::tempest::params::python_heat_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $ironic_available and $::tempest::params::python_ironic_tests {
package { 'python-ironic-tests':
ensure => present,
name => $::tempest::params::python_ironic_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $::tempest::params::python_keystone_tests {
package { 'python-keystone-tests':
ensure => present,
name => $::tempest::params::python_keystone_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $murano_available and $::tempest::params::python_murano_tests {
package { 'python-murano-tests':
ensure => present,
name => $::tempest::params::python_murano_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $neutron_available and $::tempest::params::python_neutron_tests {
package { 'python-neutron-tests':
ensure => present,
name => $::tempest::params::python_neutron_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $nova_available and $::tempest::params::python_nova_tests {
package { 'python-nova-tests':
ensure => present,
name => $::tempest::params::python_nova_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $sahara_available and $::tempest::params::python_sahara_tests {
package { 'python-sahara-tests':
ensure => present,
name => $::tempest::params::python_sahara_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $swift_available and $::tempest::params::python_swift_tests {
package { 'python-swift-tests':
ensure => present,
name => $::tempest::params::python_swift_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $trove_available and $::tempest::params::python_trove_tests {
package { 'python-trove-tests':
ensure => present,
name => $::tempest::params::python_trove_tests,
tag => ['openstack', 'tempest-package'],
}
}
if $zaqar_available and $::tempest::params::python_zaqar_tests {
package { 'python-zaqar-tests':
ensure => present,
name => $::tempest::params::python_zaqar_tests,
tag => ['openstack', 'tempest-package'],
}
}
}
if $configure_images {
if ! $image_ref and $image_name {
# If the image id was not provided, look it up via the image name
# and set the value in the conf file.
tempest_glance_id_setter { 'image_ref':
ensure => present,
tempest_conf_path => $tempest_conf,
image_name => $image_name,
}
Glance_image<||> -> Tempest_glance_id_setter['image_ref']
Tempest_config<||> -> Tempest_glance_id_setter['image_ref']
Keystone_user_role<||> -> Tempest_glance_id_setter['image_ref']
} elsif ($image_name and $image_ref) or (! $image_name and ! $image_ref) {
fail('A value for either image_name or image_ref must be provided.')
}
if ! $image_ref_alt and $image_name_alt {
tempest_glance_id_setter { 'image_ref_alt':
ensure => present,
tempest_conf_path => $tempest_conf,
image_name => $image_name_alt,
}
Glance_image<||> -> Tempest_glance_id_setter['image_ref_alt']
Tempest_config<||> -> Tempest_glance_id_setter['image_ref_alt']
Keystone_user_role<||> -> Tempest_glance_id_setter['image_ref_alt']
} elsif ($image_name_alt and $image_ref_alt) or (! $image_name_alt and ! $image_ref_alt) {
fail('A value for either image_name_alt or image_ref_alt must \
be provided.')
}
}
if $neutron_available and $configure_networks {
if ! $public_network_id and $public_network_name {
tempest_neutron_net_id_setter { 'public_network_id':
ensure => present,
tempest_conf_path => $tempest_conf,
network_name => $public_network_name,
}
Neutron_network<||> -> Tempest_neutron_net_id_setter['public_network_id']
Tempest_config<||> -> Tempest_neutron_net_id_setter['public_network_id']
Keystone_user_role<||> -> Tempest_neutron_net_id_setter['public_network_id']
} elsif ($public_network_name and $public_network_id) or (! $public_network_name and ! $public_network_id) {
fail('A value for either public_network_id or public_network_name \
must be provided.')
}
}
if $sahara_available {
tempest_config {
'data-processing-feature-enabled/plugins': value => $sahara_plugins,
}
}
}