Merge "Drop openstack::ceilometer"

This commit is contained in:
Jenkins 2016-03-21 11:39:33 +00:00 committed by Gerrit Code Review
commit 7de87a08bf
6 changed files with 217 additions and 376 deletions

View File

@ -1,183 +0,0 @@
#
# == Class: openstack::ceilometer
#
# Installs and configures Ceilometer
#
# [use_stderr] Rather or not service should send output to stderr. Optional. Defaults to true.
#
# [*db_connection*]
# Connection string to use for ceilometer
# Defaults to 'mysql://ceilometer:ceilometer_pass@localhost/ceilometer'
#
# [*keystone_auth_uri*]
# (Optional) Public Identity API endpoint.
# Defaults to 'http://127.0.0.1:5000/'.
#
# [*keystone_identity_uri*]
# (Optional) Complete admin Identity API endpoint.
# Defaults to 'http://127.0.0.1:35357/'.
#
class openstack::ceilometer (
$keystone_password = 'ceilometer_pass',
$keystone_user = 'ceilometer',
$keystone_tenant = 'services',
$keystone_region = 'RegionOne',
$metering_secret = 'ceilometer',
$verbose = false,
$use_syslog = false,
$use_stderr = true,
$syslog_log_facility = 'LOG_LOCAL0',
$default_log_levels = undef,
$db_connection = 'mysql://ceilometer:ceilometer_pass@localhost/ceilometer',
$debug = false,
$swift_rados_backend = false,
$mongo_replicaset = undef,
$amqp_hosts = '127.0.0.1',
$amqp_user = 'guest',
$amqp_password = 'rabbit_pw',
$rabbit_ha_queues = false,
$keystone_auth_uri = 'http://127.0.0.1:5000/',
$keystone_identity_uri = 'http://127.0.0.1:35357/',
$host = '0.0.0.0',
$port = '8777',
$primary_controller = false,
$on_controller = false,
$on_compute = false,
$ha_mode = false,
# ttl is 1 week (3600*24*7)
$os_endpoint_type = 'internalURL',
$alarm_history_time_to_live = '604800',
$event_time_to_live = '604800',
$metering_time_to_live = '604800',
$http_timeout = '600',
$api_workers = '1',
$collector_workers = '1',
$notification_workers = '1',
) {
# Add the base ceilometer class & parameters
# This class is required by ceilometer agents & api classes
# The metering_secret parameter is mandatory
class { '::ceilometer':
http_timeout => $http_timeout,
event_time_to_live => $event_time_to_live,
metering_time_to_live => $metering_time_to_live,
alarm_history_time_to_live => $alarm_history_time_to_live,
package_ensure => 'present',
rabbit_hosts => split($amqp_hosts, ','),
rabbit_userid => $amqp_user,
rabbit_password => $amqp_password,
metering_secret => $metering_secret,
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
use_stderr => $use_stderr,
log_facility => $syslog_log_facility,
}
# Configure authentication for agents
class { '::ceilometer::agent::auth':
auth_url => $keystone_auth_uri,
auth_password => $keystone_password,
auth_region => $keystone_region,
auth_tenant_name => $keystone_tenant,
auth_user => $keystone_user,
}
class { '::ceilometer::client': }
if ($on_controller) {
# Configure the ceilometer database
if $mongo_replicaset {
ceilometer_config {
'database/mongodb_replica_set' : value => $mongo_replicaset;
}
} else {
ceilometer_config {
'database/mongodb_replica_set' : ensure => absent;
}
}
ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} ->
Service<| title == 'ceilometer-polling'|>
class { '::ceilometer::db':
database_connection => $db_connection,
sync_db => $primary_controller,
}
# Install the ceilometer-api service
# The keystone_password parameter is mandatory
class { '::ceilometer::api':
auth_uri => $keystone_auth_uri,
identity_uri => $keystone_identity_uri,
keystone_user => $keystone_user,
keystone_password => $keystone_password,
keystone_tenant => $keystone_tenant,
host => $host,
port => $port,
api_workers => $api_workers,
}
# Clean up expired data once a week
class { '::ceilometer::expirer':
minute => '0',
hour => '0',
monthday => '*',
month => '*',
weekday => '0',
}
class { '::ceilometer::collector':
collector_workers => $collector_workers,
}
class { '::ceilometer::agent::notification':
notification_workers => $notification_workers,
store_events => true,
}
if $ha_mode {
include ceilometer_ha::agent::central
Service['ceilometer-polling'] -> Class['::ceilometer_ha::agent::central']
}
class { '::ceilometer::agent::polling':
enabled => !$ha_mode,
compute_namespace => false,
ipmi_namespace => false
}
}
if ($swift_rados_backend) {
ceilometer_config {
'DEFAULT/swift_rados_backend' : value => true;
}
}
if ($use_syslog) {
ceilometer_config {
'DEFAULT/use_syslog_rfc_format': value => true;
}
}
if ($on_compute) {
if $::operatingsystem == 'Ubuntu' and $::ceilometer::params::libvirt_group {
# Our libvirt-bin deb package (1.2.9 version) creates 'libvirt' group on Ubuntu
if (versioncmp($::libvirt_package_version, '1.2.9') >= 0) {
User<| name == 'ceilometer' |> {
groups => ['nova', 'libvirt'],
}
}
}
# Install polling agent
class { '::ceilometer::agent::polling':
central_namespace => false,
ipmi_namespace => false
}
ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} ->
Service<| title == 'ceilometer-polling'|>
}
}

View File

@ -1,120 +0,0 @@
require 'spec_helper'
describe 'openstack::ceilometer' do
shared_examples_for 'ceilometer services config' do
[true, false].each do |ha_mode|
context "on controller node with HA mode set to '#{ha_mode}'" do
let :params do
{
:on_controller => true,
:ha_mode => ha_mode,
}
end
it 'contains class ceilometer::agent::polling' do
is_expected.to contain_class('ceilometer::agent::polling').with(
:enabled => !ha_mode,
:compute_namespace => false,
:ipmi_namespace => false
)
end
if ha_mode
it { is_expected.to contain_class('ceilometer_ha::agent::central') }
end
end
end
context "on conroller node" do
let :params do
{
:on_controller => true,
:keystone_password => 'cEilomEtEr_pAss',
:keystone_user => 'ceilometer',
:keystone_tenant => 'services',
:keystone_region => 'Region007',
:api_workers => facts[:processorcount],
:host => '10.254.0.9',
:port => '8777',
:keystone_auth_uri => 'http://127.0.0.1:5000/',
:keystone_identity_uri => 'http://127.0.0.1:35357/'
}
end
it { is_expected.to contain_class('ceilometer') }
it { is_expected.to contain_class('ceilometer::logging') }
it { is_expected.to contain_class('ceilometer::db') }
it { is_expected.to contain_class('ceilometer::expirer') }
it { is_expected.to contain_class('ceilometer::agent::notification') }
it { is_expected.to contain_class('ceilometer::collector') }
it { is_expected.to contain_class('ceilometer::client') }
it { is_expected.to contain_class('ceilometer::agent::auth').with(
:auth_url => params[:keystone_auth_uri],
:auth_password => params[:keystone_password],
:auth_region => params[:keystone_region],
:auth_tenant_name => params[:keystone_tenant],
:auth_user => params[:keystone_user],
) }
it { is_expected.to contain_class('ceilometer::api').with(
:auth_uri => params[:keystone_auth_uri],
:identity_uri => params[:keystone_identity_uri],
:keystone_user => params[:keystone_user],
:keystone_password => params[:keystone_password],
:keystone_tenant => params[:keystone_tenant],
:host => params[:host],
:port => params[:port],
:api_workers => params[:api_workers],
) }
end
context "on compute node" do
let :params do
{
:on_compute => true,
}
end
it 'contains class ceilometer::agent::polling' do
is_expected.to contain_class('ceilometer::agent::polling').with(
:central_namespace => false,
:ipmi_namespace => false
)
end
end
end
context 'on Debian platforms' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:processorcount => 2,
:memorysize_mb => 4096,
:os_service_default => '<SERVICE DEFAULT>',
}
end
it_configures 'ceilometer services config'
end
context 'on RedHat platforms' do
let :facts do
{
:osfamily => 'RedHat',
:operatingsystem => 'RedHat',
:processorcount => 2,
:memorysize_mb => 4096,
:os_service_default => '<SERVICE DEFAULT>',
:operatingsystemmajrelease => '7',
}
end
it_configures 'ceilometer services config'
end
end

View File

@ -24,11 +24,9 @@ $ceilometer_region = pick($ceilometer_hash['region'], $region)
$ceilometer_enabled = $ceilometer_hash['enabled']
$amqp_password = $rabbit_hash['password']
$amqp_user = $rabbit_hash['user']
$ceilometer_user_password = $ceilometer_hash['user_password']
$ceilometer_metering_secret = $ceilometer_hash['metering_secret']
$verbose = pick($ceilometer_hash['verbose'], hiera('verbose', true))
$debug = pick($ceilometer_hash['debug'], hiera('debug', false))
$default_log_levels = hiera_hash('default_log_levels')
$ssl_hash = hiera_hash('use_ssl', {})
$internal_auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'protocol', 'http')
@ -41,28 +39,55 @@ $keystone_identity_uri = "${admin_auth_protocol}://${admin_auth_endpoint}:3
$keystone_auth_uri = "${internal_auth_protocol}://${internal_auth_endpoint}:5000/"
if ($ceilometer_enabled) {
class { 'openstack::ceilometer':
verbose => $verbose,
debug => $debug,
default_log_levels => $default_log_levels,
use_syslog => $use_syslog,
use_stderr => $use_stderr,
syslog_log_facility => $syslog_log_facility,
amqp_hosts => hiera('amqp_hosts',''),
amqp_user => $amqp_user,
amqp_password => $amqp_password,
keystone_auth_uri => $keystone_auth_uri,
keystone_identity_uri => $keystone_identity_uri,
keystone_user => $ceilometer_hash['user'],
keystone_tenant => $ceilometer_hash['tenant'],
keystone_region => $ceilometer_region,
keystone_password => $ceilometer_user_password,
on_compute => true,
metering_secret => $ceilometer_metering_secret,
alarm_history_time_to_live => $ceilometer_hash['alarm_history_time_to_live'],
class { '::ceilometer':
http_timeout => $ceilometer_hash['http_timeout'],
event_time_to_live => $ceilometer_hash['event_time_to_live'],
metering_time_to_live => $ceilometer_hash['metering_time_to_live'],
http_timeout => $ceilometer_hash['http_timeout'],
alarm_history_time_to_live => $ceilometer_hash['alarm_history_time_to_live'],
rabbit_hosts => split(hiera('amqp_hosts',''), ','),
rabbit_userid => $amqp_user,
rabbit_password => $amqp_password,
metering_secret => $ceilometer_metering_secret,
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
use_stderr => $use_stderr,
log_facility => $syslog_log_facility,
}
}
class { '::ceilometer::agent::auth':
auth_url => $keystone_auth_uri,
auth_password => $ceilometer_hash['user_password'],
auth_region => $ceilometer_region,
auth_tenant_name => $ceilometer_hash['tenant'],
auth_user => $ceilometer_hash['user'],
}
class { '::ceilometer::client': }
if ($use_syslog) {
ceilometer_config {
'DEFAULT/use_syslog_rfc_format': value => true;
}
}
if $::operatingsystem == 'Ubuntu' and $::ceilometer::params::libvirt_group {
# Our libvirt-bin deb package (1.2.9 version) creates 'libvirt' group on Ubuntu
if (versioncmp($::libvirt_package_version, '1.2.9') >= 0) {
User<| name == 'ceilometer' |> {
groups => ['nova', 'libvirt'],
}
}
}
class { '::ceilometer::agent::polling':
central_namespace => false,
ipmi_namespace => false
}
ceilometer_config { 'service_credentials/os_endpoint_type': value => 'internalURL'} ->
Service<| title == 'ceilometer-polling'|>
}

View File

@ -14,7 +14,6 @@ $default_ceilometer_hash = {
$ceilometer_hash = hiera_hash('ceilometer', $default_ceilometer_hash)
$verbose = pick($ceilometer_hash['verbose'], hiera('verbose', true))
$debug = pick($ceilometer_hash['debug'], hiera('debug', false))
$default_log_levels = hiera_hash('default_log_levels')
$use_syslog = hiera('use_syslog', true)
$use_stderr = hiera('use_stderr', false)
$syslog_log_facility = hiera('syslog_log_facility_ceilometer', 'LOG_LOCAL0')
@ -25,15 +24,13 @@ $region = hiera('region', 'RegionOne')
$ceilometer_region = pick($ceilometer_hash['region'], $region)
$mongo_nodes = get_nodes_hash_by_roles(hiera_hash('network_metadata'), hiera('mongo_roles'))
$mongo_address_map = get_node_to_ipaddr_map_by_network_role($mongo_nodes, 'mongo/db')
$primary_controller = hiera('primary_controller')
$primary_controller = hiera('primary_controller', false)
$ceilometer_enabled = $ceilometer_hash['enabled']
$ceilometer_user_password = $ceilometer_hash['user_password']
$ceilometer_metering_secret = $ceilometer_hash['metering_secret']
$swift_rados_backend = $storage_hash['objects_ceph']
$amqp_password = $rabbit_hash['password']
$amqp_user = $rabbit_hash['user']
$rabbit_ha_queues = true
$service_endpoint = hiera('service_endpoint', $management_vip)
$ha_mode = pick($ceilometer_hash['ha_mode'], true)
$ssl_hash = hiera_hash('use_ssl', {})
@ -115,36 +112,97 @@ if ($dbtype == 'mysql') {
###############################################################################
if ($ceilometer_enabled) {
class { 'openstack::ceilometer':
class { '::ceilometer':
http_timeout => $ceilometer_hash['http_timeout'],
event_time_to_live => $ceilometer_hash['event_time_to_live'],
metering_time_to_live => $ceilometer_hash['metering_time_to_live'],
alarm_history_time_to_live => $ceilometer_hash['alarm_history_time_to_live'],
rabbit_hosts => split(hiera('amqp_hosts',''), ','),
rabbit_userid => $amqp_user,
rabbit_password => $amqp_password,
metering_secret => $ceilometer_metering_secret,
verbose => $verbose,
debug => $debug,
use_syslog => $use_syslog,
use_stderr => $use_stderr,
syslog_log_facility => $syslog_log_facility,
default_log_levels => $default_log_levels,
db_connection => $db_connection,
swift_rados_backend => $swift_rados_backend,
metering_secret => $ceilometer_metering_secret,
amqp_hosts => hiera('amqp_hosts',''),
amqp_user => $amqp_user,
amqp_password => $amqp_password,
rabbit_ha_queues => $rabbit_ha_queues,
keystone_auth_uri => $keystone_auth_uri,
keystone_identity_uri => $keystone_identity_uri,
keystone_password => $ceilometer_user_password,
keystone_user => $ceilometer_hash['user'],
keystone_tenant => $ceilometer_hash['tenant'],
keystone_region => $ceilometer_region,
host => $api_bind_address,
ha_mode => $ha_mode,
primary_controller => $primary_controller,
on_controller => true,
alarm_history_time_to_live => $ceilometer_hash['alarm_history_time_to_live'],
event_time_to_live => $ceilometer_hash['event_time_to_live'],
metering_time_to_live => $ceilometer_hash['metering_time_to_live'],
http_timeout => $ceilometer_hash['http_timeout'],
api_workers => $service_workers,
collector_workers => $service_workers,
notification_workers => $service_workers,
log_facility => $syslog_log_facility,
}
# Configure authentication for agents
class { '::ceilometer::agent::auth':
auth_url => $keystone_auth_uri,
auth_password => $ceilometer_user_password,
auth_region => $ceilometer_region,
auth_tenant_name => $ceilometer_hash['tenant'],
auth_user => $ceilometer_hash['user'],
}
class { '::ceilometer::client': }
ceilometer_config {
'database/mongodb_replica_set' : ensure => absent;
}
ceilometer_config { 'service_credentials/os_endpoint_type': value => 'internalURL'} ->
Service<| title == 'ceilometer-polling'|>
class { '::ceilometer::db':
database_connection => $db_connection,
sync_db => $primary_controller,
}
# Install the ceilometer-api service
# The keystone_password parameter is mandatory
class { '::ceilometer::api':
auth_uri => $keystone_auth_uri,
identity_uri => $keystone_identity_uri,
keystone_user => $ceilometer_hash['user'],
keystone_password => $ceilometer_hash['user_password'],
keystone_tenant => $ceilometer_hash['tenant'],
host => $api_bind_address,
port => '8777',
api_workers => $service_workers,
}
# Clean up expired data once a week
class { '::ceilometer::expirer':
minute => '0',
hour => '0',
monthday => '*',
month => '*',
weekday => '0',
}
class { '::ceilometer::collector':
collector_workers => $service_workers,
}
class { '::ceilometer::agent::notification':
notification_workers => $service_workers,
store_events => true,
}
if $ha_mode {
include ceilometer_ha::agent::central
Service['ceilometer-polling'] -> Class['::ceilometer_ha::agent::central']
}
class { '::ceilometer::agent::polling':
enabled => !$ha_mode,
compute_namespace => false,
ipmi_namespace => false
}
if ($swift_rados_backend) {
ceilometer_config {
'DEFAULT/swift_rados_backend' : value => true;
}
}
if ($use_syslog) {
ceilometer_config {
'DEFAULT/use_syslog_rfc_format': value => true;
}
}
}

View File

@ -8,6 +8,8 @@ describe manifest do
default_log_levels_hash = Noop.hiera_structure 'default_log_levels'
default_log_levels = Noop.puppet_function 'join_keys_to_values',default_log_levels_hash,'='
region = Noop.hiera 'region', 'RegionOne'
ceilometer_region = Noop.puppet_function 'pick',ceilometer_hash['region'], region
management_vip = Noop.hiera 'management_vip'
service_endpoint = Noop.hiera 'service_endpoint', management_vip
ssl_hash = Noop.hiera_structure('use_ssl', {})
@ -45,6 +47,26 @@ describe manifest do
it 'should configure os_auth_url' do
should contain_ceilometer_config('service_credentials/os_auth_url').with(:value => keystone_auth_uri)
end
it 'contains class ceilometer::agent::polling' do
should contain_class('ceilometer::agent::polling').with(
'central_namespace' => 'false',
'ipmi_namespace' => 'false',
)
end
auth_user = Noop.puppet_function, 'pick', ceilometer_hash['user'], 'ceilometer'
auth_tenant_name = Noop.puppet_function, 'pick', ceilometer_hash['auth_tenant_name'], 'ceilometer'
it 'configured ceilometer::agent::auth' do
should contain_class('ceilometer::agent::auth').with(
'auth_url' => keystone_auth_uri,
'auth_password' => ceilometer_hash['user_password'],
'auth_region' => ceilometer_region,
'auth_tenant_name' => auth_tenant_name,
'auth_user' => auth_user,
)
end
end
end # end of shared_examples

View File

@ -30,12 +30,15 @@ describe manifest do
db_hosts = Noop.puppet_function 'join',addresses,','
mongo_replicaset = 'ceilometer'
end
rabbit_ha_queues = 'true'
default_log_levels_hash = Noop.hiera_structure 'default_log_levels'
default_log_levels = Noop.puppet_function 'join_keys_to_values',default_log_levels_hash,'='
primary_controller = Noop.hiera 'primary_controller'
ha_mode = Noop.puppet_function 'pick', ceilometer_hash['ha_mode'], true
let(:bind_address) { Noop.puppet_function 'get_network_role_property', 'ceilometer/api', 'ipaddr' }
region = Noop.hiera 'region', 'RegionOne'
ceilometer_region = Noop.puppet_function 'pick',ceilometer_hash['region'], region
management_vip = Noop.hiera 'management_vip'
service_endpoint = Noop.hiera 'service_endpoint', management_vip
ssl_hash = Noop.hiera_structure('use_ssl', {})
@ -55,19 +58,6 @@ describe manifest do
should contain_ceilometer_config('database/connection').with(:value => "mongodb://#{ceilometer_db_user}:#{ceilometer_db_password}@#{db_hosts}/#{ceilometer_db_dbname}#{db_params}")
end
it 'should declare openstack::ceilometer class with correct parameters' do
should contain_class('openstack::ceilometer').with(
'amqp_user' => rabbit_user,
'amqp_password' => rabbit_password,
'rabbit_ha_queues' => rabbit_ha_queues,
'on_controller' => 'true',
'use_stderr' => 'false',
'primary_controller' => primary_controller,
'keystone_auth_uri' => keystone_auth_uri,
'keystone_identity_uri' => keystone_identity_uri,
)
end
it 'should configure auth and identity uri' do
should contain_ceilometer_config('keystone_authtoken/auth_uri').with(:value => keystone_auth_uri)
should contain_ceilometer_config('keystone_authtoken/identity_uri').with(:value => keystone_identity_uri)
@ -91,10 +81,14 @@ describe manifest do
should contain_ceilometer_config('DEFAULT/default_log_levels').with_value(default_log_levels.sort.join(','))
end
it 'should declare openstack::ceilometer class with 4 processess on 4 CPU & 32G system' do
should contain_class('openstack::ceilometer').with(
'api_workers' => '4',
'collector_workers' => '4',
it 'should configure workers with 4 processess on 4 CPU & 32G system' do
should contain_class('ceilometer::api').with(
'api_workers' => '4'
)
should contain_class('ceilometer::collector').with(
'collector_workers' => '4'
)
should contain_class('ceilometer::agent::notification').with(
'notification_workers' => '4',
)
end
@ -111,9 +105,54 @@ describe manifest do
it 'should configure auth url' do
should contain_ceilometer_config('service_credentials/os_auth_url').with(:value => keystone_auth_uri)
end
ha_mode = Noop.puppet_function 'pick', ceilometer_hash['ha_mode'], 'true'
if ha_mode
it { is_expected.to contain_class('ceilometer_ha::agent::central') }
end
end
it 'contains class ceilometer::agent::polling' do
should contain_class('ceilometer::agent::polling').with(
'enabled' => !ha_mode,
'compute_namespace' => 'false',
'ipmi_namespace' => 'false'
)
end
it "configures ceilometer contoller parts" do
should contain_class('ceilometer')
should contain_class('ceilometer::logging')
should contain_class('ceilometer::db')
should contain_class('ceilometer::expirer')
should contain_class('ceilometer::agent::notification')
should contain_class('ceilometer::collector')
should contain_class('ceilometer::client')
end
auth_user = Noop.puppet_function, 'pick', ceilometer_hash['user'], 'ceilometer'
auth_tenant_name = Noop.puppet_function, 'pick', ceilometer_hash['auth_tenant_name'], 'ceilometer'
it 'configured ceilometer::agent::auth' do
should contain_class('ceilometer::agent::auth').with(
'auth_url' => keystone_auth_uri,
'auth_password' => ceilometer_hash['user_password'],
'auth_region' => ceilometer_region,
'auth_tenant_name' => auth_tenant_name,
'auth_user' => auth_user,
)
end
it 'configures ceilometer::api' do
should contain_class('ceilometer::api').with(
'auth_uri' => keystone_auth_uri,
'identity_uri' => keystone_identity_uri,
'keystone_user' => ceilometer_hash['user'],
'keystone_password' => ceilometer_hash['user_password'],
'keystone_tenant' => ceilometer_hash['tenant'],
'host' => bind_address,
)
end
end # end of ceilometer enabled
end # end of shared_examples
test_ubuntu_and_centos manifest