From 4881139ec6c346435fdddeaf1b9049a270758419 Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Wed, 23 Apr 2014 12:08:26 +0200 Subject: [PATCH] splitting: Telemetry services Split cloud::telemetry::server to * cloud::telemetry::api * cloud::telemetry::collector * cloud::telemetry::alarmevaluator * cloud::telemetry::alarmnotifier Maintains backward compatibility. Also warn the end user about deprecation. Bug #346 --- manifests/telemetry/alarmevaluator.pp | 26 +++++++++++ manifests/telemetry/alarmnotifier.pp | 26 +++++++++++ manifests/telemetry/api.pp | 66 +++++++++++++++++++++++++++ manifests/telemetry/collector.pp | 26 +++++++++++ manifests/telemetry/server.pp | 59 +++++------------------- 5 files changed, 156 insertions(+), 47 deletions(-) create mode 100644 manifests/telemetry/alarmevaluator.pp create mode 100644 manifests/telemetry/alarmnotifier.pp create mode 100644 manifests/telemetry/api.pp create mode 100644 manifests/telemetry/collector.pp diff --git a/manifests/telemetry/alarmevaluator.pp b/manifests/telemetry/alarmevaluator.pp new file mode 100644 index 00000000..4308850b --- /dev/null +++ b/manifests/telemetry/alarmevaluator.pp @@ -0,0 +1,26 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Telemetry Alarm Evaluator nodes +# + +class cloud::telemetry::alarmevaluator( +){ + + include 'cloud::telemetry' + + class { 'ceilometer::alarm::evaluator': } + +} diff --git a/manifests/telemetry/alarmnotifier.pp b/manifests/telemetry/alarmnotifier.pp new file mode 100644 index 00000000..f07ca932 --- /dev/null +++ b/manifests/telemetry/alarmnotifier.pp @@ -0,0 +1,26 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Telemetry Alarm Notifier nodes +# + +class cloud::telemetry::alarmnotifier( +){ + + include 'cloud::telemetry' + + class { 'ceilometer::alarm::notifier': } + +} diff --git a/manifests/telemetry/api.pp b/manifests/telemetry/api.pp new file mode 100644 index 00000000..a7c5acf5 --- /dev/null +++ b/manifests/telemetry/api.pp @@ -0,0 +1,66 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Telemetry API nodes +# + +class cloud::telemetry::api( + $ks_keystone_internal_host = '127.0.0.1', + $ks_keystone_internal_proto = 'http', + $ks_ceilometer_internal_port = '8777', + $ks_ceilometer_password = 'ceilometerpassword', + $api_eth = '127.0.0.1', + $mongo_nodes = ['127.0.0.1:27017'], +){ + + include 'cloud::telemetry' + + $s_mongo_nodes = join($mongo_nodes, ',') + $db_conn = "mongodb://${s_mongo_nodes}/ceilometer?replicaSet=ceilometer" + + class { 'ceilometer::db': + database_connection => $db_conn, + sync_db => true, + require => Anchor['mongodb setup done'], + } + + class { 'ceilometer::api': + keystone_password => $ks_ceilometer_password, + keystone_host => $ks_keystone_internal_host, + keystone_protocol => $ks_keystone_internal_proto, + host => $api_eth + } + +# Configure TTL for samples +# Purge datas older than one month +# Run the script once a day but with a random time to avoid +# issues with MongoDB access + class { 'ceilometer::expirer': + time_to_live => '2592000', + minute => '0', + hour => '0', + } + + Cron <<| title == 'ceilometer-expirer' |>> { command => "sleep $((\$RANDOM % 86400)) && ${::ceilometer::params::expirer_command}" } + + @@haproxy::balancermember{"${::fqdn}-ceilometer_api": + listening_service => 'ceilometer_api_cluster', + server_names => $::hostname, + ipaddresses => $api_eth, + ports => $ks_ceilometer_internal_port, + options => 'check inter 2000 rise 2 fall 5' + } + +} diff --git a/manifests/telemetry/collector.pp b/manifests/telemetry/collector.pp new file mode 100644 index 00000000..3a731c8f --- /dev/null +++ b/manifests/telemetry/collector.pp @@ -0,0 +1,26 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Telemetry Collector nodes +# + +class cloud::telemetry::collector( +){ + + include 'cloud::telemetry' + + class { 'ceilometer::collector': } + +} diff --git a/manifests/telemetry/server.pp b/manifests/telemetry/server.pp index aa9ebacf..962ac69f 100644 --- a/manifests/telemetry/server.pp +++ b/manifests/telemetry/server.pp @@ -19,59 +19,24 @@ class cloud::telemetry::server( $ks_keystone_internal_host = '127.0.0.1', $ks_keystone_internal_proto = 'http', - $ks_ceilometer_internal_port = '5000', + $ks_ceilometer_internal_port = '8777', $ks_ceilometer_password = 'ceilometerpassword', $api_eth = '127.0.0.1', $mongo_nodes = ['127.0.0.1:27017'], ){ - include 'cloud::telemetry' + warning('This class is deprecated. You should use cloud::telemetry::api,collector,alarmnotifier,alarmevaluator.') - $s_mongo_nodes = join($mongo_nodes, ',') - $db_conn = "mongodb://${s_mongo_nodes}/ceilometer?replicaSet=ceilometer" - - # Install MongoDB database - class { 'ceilometer::db': - database_connection => $db_conn, - sync_db => true, - require => Anchor['mongodb setup done'], - } - -# Install Ceilometer-collector - class { 'ceilometer::collector': } - -# Install Ceilometer-evaluator - class { 'ceilometer::alarm::evaluator': } - -# Install Ceilometer-notifier - class { 'ceilometer::alarm::notifier': } - -# Install Ceilometer-API - class { 'ceilometer::api': - keystone_password => $ks_ceilometer_password, - keystone_host => $ks_keystone_internal_host, - keystone_protocol => $ks_keystone_internal_proto, - host => $api_eth - } - -# Configure TTL for samples -# Purge datas older than one month -# Run the script once a day but with a random time to avoid -# issues with MongoDB access - class { 'ceilometer::expirer': - time_to_live => '2592000', - minute => '0', - hour => '0', - } - - Cron <<| title == 'ceilometer-expirer' |>> { command => "sleep $((\$RANDOM % 86400)) && ${::ceilometer::params::expirer_command}" } - - @@haproxy::balancermember{"${::fqdn}-ceilometer_api": - listening_service => 'ceilometer_api_cluster', - server_names => $::hostname, - ipaddresses => $api_eth, - ports => $ks_ceilometer_internal_port, - options => 'check inter 2000 rise 2 fall 5' + class { 'cloud::telemetry::api': + ks_keystone_internal_host => $ks_keystone_internal_host, + ks_keystone_internal_proto => $ks_keystone_internal_proto, + ks_ceilometer_internal_port => $ks_ceilometer_internal_port, + ks_ceilometer_password => $ks_ceilometer_password, + api_eth => $api_eth, + mongo_nodes => $mongo_nodes, } + class { 'cloud::telemetry::alarmevaluator': } + class { 'cloud::telemetry::alarmnotifier': } + class { 'cloud::telemetry::collector': } }