Backport from Openstack HA deployment branch

* Puppetdb (commented out)
* Fuel update
* Development version of HA deployment
* More nodes for integration tests
* Makefile fixes
This commit is contained in:
Dmitry Pyzhov 2012-12-17 18:36:49 +04:00 committed by default
parent a4c33c4ace
commit 17e560de35
10 changed files with 417 additions and 142 deletions

2
fuel

@ -1 +1 @@
Subproject commit ab568fe414e83830838663ce4b7345e089b79f12
Subproject commit 92bd5fc0d9cd21fa49a099fb333114e299cc729d

View File

@ -1,5 +1,9 @@
#!/bin/bash
puppet apply --modulepath=/opt/nailgun_puppet /opt/nailgun_puppet/nailgun/examples/site.pp 2>&1 | tee /var/log/puppet/firstboot.log
#puppet apply -e 'class {puppetdb:}'
#sed -i -e s/8080/8082/ /etc/puppetdb/conf.d/jetty.ini
#puppet apply -e 'class {puppetdb::master::config: puppet_service_name=>"puppetmaster"}'
#/etc/init.d/puppetdb restart
sed -i --follow-symlinks "/bootstrap_admin_node.sh/d" /etc/rc.local

View File

@ -44,7 +44,7 @@ module Naily
time = 10 + time - Time::now.to_f
sleep (time) if time > 0 # Wait while nodes going to reboot. Sleep not greater than 10 sec.
begin
Timeout::timeout(20 * 60) do # 20 min for booting target OS
Timeout::timeout(60 * 60) do # 60 min for booting target OS
while true
time = Time::now.to_f
types = @orchestrator.node_type(reporter, data['args']['task_uuid'], nodes, 5)

View File

@ -0,0 +1,220 @@
class osnailyfacter::cluster_ha {
# TODO: move it to astude
$internal_virtual_ip = '192.168.0.253'
$public_virtual_ip = '240.0.1.253'
$master_hostname = 'slave-1'
$controller_public_addresses = {'slave-1' => '10.0.101.3','slave-2' => '10.0.101.4','slave-3' => '10.0.101.5'}
$controller_internal_addresses = {'slave-1' => '192.168.0.2','slave-2' => '192.168.0.3','slave-3' => '192.168.0.4'}
$swift_proxy_address = '192.168.0.253'
$controller_hostnames = ['slave-1', 'slave-2', 'slave-3']
$swift_zone = 1 # Different for each controller
$swift_proxy_address = $internal_virtual_ip
##
# These parameters should be edit
##
# This interface will be giving away internet
#$public_interface = 'eth1' # Provided by Astute
# This interface will look to management network
#$internal_interface = 'eth0' # Provided by Astute
# This interface for internal services
#$private_interface = 'eth2' # Provided by Astute
# Public and Internal VIPs for load-balancers
#$internal_virtual_ip = '10.0.126.253' # Provided by Astute
#$public_virtual_ip = '10.0.215.253' # Provided by Astute
#$swift_proxy_address = '10.0.126.253' # Provided by Astute
#$controller_internal_addresses = {'fuel-01' => '10.0.126.3','fuel-02' => '10.0.126.4','fuel-03' => '10.0.126.5'} # Provided by Astute
# Public and Internal IP pools
$create_networks = true
#$fixed_range = '10.0.198.128/27' # Provided by Astute as fixed_network_range
#$floating_range = '10.0.74.128/28' # Provided by Astute as floating_network_range
##
# These parameters to change by necessity
##
# Enabled or disabled different services
$multi_host = true
$quantum = false # true
$manage_volumes = true
$cinder = true
$auto_assign_floating_ip = false
$glance_backend = 'swift'
# Set default hostname
#$master_hostname = 'fuel-01' # Provided by Astute
#$controller_hostnames = ['fuel-01', 'fuel-02', 'fuel-03'] # Provided by Astute
$swift_master = $master_hostname
$swift_proxies = $controller_internal_addresses
$network_manager = 'nova.network.manager.FlatDHCPManager'
#$mirror_type='external'
# Add physical volume to cinder, value must be different
#$nv_physical_volume = ['/dev/sdz', '/dev/sdy', '/dev/sdx']
# Set credential for different services
$swift_shared_secret = 'changeme'
$swift_user_password = 'swift_pass'
$mysql_root_password = 'nova'
$admin_email = 'openstack@openstack.org'
$admin_password = 'nova'
$keystone_db_password = 'nova'
$keystone_admin_token = 'nova'
$glance_db_password = 'nova'
$glance_user_password = 'nova'
$nova_db_password = 'nova'
$nova_user_password = 'nova'
$rabbit_password = 'nova'
$rabbit_user = 'nova'
$quantum_user_password = 'quantum_pass'
$quantum_db_password = 'quantum_pass'
$quantum_db_user = 'quantum'
$quantum_db_dbname = 'quantum'
$quantum_sql_connection = "mysql://${quantum_db_user}:${quantum_db_password}@${quantum_host}/${quantum_db_dbname}"
$controller_node_public = $internal_virtual_ip
$quantum_host = $internal_virtual_ip
$swift_local_net_ip = $ipaddress_eth0
# Moved to the global namespace
#$openstack_version = {
# 'keystone' => 'latest',
# 'glance' => 'latest',
# 'horizon' => 'latest',
# 'nova' => 'latest',
# 'novncproxy' => 'latest',
# 'cinder' => latest,
#}
$tenant_network_type = 'gre'
$internal_address = getvar("::ipaddress_${internal_interface}")
$verbose = true
Exec { logoutput => true }
#stage { 'openstack-custom-repo': before => Stage['main'] }
#class { 'openstack::mirantis_repos': stage => 'openstack-custom-repo', type=> $mirror_type }
# deprecated. keep it for backward compatibility
#$controller_public_addresses = {'fuel-01' => '10.0.215.3','fuel-02' => '10.0.215.4','fuel-03' => '10.0.215.5'} # Provided by Astute
class compact_controller {
class { 'openstack::controller_ha':
controller_public_addresses => $controller_public_addresses,
controller_internal_addresses => $controller_internal_addresses,
internal_address => $internal_address,
public_interface => $public_interface,
internal_interface => $internal_interface,
private_interface => $private_interface,
internal_virtual_ip => $internal_virtual_ip,
public_virtual_ip => $public_virtual_ip,
master_hostname => $master_hostname,
floating_range => $floating_network_range, #$floating_range,
fixed_range => $fixed_network_range, #$fixed_range,
multi_host => $multi_host,
network_manager => $network_manager,
verbose => $verbose,
auto_assign_floating_ip => $auto_assign_floating_ip,
mysql_root_password => $mysql_root_password,
admin_email => $admin_email,
admin_password => $admin_password,
keystone_db_password => $keystone_db_password,
keystone_admin_token => $keystone_admin_token,
glance_db_password => $glance_db_password,
glance_user_password => $glance_user_password,
nova_db_password => $nova_db_password,
nova_user_password => $nova_user_password,
rabbit_password => $rabbit_password,
rabbit_user => $rabbit_user,
rabbit_nodes => $controller_hostnames,
memcached_servers => $controller_hostnames,
export_resources => false,
glance_backend => $glance_backend,
swift_proxies => $swift_proxies,
quantum => $quantum,
quantum_user_password => $quantum_user_password,
quantum_db_password => $quantum_db_password,
quantum_db_user => $quantum_db_user,
quantum_db_dbname => $quantum_db_dbname,
tenant_network_type => $tenant_network_type,
cinder => $cinder,
manage_volumes => $manage_volumes,
galera_nodes => $controller_hostnames,
nv_physical_volume => $nv_physical_volume,
}
class { 'swift::keystone::auth':
password => $swift_user_password,
public_address => $public_virtual_ip,
internal_address => $internal_virtual_ip,
admin_address => $internal_virtual_ip,
}
}
case $role {
"controller" : {
include osnailyfacter::test_controller
class { 'compact_controller': }
#$swift_zone = 1 # Provided by Astute
class { 'openstack::swift::storage-node':
swift_zone => $swift_zone,
swift_local_net_ip => $internal_address,
}
class { 'openstack::swift::proxy':
swift_proxies => $swift_proxies,
swift_master => $swift_master,
controller_node_address => $internal_virtual_ip,
swift_local_net_ip => $internal_address,
}
Class[osnailyfacter::network_setup] -> Class[openstack::controller_ha]
Class[osnailyfacter::network_setup] -> Class[openstack::auth_file]
}
"compute" : {
include osnailyfacter::test_compute
class { 'openstack::compute':
public_interface => $public_interface,
private_interface => $private_interface,
internal_address => $internal_address,
libvirt_type => 'qemu',
fixed_range => $fixed_network_range, #$fixed_range,
network_manager => $network_manager,
multi_host => $multi_host,
sql_connection => "mysql://nova:${nova_db_password}@${internal_virtual_ip}/nova",
rabbit_nodes => $controller_hostnames,
rabbit_password => $rabbit_password,
rabbit_user => $rabbit_user,
glance_api_servers => "${internal_virtual_ip}:9292",
vncproxy_host => $public_virtual_ip,
verbose => $verbose,
vnc_enabled => true,
manage_volumes => false,
nova_user_password => $nova_user_password,
cache_server_ip => $controller_hostnames,
service_endpoint => $internal_virtual_ip,
quantum => $quantum,
quantum_host => $quantum_host,
quantum_sql_connection => $quantum_sql_connection,
quantum_user_password => $quantum_user_password,
#tenant_network_type => $tenant_network_type,
cinder => $cinder,
#ssh_private_key => 'puppet:///ssh_keys/openstack',
#ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
}
Class[osnailyfacter::network_setup] -> Class[openstack::compute]
}
}
}

View File

@ -0,0 +1,159 @@
class osnailyfacter::cluster_simple {
####### shared variables ##################
# this section is used to specify global variables that will
# be used in the deployment of multi and single node openstack
# environments
# assumes that eth1 is the public interface
#$public_interface = 'eth1' # Provided by Astute
# assumes that eth0 is the interface that will be used for the vm network
# this configuration assumes this interface is active but does not have an
# ip address allocated to it.
#$internal_interface = 'eth0' # Provided by Astute
#$private_interface = 'eth2' # Provided by Astute
#$fixed_network_range = '10.0.214.0/24' # Provided by Astute
#$floating_network_range = '10.0.74.128/28' # Provided by Astute
#$controller_node_address = '10.0.125.3' # Provided by Astute
#$controller_node_public = '10.0.74.3' # Provided by Astute
$mirror_type='external'
# credentials
$admin_email = 'root@localhost'
$admin_password = 'keystone_admin'
$keystone_db_password = 'keystone_db_pass'
$keystone_admin_token = 'keystone_admin_token'
$nova_db_password = 'nova_pass'
$nova_user_password = 'nova_pass'
$glance_db_password = 'glance_pass'
$glance_user_password = 'glance_pass'
$rabbit_password = 'openstack_rabbit_password'
$rabbit_user = 'openstack_rabbit_user'
$quantum = false # true
$quantum_user_password = 'quantum_pass'
$quantum_db_password = 'quantum_pass'
$quantum_db_user = 'quantum'
$quantum_db_dbname = 'quantum'
$tenant_network_type = 'gre'
# by default it does not enable atomatically adding floating IPs
$auto_assign_floating_ip = false
$manage_volumes = false # true
# Add physical volume to cinder, value must be different
#$nv_physical_volume = ['/dev/sdz', '/dev/sdy', '/dev/sdx']
$cinder = false # true
# Moved to the global namespace
#$openstack_version = {
# 'keystone' => latest,
# 'glance' => latest,
# 'horizon' => latest,
# 'nova' => latest,
# 'novncproxy' => latest,
# 'cinder' => latest,
#}
# switch this to true to have all service log at verbose
$verbose = true
#stage { 'openstack-custom-repo': before => Stage['main'] }
#class { 'openstack::mirantis_repos': stage => 'openstack-custom-repo', type => $mirror_type }
$controller_node_internal = $controller_node_address
$quantum_host = $controller_node_address
$quantum_sql_connection = "mysql://${quantum_db_user}:${quantum_db_password}@${quantum_host}/${quantum_db_dbname}"
$sql_connection = "mysql://nova:${nova_db_password}@${controller_node_internal}/nova"
case $role {
"controller" : {
include osnailyfacter::test_controller
class { 'openstack::controller':
admin_address => $controller_node_internal,
public_address => $controller_node_public,
public_interface => $public_interface,
private_interface => $private_interface,
internal_address => $controller_node_internal,
floating_range => $floating_network_range,
fixed_range => $fixed_network_range,
# by default it does not enable multi-host mode
multi_host => true,
# by default is assumes flat dhcp networking mode
network_manager => 'nova.network.manager.FlatDHCPManager',
verbose => $verbose,
auto_assign_floating_ip => $auto_assign_floating_ip,
mysql_root_password => $mysql_root_password,
admin_email => $admin_email,
admin_password => $admin_password,
keystone_db_password => $keystone_db_password,
keystone_admin_token => $keystone_admin_token,
glance_db_password => $glance_db_password,
glance_user_password => $glance_user_password,
nova_db_password => $nova_db_password,
nova_user_password => $nova_user_password,
rabbit_password => $rabbit_password,
rabbit_user => $rabbit_user,
export_resources => false,
quantum => $quantum,
quantum_user_password => $quantum_user_password,
quantum_db_password => $quantum_db_password,
quantum_db_user => $quantum_db_user,
quantum_db_dbname => $quantum_db_dbname,
tenant_network_type => $tenant_network_type,
cinder => $cinder,
manage_volumes => $manage_volumes,
nv_physical_volume => $nv_physical_volume,
}
class { 'openstack::auth_file':
admin_password => $admin_password,
keystone_admin_token => $keystone_admin_token,
controller_node => $controller_node_internal,
}
Class[osnailyfacter::network_setup] -> Class[openstack::controller]
Class[osnailyfacter::network_setup] -> Class[openstack::auth_file]
}
"compute" : {
include osnailyfacter::test_compute
class { 'openstack::compute':
public_interface => $public_interface,
private_interface => $private_interface,
internal_address => getvar("::ipaddress_${internal_interface}"),
libvirt_type => 'kvm',
fixed_range => $fixed_network_range,
network_manager => 'nova.network.manager.FlatDHCPManager',
multi_host => true,
sql_connection => $sql_connection,
nova_user_password => $nova_user_password,
rabbit_nodes => [$controller_node_internal],
rabbit_password => $rabbit_password,
rabbit_user => $rabbit_user,
glance_api_servers => "${controller_node_internal}:9292",
vncproxy_host => $controller_node_public,
vnc_enabled => true,
#ssh_private_key => 'puppet:///ssh_keys/openstack',
#ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
quantum => $quantum,
quantum_host => $quantum_host,
quantum_sql_connection => $quantum_sql_connection,
quantum_user_password => $quantum_user_password,
tenant_network_type => $tenant_network_type,
service_endpoint => $controller_node_internal,
verbose => $verbose,
}
Class[osnailyfacter::network_setup] -> Class[openstack::compute]
}
}
}

View File

@ -1,120 +1,8 @@
class osnailyfacter {
# credentials
$admin_email = 'root@localhost'
$admin_password = 'keystone_admin'
$keystone_db_password = 'keystone_db_pass'
$keystone_admin_token = 'keystone_admin_token'
$nova_db_password = 'nova_pass'
$nova_user_password = 'nova_pass'
$glance_db_password = 'glance_pass'
$glance_user_password = 'glance_pass'
$rabbit_password = 'openstack_rabbit_password'
$rabbit_user = 'openstack_rabbit_user'
# switch this to true to have all service log at verbose
$verbose = true
# by default it does not enable atomatically adding floating IPs
$auto_assign_floating_ip = false
$manage_volumes = false # true
#$nv_physical_volume = ['/dev/sdz', '/dev/sdy', '/dev/sdx']
$cinder = false # true
$quantum = false # true
$quantum_user_password = 'quantum_pass'
$quantum_db_password = 'quantum_pass'
$quantum_db_user = 'quantum'
$quantum_db_dbname = 'quantum'
$mirror_type="external"
#stage { 'openstack-custom-repo': before => Stage['main'] }
#class { 'openstack::mirantis_repos': stage => 'openstack-custom-repo', type => $mirror_type }
$controller_node_internal = $controller_node_address
$quantum_host = $controller_node_address
$quantum_sql_connection = "mysql://${quantum_db_user}:${quantum_db_password}@${quantum_host}/${quantum_db_dbname}"
$sql_connection = "mysql://nova:${nova_db_password}@${controller_node_internal}/nova"
case $role {
"controller" : {
include osnailyfacter::test_controller
class { 'openstack::controller':
admin_address => $controller_node_internal,
public_address => $controller_node_public,
public_interface => $public_interface,
private_interface => $private_interface,
internal_address => $controller_node_internal,
floating_range => $floating_network_range,
fixed_range => $fixed_network_range,
# by default it does not enable multi-host mode
multi_host => true,
# by default is assumes flat dhcp networking mode
network_manager => 'nova.network.manager.FlatDHCPManager',
verbose => $verbose,
auto_assign_floating_ip => $auto_assign_floating_ip,
mysql_root_password => $mysql_root_password,
admin_email => $admin_email,
admin_password => $admin_password,
keystone_db_password => $keystone_db_password,
keystone_admin_token => $keystone_admin_token,
glance_db_password => $glance_db_password,
glance_user_password => $glance_user_password,
nova_db_password => $nova_db_password,
nova_user_password => $nova_user_password,
rabbit_password => $rabbit_password,
rabbit_user => $rabbit_user,
export_resources => false,
quantum => $quantum,
quantum_user_password => $quantum_user_password,
quantum_db_password => $quantum_db_password,
quantum_db_user => $quantum_db_user,
quantum_db_dbname => $quantum_db_dbname,
cinder => $cinder,
manage_volumes => $manage_volumes,
nv_physical_volume => $nv_physical_volume,
}
class { 'openstack::auth_file':
admin_password => $admin_password,
keystone_admin_token => $keystone_admin_token,
controller_node => $controller_node_internal,
}
Class[osnailyfacter::network_setup] -> Class[openstack::controller]
Class[osnailyfacter::network_setup] -> Class[openstack::auth_file]
}
"compute" : {
include osnailyfacter::test_compute
class { 'openstack::compute':
public_interface => $public_interface,
private_interface => $private_interface,
internal_address => $ipaddress_eth0,
libvirt_type => 'kvm',
fixed_range => $fixed_network_range,
network_manager => 'nova.network.manager.FlatDHCPManager',
multi_host => true,
sql_connection => $sql_connection,
nova_user_password => $nova_user_password,
rabbit_nodes => [$controller_node_internal],
rabbit_password => $rabbit_password,
rabbit_user => $rabbit_user,
glance_api_servers => "${controller_node_internal}:9292",
vncproxy_host => $controller_node_public,
vnc_enabled => true,
#ssh_private_key => 'puppet:///ssh_keys/openstack',
#ssh_public_key => 'puppet:///ssh_keys/openstack.pub',
quantum => $quantum,
quantum_host => $quantum_host,
quantum_sql_connection => $quantum_sql_connection,
quantum_user_password => $quantum_user_password,
service_endpoint => $controller_node_internal,
verbose => $verbose,
}
Class[osnailyfacter::network_setup] -> Class[openstack::compute]
}
$cluster_mode = "simple"
case $cluster_mode {
"simple": { include osnailyfacter::cluster_simple }
"ha": { include osnailyfacter::cluster_ha }
}
include osnailyfacter::network_setup

View File

@ -39,8 +39,7 @@
dbadapter = mysql
dbname = <%= puppet_stored_dbname %>
dbuser = <%= puppet_stored_dbuser %>
dbpassword = <%= puppet_stored_dbpassword %>
dbpassword = <%= puppet_stored_dbpassword %>
dbserver = localhost
dbsocket = <%= puppet_stored_dbsocket %>
configtimeout = 1200

View File

@ -68,3 +68,17 @@ vim-enhanced
wget
xinetd
yum
openstack-cinder
openstack-swift
haproxy
socat
keepalived
openssl098e
xfsprogs
openstack-swift-account
openstack-swift-container
openstack-swift-object
postgresql-server
puppetdb
puppetdb-terminus
openstack-swift-proxy

View File

@ -63,25 +63,16 @@ class Ci(object):
node.boot = ['disk', 'cdrom']
environment.nodes.append(node)
node2 = Node('slave1')
node2.memory = 1024
node2.vnc = True
node2.disks.append(
Disk(size=30 * 1024 ** 3)
)
node2.interfaces.append(Interface(network))
node2.boot = ['network']
environment.nodes.append(node2)
node3 = Node('slave2')
node3.memory = 1024
node3.vnc = True
node3.disks.append(
Disk(size=30 * 1024 ** 3)
)
node3.interfaces.append(Interface(network))
node3.boot = ['network']
environment.nodes.append(node3)
for n in range(5):
nodex = Node('slave%d' % (n + 1))
nodex.memory = 1024
nodex.vnc = True
nodex.disks.append(
Disk(size=30 * 1024 ** 3)
)
nodex.interfaces.append(Interface(network))
nodex.boot = ['network']
environment.nodes.append(nodex)
devops.build(environment)
self.environment = environment

View File

@ -20,11 +20,11 @@ $/%: /:=$/
test: test-integration
.PHONY: test-integration
test-integration: $/environment-id-integration
.PHONY: test-integration test-integration-env
test-integration: test-integration-env
python test/integration_test.py -l $(LEVEL) --installation-timeout=$(INSTALLATION_TIMEOUT) --deployment-timeout=$(DEPLOYMENT_TIMEOUT) --iso $(abspath $(iso.path)) test $(NOSEARGS)
$/environment-id-integration: | $(iso.path)
test-integration-env: | $(iso.path)
@mkdir -p $(@D)
python test/integration_test.py -l $(LEVEL) destroy
python test/integration_test.py -l $(LEVEL) $(NOFORWARD_CLI_ARG) --iso $(abspath $(iso.path)) setup