From a536d3c8887b99c3b6e270c2e6c2469e4241eb7a Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Thu, 22 Jan 2015 14:38:36 -0500 Subject: [PATCH] Puppet: Ceilometer controller support This patch adds support for the Ceilometer controller role including the Ceilometer: -API -central agent -alarm notifier -alarm evaluator -collector -expirer In order to enable swift metering the swift::proxy ceilometer middleware was added in. Also, a minor adjustment to the existing ceilometer HA proxy setting was made to accommodate ceilometer auth settings. (not exactly sure why but this seems to be required) Like upstream TripleO Ceilometer is currently using a MySQL database backend. A follow on patch can support configuring MongoDB for use with Ceilometer. Change-Id: I4e171274bd7679d386d93492d13dfa7c5d37f6a8 --- controller-puppet.yaml | 14 ++++++++++---- puppet/hieradata/common.yaml | 6 ++++++ puppet/hieradata/controller.yaml | 2 ++ puppet/hieradata/object.yaml | 5 +++++ puppet/loadbalancer.pp | 2 +- puppet/overcloud_controller.pp | 25 +++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 5 deletions(-) diff --git a/controller-puppet.yaml b/controller-puppet.yaml index c5462ff7..8b8a4eff 100644 --- a/controller-puppet.yaml +++ b/controller-puppet.yaml @@ -535,7 +535,6 @@ resources: swift_min_part_hours: {get_param: SwiftMinPartHours} swift_mount_check: {get_param: SwiftMountCheck} - # Map heat metadata into hiera datafiles ControllerConfig: type: OS::Heat::StructuredConfig @@ -658,9 +657,15 @@ resources: neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options} neutron_dsn: {get_input: neutron_dsn} # Ceilometer - ceilometer_metering_secret: {get_input: ceilometer_metering_secret} - ceilometer_password: {get_input: ceilometer_password} - ceilometer_dsn: {get_input: ceilometer_dsn} + ceilometer::metering_secret: {get_input: ceilometer_metering_secret} + ceilometer::rabbit_userid: {get_input: rabbit_username} + ceilometer::rabbit_password: {get_input: rabbit_password} + ceilometer::rabbit_host: {get_input: controller_virtual_ip} + ceilometer::api::host: {get_input: controller_host} + ceilometer::api::keystone_password: {get_input: ceilometer_password} + ceilometer::api::keystone_host: {get_input: controller_virtual_ip} + ceilometer::db::database_connection: {get_input: ceilometer_dsn} + ceilometer::agent::auth::auth_password: {get_input: ceilometer_password} snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name} snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password} # Nova @@ -699,6 +704,7 @@ resources: tripleo::loadbalancer::mysql: true tripleo::loadbalancer::rabbitmq: true tripleo::loadbalancer::swift_proxy_server: true + tripleo::loadbalancer::ceilometer: true # NOTE(dprince): this example uses a composition class # on the puppet side (loadbalancer.pp). This seemed like the diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml index 76cde950..a75bbe39 100644 --- a/puppet/hieradata/common.yaml +++ b/puppet/hieradata/common.yaml @@ -1,2 +1,8 @@ # Common Hiera data gets applied to all nodes ssh::server::storeconfigs_enabled: false + +# ceilometer settings used by compute and controller ceilo auth settings +ceilometer::agent::auth::auth_region: 'regionOne' +# FIXME: Might be better to use 'service' tenant here but this requires +# changes in the tripleo-incubator keystone role setup +ceilometer::agent::auth::auth_tenant_name: 'admin' diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml index b13f8234..5f326ef4 100644 --- a/puppet/hieradata/controller.yaml +++ b/puppet/hieradata/controller.yaml @@ -19,6 +19,7 @@ neutron::server::auth_tenant: 'service' neutron::agents::metadata::auth_tenant: 'service' cinder::api::keystone_tenant: 'service' swift::proxy::authtoken::admin_tenant_name: 'service' +ceilometer::api::keystone_tenant: 'service' #swift swift::proxy::pipeline: @@ -29,6 +30,7 @@ swift::proxy::pipeline: - 'tempurl' - 'formpost' - 'staticweb' + - 'ceilometer' - 'authtoken' - 'keystone' - 'proxy-logging' diff --git a/puppet/hieradata/object.yaml b/puppet/hieradata/object.yaml index 759a7ba9..59a8b1cf 100644 --- a/puppet/hieradata/object.yaml +++ b/puppet/hieradata/object.yaml @@ -9,3 +9,8 @@ swift::storage::all::container_pipeline: swift::storage::all::account_pipeline: - healthcheck - account-server + +swift::proxy::keystone::operator_roles: + - admin + - swiftoperator + - ResellerAdmin diff --git a/puppet/loadbalancer.pp b/puppet/loadbalancer.pp index ea834c5e..84598da6 100644 --- a/puppet/loadbalancer.pp +++ b/puppet/loadbalancer.pp @@ -261,7 +261,7 @@ class tripleo::loadbalancer ( listening_service => 'ceilometer', ports => '8777', ipaddresses => hiera('controller_host'), - options => ['check', 'inter 2000', 'rise 2', 'fall 5'], + options => [], } } diff --git a/puppet/overcloud_controller.pp b/puppet/overcloud_controller.pp index 20413cc6..90f69eb1 100644 --- a/puppet/overcloud_controller.pp +++ b/puppet/overcloud_controller.pp @@ -76,6 +76,14 @@ if hiera('step') >= 1 { dbname => $heat_dsn[6], allowed_hosts => $allowed_hosts, } + $ceilometer_dsn = split(hiera('ceilometer::db::database_connection'), '[@:/?]') + class { 'ceilometer::db::mysql': + user => $ceilometer_dsn[3], + password => $ceilometer_dsn[4], + host => $ceilometer_dsn[5], + dbname => $ceilometer_dsn[6], + allowed_hosts => $allowed_hosts, + } if $::osfamily == 'RedHat' { $rabbit_provider = 'yum' @@ -221,6 +229,7 @@ if hiera('step') >= 2 { include ::swift::proxy::keystone include ::swift::proxy::authtoken include ::swift::proxy::staticweb + include ::swift::proxy::ceilometer include ::swift::proxy::ratelimit include ::swift::proxy::catch_errors include ::swift::proxy::tempurl @@ -242,4 +251,20 @@ if hiera('step') >= 2 { swift::storage::filter::recon { $swift_components : } swift::storage::filter::healthcheck { $swift_components : } + # Ceilometer + include ::ceilometer + include ::ceilometer::api + include ::ceilometer::db + include ::ceilometer::agent::notification + include ::ceilometer::agent::central + include ::ceilometer::alarm::notifier + include ::ceilometer::alarm::evaluator + include ::ceilometer::expirer + include ::ceilometer::collector + class { 'ceilometer::agent::auth': + auth_url => join(['http://', hiera('controller_virtual_ip'), ':5000/v2.0']), + } + + Cron <| title == 'ceilometer-expirer' |> { command => "sleep $((\$(od -A n -t d -N 3 /dev/urandom) % 86400)) && ${::ceilometer::params::expirer_command}" } + } #END STEP 2 -- 2.16.6