Ceilometer task

* Compute and controller parts
* Fixes typo in openstack-network-compute.pp
* Pre/Post tests require I8769748ae79d5a1597eb0f320e0a0ed9581d5a0b

Related-blueprint: fuel-library-modularization

Change-Id: Id4b44549bf66b7df9034ae2556a2fd4b45f99f29
This commit is contained in:
Dmitry Ilyin 2015-03-11 17:35:06 +03:00 committed by Aleksandr Didenko
parent a530233a11
commit 79d34b5763
11 changed files with 270 additions and 50 deletions

View File

@ -28,7 +28,6 @@ class openstack::ceilometer (
$on_controller = false,
$on_compute = false,
$ha_mode = false,
$primary_controller = false,
$ext_mongo = false,
# ttl is 1 week (3600*24*7)
$time_to_live = '604800',
@ -38,7 +37,7 @@ class openstack::ceilometer (
# This class is required by ceilometer agents & api classes
# The metering_secret parameter is mandatory
class { '::ceilometer':
package_ensure => $::openstack_version['ceilometer'],
package_ensure => 'present',
rabbit_hosts => split($amqp_hosts, ','),
rabbit_userid => $amqp_user,
rabbit_password => $amqp_password,

View File

@ -450,21 +450,4 @@ on packages update": }
content => "Host *\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null\n",
}
# configure ceilometer compute agent
if ($ceilometer) {
class { 'openstack::ceilometer':
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
syslog_log_facility => $syslog_log_facility_ceilometer,
amqp_hosts => $amqp_hosts,
amqp_user => $amqp_user,
amqp_password => $amqp_password,
keystone_host => $service_endpoint,
keystone_password => $ceilometer_user_password,
on_compute => true,
metering_secret => $ceilometer_metering_secret,
}
}
}

View File

@ -314,36 +314,6 @@ class openstack::controller (
neutron_metadata_proxy_shared_secret => $network_provider ? {'nova'=>undef, 'neutron'=>$neutron_metadata_proxy_secret },
}
######## Ceilometer ########
if ($ceilometer) {
class { 'openstack::ceilometer':
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
syslog_log_facility => $syslog_log_facility_ceilometer,
db_type => $ceilometer_db_type,
db_host => $ceilometer_db_host,
db_user => $ceilometer_db_user,
db_password => $ceilometer_db_password,
db_dbname => $ceilometer_db_dbname,
swift_rados_backend => $swift_rados_backend,
metering_secret => $ceilometer_metering_secret,
amqp_hosts => $amqp_hosts,
amqp_user => $amqp_user,
amqp_password => $amqp_password,
rabbit_ha_queues => $rabbit_ha_queues,
keystone_host => $internal_address,
keystone_password => $ceilometer_user_password,
host => $api_bind_address,
ha_mode => $ha_mode,
primary_controller => $primary_controller,
on_controller => true,
ext_mongo => $ceilometer_ext_mongo,
mongo_replicaset => $mongo_replicaset,
}
}
####### Disable upstart startup on install #######
if($::operatingsystem == 'Ubuntu') {
tweaks::ubuntu_service_override { 'nova-cert':

View File

@ -0,0 +1,48 @@
notice('ceilometer/compute.pp')
$verbose = hiera('verbose', true)
$debug = hiera('debug', false)
$use_syslog = hiera('use_syslog', true)
$syslog_log_facility = hiera('syslog_log_facility_ceilometer', 'LOG_LOCAL0')
$amqp_hosts = hiera('amqp_hosts')
$rabbit_hash = hiera('rabbit_hash')
$management_vip = hiera('management_vip')
$default_ceilometer_hash = {
'enabled' => false,
'db_password' => 'ceilometer',
'user_password' => 'ceilometer',
'metering_secret' => 'ceilometer',
}
$ceilometer_hash = hiera('ceilometer', $default_ceilometer_hash)
$ceilometer_enabled = $ceilometer_hash['enabled']
$amqp_password = $rabbit_hash['password']
$amqp_user = $rabbit_hash['user']
$service_endpoint = $management_vip
$ceilometer_user_password = $ceilometer_hash['user_password']
$ceilometer_metering_secret = $ceilometer_hash['metering_secret']
if ($ceilometer_enabled) {
class { 'openstack::ceilometer':
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
syslog_log_facility => $syslog_log_facility,
amqp_hosts => $amqp_hosts,
amqp_user => $amqp_user,
amqp_password => $amqp_password,
keystone_host => $service_endpoint,
keystone_password => $ceilometer_user_password,
on_compute => true,
metering_secret => $ceilometer_metering_secret,
}
# We need to restart nova-compute service in orderto apply new settings
include ::nova::params
service { 'nova-compute':
ensure => 'running',
name => $::nova::params::compute_service_name,
}
}

View File

@ -0,0 +1,17 @@
require File.join File.dirname(__FILE__), '../test_common.rb'
PORT = 8777
PROCESSES = %w(
ceilometer-agent-compute
)
class CeilometerComputePostTest < Test::Unit::TestCase
def test_ceilometer_processes_running
PROCESSES.each do |process|
assert TestCommon::Process.running?(process), "'#{process}' is not running!"
end
end
end

View File

@ -0,0 +1,12 @@
require File.join File.dirname(__FILE__), '../test_common.rb'
class CeilometerComputePreTest < Test::Unit::TestCase
def test_amqp_accessible
host = TestCommon::Settings.amqp_hosts.split(':').first
user = TestCommon::Settings.rabbit['user']
password = TestCommon::Settings.rabbit['password']
assert TestCommon::AMQP.connection?(user, password, host), 'Cannot connect to AMQP server!'
end
end

View File

@ -0,0 +1,99 @@
notice('ceilometer/controller.pp')
$verbose = hiera('verbose', true)
$debug = hiera('debug', false)
$use_syslog = hiera('use_syslog', true)
$syslog_log_facility = hiera('syslog_log_facility_ceilometer', 'LOG_LOCAL0')
$nodes_hash = hiera('nodes')
$storage_hash = hiera('storage')
$amqp_hosts = hiera('amqp_hosts')
$rabbit_hash = hiera('rabbit_hash')
$management_vip = hiera('management_vip')
$internal_address = hiera('internal_address')
$default_ceilometer_hash = {
'enabled' => false,
'db_password' => 'ceilometer',
'user_password' => 'ceilometer',
'metering_secret' => 'ceilometer',
}
$default_mongo_hash = {
'enabled' => false,
}
$ceilometer_hash = hiera('ceilometer', $default_ceilometer_hash)
$mongo_hash = hiera('mongo', $default_mongo_hash)
if $mongo_hash['enabled'] and $ceilometer_hash['enabled'] {
$exteranl_mongo_hash = hiera('external_mongo')
$ceilometer_db_user = $exteranl_mongo_hash['mongo_user']
$ceilometer_db_password = $exteranl_mongo_hash['mongo_password']
$ceilometer_db_dbname = $exteranl_mongo_hash['mongo_db_name']
$external_mongo = true
} else {
$ceilometer_db_user = 'ceilometer'
$ceilometer_db_password = $ceilometer_hash['db_password']
$ceilometer_db_dbname = 'ceilometer'
$external_mongo = false
$exteranl_mongo_hash = {}
}
$ceilometer_enabled = $ceilometer_hash['enabled']
$ceilometer_user_password = $ceilometer_hash['user_password']
$ceilometer_metering_secret = $ceilometer_hash['metering_secret']
$ceilometer_db_type = 'mongodb'
$swift_rados_backend = $storage_hash['objects_ceph']
$amqp_password = $rabbit_hash['password']
$amqp_user = $rabbit_hash['user']
$rabbit_ha_queues = true
$service_endpoint = $management_vip
$api_bind_address = $internal_address
$ha_mode = true
if $ceilometer_hash['enabled'] {
if $external_mongo {
$mongo_hosts = $exteranl_mongo_hash['hosts_ip']
if $exteranl_mongo_hash['mongo_replset'] {
$mongo_replicaset = $exteranl_mongo_hash['mongo_replset']
} else {
$mongo_replicaset = undef
}
} else {
$mongo_hosts = mongo_hosts($nodes_hash)
if size(mongo_hosts($nodes_hash, 'array', 'mongo')) > 1 {
$mongo_replicaset = 'ceilometer'
} else {
$mongo_replicaset = undef
}
}
}
###############################################################################
if ($ceilometer_enabled) {
class { 'openstack::ceilometer':
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
syslog_log_facility => $syslog_log_facility,
db_type => $ceilometer_db_type,
db_host => $mongo_hosts,
db_user => $ceilometer_db_user,
db_password => $ceilometer_db_password,
db_dbname => $ceilometer_db_dbname,
swift_rados_backend => $swift_rados_backend,
metering_secret => $ceilometer_metering_secret,
amqp_hosts => $amqp_hosts,
amqp_user => $amqp_user,
amqp_password => $amqp_password,
rabbit_ha_queues => $rabbit_ha_queues,
keystone_host => $service_endpoint,
keystone_password => $ceilometer_user_password,
host => $api_bind_address,
ha_mode => $ha_mode,
on_controller => true,
ext_mongo => $external_mongo,
mongo_replicaset => $mongo_replicaset,
}
}

View File

@ -0,0 +1,50 @@
require File.join File.dirname(__FILE__), '../test_common.rb'
PORT = 8777
PROCESSES = %w(
ceilometer-collector
ceilometer-agent-central
ceilometer-agent-notification
ceilometer-alarm-notifier
ceilometer-alarm-evaluator
ceilometer-api
)
if TestCommon::Facts.osfamily == 'RedHat'
PACEMAKER_SERVICES = %w(
p_openstack-ceilometer-central
p_openstack-ceilometer-alarm-evaluator
)
elsif TestCommon::Facts.osfamily == 'Debian'
PACEMAKER_SERVICES = %w(
p_ceilometer-agent-central
p_ceilometer-alarm-evaluator
)
end
class CeilometerControllerPostTest < Test::Unit::TestCase
def test_ceilometer_processes_running
PROCESSES.each do |process|
assert TestCommon::Process.running?(process), "'#{process}' is not running!"
end
end
def test_haproxy_ceilometer_backend_online
assert TestCommon::HAProxy.backend_up?('ceilometer'), "HAProxy backend 'ceilometer' is not online!"
end
def test_ceilometer_meter_list_run
cmd = '. /root/openrc && ceilometer meter-list'
assert TestCommon::Process.run_successful?(cmd), "Could not run '#{cmd}'!"
end
def test_pacemaker_services_running
return unless PACEMAKER_SERVICES
PACEMAKER_SERVICES.each do |service|
assert TestCommon::Pacemaker.primitive_started?(service), "Pacemaker service '#{service}' is not running!"
end
end
end

View File

@ -0,0 +1,15 @@
require File.join File.dirname(__FILE__), '../test_common.rb'
BACKEND = 'ceilometer'
class CeilometerControllerPreTest < Test::Unit::TestCase
def test_ceilometer_backend_present
assert TestCommon::HAProxy.backend_present?(BACKEND), "There is no '#{BACKEND}' HAProxy backend!"
end
def test_amqp_accessible
assert TestCommon::AMQP.connection?, 'Cannot connect to AMQP server!'
end
end

View File

@ -0,0 +1,27 @@
- id: ceilometer-controller
type: puppet
groups: [primary-controller, controller]
required_for: [openstack-controller, swift]
requires: [mongo, primary-mongo, openstack-haproxy, database]
parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/ceilometer/controller.pp
puppet_modules: /etc/puppet/modules
timeout: 3600
test_pre:
cmd: ruby /etc/puppet/modules/osnailyfacter/modular/ceilometer/controller_pre.rb
test_post:
cmd: ruby /etc/puppet/modules/osnailyfacter/modular/ceilometer/controller_post.rb
- id: ceilometer-compute
type: puppet
groups: [compute]
required_for: [deploy_end]
requires: [ceilometer-controller, top-role-compute]
parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/ceilometer/compute.pp
puppet_modules: /etc/puppet/modules
timeout: 3600
test_pre:
cmd: ruby /etc/puppet/modules/osnailyfacter/modular/ceilometer/compute_pre.rb
test_post:
cmd: ruby /etc/puppet/modules/osnailyfacter/modular/ceilometer/compute_post.rb

View File

@ -224,7 +224,7 @@ if $network_provider == 'nova' {
# We need to restart nova-compute service in orderto apply new settings
service { 'nova-compute':
ensure => 'running',
name => $::nova::params::compute_package_name,
name => $::nova::params::compute_service_name,
}
Nova_config<| |> ~> Service['nova-compute']
}