Refactor manifest execution
Previously, Packstack created many individual manifest files from smaller snippets (templates), and executed them following a certain order. This is sub-optimal, since it forces code duplication and goes against the Puppet design of running a single manifest. This patch refactors the manifest execution, following these principles: - Only 3 templates used, so max 3 Puppet executions on a host: controller manifest, network node manifest, compute node manifest. - The previous snippets are now part of the Packstack Puppet module, and included as needed by the controller/network/compute manifests. This concept is similar to the one used by the puppet-openstack-integration project [1]. - The remaining Python code is left untouched, so we can keep complete compatibility with previous answer files. - Redis HA support has been removed, as this was the only service with HA enabled and didn't fit the general purpose of Packstack. [1] - https://github.com/openstack/puppet-openstack-integration Change-Id: I87591be0fce98079c85c5c12ad76ea7115fb9c75
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
class packstack::provision::bridge ()
|
||||
{
|
||||
$provision_neutron_br = str2bool(hiera('CONFIG_NEUTRON_INSTALL'))
|
||||
$setup_ovs_bridge = str2bool(hiera('CONFIG_PROVISION_OVS_BRIDGE'))
|
||||
$public_bridge_name = hiera('CONFIG_NEUTRON_L3_EXT_BRIDGE', 'br-ex')
|
||||
$provision_tempest_br = str2bool(hiera('CONFIG_PROVISION_TEMPEST'))
|
||||
$provision_demo_br = str2bool(hiera('CONFIG_PROVISION_DEMO'))
|
||||
|
||||
if $provision_demo_br {
|
||||
$floating_range_br = hiera('CONFIG_PROVISION_DEMO_FLOATRANGE')
|
||||
} elsif $provision_tempest_br {
|
||||
$floating_range_br = hiera('CONFIG_PROVISION_TEMPEST_FLOATRANGE')
|
||||
}
|
||||
|
||||
neutron_config {
|
||||
'keystone_authtoken/identity_uri': value => hiera('CONFIG_KEYSTONE_ADMIN_URL');
|
||||
'keystone_authtoken/auth_uri': value => hiera('CONFIG_KEYSTONE_PUBLIC_URL');
|
||||
'keystone_authtoken/admin_tenant_name': value => 'services';
|
||||
'keystone_authtoken/admin_user': value => 'neutron';
|
||||
'keystone_authtoken/admin_password': value => hiera('CONFIG_NEUTRON_KS_PW');
|
||||
}
|
||||
|
||||
if $provision_neutron_br and $setup_ovs_bridge {
|
||||
Neutron_config<||> -> Neutron_l3_ovs_bridge['demo_bridge']
|
||||
neutron_l3_ovs_bridge { 'demo_bridge':
|
||||
name => $public_bridge_name,
|
||||
ensure => present,
|
||||
subnet_name => 'public_subnet',
|
||||
}
|
||||
|
||||
firewall { '000 nat':
|
||||
chain => 'POSTROUTING',
|
||||
jump => 'MASQUERADE',
|
||||
source => $floating_range_br,
|
||||
outiface => $::gateway_device,
|
||||
table => 'nat',
|
||||
proto => 'all',
|
||||
}
|
||||
|
||||
firewall { '000 forward out':
|
||||
chain => 'FORWARD',
|
||||
action => 'accept',
|
||||
outiface => $public_bridge_name,
|
||||
proto => 'all',
|
||||
}
|
||||
|
||||
firewall { '000 forward in':
|
||||
chain => 'FORWARD',
|
||||
action => 'accept',
|
||||
iniface => $public_bridge_name,
|
||||
proto => 'all',
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
class packstack::provision::glance ()
|
||||
{
|
||||
$image_name = hiera('CONFIG_PROVISION_IMAGE_NAME')
|
||||
$image_source = hiera('CONFIG_PROVISION_IMAGE_URL')
|
||||
$image_format = hiera('CONFIG_PROVISION_IMAGE_FORMAT')
|
||||
$uec_image_name = hiera('CONFIG_PROVISION_UEC_IMAGE_NAME')
|
||||
$uec_image_source_kernel = hiera('CONFIG_PROVISION_UEC_IMAGE_KERNEL_URL')
|
||||
$uec_image_source_ramdisk = hiera('CONFIG_PROVISION_UEC_IMAGE_RAMDISK_URL')
|
||||
$uec_image_source_disk = hiera('CONFIG_PROVISION_UEC_IMAGE_DISK_URL')
|
||||
|
||||
glance_image { $image_name:
|
||||
ensure => present,
|
||||
is_public => 'yes',
|
||||
container_format => 'bare',
|
||||
disk_format => $image_format,
|
||||
source => $image_source,
|
||||
}
|
||||
|
||||
if str2bool(hiera('CONFIG_PROVISION_TEMPEST')) {
|
||||
$image_name_alt = "${uec_image_name}_alt"
|
||||
|
||||
glance_image{"${uec_image_name}-kernel":
|
||||
ensure => present,
|
||||
is_public => 'yes',
|
||||
container_format => 'aki',
|
||||
disk_format => 'aki',
|
||||
source => $uec_image_source_kernel,
|
||||
id => '146d4a6b-ad1e-4d9f-8b08-98eae3c3dab4'
|
||||
}
|
||||
|
||||
glance_image{"${uec_image_name}-ramdisk":
|
||||
ensure => present,
|
||||
is_public => 'yes',
|
||||
container_format => 'ari',
|
||||
disk_format => 'ari',
|
||||
source => $uec_image_source_ramdisk,
|
||||
id => '0b50e2e5-1440-4654-b568-4e120ddf28c1'
|
||||
}
|
||||
|
||||
glance_image{$uec_image_name:
|
||||
ensure => present,
|
||||
is_public => 'yes',
|
||||
container_format => 'ami',
|
||||
disk_format => 'ami',
|
||||
source => $uec_image_source_disk,
|
||||
properties => { 'kernel_id' => '146d4a6b-ad1e-4d9f-8b08-98eae3c3dab4', 'ramdisk_id' => '0b50e2e5-1440-4654-b568-4e120ddf28c1' },
|
||||
require => [ Glance_image["${uec_image_name}-kernel"], Glance_image["${uec_image_name}-ramdisk"] ]
|
||||
}
|
||||
|
||||
glance_image{$image_name_alt:
|
||||
ensure => present,
|
||||
is_public => 'yes',
|
||||
container_format => 'ami',
|
||||
disk_format => 'ami',
|
||||
source => $uec_image_source_disk,
|
||||
properties => { 'kernel_id' => '146d4a6b-ad1e-4d9f-8b08-98eae3c3dab4', 'ramdisk_id' => '0b50e2e5-1440-4654-b568-4e120ddf28c1' },
|
||||
require => [ Glance_image["${uec_image_name}-kernel"], Glance_image["${uec_image_name}-ramdisk"] ]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
class packstack::provision::tempest ()
|
||||
{
|
||||
$provision_demo = str2bool(hiera('CONFIG_PROVISION_DEMO'))
|
||||
if $provision_demo {
|
||||
$username = 'demo'
|
||||
$password = hiera('CONFIG_KEYSTONE_DEMO_PW')
|
||||
$tenant_name = 'demo'
|
||||
$floating_range = hiera('CONFIG_PROVISION_DEMO_FLOATRANGE')
|
||||
} else {
|
||||
$username = hiera('CONFIG_PROVISION_TEMPEST_USER')
|
||||
$password = hiera('CONFIG_PROVISION_TEMPEST_USER_PW')
|
||||
$tenant_name = 'tempest'
|
||||
$floating_range = hiera('CONFIG_PROVISION_TEMPEST_FLOATRANGE')
|
||||
}
|
||||
|
||||
# Authentication/Keystone
|
||||
$identity_uri = hiera('CONFIG_KEYSTONE_PUBLIC_URL')
|
||||
$identity_uri_v3 = regsubst($identity_uri, 'v2.0', 'v3')
|
||||
$auth_version = regsubst(hiera('CONFIG_KEYSTONE_API_VERSION'), '.0', '')
|
||||
$admin_username = hiera('CONFIG_KEYSTONE_ADMIN_USERNAME')
|
||||
$admin_password = hiera('CONFIG_KEYSTONE_ADMIN_PW')
|
||||
$admin_tenant_name = 'admin'
|
||||
$admin_domain_name = 'Default'
|
||||
|
||||
# get image and network id
|
||||
$configure_images = true
|
||||
$configure_networks = true
|
||||
|
||||
# Image
|
||||
$uec_image_name = hiera('CONFIG_PROVISION_UEC_IMAGE_NAME')
|
||||
$image_ssh_user = hiera('CONFIG_PROVISION_IMAGE_SSH_USER')
|
||||
$image_name_alt = "${uec_image_name}_alt"
|
||||
$image_alt_ssh_user = hiera('CONFIG_PROVISION_IMAGE_SSH_USER')
|
||||
$image_source = hiera('CONFIG_PROVISION_IMAGE_URL')
|
||||
$image_format = hiera('CONFIG_PROVISION_IMAGE_FORMAT')
|
||||
|
||||
# network name
|
||||
$public_network_name = 'public'
|
||||
|
||||
# nova should be able to resize with packstack setup
|
||||
$resize_available = true
|
||||
|
||||
$change_password_available = undef
|
||||
$allow_tenant_isolation = true
|
||||
$dir_log = hiera('DIR_LOG')
|
||||
$log_file = "${dir_log}/tempest.log"
|
||||
$use_stderr = false
|
||||
$debug = true
|
||||
$public_router_id = undef
|
||||
|
||||
# Tempest
|
||||
$tempest_repo_uri = hiera('CONFIG_PROVISION_TEMPEST_REPO_URI')
|
||||
$tempest_repo_revision = hiera('CONFIG_PROVISION_TEMPEST_REPO_REVISION')
|
||||
$tempest_clone_path = '/var/lib/tempest'
|
||||
$tempest_clone_owner = 'root'
|
||||
$tempest_user = hiera('CONFIG_PROVISION_TEMPEST_USER')
|
||||
$tempest_password = hiera('CONFIG_PROVISION_TEMPEST_USER_PW')
|
||||
|
||||
# Nano and Micro flavors are used, otherwise flavors used by default too much resources for nothing
|
||||
$tempest_flavor_ref = "42"
|
||||
$tempest_flavor_ref_alt = "84"
|
||||
|
||||
nova_flavor { 'm1.nano':
|
||||
ensure => present,
|
||||
id => $tempest_flavor_ref,
|
||||
ram => '128',
|
||||
disk => '0',
|
||||
vcpus => '1',
|
||||
require => [ Class['::nova::api'], Class['::nova::keystone::auth'] ],
|
||||
}
|
||||
nova_flavor { 'm1.micro':
|
||||
ensure => present,
|
||||
id => $tempest_flavor_ref_alt,
|
||||
ram => '128',
|
||||
disk => '0',
|
||||
vcpus => '1',
|
||||
require => [ Class['::nova::api'], Class['::nova::keystone::auth'] ],
|
||||
}
|
||||
|
||||
# Service availability for testing based on configuration
|
||||
$cinder_available = str2bool(hiera('CONFIG_CINDER_INSTALL'))
|
||||
$glance_available = str2bool(hiera('CONFIG_GLANCE_INSTALL'))
|
||||
$horizon_available = str2bool(hiera('CONFIG_HORIZON_INSTALL'))
|
||||
$nova_available = str2bool(hiera('CONFIG_NOVA_INSTALL'))
|
||||
$neutron_available = str2bool(hiera('CONFIG_NEUTRON_INSTALL'))
|
||||
$ceilometer_available = str2bool(hiera('CONFIG_CEILOMETER_INSTALL'))
|
||||
$aodh_available = str2bool(hiera('CONFIG_AODH_INSTALL'))
|
||||
$trove_available = str2bool(hiera('CONFIG_TROVE_INSTALL'))
|
||||
$sahara_available = str2bool(hiera('CONFIG_SAHARA_INSTALL'))
|
||||
$heat_available = str2bool(hiera('CONFIG_HEAT_INSTALL'))
|
||||
$swift_available = str2bool(hiera('CONFIG_SWIFT_INSTALL'))
|
||||
$configure_tempest = str2bool(hiera('CONFIG_PROVISION_TEMPEST'))
|
||||
|
||||
class { '::tempest':
|
||||
admin_domain_name => $admin_domain_name,
|
||||
admin_password => $admin_password,
|
||||
admin_tenant_name => $admin_tenant_name,
|
||||
admin_username => $admin_username,
|
||||
allow_tenant_isolation => $allow_tenant_isolation,
|
||||
aodh_available => $aodh_available,
|
||||
auth_version => $auth_version,
|
||||
ceilometer_available => $ceilometer_available,
|
||||
cinder_available => $cinder_available,
|
||||
change_password_available => $change_password_available,
|
||||
configure_images => $configure_images,
|
||||
configure_networks => $configure_networks,
|
||||
debug => $debug,
|
||||
flavor_ref => $tempest_flavor_ref,
|
||||
flavor_ref_alt => $tempest_flavor_ref_alt,
|
||||
glance_available => $glance_available,
|
||||
heat_available => $heat_available,
|
||||
horizon_available => $horizon_available,
|
||||
identity_uri => $identity_uri,
|
||||
identity_uri_v3 => $identity_uri_v3,
|
||||
image_alt_ssh_user => $image_alt_ssh_user,
|
||||
image_name_alt => $image_name_alt,
|
||||
image_name => $uec_image_name,
|
||||
image_ssh_user => $image_ssh_user,
|
||||
log_file => $log_file,
|
||||
neutron_available => $neutron_available,
|
||||
nova_available => $nova_available,
|
||||
password => $password,
|
||||
public_network_name => $public_network_name,
|
||||
public_router_id => $public_router_id,
|
||||
resize_available => $resize_available,
|
||||
sahara_available => $sahara_available,
|
||||
swift_available => $swift_available,
|
||||
tempest_clone_owner => $tempest_clone_owner,
|
||||
tempest_clone_path => $tempest_clone_path,
|
||||
tempest_repo_revision => $tempest_repo_revision,
|
||||
tempest_repo_uri => $tempest_repo_uri,
|
||||
tenant_name => $tenant_name,
|
||||
trove_available => $trove_available,
|
||||
username => $username,
|
||||
use_stderr => $use_stderr,
|
||||
}
|
||||
|
||||
tempest_config { 'object-storage/operator_role':
|
||||
value => 'SwiftOperator',
|
||||
path => "${tempest_clone_path}/etc/tempest.conf",
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user